The Printrbot Simple Metal was a really cool design. It’s a Cartesian 3d printer built like a brick house by Printrbot out of Lincoln, California, who went out of business facing powerful competition from a lot of low-cost Chinese printers but recently decided to get going again. One of my coworkers had one that had an old version of Marlin on it (1.0.0?!) and I wanted to update it to improve on some features and add support for a heat bed.
It was available with or without a heated bed, and even if you didn’t have one, it can still be added easily using a stick on heater mat/thermistor like this. The connectors are present on the Printrboard controller for it. One cool thing about the Printrboard: it has two big beefy mosfets onboard, and the DC in connector just mates straight to a standard ATX12V connector on a PC power supply. All you’d need to do to power the Printrbot is go to the ATX motherboard connector on the supply and jumper the small green wire to one of the black grounds to make it auto start. On Rev. D boards, this was a 4 pin; on Rev. F, it’s 6 pin.
There is a solder jumperable pad, supplied OPEN, for USBPWR 5V. This will allow the board to power up from the USB host it’s plugged into. Don’t jumper this unless you have a very good reason to for your configuration. An onboard switching regulator will supply +5V to the components onboard once +12V is input to the ATX12V connector.
This is based on the RevF board, as that just happens to be what landed on my bench. Printers using the RevD are not uncommon too, apparently.
Steppers: The board supplies four Allegro A4982 stepper drivers, an improved version of the A4988. These do not have a heatsink on them like a lot of newer boards do, but I haven’t seen them get hot either. It certainly won’t hurt to add some stick-on sinks if you want. The datasheet suggests that the lion’s share of the chip’s thermal dissipation goes out the bottom though. The driver type in Marlin should be left on A4988 as the I/O behavior is identical.
Microstepping IS supported on this board – you will find a small solderable jumper pad next to each driver. If you solder bridge that entire pad, you will get 1/8 microstepping. On this particular printer, all four are un-jumpered and microstepping is not used. On a printer that was NOT built like a brick house, this would lead to it having a very loud sound about it. On the Simple Metal… it just sounds smooth and sweet. Don’t forget to change your steps per unit if you bridge the microstep pads! The VRef voltage that sets the stepper motor current comes off a DAC, making the motor current adjustable in software. I haven’t experimented with this yet or found any reason to move it off defaults – the motors and drivers stay cool and I am not experiencing any skipped steps, even when making the printer SCREAM at 150mm/sec! (it will DO IT with the stock hotend and not skip any steps, but you will lose detail. Dang.)
Updating Firmware: Before updating, if you’re doing this on an already functional machine, get your EEPROM settings with M503 and copy them into a text file. Otherwise you’ll wind up with defaults that may or may not be correct.
The CPU and serial interface: Another cool thing about the Printrboard: Unlike many ATMega based 3d printer controllers that came out at that time, the ATMega AT90USB1286 has native USB support. This will prove to be a double edged sword but won’t stop you from having fun with this board, read on. A Marlin build bug may show up when you’re trying to build as a result of this unique platform target. This is currently fixed in the nightly “bugfix” branch, so start from that if you are compiling Marlin yourself.
There is a “BOOT” jumper next to the chip. If you jump this and press the reset button, the chip will come up in DFU mode. It comes stock with a bootloader from Atmel that supports their FLIP utility for programming under Windows. (Todo: figure out what tools would be needed for this on other platforms.)
Dealing with Windows Being A Stupid Doodiehead As Usual: To program this chip, download Atmel FLIP and install it. On Windows 10 64-bit, get the version with the JRE included (as documented here). Tip the Printrbot over on its side and place a jumper cap on the BOOT pins, then press the reset button. You should see Windows detect the AT90USB in DFU mode— however, it may not properly install the driver. Open FLIP and click the USB cable icon in the toolbar, then choose USB connection. If you receive a message about a missing DLL, close FLIP again, and go into Device Manager. Right click the DFU device that’s showing up with a warning icon and choose Update Driver, then manually choose the location. The driver will have been dropped in C:\Program Files(x86)\Atmel\Flip [version]\usb. It should install ok, then Flip is ready to use.
To flash a file with Flip, go to File > Load Hex File. Click the USB plug icon and select USB connection. It should identify the AT90USB1286 if the chip’s already up in DFU mode. By default the options on the left will all be checked except Blank Check. That works fine… make sure it’s set to write out the Flash space and not the EEPROM space (the button in the top center toggles this), then click start at the lower left. It’ll take about 15 seconds to complete. IN THEORY, you should be able to reset out and run the newly programmed application in the chip with the button at lower right, but that doesn’t work for me – probably because the BOOT jumper is still set and it just loops back into DFU. Pull the jumper and press reset, and Windows should detect the
I have provided two compiled versions here at the end, one for printers with a heated bed and one for those without. The version for printers without a heatbed bed will work fine on those that do, you just won’t be able to heat the bed. The other way around, I suspect, would make it refuse to work with a MINTEMP error being thrown.
Building Marlin: I used PlatformIO and the Build Marlin addon tool. You can also use the Arduino IDE after installing Teensyduino. (Board type will be Teensyduino++ 2.0!). My configuration files are at the end of this post; my changes were mostly to invert the inductive probe output behavior (which MAY have been different for Rev. D boards!) and to add bilinear bed leveling with a 16 point probe. I tried using the new Unified Bed Leveling architecture but it caused the code size to exceed available memory. Bilinear is working fine on the machine here, so I’m just using it 🙂
Yes, you can buy that funky UBIS hotend and parts for it. The distance between the nozzle and probe center-to-center is 25MM, I’ve checked this and included it in the configuration file.
I have a sneaky suspicion that the example configurations for Marlin 2.0 just haven’t been touched since shortly before/after(?) Printrbot blinked out of existence and the example was only built and tested for the Rev. D Printrboard. A bit of searching around online suggests that the big change between D and F was the addition of a buffer transistor for the input from the inductive probe, which was prone to damage on Rev. D. If you have Rev. D, the stock config should be fine, but I think the buffer basically inverts the input. The way to tell will be to try homing the printer with G28. If the Z axis rises, pauses, then rises again, but never comes back down, use M119 to test the endstop input states. If the Z axis is not at the bottom and the LED on the proximity sensor is out, it should not say TRIGGERED for the Z endstop. Place a metal object under the probe so its light comes on and check again, it should say TRIGGERED. If you get the opposite behavior, you will need to toggle that state. The relevant lines are #define Z_MAX_ENDSTOP_INVERTING and #define Z_MIN_PROBE_ENDSTOP_INVERTING. These must match or it will toss an error on compilation.
Verification and Final Settings: Once you have the firmware loaded and running, open your terminal of choice. You can use Pronterface, the G-Code terminal in Octoprint, RepetierHost, whatever works.
Send M115 to get the firmware version.
If you previously had an older version of Marlin installed, send M502 then M500 to load the defaults from the firmware to the EEPROM space and save them. If this printer had an LCD (it CAN be added!) it would prompt you to do this from the front panel on first boot.
PID autotune: I usually start the fan first with M106 S255. This may not be necessary but I find it helps on some platforms.
Start the tuning routine with M303 S215 C8 U1
(8 cycles to 215 degrees C, and the U1 flag will save the values to RAM)
M500 to save the results to EEPROM for later use
Bed leveling: If you have a heatbed, heat it first to a normal use temperature (say, 50C for PLA) and let it stabilize a minute before continuing. The hotend temp won’t matter for now as it’s not going to affect the inductive probe.
(this will auto home all three axes)
(a magical dance will begin)
If you already have a working Z probe offset value from your old settings, enter it now
M851 Z-0.7 this will vary by your printer and build surface
Once G29 is done, it will output a small table of the measurement values. Save the results with M500. Re-home with G28
Test the Z height by heating the hotend to a normal use temperature, placing a sheet of paper on the bed and sending G0 Z0. It should kinda just grab it. If you need to adjust it, check these instructions.
If your extruder is stock, well…. for the FIRST TIME EVER… and that is to say I have literally NEVER seen any other Chinese printer I’ve worked with factory calibrated correctly…. YOUR E-STEPS ARE PROBABLY CORRECT!!! See, this was why you paid extra for a Printrbot. Thing’s hardcore. If you want to verify/calibrate, go here. Otherwise it should Just Work.
If you have Rev. D and these binaries don’t let the printer home right, let me know – I don’t have that version to test on and I’m curious about that probe behavior…