Archive for the ‘ Electronics ’ Category

Howto: Pause Repetier for filament reload at a specific layer number

Last year I posted Howto: Pause Marlin for filament reload at a specific layer number.  Since then I upgraded (I consider it an upgrade) to Repetier, and wanted to do the same thing.

The above link has a chunk of G and M codes  that could be inserted into the .gcode script at a given line number to pause it, allowing you to do a filament reload by hand. I figured you could do the same thing in Repetier.  As it turns out you can, and actually it’s a lot easier… presuming it works in the first place:

Repetier allows you to ‘Reload Filament’ via the LCD.  However, I immediately ran into a problem:  After the reload, it wouldn’t return to the correct position on the build plate:  It was always offset by some amount.  Basically ruining the print every time I tried.  Long story short:  You need to configure the firmware to “not home” after filament reload.  Two ways to do this:

Via the online configuration tool:  In the features tab under the “Filament Change” section, I set the “Homing after Filament Change” to “No Homing”.

Or in your Configuration.h set:

#define FILAMENTCHANGE_REHOME 0

Now, I can reload filament successfully via the LCD.

And via the M600 Mcode:  Up until then, whenever I’d try this code (which starts the filament reload process the LCD uses) I’d run into the exact same problem.  But now it works, so we can add it to our gcode file.

Why was this needed though?  You can follow the play-by-play on the Repetier firmware form here, but in a nutshell:  In my ‘start gcode’, I move my toolhead to the corner of my buildplate and ‘zero’ it there.  During Repetier’s ‘rehome’ operation during the reoload, it basically nukes those coordinates, thus putting an offset into my print.

Repetier’s ‘reload filament’ code is so simple (just that one line) compared to Marlin, you can easily enough by hand go into your gcode file, find the line number like this:

; layer 4, Z = 0.78

And insert it in where needed:

M600
; layer 4, Z = 0.78

Or, like mentioned in the previous post, you can use your slicer software (if it supports it) to post-process the gcode to add this in where you need.  Snip from last years post:

I slice using Simplify3D:  In a given process, it has a section in its ‘Scripts’ tab, at the bottom, called ‘Additional terminal commands for post processing’.  This allows you to enter in script to do a text-replace in your file, to edit it for you.  I learned about it on a forum post here.

To do the above using that system, you’d need to enter this text into that field:

{STRIP ";   postProcessing,"}
{REPLACE "; layer 4," "M600\n; layer 4,"}

And (like last years post),  some really important things to note:

  • The fist line that says ‘STRIP’ is super important:  If you don’t do this, Simplify3D will embed a copy of the REPLACE line in the header of the gcode, but won’t properly comment it out, basically ruining the gcode.
  • In the STRIP line, there needs to be exactly three spaces between the semicolon ‘;’ and the ‘postProcessing text.  Any more or less will screw up the strip.  If you copy-paste this code, make sure there are three spaces in there.
  • As you can see, you need to insert newline characters (\n) into the string you’re building for it to show up properly in the gcode later.

I have been made aware that you can also do something similar via Repetier Host:  The goal of this is to print entirely untethered, with precisely defined pause-points in the code for filament change, so host software (Repetier or otherwise) is out  of the question what what I’m trying to solve.

Building the C-Bot 3d Printer : Part 32 : New Cooling Fan shroud, and bulldog clips

Jump to C-Bot blog index to see all the posts.


New Cooling Fan Shroud:

Running PLA out of a volcano nozzle means you need a lot of cooling.  I’ve tried a number of solutions in the past, all of which were mainly just “point a really big fan at the hotend”.  I don’t think this is the best technique (although better than nothing) :  You want airflow directed at the filament immediately after it is extruded.

So I buckled down and designed a new cooling fan shroud in Autodesk Maya, specifically designed for the C-Bot, and the E3d-V6 Volcano nozzle I have attached to it.  You can download this file for print from Thingiverse here.  The most recent update allows you to adjust its mount location, hopefully allowing it to work with a greater variety of extruders on the C-Bot:

epfs_B03

Screenshot from Maya of B03

Here’s the previous version (B02) on my C-Bot:

cbot_filament_cooler

Low Profile Bulldog Clips

After installing the new shroud, it sits so close to the build platform, that it hits the side and rear bulldog clips I am using to secure the glass plate.  I looked all over the web for any sort of ‘low profile’ versions of these clips, but couldn’t find anything.

