ddPrint - Adding Process control to FDM printers

ddprint: a fdm 3d printer firmware and printing system

Similar projects worth following
ddprint: a fdm 3d printer firmware and printing system

Key features:

* Uses a incremental sensor to measure extruder flowrate at realtime
to "close the loop for E". This limits the speed of the printer
if feeder tends to slip.
* Automatic measurement of feeder system caracteristics for calibration.
* Automatic measurement of filament caracteristics to create filament
profiles .
* "Auto temperature algorithm": hotend temperature depends on the
gcode-requested flowrate.
* "Temperature-flowrate limiter": speed of printer is limited if hotend
has not (yet) the right temperature for the requested flowrate.

ddprint: a fdm 3d printer firmware and printing system

The aim is to print functional and strong parts with high flowrate and with reasonable quality at the same time.

Key features:

  • Uses a incremental sensor to measure extruder flowrate at realtime to "close the loop for E". This limits the speed of the printer if feeder tends to slip.
  • Automatic measurement of feeder system caracteristics for calibration.
  • Automatic measurement of filament caracteristics to create filament profiles .
  • "Auto temperature algorithm": hotend temperature depends on the gcode-requested flowrate.
  • "Temperature-flowrate limiter": speed of printer is limited if hotend has not (yet) the right temperature for the requested flowrate.

ddprint converted Ultimaker UM2:

With ddprint, many of the *advanced features* of the slicers (i call it *slicer hacks*) are not needed. This makes it easier to choose the right slicer settings, see

