The Proxxon MF70 is a nice little manual desktop milling machine. Just like many other MF70 owners, I’ve converted mine to CNC. This page documents its final status, providing photos, drawings, schematics, etc. Some of the information here comes from my past blog posts, which can be helpful to view the development process of the machine.
I’ve always wanted to have a desktop CNC machine for drilling PCBs, milling project enclosures and manufacturing small parts. With some improvements and CNC-conversion, MF70 is an excellent candidate for the job.
Close-up photos of each axis of my MF70 CNC can be found below (All custom parts shown were manufactured using previous incarnations of the MF70 CNC). The basic idea is to use cheap standard ball bearings to support the axis leadscrews with reduced friction. To do that, I’ve manufactured new end-plates with ball bearing housings and replaced the leadscrews (and the delrin nuts of course). To fix the leadscrews to the ball bearings and remove play, I’ve used nylon-insert nuts. The X axis end-plates are each made out of 10mm thick aluminium, and the Y and Z axis end-plates are made out of two 5mm thick aluminium plates bolted together. Each motor is supported by two M5 screws. The leadscrew ends are machined to fit the flexible couplings.
The original MF70 has a very limited Y axis travel of 46mm. The idea was to extend that by letting the carriage move past the ends of the dovetail slides on the base. This is not a problem if the carriage does not move too far as the carriage is relatively large. To be able to do that, I’ve milled a standoff that moves the Y axis end-plate about 25mm away from the base. The Y axis leadscrew does not need to be supported at both ends provided that the support on one end is good enough. To make sure, I’ve also made the delrin nut a few millimeters taller so that it slides on the base as the Y axis moves, creating additional support. This way, on the unsupported end, the carriage can move all the way to the Z axis support column. The result is that the Y axis travel has been increased to 92mm, double the original.
This archive contains the SVG files I’ve drawn that define the toolpaths used to mill the parts shown in the photos below. They are intended for use with a 3mm endmill. Take care with the milling depth for the outer circles of the ball bearing housings in the end-plates. Also, I’ve made the Y axis standoff in three passes, and reversed the workpiece after doing the second pass.
The control hardware consists of two interconnected boards: A parallel port breakout board and a stepper drive board.
The parallel port breakout board contains a couple of TLP541-4 optocouplers to isolate the parallel port from the stepper drive board. Eight inverted signal outputs from the optocouplers are pulled-up to the 5V input. There is also provision for home switches to be directly connected to the parallel port. Schematics and PCB layout can be found here.
The stepper drive board accepts step/direction inputs and drives three bipolar stepper motors accordingly. The design is based around a PIC16F676 and a L298 for each axis. The PIC translates the control inputs to the stepper coil activation sequence. L298 drives the stepper coils. The motors are 12V/0.6A types, they do not provide a lot of torque, but they are sufficient to move the X axis at about speed 8cm per minute without missing steps. Current sensing resistors are not used on the L298 outputs, instead the PIC implements a fixed-ratio PWM that kicks in during slow motion or idle time. A current sensing PWM chopper scheme was neither practical nor very useful with the motors I had as it would have required a rather high DC source voltage. Although the L298 is able to drive up to a total of 4A, the current PCB layout would only allow for about 1A per coil. In the future, I might think about getting lower voltage/higher current steppers and implementing microstepping/sinusoidal drive using fast ADCs on a PIC24F04 for fast and smooth motion. Schematics, PCB layout and PIC source code and binaries for the current version can be found here.
MiniStep USB and SinStep Boards
The MiniStep USB Controller board is the first CNC controller board I started to work on. It is based on a single PIC18F4550 and uses ULN2003 darlington arrays for driving the steppers. The PIC18F4550 firmware receives commands from the main host via USB and can do linear and circular interpolation. On the PC host side, I’ve written Python modules that interface to the board through WinUSB and a few scripts to process different input file formats or to automate some basic tasks. I stopped working on this board (in favor of the current SimpleStep board), mainly because the darlingtons were rather limited in their drive capacity and finally the idea of using readily available CNC software such as EMC2 became much more appealing. Furthermore, there were other board layout related problems that made the USB communication somewhat unreliable. So, in its current state, I consider the MiniStep board and accompanying software to be working, but incomplete.
The SinStep board was designed and built out of my desire to experiment with a PIC16 to monitor coil currents via the built-in ADC, for microstepping or making the current follow a sinusoidal profile for smooth movement. This did not work very well, partly due to the motors I had requiring too high a supply voltage to be practical, and partly due to the PIC16 ADC being too slow. I might work on this idea in the future again with different motors, or with a different design based on a PIC24 with a much faster ADC.
If there is interest in both boards for learning or experimentation purposes or continuing the work, I can release all sources, schematics, etc. so please do not hesitate to contact me.