After a bit of thinking, I realized I could modify my existing clips instead:  Presuming you have two pairs of needle-nose pliers, a hammer, and a vice, you can do this too:

low_profile_bulldog New in front, old in back.

  • To get the clips out, jam one needle-nose into the hole of the clip, slightly opening it.  Use the other one to pull out each of the tabs.
  • Put the tabs together in a vice (with the lips of the tab in the vice), and pound it with the hammer over until they’re both 45 deg or more.
  • Slide one tab back into the clip.  Holding the clip with a needle-nose, work the other one in.  That’s it.

Next up, install on your removable bed.


Jump to C-Bot blog index to see all the posts.

Tuning jerk values in Repetier

(Note:  Based on continual feedback I’ve been rewording sections, to hopefully make it clearer)

Now that I’ve switched my C-Bot over to new electronics (RADDS) and firmware (Repetier), it’s time to start getting serious about tuning:  After running some initial test prints, I wasn’t satisfied with the ghosting/ringing that was occurring on the prints, so I decided to tweak the Repetier jerk settings, since I know they can have an impact.

The goal of this test:  Really, to compare how jerk impacts print quality, and print speed (the value you set in our slicer) vs print time (how long the print actually takes).  I’m not making any recommendations based on these results:  You can make your own decisions based on the data presented below, and how that may impact your printer based on it’s mechanics & firmware.


I adjusted the jerk on the fly from the LCD, storing them back to EEPROM before each print.  The default jerk values in Repetier are 20, and can also be set via the ‘Mechanics’ tab via the online configuration tool (requiring a re-flash of the firmware from the Arduino IDE).  There is also a nice description of Jerk via the Repetier Firmware Installation Page.  From that page though, the high-level important stuff:

You want high jerk values, because

  • Printing time is reduced.
  • Print shows less blobs.

You want low jerk values, because

  • It causes less mechanical stress to your printer.
  • Moves are smoother.
  • Filament has better adhesion at directional changes.
  • Reduces printer noise.
  • You loose steps with higher values.

Other Hardware\Slicer Stats:

  • Hardware is RADDS\Arduino Due (32-bit ARM).  Stepper drivers are SD6128’s, at 1/32 microstepping, turned to .55v
  • The C-Bot is core-xy kinematics.
  • I sliced these in Simplify3D:
    • 2 shells, 4 roof\floors, 10% ‘fast hexagonal’ infill.
    • Outline underspeed at 75%:  I didn’t realize this until after the test (since it’s sort of standard operating procedure for better quality), but in hindsight I wish I’d turned it off for this test.
    • 200 micron layer heights.
  • .4mm nozzle on an E3D-v6 Volcano.
  • Print speed adjustment for cooling is disabled (no slowing down for small layers):   I didn’t want the print times to be adjusted because of print cooling.  However, the filament cooling fan is enabled (since I’m printing in PLA).
  • Used MakerGeeks Gray’Matter Gray PLA, printed @ 210 deg (they recommended 230 on the spool, but it seemed unnecessary).
  • In Repetier, my xy acceleration values are 1000 (default).

I printed two sets of three #3DBenchy models:  I chose the benchy since it’s small, but complex.  The first set was with a jerk of 10, the second with a jerk of 40.  For each set of three, printed them with these speeds:  60/90/120 mm/sec.  Below are a list of the times it took to print each.

Stopwatch was started when extrusion began, after nozzle & bed warmup.  Stopwatch was stopped when print completed, and end gcode ran.

Print speed/time comparisons, sorted by jerk:

  • JERK 10 | 60mm/sec:50min | 90mm/sec:43min | 120mm/sec:40min
  • JERK 40 | 60mm/sec:50min | 90mm/sec:35min | 120mm/sec:30min

compare_all(click all images for bigger pics)

What does this tell us about speed/jerk tradeoffs?


Numeric comparison of print time:

Based on the above speeds (mm/sec) and print time (in min) from above.

Comparing JERK 10 to itself:

  • 90mm/sec had a print time 1.16x faster than 60mm/sec, even though the speed was set 1.5x faster.
  • 120mm/sec had a print time 1.075x faster than 90mm/sec, even though the speed was set 1.33x faster.
  • 120mm/sec had a print time 1.25x faster than 60mm/sec, even though the speed was set 2x  faster.

