From RepRapWiki
Jump to: navigation, search

Crystal Clear action run.png

Release status: working

Description Release Version 1.3a
License GPL 2.0
Author Joem
Based-on Pololu Electronics#Sanguinololu
Categories Electronics, Electronics development, Mendel Development
CAD Models Eagle
External Link none



Sanguinololu is a low-cost all-in-one electronics solution for Reprap and other CNC devices. It features an onboard Sanguino clone using the ATMEGA644P though a ATMEGA1284 is easily dropped in. Its four axes are powered by Pololu pin compatible stepper drivers.

The board features a developer friendly expansion port supporting I2C, SPI, UART, as well as a few ADC pins. All 14 expansion pins can be used as GPIO as well.

The board is designed to be flexible in the user's power source availability, allowing for an ATX power supply to power the board, or the user can choose to install the voltage regulator kit for use with any power supply 7V-30V.

Latest Updates

Latest revision by

Version 1.3b2 - Updated August 19, 2014

Version 1.3b2 has no schematic changes from version 1.3a - the bootloader however is changed to reflect the CPU upgrade though your 1.2+ compatible firmware should still work fine. The hardware changes:

  • ATX 4-pin Mini-Fit connector were removed so only the 2-pin screw terminal remains
  • Solder jumper for endstop voltage selection removed, now fixed to 5 volt rail
  • Through-hole MS1, 2 & 3 pinheaders substituted by solder jumpers
  • Through-hole enable/disable USB auto-reset pinheader substituted by solder jumper
  • Through-hole 16MHz oscillator crystal substituted by equivalent SMD type
  • Through-hole Voltage regulator (TO-220 LM7805) substituted by equivalent SMD type
  • Through-hole reset button substituted by equivalent SMD type
  • 3-pin endstop connector substituted by 4-pin type (the two center pins are Ground)
  • The space between the ICSP/SPI header and the expansion port has been enlarged from 50 to 100 mils
  • General optimizations of traces in circuit layout
  • FTDI pin header beneath the USB plug were removed
  • ATMEGA644P was substituted by ATMEGA1284P to give more space for firmware (more functionality: SD-cardreader, display etc.)
  • Change of bootloader, now uses ATmegaBOOT_168_atmega1284p.hex which can be found on

The resulting PCB now mostly consists of SMD components thereby facilitating easier production

Source: [1]

Latest posts in the Forum


  • Small design - board is 100mm x 50mm (4" x 2") - barely an inch longer than a business card!
  • Sanguino clone, Atmel's ATmega644P - ATmega1284 drop-in compatible!!
  • Up to 4 Pololu stepper driver boards (or Pololu compatible) on-board (X,Y,Z,Extruder) (without voltage regulator)
  • Supports multiple power configurations
-- Logic & Motors supplied by ATX power supply (needs molex harddrive connector, and optional 4pin atx connector for additional 12v/supply voltage)
-- Motors supplied by 5mm screw terminal 7-35V
-- Logic supplied by USB bus
-- Logic supplied by optional on-board voltage regulator (molex harddrive connector cannot be installed at the same time)
Supports multiple communication configurations
-- FT232RL on-board for USB connectivity
-- USB2TTL header is available for FTDI cable, or BlueSMIRF bluetooth module
  • 2 thermistor connectors with circuitry
  • 2 N-MOSFETs for extruder/bed, or whatever
  • Selectable 12v(or supply voltage)/5v endstop voltage
  • Edge connectors enabling right-angle connections
  • Silkscreen for connectors on both sides of the board, facilitating bottom cable connections
  • 13 Extra pins available for expansion and development - 6 analog and 8 digital, with the following capabilities
-- UART1 (RX and TX)
-- I2C (SDA and SCL)
-- PWM pin (1)
-- Analog I/O (5)
  • All through-hole components (except FTDI chip) for easy DIY soldering


  • The USB 5V VBUS is connected to the output of the 5V regulator. This is bad for the regulator and bad for the PC. Some users report the regulator getting very hot (because it is trying to power the PC), other users report the PC giving USB over current errors. Nophead and Nothinman recommend cutting the 5V track to the USB connector. The only downside is the board needs the 12V supply before it will do anything, but who cares?
An alternate fix for the 1.3a board is to cut the trace between the USB chip pin 4 and C13. This is functionally identical to building a Sanguinololu without the USB port and FT232RL and using an offboard USB-serial cable. The advantage over cutting the 5V trace at the USB connector is that the USB serial port doesn't disappear from the host PC when the printer is switched off, which can anger host software that is still running.
Another fix that seems to work using Schottky diodes:,400825
  • When the bootstrap loader runs during reset and when downloading firmware the motors are enabled due to pull-downs on the Pololus (The enable pins are pulled up by 100K resistors on the Sanguinololu but they are pulled down by 100K on each Pololu). The step pins are floating and this can cause random motor movements. The E step pin is next to E dir pin which the bootstrap thinks is an LED to be flashed. Crosstalk can cause the extruder to spin when firmware is being loaded. This is not good as it will be cold, so could damage the hot end. Nophead recommends changing the enable line pull ups (R7 and R8) to 4K7 to ensure the motors are disabled until the firmware enables them.
A software fix is to use the the Gen7 boot strap that does not flash the non-existent LED.
  • The pads and traces on the board are not robust enough to handle the high current involved when controlling the heated bed with the sanguinololu's dedicated mosfet. If left as is, the board will heat up in this area, could be damaged and the plastic connectors discolored. To fix, simply add a direct current path by way of (preferably insulated) wire from the 12v input to the 12v pins on the Heated Bed (HB) connector; from the center pin of the HB mosfet to the two ground pins on the HB connector; and from the ground pin on the mosfet to the ground input of the board (probably the ground side of the 12v connector). Find the appropriate traces using continuity check or resistance mode on your multimeter, and check after to ensure you didn't create a short between any of these components in the process. It would be prudent to check for shorts before starting so you don't waste effort trying to fix a short you think you just created but was already there before you applied this fix. To understand this fix, pretend that no traces exist between the high current pathways of the 12v input and 12v pins of the HB connector; the ground input and the ground pin on the mosfet, and the center pin of the mosfet and ground pins on the HB connector. Assume you must create these pathways, then do so!

Schematic & Board Images

Reference Renders

Historical Photos

Where to get it?!

You can get the bare pcb, a complete kit or assembled boards at:

(if any other resellers have this available, please add to this section)

You will also need Pololu stepper drivers or compatibles like the StepStick.

EAGLE files, parts list

Schematics, board, images:


Please note that this parts list is both incorrect and incomplete. The IC in this parts list should be a 644P, not simply a 644. Check the assembly instructions for what parts you will need, as this will save you multiple orders from your supplier and save you money!

Also, buy the 1/4 watt resistors, anything larger won't fit the PCB.

Mouser BoM for Sanguinololu 1.3A with polarized connectors. Updated 11 August 2011. Switched from vertical 4pin 12v connector (Molex PN 39-28-1043) to right angle 4pin 12v connector (Molex PN 39-30-1040)

Assembly Instructions (Version 0.7 - 1.3a)

For older versions see Sanguinololu_0.6

For users soldering a 1.3a board, note that you'll have a couple of changes:

  • You'll have a 2-pin male header and jumper shunt to solder for the AUTO-RST function of the FTDI. This is located right above the ATMEGA chip. TODO: Get pics of 1.3a
  • R7 & R8 are 100K resistors and are part of the recommended assembly.

For 1.2a board users:

  • R7 and R8 should be replaced with wire bridges. I use two clipped leads from a previously soldered part to replace the resistors normally in R7 and R8. TODO: Get pics of 1.2 with R7 & R8 bridges

For anyone building a 1.2 PCB a simple step by step build guide is available with Low , Medium and high Resoultion images.

Modifying Older Boards (from Version 1.1 and 1.2 to Version 1.3a)

For users with a 1.1 PCB who would like to modify it to make an (electrically/firmware) equivalent to a 1.2 PCB, the image below and this drawing show the track cuts and additional wire links required. Sanguinololu PCB Modded from v1.1 to v1.2.JPG

Infobox info icon.svg.png Note
Wire bridges are now used in place of R7 and R8 on v1.2 and v1.1 boards modified to v1.2 electrical/firmware equivalence.

To create a 1.3a equivalent PCB from a v1.1 board modified as above, or a standard v1.2 board, the following changes are required:

  • "Mount[ing] C7 in a small socket in such a way that you can unplug it" - as per Adrians Prusa Notes - Electronics
  • Adding two 100k pull-up resisitors, one each between 5V and Pin 20 and Pin 35 of the ATMEGA chip.
Warning-general-2.gif.png Caution
As at 2011-09-12 the above mod (from v1.1 modded or v1.2 standard to v1.3a) has yet to be functionally tested/verified.

TODO: Get pics


