I’ve used a lot of RAMPS boards over the last couple years, and it’s really an economical choice for building a reprap. But the shortcomings of the design are well known, and include underrated power connections, MOSFETs that get too hot in some cases, and an insufficient number of expansion options. To address these, I’ve designed an updated board. Since RAMPS isn’t my design, it would be presumptuous to call this “RAMPS 2.0” so instead I’ve named it PICA - Power, Interface, and Control Adapter. It is of course open source and the design files (done in kicad) are up on github for anybody to use or modify.
- Improve robustness
- Flexibility (24V / more peripheral options)
- Ease of use
The board is physically larger than RAMPS, which was unavoidable with the additional parts I wanted to add (and making the silkscreen more readable). The outer dimensions are 114x95mm (about 4.5" by 3.75") and there are four mounting holes located at the corners (located 108.6mm x 88.9mm center to center).
The board will not work with the Wilson II RAMPS mount, so I designed a similar mount for the PICA board. Because of the extra width of the board, you’ll need to mount the Arduino/PICA assembly with 3/16" hex standoffs to clear the X axis motor. If you want to use PICA with another reprap design, you may have to design or find a suitable mount for your particular machine (a good starting point if you want to design one is the Sketchup model of the mounting plate for Wilson II
The screw terminals used on RAMPS are probably the biggest source of failure on the design (just google “RAMPS power connector melted”). They are barely rated to handle the kind of current we put through them, and it doesn’t take much to result in a meltdown.
On PICA, I’ve replaced them with standard 0.25" quick connect solder tabs, and I think it’s a huge improvement. The connection is much more secure and clean. Right-angle tabs are used for the power inputs, and a vertical version of the same connector is used for the higher current MOSFET switches.
The power handling traces on RAMPS are simply too narrow, and over time may delaminate and fail. PICA is only a 2 layer board, but I did my best to stitch the various power nets and ground to planes wherever possible. This will make the board less prone to noise and will also conduct high currents more efficiently.
I’ve replaced the PTC fuses on the RAMPS design (those big yellow devices) with a single standard 5x20mm glass fuse. 15A should be the correct capacity. I’ve also combined the two power inputs, so they are actually just redundant and each feed the same circuits. On RAMPS, one of the 12V inputs was soley for the MOSFET driving the heat bed, and the other was for everything else.
24V / 12V flexible support
The board is designed from the start to handle either 12V or 24V (or anything in between) on the power connectors. I’ve also added an on-board DC:DC converter circuit, based around the LM2596 buck converter, to provide an efficient 12V output from >12V input. You can build the board with or without this extra circuitry, so if you are using a 12V power supply (like I do) then it will be a little cheaper to build without it (just install the jumper P17 to connect the PSU input directly to the 12V power rail).
With the 12V converter, the PICA shield will let you intermingle 24V and 12V devices. This is really useful if, for example, you want to use 24V for the heatbed but still use 12V fans. There are a total of 5 MOSFET power outputs. These are all arranged as “open drain” devices which is exactly how RAMPS did it (with the addition of flyback diodes to protect the devices from spikes during turnoff, which were unfortunately absent on the RAMPS design). What “open drain” means is, the low side of the device being switched on and off is connected to the drain of the MOSFET, which is either high impedance (turned off so that no current can flow) or connected to ground (through the device’s “source” pin) when the mosfet is turned on. The high side of the device being turned on or off is connected to a power supply rail (either 12V or 24V). More about the MOSFET switches in a moment.
There is also an independent linear regulator that provides a stable 5V source for logic and other devices on the shield. This is completely independent of the small LDO on the Arduino Mega. Overloading the Mega’s regulator (and killing it) are a common problem if you are attaching other devices to the 5V supply (like servos). By keeping them separate, we can take the maximum power possible from the shield’s 5V power supply without risking our Arduino. Also, the input to the on-board regulator (about 9V) also goes to the Arduino’s VIN pin, so the Mega will still be powered by the shield regardless of whether you are running 12V or 24V.
Five independent MOSFET switches
I’ve expanded the number of switchable MOSFET loads from 3 to 5, and each one has a LED indicator to help you troubleshoot if you’re not sure which ones are on.
High power MOSFET
One of these is meant as a “high current” load (up to 15A, which will usually be used for heatbeds).
Medium power MOSFETs
The next two are “medium current” switches, capable of up to 5A individually. Like the heatbed switch, these two will operate directly from the power supply input voltage (up to 24V). The three high/medium power switches sport vertical QC tabs like the power inputs, so no fussy screw terminals for these either. The medium power outputs will most likely be used for hot end heater(s).
Low power MOSFETs
The next two FET switches are tied to the regulated 12V rail (which is either from the onboard Buck converter or straight from the PSU if you are using a 12V PSU) and can deliver 2A max each. In addition, these two have dual outputs so you can actually connect two devices to each, as long as you want them switched on and off simultaneously and the total load is within the 2A limit. These two switches are presented with 2-pin (2.54mm pitch) headers for easy connection to the most common style of fan wire harness.
All of the MOSFETs used are modern surface mount devices, chosen for their low on resistance, so things should stay relatively cool without any additional heatsinks.
SSR for AC Loads
Last but not least, if you have your sights set on controlling an AC powered device from your printer, PICA has an optional IXYS solid-state relay (SSR) capable of 5A@220VAC continuously. This should provide for a straight forward way to drive a AC heatbed, for example (during design testing I used it to switch a desk lamp on and off). You would just need to modifiy the pins definition in your firmware to designate the SSR enable line as your heatbed instead of the default (which connects to the first FET switch).
- There are four thermistor inputs (one more than RAMPS) - enough for monitoring a heat bed, two extruders, and an ambient thermistor for a print chamber if you wish. You could also do some hacking in firmware to utilize these as any other sort of analog sensor input.
- Six endstop inputs are preserved as were available on RAMPS.
Motor driver sockets
- Five Pololu A4988 stepper driver sockets are presented, with 3-position dip switches located beneath each one for selecting microstepping modes.
- The two LCD interface connectors (previously attached to RAMPS via an intermediary circuitboard) are now directly on the shield. They should work directly with a variety of controllers such as the REPRAP SMART DISCOUNT controller and REPRAP FULL DISCOUNT CONTROLLER (you’ll have to remap the pins, as described at the end of this post).
Along the lower edge of the PICA board, a variety of expansion pins are available. These include a generous number of auxiliary power output terminals (5V, 12V, and 24V if equipped). Most of them are standard 0.1" (2.54mm) spaced header pins, but I also included two different JST connector styles (2mm and 2.5mm) connected to 12V. These are common for example on DC fans.
There are also standard headers for I2C, SERVO/GPIO pins, and two serial port access. The layout of the serial ports should be compatible with the ubiquitous HC-06 bluetooth modules, and there are resistor dividers on the TX outputs to lower the signal level to be compatible with 3.3V devices (hint hint).
I have grafted support for PICA into my fork of Marlin, but if you want to use it elsewhere you’ll need the pin definitions as shown below. In Marlin, you’ll find these in pins.h
/************************************* * PICA Arduino shield configuration mjrice ************************************* */ #define X_DIR_PIN 54 #define X_STEP_PIN 55 #define Y_DIR_PIN 56 #define Y_STEP_PIN 57 #define Z_DIR_PIN 58 #define Z_STEP_PIN 59 #define X_ENABLE_PIN 60 #define Y_ENABLE_PIN 61 #define Z_ENABLE_PIN 62 #define X_MIN_PIN 14 #define X_MAX_PIN 15 #define Y_MIN_PIN 16 #define Y_MAX_PIN 17 #define Z_MIN_PIN 23 #define Z_MAX_PIN 22 #define E0_STEP_PIN 67 #define E0_DIR_PIN 24 #define E0_ENABLE_PIN 26 #define SDPOWER -1 #define SDSS 53 #define LED_PIN -1 #define PS_ON_PIN -1 #define KILL_PIN -1 #define HEATER_0_PIN 8 #define HEATER_BED_PIN 8 #define HEATER_1_PIN 9 #define HEATER_2_PIN 10 #define FAN_PIN 11 #define FAN_2_PIN 12 #define SSR_PIN 6 #define TEMP_0_PIN 9 // ANALOG NUMBERING #define TEMP_1_PIN 10 #define TEMP_BED_PIN 10 #define TEMP_2_PIN 11 #define TEMP_3_PIN 12 // LCD interface pins #define LCD_PINS_RS 33 #define LCD_PINS_ENABLE 30 #define LCD_PINS_D4 35 #define LCD_PINS_D5 32 #define LCD_PINS_D6 37 #define LCD_PINS_D7 36
How to get one
The design files including gerber files for the board are on github, and I will be selling both unassembled kits and assembled boards through the website shortly.