Some videos (more ddprint related videos in this playlist:

Video of the flowrate sensor while printing. You can see the rotationg axis shaft of the bourns incremental sensor. The shaft touches the moving filament directly. It is pressed slightly against the filament through the force of a spring built into the flowrate sensor case.

More information and pictures about the FRS are available here:

Video showing the result of the ddprint intro video shown above, a benchy printed with *real* 15mm³/s flowrate (sliced with s3d, 0.25mm layer, 0.8mm nozzle and 75mm/s). NO postprocessing was done, this is how it comes from the buildplate.

The next video is showing an example of the *automatic filament property measurement*. The result is a material profile that is used by ddprint when printing with this filament. Material this time is a cheap 'kaisertech pla white'. 


Material profile example plot, PLA.

Portable Network Graphics (PNG) - 75.83 kB - 12/07/2021 at 10:17



Material profile example plot, PETg.

Portable Network Graphics (PNG) - 80.42 kB - 12/07/2021 at 10:17



Printed on a Ender5 ddPrinter, Herz Petg, 0.8mm nozzle, 0.25mm layerheight, 65mm/s print speed.

JPEG Image - 171.05 kB - 10/19/2021 at 21:48



Printed on a Ender5 ddPrinter, Herz Petg

JPEG Image - 52.30 kB - 10/19/2021 at 21:48



ddprint converted UM2

JPEG Image - 37.54 kB - 04/24/2020 at 22:54


View all 14 files

  • Github update, ddPrint on Anycubic I3

    Erwin Rieger01/27/2022 at 09:12 0 comments

    Wed Jan 26 18:38:29 CET 2022

    • Github: merged next branch into master.
    • Setup page with some notes about ddPrint on a Anycubic I3 Mega (S):
    • Uploaded new sensor housing stl's, reworked stl naming scheme (
    • Added simple install script ( and a script for firmware flashing (
    • Added firmware blobs (firmware/build*/*.hex)
    • Include ProtoThreads library ( into ddPrint repository for easier firmware build.

  • Github update: Python3 port and ddPrint on Anycubic I3M

    Erwin Rieger01/18/2022 at 09:45 0 comments

    Mon Jan 17 17:45:47 CET 2022

    Committed the following changes into the next branch on github:

    • Python3 port of ddPrint:
      • Converting python files with 2to3 script.
      • Fix integer divisions.
      • Use bytes() and bytearray() instead of strings for binary data.
      • Converted scripts and 'ddtool' utility to use python3.
    • Ported ddPrint to Anycubic I3M printer:
      • Pin changes for anycubic i3m.
      • Add support for ATC Semitec 104GT thermocouple.
      • Rework temperature measurement: allow different thermocouple types for heated bed and hotend.
      • Homing: add support for additional Z1 stepper motor and endstop.
      • Homing: implement dual-z homing.
      • Adjust getendstops command for the additional Z-endstop.
      • Control mainboard cooling fan (anycubic i3m).
      • Changed initial baudrate to 500 kbaud, 1 Mbaud is to fast for Anycubic i3m.
      • Auto-baudrate: added new printer profile setting 'baudRateLimit' for the Anycubic i3m (it does not work with 1 Mbaud baudrate).
      • Rework and cleanup ddPrint scripts: Added workaround for a problem with the linux cp210x driver used for the Anycubic i3m (CP2102 usb-serial chip): avoid reset of printer on device-open (cp210x seems to toggle DTR line even if '-hupcl' is used).
    • Other changes:
      • Environment: renamed env. var $DDDEVICE to $DDPRINTDEV.
      • Firmware build: Set ARDUINO_PORT from DDPRINTDEV environment var.
      • Added new command "continuosmove" for testing, allow simple movements of the printer (without homing) for debugging/initial setup. Note: no acceleration and no endstop-check - dangerous.
      • Removed unused baudrate commandline switch.
      • Cleanup handling of printer-device ($DDPRINTENV).
      • Firmware: moved pins include files into its own folder.
      • Improved scipt: use python-argparse, display more information.

  • Github: Merged next into master

    Erwin Rieger01/17/2022 at 17:59 0 comments

    Sat Jan  1 10:45:26 CET 2022
    Merged next into master, biggest change: ported ddPrint to use python3.

  • Changes on ddPrint *next* branch on github:

    Erwin Rieger01/17/2022 at 17:26 0 comments

    Thu Dec 30 14:53:31 CET 2021

    • Merged python3 port into next branch.
    • Restructured project, moved test gcode files into it's own repository:
    • Build: cleanup Makefiles, added license and moved firmware Makefiles into its own folder. Moved common makefile stuff into makefile-include files.

  • Project updates on

    Erwin Rieger12/21/2021 at 13:50 0 comments


    • Describe material profiles in more detail.
    • Describe automatic material profile measurement, determine *into-air* and *printing* volumetric flowrate data.
    • Update section about temperature-limiter.
    • Update section about flowrate-limiter.
    • Added more pictures and data plots.

    Code fixes:

    • Auto-temp: fix "workingpoint" commandline parameter, it worked the wrong way.
    • Preload: test another way to compute amout of data to pre-download to the printer, simply count small moves.
    • Some cleanup.

  • Some project updates on

    Erwin Rieger12/07/2021 at 09:59 0 comments

    Did some project updates on

    * Some smaller code fixes and code cleanup.
    * plot_mat_profile script: cleanup and improved display
        of material profiles.
    * Documentation update (README):
        + Update section about auto-temp feature.
        + Added information in flowratesensor section.
        + Added flowratesensor details section.
        + Added information in material profile section, added some example plots.
        + Added example plots of material profiles.
        + Added more images.

  • Documentation update

    Erwin Rieger11/16/2021 at 00:28 0 comments

    Added explanatory asciinema screencasts for the following ddPrint commands:

    * ddprint getstatus (shortform: ddprint stat),
    * ddprint top,
    * ddprint mon,

  • Page about ddPrint setup on Ender5 (pro)

    Erwin Rieger10/19/2021 at 20:35 0 comments

    Drafted a page with some notes about installing ddPrint on an

    Ender5 (pro):

  • Merged next branch into master

    Erwin Rieger10/15/2021 at 16:48 0 comments

    Merged *next branch* into master with the following changes:

    Porting ddprint to Ender5 (pro):

      * Changes for the Creality melzi board (atmega1284p based).
      * Added thermistor table for epcos 100k ntc.
      * Declared IO-pins in firmware/pins_ender3.h
      * Rework homing:
        + use feedrate and direction for homing from printerprofile.
        + Move away from nozzle after z is homed (for printers that
          home at z=0. This is to avoid scratching over the bed when
          homing X and Y.
        + Homing: added "4 point mode" for ender.
      * Added new script ** to generate thermistor
        tables (c-code).

    Other changes:

      * Host: rework *getstatus* and *mon* commands.
      * Host: filament profile measurement:
        + measure2: increase printing speed with fixed
          temperature while monitoring feeder grip.
        + measure2: changes to reduce heating effect of
          heated bed, start measurement on fifth layer.
        + specify minimum grip value on commandline (instead of
          hardcoded value).
        + write measured material profile to ./mat-profile2.add.
      * Host, *removefilament* command: changed feeding
        sequence to avoid filament plug.
      * Host, Experimental: added *reconnect* command.
        To reconnect to a running printer, works after
        download is complete, but not if disconnected
        while downloading stepper data.
      * Host: Added *ddprint version* command.

      * Firmware: cleanup flowrate measurement,
        measure short moves, too.
      * Firmware: added CmdGetVersion command.
      * Firmware, Makefile: new target *make gitversion.cpp*
      * Firmware: set printer state to idle if steppers are
        disabled (cmd *disablesteppers*).
      * Firmware: Update to SdFat-1.1.4 library (USE_SD_CRC enabled).
      * Firmware: Rework mass storage erase: new commands CmdGetCardSize
        and CmdErase. Call erase before printing.
      * Firmware: Sd card init: retry up to 5 times.

      * Many smaller fixes/improvements

  • Reworked flowrate sensor housing

    Erwin Rieger10/15/2021 at 13:02 0 comments

    * Rotated design to shorten filament path between
      feeder gear wheel and rotary encoder for better response.
    * Made it i bit more compact.

    STL files are here:

View all 13 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates