As part of an ongoing project to build a Pick and Place machine, I decided to use Smoothieware for motion control. Smoothieware is a great piece of software that runs on a microcontroller and converts commands from a PC (GCODE) into electrical output to stepper motors. This is most commonly used in 3D printers, allowing a PC to precisely move a print head.
The creators of Smoothieware sell an excellent circuit board (Smoothieboard) that runs their software well, and comes with excellent support. Unfortunately some folks in China sell a clone of this board, called MKS SBASE. It is not excellent, it does not come with support, and it is not known to run their software well... but it costs about 25% as much as the Smoothieboard, so I thought I'd give it a try.
The MKS SBASE board looks nice. It has all the connectivity of a Smoothieboard, ports are well labelled and colour coded. Reading that it runs official Smoothieware software unmodified, I installed the latest version of Smoothieware without even looking at its bundled firmware. This booted from an SD card with no trouble at all and at first glance works exactly as intended.
Problem with microstepping
After using the board for a few minutes, a serious problem came to light. Micostepping doesn't work properly at all. It's not linear. Some microsteps move the motors a little, some move them a lot, some don't move them at all. Reading about microstepping, I came across this interesting article: https://hackaday.com/2016/08/29/how-accurate-is-microstepping-really/ - it implies that the DRV8825 (the chip used for stepper motor control in the MKS SBASE) is not at all linear in its microstepping. The graphs shown here closely resemble the results I was seeing in testing, and when you're trying to achieve 0.1mm accuracy in your movements, this sucks. The problem seems to be worse at high voltages and worse at low currents. In my case I was running my steppers at 24v and at 1A when I discovered the problem. Running at 12v and 2A reduces the problem but does not eliminate it.
Problem with USB
The second serious problem with the MKS SBASE seems to be USB disconnects. Everything worked well until I tried to use the board to control a brushed DC motor. As soon as it starts running, the USB disconnects. Linux reports USB EMI errors, implying that the noise from the motor is disconnecting the USB. I have no evidence that the SBASE board is to blame for this, but searching the web I see similar reports of random USB disconnections of this device.
I hope if you're reading this, it's because you're having trouble with the stepper motor drivers, or the USB connectivity of the SBASE board. For both problems, I can offer 2 solutions. The best solution is to return your SBASE board to whoever sold it to you and buy a Smoothieboard, but if you don't want to, read on to see how you can work around the USB and microstepping problems...
I found a number of solutions to fix the microstepping problem, but most of these were essentially solutions to reduce the supply voltage or increase the resistance of the steppers using resistors or diodes. However, a dive into the datasheet indicates that there is a better solution. The DRV8825 has configurable "decay mode", configured by applying a voltage to pin 19 of the chip. By default the SBASE leaves this pin unconnected, choosing "mixed decay" mode. Unfortunately this just isn't suitable for the NEMA17 motors we have been using, at 24v.
It would be much better to run this IC in fast decay mode (by connecting this pin 19) to +3.3V. I decided to try this, but it is extremely difficult to connect wires to the tiny pins of this chip. Instead I have hacked my board in a way that enabled fast decay mode, but also has the potential to destroy thee board. I bridged pin 19 to pins 18 and 17. Pin 17 is the "enable" pin. This is +3v3 when the chip is enabled, and so can be used as a source of the required voltage. But pin 18 is the "fault" pin. This pin is connected to 0v if there is a fault with the chip (overheating, too much current, etc). This means that with these 3 pins bridged, the chip runs in fast decay mode, but will short circuit (and likely self destruct) if there is a fault.
For me, it was worth the risk at least to demonstrate what the problem is and have a working board in a hurry with minimal modification, but I'm sure if you were more skilled at soldering, you could do this correctly by connecting pin 19 to pin 15 (the 3v3 supply).
This is what the dangerous but effective hack looks like (with the heatsink removed):
I was not able to find a way to make USB work correctly when EMI noise is present, however the MKS SBASE supports Ethernet connectivity, so the USB problem can be worked around by enabling the network functionality of Smoothieware and connecting with an Ethernet cable instead.
Like most posts on this subject, I would strongly encourage people to buy a genuine Smoothieboard, however if you have found yourself in possession of an MKS SBASE, or you really want to save the money, the SBASE can do the job with updated firmware and some modifications.