stepZeroR2 and stepZeroExpR2 redesigned and PCBs ordered

After nearly a month between trying to understand Marlin and working on setpZero, I finally finished modifying stepZero and stepZeroExp and ordered the PCBs today, ETA 2 weeks. Hopefully, I didn’t make any mistakes -_-

The first revision had a couple of minor problems:

  • I accidentally connected the RPi UART to the ATmega1284p UART1 instead of UART0, which was easily fixed in Optiboot and Marlin
  • I placed the ISP pins under the DC-DC converter, which meant that once I solder the converter I can no longer re-upload the bootloader

and one major problem:

  • I had four connectors connected in parallel to the ATmega1284p I2C port and VMOT with the intention of using those to drive an extruder and a heated bed (using an expansion board with its own DC-DC converter)

I had initially intended to modify Marlin so that it passes the extruder commands to the expansion board over I2C (or even using the pins as SoftwareSerial). When that seemed like a bad idea, I thought I can have Marlin set and query the heater and motor direction using I2C, then switch one of the pins to a mode that would simply pass on the incoming steps signal to the step pin on the expansion board and use the second pin to switch it back to I2C. After a second though, I decided that’s probably not a good idea either.

Thus the modifications I made to stepZero are as follows:

  • RPi UART is now connected to ATmega1284p UART0
  • The ISP header is now on the same side as the expansion ports and can always be accessed easily; furthermore, the SPI pins are connected to the RPi GPIO pins 22, 23, and 24 (through a logic level converter of course) thus allowing programming the ATmega1284p directly without bootloader (see
  • The axes endstop pins now have two signal connectors for MIN and MAX (previously I used only one for MIN)
  • The two expansion ports (expPort) now breaks out both I2C and UART1 as well as VMOT and VCC, this allows me to test a new approach where I would use one communication protocol (either I2C or UART, probably the latter) for setting and querying the expansion board while the signal on the two other pins will be passed directly to or from other pins (such as stepper step, dir, and a probe pin) selected using the communication line (sort of multiplexing)
  • There is now a dedicated connector for a cooling fan controlled by PWM, and a bootloader LED next to the RESET button
  • Finally, the DC-DC converter is moved a little back allowing a regular screw terminal to be placed instead of the removable one which was extending outwards, while the extended one was initially selected to allow removing the power input wires without having to remove the Z-stepper driver, it would collide with the USB ports on the larger RPi 3 (although I doubt anyone would want to use stepZero with a full RPi anyway


Aside from fixing a small problem with the stepper driver footprint being a bit too wide, stepZeroExp did not have any problematic issues. I had already broken out the UART pins in addition to the I2C pins in stepZeroExpR1, so I would have been able to use the new stepZeroR2 expPort, but I redesigned it to use the newer pinout for convenience. I also added a MOSFET to control a second fan, thus having one fan cooling the extruder itself while the other is cooling the print. Finally, I changed the stepper driver headers to two regular full rows (unlike on the main board) and moved it to the center of the board.

Written by Mo


Leave a Reply

Your email address will not be published. Required fields are marked *