<-- HTMSTMAA
This week I worked on the wire feed and tensioning mechansim for my desktop wire-edm. I took a stab at what the whole machine will look like:
It has a 4.5" x 4.5" x 1" work volume and a physical footprint of about 12" x 17". The yellow line shows the wire path. Two spools will be mounted on the top of the machine: one with fresh wire and another taking up the used wire.
In total, four motors will be used for the wire handling mechanism. Two motors will simply serve as torsional springs to provide back-tension for the spools. The other two motors will serve to feed and tension the wire. This feed and tension mechanism consists of two independent capstan drives like the one below:
One of these assemblies sits before the cutting section of wire and one sits after the cutting section of wire. The pinion of the motor is positioned to drive the main capstan pulley and two idlers and flexurally preloaded against the drive pulley to increase the friction between the drive roller and the wire.
In order to use these DC motors to both feed and tension the wire we need control of both torque and position. To accomplish this I'm using Pololu's 37D Motor and high current motor driver. I designed a simple board to stitch these components together with an A*-micro:
I implemented both PID position and velocity control and realized some things regarding the use of closed loop DC motors for this application. Because the motor is effectively direct-driving the wire (no matter the size of the drive pulley the wire moves 16mm every rotation of the motor. Given the limited resolution of the encoder (I'm currently accessing only 32 counts per revolution), it's hard to drive the motor at controlled speeds below 15rpm. At lower speeds velocity control becomes impossible because of the limited information bandwith of the sensor's discrete pulses. Position control can be used but is extremely jerky since the best you can do is approximate a stepper motor by pulsing the motor hard whenever the current position doesn't match the desired position.
Check out the code here.