Gather the tools you will need to perform push through hole soldering, and if you opted for the on-board FTDI kit, some SMT soldering as well. Soldering pencil and/or iron, solder, and most importantly: flux! I can't stress how much easier flux makes soldering the SMT device.

Carefully inspect your board for defects. Look for strange connections between traces. Become familiar with the locations of devices from the back as well as the front.

Gather your components and ensure you have the complete parts list for your selection. This photo shows enough parts for two Sanguinololus - one with ATX connectors and the other with screw terminal and voltage regulator.

Sanguinololu 1.0 Build 0. parts.JPG

Soldering the FTDI

Install the FT232RL FTDI IC. Note the orientation of the silkscreen. Solder using your favourite SMT soldering method. The board pictured was tinned from the fabrication shop. After applying flux to the pads, and carefully placing the chip, it was easily soldered by touching the tip of the soldering pencil to the end of pad to tack the chip down, and then on the pin it self to flow the solder correctly. If you're not sure you want to tackle the SMT soldering, you can get the PCB with the USB pre-soldered [here]. Yet another alternative to soldering a IC, could be a USB to TTL-converter, this would require about the same amount of skill to solder as any other through-hole resistor.


 IC100    FT232RL          FT232RLSSOP              

NOTE: When testing the FTDI loopback, as in the following video or the text directions that appear below, be sure that your jumper doesn't short to the case of the USB connector just below and fool you into thinking you have a problem when you do not.

Sanguinololu 1.0 Build 1. flux the pads.JPG

Sanguinololu 1.0 Build 2. soldered ftdi.JPG

Sanguinololu 1.0 Build 2a. soldered ftdi.JPG

Next install the FTDI components. mind the polarization on the electrolytic (C16).


 J1       USB              USBPTH                   
 C7       0.1uF            CAPPTH2
 C8       0.1uF            CAPPTH2                  
 C11      0.1uF            CAPPTH2                  
 C15      0.1uF            CAPPTH2                  
 C16      4.7uF            CAP_POLPTH2              

Sanguinololu 1.0 Build 3. ftdi components.JPG

Now is a good time to test the FTDI chip. Plug a USB cable into the port. The device should show up as a COM port or a TTY device and allow it to be opened. If you temporarily connect the 'TX' and 'RX' pins on the USB2TTL port on the back of the board anything you type in your terminal application (such as PuTTy) should be echoed back to you.

Note that when you have finished the assembly and want to connect to the board using your printer software, then if you are using Windows XP you will need to load the FTDI drivers from the FTDI website. Windows will then recognize the FTDI chip and install it as a device.

Soldering Sanguinololu Core

Next, solder the female headers, making sure they're straight and completely seated on the PCB. Where two lengths of header strip are placed so they join in the middle, they may be fractionally too long to lie flat on the board at the join. In this case, carefully file off some of the plastic at the adjoining ends until they fit together in the space available.


 4x Female Pin Header 16 Pin

Sanguinololu 1.0 Build 4. female sockets.JPG

Solder MS1, MS2 and MS3 jumper headers. I find that it is easier to solder the 2-pin header if the jumper shunt is installed. Ensure they're completely seated and straight. Leaving the jumper shunt in place will pull the MS pins high, i.e. set the Pololu controller to sixteenth step resolution. This turned out to be the appropriate setting for my out-of-the-box firmware. If your motors move erratically, check these.


 12x Male Pin Header 2 Pin
 12x Jumper Shunt

Sanguinololu 1.0 Build 5. microstepping jumpers.JPG

Install the led current limiting resisitor and the MS1 pull-down resistors (MS2 and MS3 have internal pull-down resistors).


 R1       1k (1.5k)        RESISTORPTH1
 R2       100k             RESISTORPTH1
 R3       100k             RESISTORPTH1             
 R4       100k             RESISTORPTH1             
 R5       100k             RESISTORPTH1             

Sanguinololu 1.0 Build 6. pulldown and led resisitor.JPG

Solder the driver decoupling caps. Before soldering, bend the leads to the side so the capacitor lays down. Mind the polarization!


 C1       100uf            CAP_POLPTH1
 C2       100uf            CAP_POLPTH1              
 C3       100uf            CAP_POLPTH1              
 C4       100uf            CAP_POLPTH1              

Sanguinololu 1.0 Build 7. decup caps.JPG

Install the thermistor high pass RC filters. Mind the polarization of the capacitors. Install the MOSFET pulldown resistors.

Infobox info icon.svg.png Important Note
If you're using a Sanguinololu 1.3a here, install 100K resistors in R7 and R8.