Comparing JERK 40 to itself

  • 90mm/sec had a print time 1.43x faster than 60mm/sec, even though the speed was set 1.5x faster.
  • 120mm/sec had a print time 1.17x faster than 90mm/sec, even though the speed was set 1.33x faster.
  • 120mm/sec had a print time 1.66x faster than 60mm/sec, even though the speed was set 2x faster.

Comparing JERK 10 to JERK 40:

  • 60mm/sec jerk 40 had the exact same print time as jerk 10.
  • 90mm/sec jerk 40 had a print time 1.23x faster than jerk 10.
  • 120mm/sec jerk 40 had a print time 1.33x faster than jerk 10.

Things observed from the numbers:

  • There is not a linear relation in increasing the ‘speed‘ in mm/sec and reduction in print times (which I knew, but it’s nice to see real data back this up).  Meaning, if 50mm/sec took 50 min to print, 100mm/sec won’t take 25min, it will be some value in-between (based on factors like jerk, acceleration).
  • Interesting that 60mm/sec speed had the exact same print times for jerk 10 & 40 :  Guess at that speed the jerk-clamping has a lower effect.
  • There is definitely a point of diminishing returns on high print speed and low jerk.  At a certain point the low jerk clamps the speed so much that it can never accelerate high enough to have an appreciable effect on print time (this is my theory at least).
  • The larger (40) jerk value had the widest range in print time variance (30 min -> 50 min) since (I presume) the jerk wasn’t clamping down the speed so much.

Visual comparison of quality:

Comparing Jerk 10 to itself:

compare_jerk10

Across the board all speeds of jerk 10 did well quality-wise.  Nearly no ringing at 60mm/sec, and minimal ringing on the 90 & 120mm/sec.   The only really visual differences is the discoloration of the PLA as it was printed faster.

Comparing Jerk 40 to itself:

compare_jerk40

Ringing across all speeds.  Passable at 60mm/sec, but I don’t like what I see at 90 & 120.

Compare 60mm/sec:

compare_60mmSec

While both had the exact same print time, there is virtually no ringing on the jerk 10, while ringing is visible on the jerk 40.  A strange random print artifact showed up on the smokestack of the jerk 10 that didn’t show up on any other prints.  Ghost in the machine.

Compare 90mm/sec:

compare_90mmSec

Very slight ringing on the jerk 10, ringing is quite apparent on the jerk 40.

Compare 120mm/sec:

compare_120mmSec

Ringing is just starting to show on the jerk 10, and jerk 40 looks like a train-wreck.  Or a ship-wreck.

Final Thoughts, Opinions:

  • The default jerk values in Repetier are 20, which is why I wanted to try two values on either side that would really show off the differences, since I was still getting rigging at 20 at 90mm/sec before this test.
  • I think that you need to make a decision when starting the print:  Quality vs speed?  All depends on what you’re printing.  If this is a structural part where the visual artifacts of ringing are tolerable, then crank up that jerk.  But if it’s a artistic piece, then lower it down.  What’s nice is that you can adjust this from the LCD in Repetier and set it in EEPROM per-print, not requiring any type of re-slicing.
  • Maybe I’ll just set it back to 20.  HA!

Building the C-Bot 3d Printer : Part 31 : Upgrade to RADDS, Repetier

Jump to C-Bot blog index to see all the posts.


This post could also be called:

How the C-Bot experienced catastrophic failure, and survived

The short version of what led up to this point is:

  • Decided to print a 3d quad-copter frame on the C-Bot, but needed to swap to my .6mm nozzle from the 1.2mm one that I had installed.
  • The last time I used the .6mm nozzle and removed it, I burned out the filament with my butane torch, so it’d be clean for next usage.  However, I was a dummy and gripped the threads with my pliers.  Even gripping lightly, it marred the threads, compounded by the extreme heat of the burnout.
  • When I threaded in the .6mm nozzle, I encountered resistance I didn’t expect.  So I just ‘twisted a little harder’, and popped the head off the nozzle.  It’s now stuck in my hotblock.
    • snapped_nozzle  Sad, so sad…
  • Ordered a new hotblock, and a .4mm nozzle at the same time:  Why not, I’d never tried a .4mm nozzle on the C-bot before.
  • Got the new hotblock and .4mm nozzle installed.  But when printing at 90mm\sec with Marlin, I got a lot of stuttering, even when printing directly over SD.
  • It was suggested I drop the microstepping of my DRV8825’s to 1/16 from 1/32 : This will halve the number of instructions the machine needs to process.
  • Pulled the drivers out of the Rumba, flipped the dip switches, plugged them back in, and turned on the machine:  Terrible squealing sound, bad smells, etc.  Turned it off immediately, but the damage was done:  Rumba dead.  Even though I double-checked, I had plugged one of the drivers in one-pin off.  Magic smoke = released.
  • Now I need an all new mainbord.  After much research, I decided on a Arduino Due/RADDS combo, running Repetier:  I liked the idea of the 32-bit system, and a new firmware that was wasn’t Marlin.  Plus if I didn’t like Repetier I can always swap to RepRap Firmware.

