I'll make my own version of the satstep6600, which is a stepper driver. A stepper driver is required to operate and control the position of stepper motors. My final project is a DIY CNC and it will use four stepper drivers.
The license status of the original satstep6600 is in the time of writing not clear. Either it is (CC BY-NC-SA 4.0) or (CC BY-SA 4.0).
Therefore concider all content on this page to be licensed Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
Hopefully I can get the satshakit team to remove/clarify the non-commercial requirement. If so I will upload my work to fellesverkstedet/fabricatable-machines, look for it there if you need a more free license.
Original Satstepper | My version 2.0 |
---|---|
![]() | ![]() |
![]() | ![]() |
Original features |
My 2.0 features
Other notable updates: |
Below is a video of me testing the stepper driver with a push button generating the clock pulse. It moves 1,8 deg per pulse (it is stet to 200 full steps per revolution) which is bearly visible.
Turn on sound!
UPDATE 1! I used this board in the communications week to make a prototype of my final project CNC machine.
Here it is wired up to my input device board (made in week13) and my contoller board (made in week15). They communicate using SoftwareSerial and the controller sends pulses to the stepper driver.
UPDATE 2! I used that setup to test run my first machined linear axis for my final project
Here is a video of the first test
I later installed the driver in my final project. I didn't have time to make three more drives but I fully intend to do so after the end of fab academy. I'll also add some more improvements that I have thought of while using it.
The Statstep6600 original stepper driver board did not have it's own programmable microcontroller. At first I wanted to add a attiny44 and some buttons so that I could drive it direcly. Creating a one card stepper driver, controller and input device. However while routing the board I noticed that it made the stepper driver card needlessly overcomplicated and would not make sence in the long run. Especially since I later wanted to make four of them that would serve one controller. So I changed my mind and broke it up into two cards that became my input and output device respectively.
Here is my (abandoned) All-In-One_board that I ended up breaking into two boards.
I later finished the input device part with the buttons in week13 - input devices.
Looking through and learing about the components on the original satstep6600 original board I found a few bugs that I fixed in my design.
I compared the Original satstep6600 schematic with the max current values in the data sheet for the TB6600HG stepper driver it uses.
Schematic detail showing the LEDs
I used this LED calculator to figure out that with that Green LED the required resitance is 3,3kOhm or the current will exceed the specs, however, that would make the LED 20 times darker, which I assume is invisible.
I contacted the originator of the card and discussed this. He agreed that this is a mistake in the original design. But he also told me that satstep6600 boards has been successfully made and worked with these values in place.
I wanted to respect the max values so for my board I choose to use 49,9kohm pull up resistors (they should be minimum 30kOhm according to the data sheet) and I connected them together so that I can use the combined digital signal to detect the full step pulses (MON) but also read an anlog voltage to check for overcurrent or thermal shutdown that triggers the ALERT pin, should I need it. UPDATE!: I built but ended up not using this feature, so far.
When not triggered the driver alert pins are in a tri-state condition, which means that they are not high or or low but rather acts as nothing is connected. This is often written as Z.
MON | Alert | Voltage at net point MO_ALERT |
---|---|---|
TRI-STATE | TRI-STATE | 5V continously (HIGH) |
LOW | TRI-STATE | 0V in short pulses (LOW) |
TRI-STATE | LOW | 2,5V continiously (Can be read by AD converter) |
LOW | LOW | 0V Will not happen. MON is a pulse indicator and ALERT will stop pulses. |
Potentiometer overloads the driver
The card is equipped with a potentiometer so that a user can set the desired current to send through the motor. You need this control since you would fry a small motor if you give it the full 4.5A that this driver can output. Also using a uncesserarily high current can cause the motor to vibrate more or genereate excessive heat which leads to other problems. The output current is controlled though a reference voltage Vref and "Sense resistors" which is used by the driver IC to measure the current through the motor coils. These resistors have a higher precision and power tolerance for this purpose.
I did the math on the original reistors that control the Vref depending on the setting on the potentiometer. The resulting voltage was way higher than specified in the data sheet for the driver IC. After some mailing with the originator and lots of head-scratching I found out that he had used a short version of the data sheet with a higher voltage threashold and that he had ment that you should use a 5k potentiometer rather that the 10k one that is in his schematic on github.
PDF highlighting the relevant resistors
I wanted the potentiometer to allow the used to go from max to min current. To achieve this I found out I also needed to change the sense diodes (Rnf) since the output current is dependent on both them and the Vref according to this formula I found in the data sheet :
Io (100%) = (1/3 × Vref) ÷ RNF
I finally found resistor values that would work and that were available in the Fab-inventory.
Schematic with new resistor values.
I used EasyEDA to verify my spreadsheet calculations for the resistors. My project file is here. After you have logged in you can simulate circuits by pressing the top right menu and choosing "Miscellaneous".
Screenshot of my EasyEDA schematic
Seeing it return the same values as predicted was very satisfying :)
Quoting Page 31 in the datasheet, the italic text is my comments
I made adjustments to the board layout according to my comments above and also broke out the ground return from the motors from the signal ground plane. They now meet only at the ground wire terminal.
The circuit has a "Dual Monostable Multivibrator" (Component 74HC123D, data sheet) and its connection to the Vref gave me some pause. It took me quite a while to figure out. The purpose is to reduce the holding current when the motors are holding a position. A capacitor+resistor on the board functions as a timer and makes the driver deliver full current as long as the stepping frequency is higher than 20 hz (hz= steps per second). When it is slower Vref is reduced to about 50%. This precentage can be tuned by changing the other resistors in the circuit.
74HC123D Timing formula: (true for 5V and capacitors larger than 0.1uF)
twOUT = 1.0× CX× RX
There:
Length of pulse in seconds= 1 * 0.1uF * 499kOhm
0,0499 = 1 * (0,1*10^-6) * (499*10^3)
1/length of pulse = 20 hz
Since I needed to alter the resistors connected to this component anyway I also added a switch so the the holding torque can be fixed at 100%.
The switch mimics the behaviour of the multivibrator in its HIGH output state.
Outdated components and unexplained choices.
When googling the different components I found that several are discontinued or about to be. This is worth noting if we want to make this card in the future. (Check the optocouplers.)
Three different optocouplers are used, it feels like a three channel one could have worked, if such exist?
The Monostable multivibrator has another channel that isn't used.
I used PCB GCODE in EAGLE to generate double sided milling, drill holes and the cut-out milling. This was my first attempt to get it working and I couldn't yet get it to do multi pass milling for wider insulation between traces.
I have since then gotten better at using PCB-GCODE and written this tutorial for how to get started with PCB-gcode for EAGLE. It is now my preffered choice for how to mill PCBs and I used it to make my controller card in week 15 for my final project.
PCD Gcode generates GCode that is directly compatible with the CNC machines in the Verket fab lab.
I really appreciate to be able to CAM directly in Eagle since it makes it really fast to do updates if you realise something is wrong when you stand by the machine. And it is also better at doing contour milling and drilling than Mods.
Trick for cutout milling:
However sometimes it bugs when trying to generate multiple isolation milling passes, single pass always works.
If you get a bug, try this:
To set up drilling in PCB-Gcode you need a "drill rack file", here is my drill rack file, you can alter the drill sizes to fit your purposes.
It is worth noting that PCB Gcode by default calls the trace milling "etch" and the cut out milling "mill".