If you're using a Sanguinololu 1.2 here, do not install resistors in R7 and R8. Instead, replace them with a jumper lead - I use a clipped lead from something I've already soldered. When you're done, you should have two jumper wires: one in place of the resistor in R7 and the other in place of the resistor in R8.


 R6       10k               RESISTORPTH1             
 R11      10k               RESISTORPTH1             
 R7       100k - 1.3a only! RESISTORPTH1             
 R8       100k - 1.3a only! RESISTORPTH1             
 C9       10uF              CAP_POLPTH2
 C10      10uF              CAP_POLPTH2              
 R9       4.7k              RESISTORPTH1             
 R10      4.7k              RESISTORPTH1             

Sanguinololu 1.0 Build 8. mosfet resisitors, highpass filters.JPG

Install the dip socket and ceramic resonator. Before soldering, bend the resonator leads so that it lays down within the dip socket. It doesn't matter which way round it goes.


 Y1       16MHz 22pF       RESONATORPTH             

Sanguinololu 1.0 Build 9. dip socket, resonator.JPG

Install the two ceramic caps for the ATMEGA and the reset pull up resistor.


 C14      0.1uF            CAPPTH2
 C13      0.1uF            CAPPTH2                  
 R12      100k             RESISTORPTH1                   

Sanguinololu 1.0 Build A. resistors & filter caps.JPG

Solder the MOSFET, the large charge capacitor, reset button, and the power led. The power led's negative lead is the flat side, or shorter lead. The negative lead goes to the left in the picture immediately below.


 C12      1000uF           CAP_POLPTH4              
 S1       RESET            TAC_SWITCHPTH            
 LED1     POWER            LED3MM 

Sanguinololu 1.0 Build B. reset button, led, big cap, mosfets.JPG

ATX Power Supply Source

If you are using the ATX power supply kit, install those connectors.


 HDDPWR   5v/12v           DRIVEPWRVERTICAL                           

Sanguinololu 1.0 Build C. atx connectors.JPG

Infobox info icon.svg.png Important Note
It has been brought to my attention in IRC (thanks Kliment & tonokip) that the 5V coming from the ATX power supply may not be as stable and at 5V as one could hope. It would be better practice here to instead of using the 4-Pin hard-drive connector use the 4-pin ATX connector and the Voltage Regulator. The 4xATX connector will still provide enough power for the board.

One could even forgo the voltage regulator and power the logic side of the board strictly by USB, the power side by 12V ATX4.

Voltage Regulator & Screw Terminal

If you are using the voltage regulator and screw terminal kit, install those parts now. Note the orientation of the LM7805. Label the screw terminal with a felt tip marker which side is + and which is -. Note - on later versions of this board the screw terminals mount at right angles to the way shown so the wire they connect comes out parallel to the USB lead.


 IC1       LM7805          VREG
 C5       0.33uF           CAPPTH2
 C6       0.1uF            CAPPTH2
 JP23     SCREW            M025MM         

Sanguinololu 1.0 Build D. voltage reg and screw term.JPG


Finally, solder your motor, end stop, thermistor, and bed/tip connectors. Optionally solder the 12v(or supply voltage) connectors on the top of the board, and the ISP 6 pin header (for programming the ATMEGA) Various parts.

Sanguinololu 1.0 Build E. connectors & isp.JPG

For speeding up the soldering of the connectors in case you use pinheaders, you can use longer strips, and just snip positions that are not used, like this:

SL11 Toprow.jpg SL11 Endstoprow.jpg

(Top strip left, endstops right)

Resulting in a board like this

SL11 Boardstrip.jpg


When you solder the pin strips onto the Pololus you will find it easiest to put the strips in the appropriate place in the Sanguinololu. Then just drop the Pololu boards on top and solder them in place. Check the polarity is correct - don't trust checking it against an image on this wiki. Make sure that pins 1a, 1b, 2a, & 2b are closest to the edge of the board. You can then unplug them later if you want.


Mechanical micro-switch endstops are recommended for their simplicity and reliability. It is recommended to wire the switch terminals Common (C) and Normally Open (NO) to GND and SIG on Sanguinololu (the two outside pins on the endstop connectors). Ensure you set Endstops_Inverting to true in your firmware.

If you are using optical endstops or proximity sensors (or other endstops that require power) you can use either 5v or 12v(or supply voltage) depending on what endstop device you want to use. This is selected by soldering a little link labeled "Stop Volt" on the back of the board. With the text the right way up, joining the left pad to the middle one gives 12v(or supply voltage); right-to-middle gives 5v. Take care not to short all three together.


