Monday, March 22, 2010

New Arduino Mega Shield for CNC interface!

So I have been working in Eagle for about 2 months now and have made a few designs here and there to support the Hydra-MMM project. I just made one in the past week that I thought might be useful to the community. The design is a snap on shield for the Arduino Mega that allows the Arduino to interface with diy CNC machines that are built upon a parallel port (DB25) interface. These machines use a printer parallel port along with computer software (Mach 3, EMC, etc) to control the movement of the axes. The processing is done on the computer CPU instead of being done on an Arduino or something of that nature. Here is a few pictures of the actual eagle PCB

2 sided PCB board layout with the big 25 pin parallel port interface in the middle

Schematic of the parallel port shield

The reason I wanted to make a parallel port interface is because we are hoping to use our machine for both CNC work and rapid prototyping. By using a common parallel port interface we can have a single electronics control box (ECB) that has all the stepper motor drivers, extruder controllers, spindle speed controllers, and everything of that nature inside. I'll have more information on our ECB over the next few weeks, but for now a screenshot of the setup is below. Note that most of the electronics have not been modeled in the CAD program yet, so they are not shown, but their placement should be obvious.

Electronics Control Box (ECB) with power supply, Arduino Mega, stepper motor outputs and endstop/encoder inputs

The ECB can than be connected by a parallel port cable to either a computer with a 25 pin printer port or to the Arduino Mega with the new parallel port shield. The Arduino Mega will be running the Hydra-MMM firmware, but any reprap firmware variation would work. The main concept is that once connected via the parallel port to the ECB, the Arduino would have access to all the stepper motor drivers and endstop sensors that it needs to print! The parallel port pinout is as follow:

1 Estop
2 Xstep
3 Xdir
4 Ystep
5 Ydir
6 Zstep
7 Zdir
8 Astep
9 Adir
10 Xlimit
11 Ylimit
12 Zlimit
13 Alimit
14 Spindle/extruder on
15 Aux Input
16 Spindle/extruder speed control (pwm)
17 Coolant/Fan on
18-25 Ground

Some readers out there may notice the fact that there are no temperature sensors on the parallel port pinout. There are 2 AD595 thermocouple IC circuits built into the shield for measuring the temperature of the nozzle heater and also an optional heated build table. The main reason I did this is that I noticed that the analog wires for temperature measurements pickup a lot of noise if you run them over long distances. By having them mounted directly on the shield that attaches to the Arduino, that noise is minimized. I have tested a prototype pcb using this technique and the improvement in noise suppression over the same breadboarded circuit is amazing! The shield also has an onboard LM7805 5V regulator so that it can be run off the same power supply you are using to power the stepper motors (in our case 30V). This may also help reduce noise as the regulated 5V output is filtered and likely suppresses some noise in the process.

Another reason people may want this shield is that diy CNC machines have been around for much longer than the Reprap project. Many people already have the electronics for a cnc machine that is based around a parallel port interface, however, they are now wanting to try out rapid prototyping using the Reprap Arduino firmware. This shield would let them do that pretty easily.


As I said, I have only been using Eagle for about 2 months so I would love some feedback on the design. Let me know what you think!

5 comments:

  1. This is great! I don't see the part numbers for the ICs, though. Also, where did you get the cb connectors (and their part numbers)?

    I intend to etch one of these to try it out. I have a homemade cnc router that uses the hobbycnc pro 4 axis driver (parallel port).

    ReplyDelete
  2. Good point. I didn't realize the part number wasn't on the schematic. The thermocouple ICs are AD595s that you can get here: http://www.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=AD595AQ-ND
    I got the CB connectors here and the shipping was crazy fast with a great price too: http://www.thomasdistributing.com/micpart1.htm

    ReplyDelete
  3. Thanks for the part numbers.
    You asked for feedback on your design. While I am also new to Eagle, I have a couple of thoughts...
    All the headers have plastic separators that make it hard to ensure the top traces get soldered well. I try to make sure these are fed with bottom traces. I am not sure I will need an 11 dollar chip to translate a thermocouple. I intend to use a thermistor, so I can omit most of the circuitry in your design.

    ReplyDelete
  4. I agree that having all the traces on the opposite side of the connectors would make it much easier to solder. Maybe I will change this for the next revision. The through hold vias can be soldered from both sides though, right? So it would still be possible how it is designed above, just easier if the larger traces were there as well?

    And I think for my application I will be leaving the thermocouple ICs on there just because of how much it helped with noise attenuation, but do you have any ideas for other things that could go on this board? Maybe a few RJ45 jacks for attaching reprap type extruder controllers? Or maybe some pin headers for some of the leftover analog signal pins.. There are so many pins on the Arduino Mega I'm not even sure I can think up uses for all of them!

    ReplyDelete
  5. As a matter of fact I do. I was thinking I would use a right angle DB-25 and place it on the end of the board. This way, the parallel cable will come off the side and be out out the way for other shields to stack on top of this one, if you use stacking headers. Any additional connectors can be on the next higher shield. It just so happens the right angle connector will fit the board width perfectly.

    ReplyDelete