So that’s what this post is about:  Swapping out my old Rumba for a new Due/RADDS combo, and installing Repetier on it.  I’ve made it so verbose mainly for myself, as reference in the future.  It is definitely a living document that will be updated over time.

The final product looks pretty slick:

radds_repetier

(I do have a fully 3d-printed case for them both now, I just like that pic…)


Installation Notes

My notes below are in the order I performed them to do the swap from my existing hardware.  Prettymuch the same order you’d do it in if you were doing this new, from scratch.

After I did my upgrade, I also found this great setup guide: http://reprap.me/media/manuals/RADDS_UserGuide_V2_reprapme.pdf

My development environment:

  • OSX 10.10.5
  • Arduino IDE 1.6.4
  • Repetier 0.92.5
  • RADDS 1.5

Hardware Sources:

  • Arduino Due : I got mine via an Amazon Prime special for $15.
  • RADDS : $61, via MakerFarm.
  • LCD : $37, via MakerFarm.
  • SD6128 Drivers: 4x, $11.50, via Panucatt.
    • Note, there are other stepper driver options out there.  One of which is the RAPS128.  From the forums, it sounds like there are reason to not get this driver because of it’s ‘inverted’ state (compared to the SD6128).  Discussed below in the watchdog section below.

Configuring Arduino Due with the Arduino IDE:

  • The Due wasn’t recognized by Arduino software:
  • Arduino -> Tools -> Board -> Board Manager -> Search for SAM -> Choose the one that supports Arduino Due
    • https://www.arduino.cc/en/Guide/Cores
  • Got this error on simple “blink” sketch:
    • arm-none-eabi-gcc: error: core/syscalls_sam3.c.o: No such file or directory
  • Forums to the rescue > I downgraded the core to 1.6.4, and could then upload.
  • Be sure to use the ‘programming USB port’ (the closest one to the barrel jack) to upload sketches to it, I didn’t have success with the other one (‘native USB’).

Pre-Configuring the RADDS Board:

  • Set stepper driver microstepping first, on the back of the board.
  • I’m using SD6128 drivers, set to 1/32 microstepping, so it’s {on,off,on}.  By default they were {on,on,on} (1/128 microstepping), so I just flipped the middle switch.  Based my my query to the forums, the though was presented that humans can’t see much past 1/16, and the higher the microstepping the less holding torque the steppers had.  Since I’d previously had my DRV8825’s set to 1/32 on the Rumba, I kept this the same on the SD6128’s.  This had the benefit below of being able to use the exact same steps/mm for the steppers in Repetier as Marlin.
  • Insert stepper drivers, making sure DIR pin on driver lines up with DIR pin on board.
  • Squish the RADDS Shield into the Due.  Carefully.