Later, to actually run the printer, you'll need software on your computer to send instructions to the Sanguinololu. Common choices are Pronterface, Printrun, Repetier Host or a simple serial terminal (ideal for debugging).

Typically, you need two pieces of software on your ATmega:

  • A bootloader, which exists for the sole purpose of allowing uploading a firmware over the serial port. Most RepRap vendors deliver ATmegas with a bootloader already installed. No matter which firmware you prefer, there is no need to replace the bootloader as long as it works.
  • A firmware, which contains all the logic to make your printer move according to the G-code commands sent to it.

The following description is a bit aged by now, it applies to the ATmega644P and older Arduino IDEs, only. For more recent instructions, see Gen7 Arduino IDE Support's Installation and Gen7 Arduino IDE Support's bootloader upload instructions. This will show you how to handle the ATmega644, ATmega644P and ATmega1284P as well and how to make use of recent Arduino IDEs. The Gen7 Arduino IDE Support package works for a Sanguinololu just fine.


If you can already upload a firmware over the serial port or prefer to upload your firmware with a programmer, you can skip this step. Bootloader and firmware are entirely independent from each other.

For your Sanguinololu to accept firmware over the USB connection you first need to burn the Sanguino Booloader to the ATmega 644P. There are several ways to accomplish this. The most popular seems to be burning the Bootloader with an Arduino acting as an ISP. A great tutorial on how to do this is listed in alphabetic order below. We will try and complete tutorials on the other methods as we have the time.

Flashing the bootloader with a:

  • Arduino as a ISP
  • USBTiny Note: Revision 1.3a use Sanguino-0018r1_1_4 for support for Arduino <=23.

Fuse Settings

The fuses for the atmel chip must be changed from the default factory settings to disable JTAG.

Symptoms of incorrect fuse settings:

  • X axis only moves in one direction.
  • Endstops do not work.

644P Fuse Settings

The settings come from the bootloaders boards.txt file.

Example using avrdude and usbtiny.

avrdude -B 8 -patmega644P -c usbtiny -U lfuse:w:0xFF:m -U hfuse:w:0xDC:m -U efuse:w:0xFD:m

1284P Fuse Settings

Use Arduino as ISP to upload ATmegaBOOT_168_atmega1284p.hex bootloader found on

avrdude -p atmega1284p -c stk500v1 -b 19200 -V -e -U lfuse:w:0xD6:m -U hfuse:w:0xDA:m -U efuse:w:0xFD:m -U flash:w:ATmegaBOOT_168_atmega1284p.hex:i


You will need to upload a RepRap firmware to your Sanguinololu once the Bootloader has been burnt. You can do this using the USB cable and the Arduino IDE (v0022, 1.0 has issues with the Arduino library coming with the Sanguino extensions). If you know of other working firmwares than what is listed below please feel free to add them.

Compatible Firmwares



avrdude: stk500_recv(): programmer is not responding 


  • Arduino IDE /bootloader mismatch. Known working versions is Sanguino-0018r1_1_4, with Arduino 0023.
  • Hardware issue.


Arduino may return the following error when attempting to load firmware:

avrdude: stk500_getsync():not in sync: resp=0x00 
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

To resolve for boards older than Rev 1.3a, hold the reset button on your Sanguinololu for about 10 seconds. While still holding the button, try to upload the firmware again (File --> Upload to Board). Let go of the reset button as soon as Arduino reports, "Binary sketch size: ###### bytes (of a 63488 byte maximum)". The firmware should now be accepted.

permanent fix

A fix was added in Rev 1.3a. If unpopulated (like mine), solder a 2 pin header to the "Autoreset Enable" jumper labeled AUTO RST on the silkscreen. This is located between the Z stepper motor socket and pins 8-10 of the ATMEGA644P socket. In addition to this procedure, you should also set your Virtual COM port parameter "RTS on close" to ON.

THE FIX: Adding the jumper allows the PC reset the Sanguino board programming and interactive sessions.

THE DEFAULT: Removing the jumper allows the printer to run in standalone mode; that is, the micro controller will not reset mid print when the PC is disconnected or reconnected.

Another Solution

Another thing to check is the baudrate in the " Boards.txt" folder. (in hardware/Sanguino ) Change atmega644p.upload.speed=57600 to atmega644p.upload.speed=38400 Arduino will not take changes in this folder if it is not restarted.

