I was showing a friend my progress with the code, and he was complaining that the stepper motors were loud, and suggested I turn on fractional stepping. I switched to 1/16th steps, and he was right, the motors sounded much better. Additionally, the Z-axis magically started working! I was also impressed how well my code handled high stepping rates — well, more surprised that it worked without more surprises. So I’ve passed a big hurdle. I need to test the circle routine (pretty much the only piece of code I’ve not rewritten from the original code base), do some more tests, and try milling my first PCB!
Here’s a quick video demonstrating it moving in 3 axis at different rates, 1/16th step.
Just a quick update, I’ve added support for limit switches in the firmware. Enable them by specifying the associated pin, and if it’s active high or active low. The preferred method is active low otherwise you need to add your own pulldown resistor if it’s active high.
// specify min-max sense pins or 0 if not used
// specify if the pin is to to detect a switch closing when
// the signal is high using the syntax
// #define MIN_X 12 | ACTIVE_HIGH
// or to sense a low signal (preferred!!!)
// #define MIN_Y 13 | ACTIVE_LOW
// active low is preferred as it will cause the AVR to use it's internal pullups to
// avoid bounce on the line. If you want active_high, then you must add external pulldowns
// to avoid false signals.
#define ACTIVE_HIGH _BV(7)
#define ACTIVE_LOW _BV(6)
#define MIN_X 0
#define MAX_X 0
#define MIN_Y 0
#define MAX_Y 0
#define MIN_Z 0
#define MAX_Z 0
I just finished designing a Stepper Motor Controller (SMC) for a PCB Mill that I ordered. One requirement most SMCs have is the need for a real-time operating system running only the milling software. This is because each motor movement must be timed precisely to ensure an accurate rate of movement from the milling head. If other software is running, then the timing of the interrupts can be off resulting in errors on the mill.
Not wanting to use a dedicated computer, I decided to design a bipolar chopper controller for myself. The big difference with this device and other controllers is that you will be able to feed it g-code directly, and not worry about controlling the timing. The processor onboard will be able to deal with the timing requirements and it should work. Some features include :
Send g-code directly via USB interface (linux/mac/winblowz drivers), does not require dedicated PC
Software controllable current (chopper mode) (1.5A/motor max)
3-Axis on small PCB (2.9″x2.2″)
USB interface, powered off USB except for motor.
If there is any interest, I’m happy to release the designs to the public domain.