LCD-Display:

  • Connect via the diagram in the link.
  • Can’t use a RepRapDiscount display I have on my Rumba board, gotta use the special RADDS display.

 Installing Firmware: Repetier

  • Instructions via the RADDS page I followed here.
  • For future note:  A list of all valid G & M codes for Repetier can be found on it’s GitHub page for Repetier.ino : I’ve found other spots on the web that list them (including the RepRapWiki and ironically the Repetier Firmware GitHub Wiki) which all seem out of date when it comes to Repetier’s codebase.
  • First step is to go to the Repetier firmware download page, which links to the web-based ‘Repetier Firmware Configuration Tool’ discussed below.  After you’re doing configuring, you download.
  • Note, Repetier makes it super easy to do a later update:  After the initial full download and install of Repetier via the Arduino IDE (info below), to do an update all you have to do is upload your existing configuration.h to the web-based ‘Configuration Tool’, update the settings, then re-download just the configuration.h, which you can re-update via the Arduino IDE.  Pretty slick.
  • Also note that after you do the first install, some values are only adjustable via the EEPROM (see notes below) unless you disable that feature (See ‘General Tab’ below).
  • Repetier Firmware Configuration Tool v092 initial settings:
    • General Tab:
      • Set correct Processor : Arduino Due based boards)
      • Set correct Motherboard : Arduino Due with RADDS
      • Set the printer type.  Mine is set to “z axis + H-gantry/core-XY (x_motor = x+y, y_motor = x-y)” : I have my “X-stepper” mounted to the top-left, and the “Y-stepper” mounted to the top-right.
      • Set the dimensions correctly.
      • Set the EEPROM usage.
        • By default it’s set to “Set 1”, which means after the initial install of Repetier, certain values are only editable via the EEPROM (via the RADDS LCD).  Took me a while to figure this out, couldn’t figure out why changing values (like steppers steps/mm) wouldn’t update when I’d re-upload the firmware:  This is the reason.
        • Note:  Every time you use the configuration tool, if you change this value (from 1 to 2, then back to 1, etc), it will refresh the EEPROM.   So if you want to blast your EEPROM values based on some future config, just tick this value from 1 to 2, or 2 to 1 depending on its current state.  Actually pretty slick way to do things once you figure it out…
    • Mechanics Tab:
      • If you’er using RAPS128 drivers (I am not, I’m using SD6128), be sure to check ‘Invert Enable Signal’.  See notes on the watchdog section below as to why this could be a bad thing.
      • Don’t forget to double your steps per mm (if you’re setting them here now) for the X & Y, since Repetier requires them to be doubled for core-xy machines for some reason (told they’re working on a future fix for that).  I plugged in the past ones from Marlin as a starting point, since I was using 1/32 microstepping on that as well (399.486, 401.083, 804.91) – those are the doubled x&y vals.
      • If you’re driving both Z-steppers from two different stepper drivers, you can enable that in the ‘z stepper motor’ section. To start, I’m going to try to drive both steppers off the same driver, since the RADDS board specifically has pinouts for that.
      • Set “Delay Stepper High Signal” to 1, since this is a Due board.  Also read this is needed for core-xy machines.  Note I’ve used both 0 & 1 values, and have noticed no difference in print quality.
      • Set ‘Move Cache Size’ from 16 (default) to 32 (since we have a lot more memory on the Due than a normal Arduino).
      • Set your endstop homing order.  Mine is X,Y,Z:  I want to get the gantry out of the way of the build platform just in case…
      • Set your endstop switch type:  Since I’m re-using the “makerbot style” (or RAMPS 1.4 style) mechanical endstops, I set mine to “normally-open”.  See ‘Endstops’ below.
    • Tools Tab:
      • Set the Temperature Sensor for your extruder.
        • My E3D-v6 Volcano stated it came with a “100K Semitec 104GT2 NTC thermistor” : This wasn’t listed in Repetier.
        • The E3D Troubleshooting docs said: “Repetier Firmware use thermistor definition number 8”:
          • #define EXT0_TEMPSENSOR_TYPE 8
        • There is no option for that number in the firwmare setup wizard (it’s all by name), but I later set it to that value in the configuration.h file directly via the Arduino IDE.
        • Note, getting this right is super important!  I was having all sorts of print problems (since I’d just chosen a thermistor by name that ‘sort of matched’) until I set it to ‘EXT0_TEMPSENSOR_TYPE 8’ in the firmware, and it’s amazing how much better the print quality got.  Of course you may be using a different type of thermistor, but the important thing is get the right value plugged in here.
        • ALSO NOTE, ALSO SUPER IMPORTANT: If you later go back to use the online ‘Repetier-Firmware Configuration Tool’ to adjust other settings & re-download, this temp sensor setting will get reset (mine gets reset to 14 every time) : You must manually go back into the configuration.h and set it back to 8 (or whatever value is appropriate for you).  I’ve posted this bug to their forum, so we’ll see what the community has to say about it…
      • Be sure to set the “Extruder Cooler Pin”, or the fan won’t kick on as the hotend heats up.  I set mine to “Fan pin”.
      • Be sure to set “Enabled Heated Bed Support” if you have one, and the type of thermistor used.
      • Set your extruder’s “Resolution”, or “steps per mm” : Mine is 300 from Marlin (Repetier was 370 by default).  I ended up having to set it to 325 based on testing (but via the LCD Configuration menu, and store in the EEPROM, not via the Arduino sketch.)
    • Features Tab:
      • Be sure to set your “Print cooling fan pin” if you’re using one (to cool the filament as it is deposited).  I set mine to “Fan 2 pin”.
      • Set “Fan pin for board cooling” if you’er using fans to cool your mainboard.  I set mine to “Heater 3 normally used for extruder 2”.
      • Set ‘Enable Watchdog’ if you’re doing that (see the next section below).
      • At the bottom, set “Homing after Filament Change” to “No Homing”.
        • Or in Configuration.h set:
        • #define FILAMENTCHANGE_REHOME 0
        • If you don’t do this, you may get a bug that happened to me:  If you pause the print to reload the filament via the LCD, when the print restarts it’ll go to the wrong location :(  This took me a lot of troubleshooting to figure out.
    • User Interface Tab:
      • Change “Display Controller” to “RADDS LCD Display 4×20”
      • I unchecked all the languages other than English
      • I set my Machine Name
      • Setup ABS & PLA preheat presets.
    • Manual Additions:
      • None
    • Download:
      • Note any errors or warnings that appear at the top of that page (in the different-colored callout box.  There may be none):  I didn’t realize these are actually calculated based on the latest settings, and will change\update every time you go back to the ‘Downloads’ section.
      • “Download complete Firmware incl. these settings” the first time.
      • Every time after the first, you only need to “Download configuration.h” to update the firmware.

Firmware installation on HD, integrating with Arduino, upload to Due:

  • I unzipped the download to my (mac) ~/Documents/Arduino folder, which is the home for all my sketches.
  • When I opened Arduino, a “Repetier-Firmware” section appeared in my sketches.
  • A txt file is provided at the root of the zip with more specific info to do.  One of those things is getting the ‘Hardware Watchdog‘ setup for Due (which is off by default).
    • The instructions are all for windows though:  I’m on Mac, so none of the copy paths matched up.  Finally, I found the directory where I needed to copy everything:
    • /Users/<USERNAME>/Library/Arduino15/packages/arduino/hardware/sam/1.6.4/variants   -> Copy the /arduino_due_repetier folder from the zip here
    • /Users/<USERNAME>/Library/Arduino15/packages/arduino/hardware/sam/1.6.4  -> Copy the boards.txt here.  I first renamed the old one to _boards.txt just to not loose anything.
  • Upon restarting Arduino, under ‘Tools -> Board’, there is now a ‘Arduino Due for Repetier’ option.  Which is what you want to select to enable the watchdog.
  • Time to upload to the Arduino.  Simple Repetier guide here.
    • Don’t forget to fix your ‘EXT0_TEMPSENSOR_TYPE’ to the correct value before upload, if it was changed by the web ui!
  • The compile and upload went off without a hitch!  LCD came to life immediately after the reboot.

Testing the Watchdog:

To make sure you have the watchdog working, issue a M281 to Repetier Firmware via your host software (I use Simplify3D).  If its working, you should see something like this:

SENT: M281
RECEIVED: ok 0
RECEIVED: Info:Triggering watchdog. If activated, the printer will reset.
RECEIVED: TargetExtr0:0
RECEIVED: T:21.34 /0 B:21.25 /0 B@:0 @:0
SENT: M105
SENT: M105
RECEIVED: start
RECEIVED: Info:Watchdog Reset

And the printer should reset in the process.  Thanks to Ryan Carlyle for the above tip.

What is the ‘Hardware Watchdog’ doing?

Fine question which I didn’t know the answer to.  Gotta love the internet:

Here’s a quote from Dan Newman:

“If the processor is wedged up, then for many/most definitions of wedged up, it won’t be responding to any commands as the software is, well, wedged up.  That’s the point behind the hardware watchdog: you enable it with a timeout (e.g., 4 or 8 seconds is common on an AVR).  Then your software MUST reset it every N seconds before the timeout expires.  If your software doesn’t reset it in time, then the watch dog fires and forces a reset of the processor. Wedged software won’t reset it and so it fires resetting the processor.”

“Watch dog is just a hardware timer.  It starts, for example, a 4 second countdown.  If you don’t reset the timer before the 4 seconds elapse, then the hardware in the processor causes it to reset (i.e., reboot).   So, healthy firmware makes damn sure to reset it more frequently than every 4 seconds.  If the firmware locks up or is otherwise having unexpected problems, it cannot reset it and so the countdown completes and the processor is rebooted.   To be useful, the electronics and firmware should be well designed: the electronics should be default assert a powered off state for heaters.  And the firmware on booting should also turn all heaters off.   Likewise for motors.”

And Ryan Carlyle:

“It’s a hardware deadman switch built into the processor. The watchdog has a countdown timer (adjustable but usually a few seconds long) that must be reset by the firmware over and over forever. If the timer ever reaches zero, the watchdog will hard-reset the processor. Specifically for 3d printers, we want to ONLY reset the watchdog timer when the heater powers are managed. That way, if the firmware falls into an infinite loop during a bad SD read or whatever and stops paying attention to the heaters, the watchdog will reset everything. That will then turn the heaters off, unless something else is wrong too.”

Comments on using RAPS128 stepper drivers, and the watchdog, in regards to the “…And the firmware on booting should also turn all heaters off…” comment above:

Ryan Carlyle: “This is something that bugs me about RAPS128 drivers (enable is inverted) and FD-RAMPSv1 (FET is inverted) — the standard reset sequence actually turns stuff on while the firmware loads. Not good behavior. “

Dan Newman: “And when installing/updating firmware they typically enable as well.  Yes,
it is annoying. “

People, just use SD6128 drivers…


Connecting the Hardware:

Descriptions below based on this image of the RADDS board.

RADDS_Wiring

Connecting Steppers:
  • I hooked both Z-steppers to the same driver on the board:  They conveniently provide two headers there specifically for that.  So far, I’ve had no issue raising \ lowering the bed.
  • I hooked my “left” stepper to the “X” driver, and the “right” stepper to the “Y” driver.  And.. the extruder stepper to the corresponding driver.
Tuning Stepper Drivers
  • I’m using 4 SD6128 drivers:  One driver for the dual-z steppers, plus one each for X, Y, & Extruder steppers.
  • Setting the reference voltage:
    • They have a max peak output of 2.2A.
    • Based on this doc: http://reprap.org/wiki/RAPS128, it recommends a voltage range between .8-1.6v
    • Based on the user guide, the: Current Limit = VREF*2
    • To set this, touch one probe from your voltmeter on the pot on the driver, an the other on the RADDS ground.  See the picture in section 3.4 of this pdf guide.
    • By default they all appeared to be set to around .55v : I dialed them up (clockwise) to just under 1v : Anything higher than that and the steppers would make a terrible sound and I had to reboot the machine to get them to move again.
    • Fast-forward:  .9->1v is way too much for the steppers:  After only 4 minutes of printing they were burning hot to the touch, and were starting to melt their brackets.  I dialed their voltage back to .55, and got much cooler-to-the-touch results.  As an aside, I’d set my DRV8825’s to .58 volts.  After a bit more printing my extruder stepper was doing some skipping, so I pushed it up to .75v, and it’s been doing fine since.
    • Lesson learned:  Set SD6128’s ref voltage to .75v, this sets the current (from the current limit equation, above) to 1.5A (1.5 = .75*2). Anything higher than that and things start getting pretty hot.
  • Update:  I swapped out to some RAPS128 much later (as a test only):  You should set their ref voltage to 1.1v.  Their ‘Current Limit = VREF*0.9125
Endstops:
  • I’m still using the “Makerbot style” (or RAMPS style) endstops that I had hooked up to my Rumba.
    • endstop diagram
  • Their pin order (starting with the side of the switch) is (sig, -, -, +)
  • To hook this up to the RADDS board it’s important to not hook up the +v, just the sig and -:  RADDS is a 3.3v system and the LED works off 5v logic.
  • My wire colors were Green (sig) Black (-) Red (+).  So I just cut the Red (+) line and plugged it in to the MIN XYZ headers on the board (since my machine homes negative X, negative Y, negative Z).
  • These switches are NO (Normally-Open) by default:  Tripping the switch creates (closes) the connection.

Other Components:

  • I plugged my main power, and hotbed input voltage just like the image shows.
  • Since I use a relay to actually control the bed power, I wired it into the voltage output for the bed (blue/yellow lines in the image), just like before on the Rumba.  In Repetier : ‘Heater 1 normally used for heated bed’.
  • Hotend heater cartridge connected to “Heater Hotend 1”.  In Repeter : ‘Heater 0 normally used for extruder 0’.
  • Hotend cooler fan connected to “Fan 1”.  In Repeter: ‘Fan pin’.
  • Filament cooler fan connected to “Fan 2”.  In Repetier: ‘Fan 2 pin’.
  • Mainboard cooler fan(s) connected to “Heater Hotend 3”.  In Repetier : ‘Heater 3 normally used for extruder 2’.
  • Hotend thermistor connected to “Thermistor Hotend 1”.  In Repetier : ‘Temp 0 normally used for extruder 0’.
  • Heated bed thermistor connected to… the top plugs (per the diagram), which I’m guessing is actually “Thermistor Hotend 5”?  In Repetier: ‘Temp 1 normally used for heated bed.’

3d Printed Cases

I’m sure your Googling is just as good as mine, but I found this nice RADDS & LCD case on Thingiverse:

  • RADDS Case
    • Note, after print I had to cut a long slot (with my Dremel) through the side that said “Arduino Due” to provide wire access to all the screw-terminals on that side.
  • LCD Case

Setting up with Octoprint

try to use Octoprint most of the time (back using the Rumba/Marlin) for remote print monitoring.  I couldn’t get it to recognize the SD card however on the new hardware.  Under Octoprint’s Settings -> Feature menu, there’s a bunch of “Repetier specific” options :  I checked those all on, and the SD card was immediately recognized.

Also found a slick plugin called the “EEPROM Repetier Editor” that, quote “Makes it possible to change EEprom Values of Repetier Firmware through OctoPrint”.  Nice!


In Conclusion

I’ve had it running for a few weeks, now, and have been tuning my print profiles in Simply 3D:  All my tests have been running at 90m/sec with no issues, so high hopes for much higher values in the future.


Jump to C-Bot blog index to see all the posts.

C-Bot 3D Printer: Supercharging the Volcano

Jump to C-Bot blog index to see all the posts.


When I installed the 1.2mm E3D-v6 Volcano nozzle, I noticed that when my PLA cooling fan kicked on, the hotend would have a really hard time maintaining temp running at a ‘high’ (45mm/sec) extrusion speed (for the Volcano):  If starting at 220 deg, when the fan would kick on it would just drop and drop, and I’d stop the print or kill the fan when it hit 200 deg.  If I dropped the speed down to say, 10mm/sec, it could keep up.  This made me think fan+cold filament was too much for the hotend.

After much discussion on Google+ (here, and here), I tried a variety of things, none that got it working 100%.  I re did the Marlin auto-PID with the fan on full blast:  This got it to the point the temp would drop some 10-15 deg, then slowly creep back up.  But this is far from optimal.

The thing that tipped me off was the suggestion to figure out what the power is of the heater-cartridge in my Volcano hot-end:  Measuring the resistance gave me 7.1 ohm, which equal to 20.3w (voltage^2 / resistance = 12v*12v/7.1 = 20.3w).  Checking online, I noticed that there are 40w heater cartridges as well, so I picked one up (I got that one simply because it could be shipped via Amazon Prime…).  Installation ensued:

volcanoUpgrade

And that my friends, is the secret sauce:  After I got the new heater cartridge installed, I re-ran the PID-Autotune in Marlin (via Simplify3D)…

M303 E0 S200 C8

…waited a number of minutes for it to finish, then crammed the three values back into my Configuration.h, uploaded that via the Arduino IDE to the Rumba, and I was in business:  Not only does the hotend heat up faster now (220 deg in 1min 50 sec with full fan compared to 2 min 30 sec with no fan), but I can maintain hotend temp with 100% 24cfm fan kicked on.  It’ll drop maybe 3 deg when the fan blasts on, then pull right back up to temp.

So a note to any of you Volcano users:  Make sure you have the 40w heater cartridge (the one with the red leads) not the 25w one (blue leads).

I measured the new heater before I put it in:  4.1 ohm resistance, which equals 35w, not 40w.  But it works, so I’m happy :)

Another thing learned:  When you issue a M105, and get something like this back:

RECEIVED: ok T:206.1 /220.0 B:26.0 /0.0 T0:206.1 /220.0 @:127 B@:0

The @:127 is the ‘power’ going to the hotend.  Note that 100% = 127, not 255, in this instance.


Jump to C-Bot blog index to see all the posts.