Some users may experience a new error after changing the baudrate to 38400. I, for instance, in editing the "Boards" text file deleted a new line division (recreated with the enter key), not realizing it was essential for the proper function of Arduino IDE v0023. After the following error the IDE froze while displaying an "uploading" status:

Binary sketch size: 46494 bytes (of a 63488 byte maximum)
java.lang.NumberFormatException: For input string: "38400atmega644.bootloader.low_fuses=0xFF"
at java.lang.NumberFormatException.forInputString(
at java.lang.Integer.parseInt(
at java.lang.Integer.parseInt(

Notice the problem is the missing return between "38400" and "atmega644." Simply recreate the line division between the two and restart the Arduino IDE. Done correctly, however, the above baudrate fix solved the original problem when the jumper/reset fix could not.

Java Error

Another Item to Check for the GetSynch Error is Whether Virtual Com Port Drivers installed Correctly -Make sure you see "USB Serial Port" under the heading "Ports (COM&LPT)" If you see a USB driver in the "Other" category with a question mark, you need to manually select the driver for the FTDI chip with drivers from the website.

Another stk500 error

I got this error:

avrdude: stk500_recv(): programmer is not responding 
avrdude: stk500_recv(): programmer is not responding 

IRC was very helpful asked me to edit the sanguino boards.txt and change the programmer type to 'arduino' instead of 'stk500'. Which gave me:

avrdude: Can't find programmer id "arduino"

Then I was to check if I had any files in, which I do. After that it spat out:

avrdude: error: no usb support. please compile again with libusb installed.

As I already had avrdude installed, I just moved the old avrdude binary that came with Arduino 0018 and made a symlink from /usr/bin/ to where the old binary was:

mv ~/tmp/arduino-0018/hardware/tools/avrdude ~/tmp/arduino-0018/hardware/tools/avrdudeOLD
ln -s /usr/bin/avrdude ~/tmp/arduino-0018/hardware/tools/

Final Check

Pololu drivers current limit configuration

Before going further, it's very important to configure the current limit of your Pololu drivers or you'll risk burning out your stepper motors or the Pololus. This should be done with the board powered but before connecting the motors. Always power off before connecting or disconnecting the motors.

First of all, note that there are usually two types of NEMA 17 motors :

  • high voltage stepper motors, that work usually on 12 to 14V, the working current is usually below 1A. These don't work well with microstepping chopper drivers and are not recommended.
  • low voltage stepper motors, that work usually on 2 to 4V, the rated current is usually over 1A.

It is safe to drive low voltage stepper motors at a much higher voltage because the Pololu A4988 has current limit functionality. The higher the voltage applied compared to the motor's rated one, the faster your stepper motor can run. The A4988 chip can only provide up to 2A per coil so choose your stepper motor accordingly.

A good starting point for the current is $ 0.7 $ times its rated current. This is typically ~1A with the recommended 1.68A NEMA17 motors and that is about the maximum current the Pololu can deliver without a heatsink or a fan. Note that the rated current of a motor is usually that which gives an 80C temperature rise, which is too hot for plastic brackets, hence the reason to under-run them.

The recommended way to set Pololu drivers current limit is to measure the voltage at the Vref test point. The A4988 datasheet gives all the required information to configure the current limit of a Pololu driver :

The peak current $ I = \dfrac{V_{REF}}{8 \times R_S} $

where $ R_S $ is the resistance of the sense resistor ($ \Omega $) and $ V_{REF} $ is the input voltage on the REF pin (V).

On the Pololu driver board, the $ R_S $ value is $ 0.05 \Omega $ and the $ V_{REF} $ can be measured on the test point shown below, or the metal wiper of the pot. $ I $ is equal to the recommended current limit for your stepper motor multiplied by $ 0.7 $. Thus you can determine the $ V_{REF} $ you'll need with:

$ V_{REF} = I \times 8 \times 0.05 = 0.4 \times I $

For example if your motor is rated 2.8V at 1.68A, you adjust the pot so that you measure the following value for $ V_{REF} $ :

$ V_{REF} = 1.68A \times 0.7 \times 0.4 = 0.47 V $


Note that the StepStick pin compatible driver has 0.2$ \Omega $ sense resistors and the current is limited to a little over 1A with $ V_{REF} $ = 1.7V.

Symptoms of not enough current are skipping steps and poor microstepping linearity. Too much current will cause the motor or the driver to overheat. When the driver overheats it shutsdown for a few seconds and then restarts again when it cools. This makes the motor twitch when it is stationary and pause during motion.

See also Pololu's presentation on calibrating/testing the driver boards: [2]

Wiring shematics


Powering Sanguinololu

Your chosen power solution will determine what kind of power requirements will be in play:

Screw terminal: Connect your power supply with at least 7V and at most 30V to the screw terminal. The negative lead is the one closest to the screw hole.

ATX Power Connector: Connect the ATX-4 pin connector. The ATX power supply must also be rigged to turn on when plugged in & the switch is on. This is done by shorting the !PWR_ENABLE pin to ground on the main ATX-20 pin connector. This is usually the green wire shorted to a black wire. I use a staple crammed in the socket, and use the switch on the power supply case to control system power.

Sanguinololu Firmware

You can program the ATmega644P with Sanguino's bootloader for easy firmware loading. Another working package is Gen7 Arduino IDE Support, which supports the ATmega1284P and Arduino IDE 1.0 or later, too. On how to upload a bootloader, see Gen7 Arduino IDE Support's bootloader upload instructions.

Sprinter is the recommended firmware for Sanguinololu. Teacup, Marlin and Repetier are known to work as well.

In Sprinter, check the Configuration.h to ensure that Sanguinololu is selected as your board: Board 62 for Sanguinololu v1.2 and newer, board 6 for v1.1 and older.

Pin Assignments v1.2

    e-dir      (D 0) PB0  1|        |40  PA0 (AI 0 / D31) ext
   e-step      (D 1) PB1  2|        |39  PA1 (AI 1 / D30) ext
    z-dir INT2 (D 2) PB2  3|        |38  PA2 (AI 2 / D29) ext
   z-step  PWM (D 3) PB3  4|        |37  PA3 (AI 3 / D28) ext
      ext  PWM (D 4) PB4  5|        |36  PA4 (AI 4 / D27) ext
      spi MOSI (D 5) PB5  6|        |35  PA5 (AI 5 / D26) !step-enable-z
      spi MISO (D 6) PB6  7|        |34  PA6 (AI 6 / D25) b-therm
      spi  SCK (D 7) PB7  8|        |33  PA7 (AI 7 / D24) e-therm
                     RST  9|        |32  AREF
                     VCC 10|        |31  GND 
                     GND 11|        |30  AVCC
                   XTAL2 12|        |29  PC7 (D 23)       y-dir
                   XTAL1 13|        |28  PC6 (D 22)       y-setp
    ftdi  RX0 (D 8)  PD0 14|        |27  PC5 (D 21) TDI   x-dir
    ftdi  TX0 (D 9)  PD1 15|        |26  PC4 (D 20) TDO   z-stop
     ext  RX1 (D 10) PD2 16|        |25  PC3 (D 19) TMS   y-stop
     ext  TX1 (D 11) PD3 17|        |24  PC2 (D 18) TCK   x-stop
 !hotbed  PWM (D 12) PD4 18|        |23  PC1 (D 17) SDA   ext
 !hotend  PWM (D 13) PD5 19|        |22  PC0 (D 16) SCL   ext
!step-en  PWM (D 14) PD6 20|        |21  PD7 (D 15) PWM   x-step

Or in tabular format

 !step-enable-z     D26       PA5
 !step-enable-x-y-e D14       PD6
 e-dir              D0        PB0
 e-step             D1        PB1
 z-dir              D2        PB2
 z-step             D3        PB3
 y-dir              D23       PC7 
 y-step             D22       PC6 
 x-dir              D21       PC5 
 x-step             D15       PD7
 !hotbed            D12       PD4
 !hotend            D13       PD5
 b-therm            D25  AI6  PA6
 e-therm            D24  AI7  PA7
 x-stop             D18       PC2 
 y-stop             D19       PC3 
 z-stop             D20       PC4

Pin Assignments v0.7 - 1.1

 step-enable-x-y-e-z D4        PB4
 e-dir               D0        PB0
 e-step              D1        PB1
 z-dir               D2        PB2
 z-step              D3        PB3
 y-dir               D23       PC7 
 y-step              D22       PC6 
 x-dir               D21       PC5 
 x-step              D15       PD7
 hotend              D13       PD5
 hotbed              D14       PD6
 b-therm             D25  AI6  PA6
 e-therm             D24  AI7  PA7
 x-stop              D18       PC2 
 y-stop              D19       PC3 
 z-stop              D20       PC4

Microstepping Jumper Settings

Sanguinololu Jumpers.JPG

SD / Bluetooth Adapters

At least two adapters exist for the Sanguinololu using the IO and ISP headers.

Revision 0.5 / 0.6 Info

See Sanguinololu_0.6 for assembly instructions, board files, etc.

Revision History

Rev.1.3b2 by - updated August 19, 2014 This version has no schematic changes from version 1.3a - the bootloader however is changed to reflect the CPU upgrade though your 1.2+ compatible firmware should still work fine. The hardware changes:

  • ATX 4-pin Mini-Fit connector were removed so only the 2-pin screw terminal remains
  • Solder jumper for endstop voltage selection removed, now fixed to 5 volt rail
  • Through-hole MS1, 2 & 3 pinheaders substituted by solder jumpers
  • Through-hole enable/disable USB auto-reset pinheader substituted by solder jumper
  • Through-hole 16MHz oscillator crystal substituted by equivalent SMD type
  • Through-hole Voltage regulator (TO-220 LM7805) substituted by equivalent SMD type
  • Through-hole reset button substituted by equivalent SMD type
  • 3-pin endstop connector substituted by 4-pin CDROM type (the two center pins are Ground)
  • The space between the ICSP/SPI header and the expansion port has been enlarged from 50 to 100 mils
  • General optimizations of traces in circuit layout
  • FTDI pin header beneath the USB plug were removed
  • ATMEGA644P was substituted by ATMEGA1284P to give more space for firmware (more functionality: SD-cardreader, display etc.)
  • Change of bootloader, now uses ATmegaBOOT_168_atmega1284p.hex which can be found on

The resulting PCB now mostly consists of SMD components thereby facilitating easier production

Rev 1.3a Version 1.3a has no firmware changes - the pin assignments remain the same and your 1.2+ compatible firmware should work here fine. The hardware changes: Removed the Molex HDD connector in favor of using the voltage regulator - some power supplies give a dirty 5V signal when there is no motherboard load, so its better to just use the power supply's ATX+4 connector and the 5V voltage regulator. Added a jumper to enable/disable USB auto-reset. This way if you're printing from an SD card using SDSL you can disconnect your USB and reconnect it without interrupting a print. R7 and R8 are now 100k pull-up resistors that are on the stepper-enable lines. This ensures the stepper motors stay disabled and don't move while uploading new firmware, rebooting, etc. The current limiting resistors for the FTDI are gone. There is an extra Z-motor header for Prusa Mendel.

Rev 1.3 This is a custom modification for WebSpider - it spaces the hottip and hotbed connectors better. No firmware changes.

Rev 1.2 Rev 1.2 Updated June 15, 2011

While Version 1.1 is completely functional, there were some requests from users for pin assignment changes. Version 1.2 implements these firmware changes. --Z-Enable is now on its own pin --PWM devices have been moved to OC0 and OC1 freeing up OC2 for internal timing --The expansion port is now a pin shorter - the Z-Enable feature ate an analog pin here.

Version 1.2 still includes the footprint for the Molex HDD connector, though you may be wise to disregard it and always install the 5V regulator as not all ATX power supplies' 5v lines are stable and clean.

NOTE: On the bottom side of the board, the footprint for the Molex HDD connector is backwards (beveled edges facing towards the edge of the board). Take care if soldering from the bottom side of the board to orient the HDD connector with the beveled edges facing towards the center of the board, as shown on the top side silkscreen. This may be the cause of some claims of bad 5V regulation on some power supplies, especially when 12V is connected instead!

Rev 1.1 Corrected silkscreen mistake. Added open hardware logo

Rev 1.0 Release revision, tighter DRC rules, and updated screw terminal footprint. Looks like there is one tiny mistake on the 1.0 board: the leftmost 5v pin on the expansion header is actually 12v(or supply voltage).

Revision 1.0 is here with only a few tiny changes from 0.7 - the screw terminal pads have been rotated so that they face the closest edge, and the design rules have become more strict to be compliant with more board fab shops. I've included gerber files in git so that you can easily have your own boards fabbed.

Rev 0.7 Added more pins to the expansion header, made I2C and SPI available for use. Combined all stepper motor enable nets into one pin.

Added footprints for voltage regulator for those wanting to use laptop power brick, etc. The vreg component footprints are hidden under the ATX power supply for space saving and to prevent both from being in use.

Enabled USB bus power for logic side.

Connected the 5v pin on the USB2TTL header so that either a: ftdi cable can power the board, or b: The board can power a bluetooth serial module (bluesmirf).

See Sanguinololu_0.6 for older revision history