New motor control unit
I've been busy on a couple of things. First off has been painting the new machine and generally finishing things off (I hate paint!). While I waited for the paint to dry I gave some thought to what steppers to use. I really wanted to use some of the higher current motors to get higher speeds. But the controller I got with my 3 Axis machine wasn't really up to the job. Also this was the only part left from the original machine. So out with the PCB design software (Eagle) and a couple of days later I had artwork. I was going to mill the board but I had a real job fitting things into the board area of the free version of Eagle, so I've ended up with lots of traces between pads. I didn't fancy trying to mill that, so out with the chemicals - oh well!
The picture above shows the PCB layout. I created the layout as a double sided board but minimized the traces on the upper side. As you can see it was a little tight and some of the traces are longer than I would have liked but it seems to be ok. When I etched the board I only etched the bottom side and wired the upper side traces by hand. You can see these connections below.
Anyway here it is. Basically it is a bipolar chopper based board (using a ST L6219 stepper driver per motor). It has a PIC 16F877 on board to do all of the actual driving has three channels, inputs for limit switches and emergency stop and has 3 Leds and buzzer. the control commands are provided by a serial port operating at 56K baud.
The power supply I'm using comes from a high end audio amplifier which provides -40V..0..+40V with lots of amps and good smoothing. It also provides +24v and (after reworking an adjustable regulator) +5V. I'm also reusing the case and connectors. Initial testing showed that the heatsinks get hot when running at 40V so I've used the +24V supply to provide fan cooling.
The above picture shows the controller mounted in the amplifier case. The fan keeps things nice and cool. I've also used the phono connections as connectors for the motors and limit switches. Everything seems to work well so far.
I've replaced the rotary volume control and selector switches with LEDs I need to make a new front panel strip at some point.
I had originally intended to make the PIC controller accept simple movement commands (like goto X, Y, Z) and to do the move generation with the microprocessor. In fact the first few versions did exactly that. However after working with the system for a while I decided that having some form of command blending to give smooth motion when using lots of small movements (like approximating a circle with a lot of short lines), gives much better performance. Unfortunately the PIC really isn't fast enough (and does not have enough ram) to do this and handle the pulse generation so a new approach was needed.
After much thought and experiment I decided to make the PIC simply act as a pulse generator with all of the the actual move generation being performed by the PC. So the PC simply sends a series of velocity vectors to the control unit and the PIC generates the step pulses for the three stepper controllers. I'm currently using a system of sending 1000 velocity vectors every second using a byte for each of the X, Y , Z components. The microcontroller reads these from the serial port buffers them (I have an 80 command buffer) and generates the step sequence. I use a 1/4 step microstep sequence (The best you can do with the 6219) and can generate up to 50 steps every millisecond giving an overall max step frequency of 50KHz. With 200 step per revolution steppers this gives a top speed of 62.5 rev/s or 3750rpm. With the motors and machine I have I don't get close to this, typically running at a max speed of 60ipm which works out to be 1219rpm or about 16KHz.
The picture above shows the controller under development. The unit attached by a ribbon cable is a Microchip MPLAB ICE 2000 an in circuit emulator for the PIC. This thing is not cheap but it makes developing for the PIC much easier and is great when working on tricky timing problems.
In addition to the pulse generation the microprocessor also monitors limit switches and an emergency stop button. It also drives the front panel display.
Above the unit is in action driving the Z axis. All of the control software is written in C using the CCS compiler. You can see that I moved the cooling fan to provide better airflow over the driver chips.
Above is the front panel display when driving both the X an Y steppers. I made the X, Y, Z logo plates from Perspex on the machine and they push fit into the the locations of the controls on the old amplifier. The intensity of the LED is proportional to the speed at which the stepper is being driven.