Welcome! Log In Create A New Profile

Advanced

Filament Movement Sensor for Marlin firmware.

Posted by RepRot 
Filament Movement Sensor for Marlin firmware.
December 22, 2015 03:56AM
One of the issues with 3D printing is when there is a filament jam or a filament run out condition.
Usually the 3d printer just keeps trying to print until the printer thinks it has finished.
This leaves a wasted partly printed item.

Note: I have this running on a home designed and built - Openbeam Core XY Printer.
Features: Smart Discount LCD panel, Ramps controller, 7 operational end stops Min X/Y/Z/Z2, Max X/Y/Z, dual Z steppers drivers and motors with auto home syncing for both z axis’s, I/O controlled extruder cooling fan, an additional end of job I/O controlled cooling fan (uses a separate driver PCcool smiley, heated bed, one Bowden extruder. (The other ramps extruder(1) stepper driver is used as my second Z2 stepper driver).
I use Ponterface when printing from a PC which is most of the time unless I take my printer to show people and then I use a SD card to print.


The current version of the Marlin software has an option to enable filament run out when printing from SD card. This feature requires that you have an LCD display and a filament detection switch which only detects if there is filament present. It detects that you have run out of filament, or that there is a break in your filament supply.

The main issue with this it doesn’t detect a filament jam.

Filament jams can be caused by a number of things –
• Jam in the extruder hot end
• Extruder feed assembly
• Jam on the supply spool

Pausing the printer when some of these jam conditions occur, may allow the user to fix the fault and resume printing.

Operation of the Marlin firmware filament run out feature.
When printing from an SD card the Marlin firmware monitors a filament present switch on an I/O input pin and when it goes Low (0 volts) it activates the Marlin filament run out procedure. This basically causes the printer to stop printing, moves the XYZ axis to a preset location. Temperatures for the extruder and heated bed remain at there printing temperatures. The LCD panel will output a beeping sound and the XYZE stepper motor currents are disabled.

De-activating the filament present switch run out switch (I/O input pin back to high e.g. 0 volts to +5 volts) will stop the beeping sound. A repair/ reload can take place. At this time filament feeding can only be done manually. After the repair or reload, the LCD panel control knob can be pressed and the printer resumes printing (Provided that the filament run out I/O input pin is back to a high state).

Note: There is an issue with Marlin firmware that I found, when pressing the control knob (using smart discount LCD) it just kept beeping and failed to resume…see below firmware my change to correct this issue.

The Marlin firmware only allows this filament run out detection when printing from SD card…see below firmware my change to allow option to function from SD card and PC .
Note: When printing from a PC and using filament monitoring, you must have communication handshaking between the PC and printer, thus you can’t use TCP mode. TCP mode is where data is streamed with no flow control.

With using Ponterface you can check what the TCP is set at; Goto- Settings > Options > Printer Settings Tab – Check that TCP streaming is not ticked. Should be below Baud rate (third option from top). Note: I have found some old PC operating systems don’t show you this option to use TCP.

Filament Movement Sensor Monitoring Operation.
When feeding filament forward, the extruder stepper motor driver receives stepper pulses (STEP) and a direction signal (DIR) from the printer processor.
If we compare these forward extruder pulses to pulses that we can generate from the movement of the filament by a separate micro processor, we should be able tell whether filament is being fed when it should. If not feeding filament, then we should be able to activate the printer filament run out I/O signal to cause the printer to pause and alert the user.
The next issue is that we need to de-activate the filament run out I/O signal (stop beeping), then fix the fault and resume printing.
When the filament run out signal is activated (Low) we get an alert beeping sound, at this stage we shouldn’t be getting any filament movement happening. If at this time we monitor for any filament movement (user moves the filament movement sensor, either manually or moving the filament though the sensor) we can de-activate the run out signal. This can stop the beeping and the user can take there time to fix the issue.
Pressing the LCD panel knob will then allow printing to resume.

To be able to monitor filament movement I designed an assembly which uses a rubber roll that makes contact with the filament. As the filament moves the rubber roll turns. The rubber roll is supported by 2 small bearings and this is connected to a code disc which creates pulses via an LED sensor module. ( 4 pin infrared speed sensor module for Arduino – sourced via Ebay).
I found that rubber seemed to be the best material for not slipping with both ABS and PLA.
I had issues with finding suitable soft rubber that I could use that would rest against the filament. I didn’t want to have to two rollers to squeeze the filament as it means more parts – bearing, rollers, springs, etc.
I ended up using a rubber grommet that you use for passing of electrical wires / cables though holes in steel chassis. With using the grommet, the filament passes in between the area that would be the steel chassis, some grommets aren’t cut out well and you can run a saw blade to improve the cut. This arrangement seems to work well with no slipping.
I did have an issue when 3D printing the code disc, it failed to detect all the positions on the code disc, I ended up painting it to correct the issue.
I later used a PC printer to print a code disk by printing on overhead projector film and then laminating it and cutting it out and gluing it to a 3D printed roll which fits onto a shaft. With the good print quality it allowed me to have more pulses per revolution. (30 printed lines per revolution. As I have the micro processor set to monitor changes for filament movement it will give 60 pulses per revolution.)

Micro processor Used:
As I had a spare Leonardo Micro Mini processor and being small I found this good for this task. However be aware that you can have issues with uploading firmware with them being dual virtual port devices, Often they upload with no issues and then for no apparent reason they don't for a while, usually you don't see both ports (Tools > Ports), if this occurs it is best to short the reset and GND pins prior to uploading firmware and make sure ports are correctly selected. Often it takes a couple of goes to get them to load, you should see that both red LEDs flashing when loading.

Ramps Issues:
One issue I had was with the Ramps board I am using that it doesn’t give you spare output pins for duplicating the extruder step and direction signals as does the Megatronics Board. I was able to duplicate the signals by making modifications to the Marlin firmware.
I used Extruder 1 (Marlin firmware function) to duplicate the step and direction I/O signals and then defined which I/O pins to output this to.
With my CoreXY setup I use extruder 1 stepper driver as my second Z stepper driver.

Only forward extruder steps pulses are counted and any filament movement in either direction is counted, this means when retraction occurs, the filament count will often be higher than what filament has really been feed forward. However this should not causes issues as a jam would be picked up soon anyway.
Not monitoring extruder direction can cause issues when retraction occurs, this causes a high extruder step count compared to what the filament count is. If we just counted extruder step pulses and compared them with filament movement pulses, we would get false errors when small retractions occurred. This will happen when the code disc is rocked back and forth without a pulse being detected due to the high ratio of extruder pulses compared to filament movement pulses.
While it is possible to have a filament movement sensor that is able to count up and down it just adds extra cost for little gain..
I also added a switch (normally closed to enable monitoring) on the I/O line run out signal between the micro processor so I can disable filament movement monitoring if I choose to.
---------------------------------------------------------------------------------------------------------------------
Marlin Modifications:
Below are the firmware changes made.

Filament run out to allow LCD knob to function.
Description: Edit to allow LCD knob and beeper to function.
Marlin Sketch: Marlin_main.cpp
Line 4883
Default if (++cnt == 0) lcd_quick_feedback(); // every 256th frame till the lcd is clicked
Change comment out // if (++cnt == 0) lcd_quick_feedback(); // every 256th frame till the lcd is clicked
Line 4884
Change added if (!(READ(FILRUNOUT_PIN)^FIL_RUNOUT_INVERTING)) lcd_buzz(110,1000);
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Filament run out to allow running from PC as well as SD Card.
Description: Add pin definition for I/O output for E1 STEP pulse:
Marlin Sketch: Marlin_main.cpp
Line 6243
Default if (IS_SD_PRINTING && !(READ(FILRUNOUT_PIN) ^ FIL_RUNOUT_INVERTING))
Change if (!(READ(FILRUNOUT_PIN) ^ FIL_RUNOUT_INVERTING))
----------------------------------------------------------------------------------------------------------------------------------------------
Obtain another extruder 0 step pulse I/O signal from Ramps Board
Description: Add pin definition for I/O output for E0 STEP pulse: (Can be set to another I/O pin if required)
Marlin Sketch: Pins_RAMPS_13.h
Line 56
Default #define E1_STEP_PIN 33
Change #define E1_STEP_PIN 59
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Description: Add E1 STEP pulse
Marlin Sketch: Stepper.h
Line 48
Default #define E_STEP_WRITE(v) E0_STEP_WRITE(v)
Change #define E_STEP_WRITE(v) { { E1_STEP_WRITE(v); } { E0_STEP_WRITE(v); }}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Obtain another extruder 0 Direction I/O signal from Ramps Board
Description: Add pin definition for I/O output for E0 STEP pulse: (Can be set to another I/O pin if required)
Marlin Sketch: Pins_RAMPS_13.h
Line 57
Default #define E1_STEP_PIN 33
Change #define E1_DIR_PIN 63
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Description: Add E1 Direction signal
Marlin Sketch: Stepper.h
Line 50
Default #define NORM_E_DIR() E0_DIR_WRITE(!INVERT_E0_DIR)
Change #define NORM_E_DIR() { { E1_DIR_WRITE(!INVERT_E1_DIR);} { E0_DIR_WRITE(!INVERT_E0_DIR);}}

Line 51
Default #define REV_E_DIR() E0_DIR_WRITE(INVERT_E0_DIR)
Change #define REV_E_DIR() {E0_DIR_WRITE(INVERT_E0_DIR); E1_DIR_WRITE(INVERT_E1_DIR);}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Setting where extruder is positioned when a filament run out condition occurs.
Description: Sets axis positions when a Filament run out occurs. (Up to the user to what you may wish)
Marlin Sketch: Configuration_adv.h
Line 448 – 450
#define FILAMENTCHANGE_XPOS 0 // Tries to move to this position - Sometimes it will be at a different position to clear print position.
#define FILAMENTCHANGE_YPOS 0 // Tries to move to this position - Sometimes it will be at a different position to clear print position.
#define FILAMENTCHANGE_ZADD 10 // Increases distance between print head and Z print platform by this amount
#define FILAMENTCHANGE_FIRSTRETRACT -10 // found you need to retract some filament
//#define FILAMENTCHANGE_FINALRETRACT -100

----------------------------------------------------------------------------------------------------------------------------------------------
Setting for temporary testing of filament movement sensor
Description: Allows the testing of filament movement sensor without heating extruder – Great for Bowden extruders with tube disconnected
from hot end. Filament can be moved forwards and backwards and jam states tested before going operational.
Marlin Sketch: Configuration.h
Line 271
Default #define EXTRUDE_MINTEMP 170
Change #define EXTRUDE_MINTEMP 0

Make sure to reset back to the default setting when finished testing.


----------------------------------------------------------------------------------------------------------------------------------------------
Firmware used for Arduino Leonardo Micro Mini processor.
/*
- Use: 3D printers with LCD display panel and using Marlin Firmware and a Ramps v1.3 controller (other controllers could possibly be use).
- Function: Monitor filament movement to ensure that there is no filament jam or runout condition.
- Processor type: Arduino Leonardo Micro Pro..
- Program description:

The program monitors 2 pulse signals, one from a extruder stepper STEP pulse (signal going high) and the other pulse from a filament movement code disc sensor (signal changing). The filament movement sensor is located just before the extruder feed assembly. Also monitored is a signal of the direction of the extruder.

After a set number of forward direction extruder step pulses, the processor checks to see if a miniumum number of filament movement pulses have occured.
If there isn't enough filament movement pulses the processor sets the filament runout signal from high to low. This causes the REPRAP 3D printer to stop
printing, move the ZXY axis's to a location that is set in the Marlin firmware and disables the extruder stepper motor hold current.
With the filament run out signal going low (0 volts), the REPRAP 3D printer having an LCD panel will start beeping,
At this stage the user should have been alerted. The user can then move the filament coded disc/roller, this will stop the LCD panel beeping and de-activate
the filament runout signal (currently low to a high state) This needs to be reset otherwise printer will still think it has a filament run out.

The filament issue can then be attended to, e.g. clean jam/install new filament.
The LCD panel menu's can't be used for controlling the extruder motor, manual feeding or PC control only.
After clearing fault, the 3d printer LCD panel display knob can be pressed and printing will resume.

There are 3 values in the program that need to be setup,
- The number of extruder STEP pulses for each check and how many filament movement pulses should have occured for the check.
The first value to calculate how many extruder stepper pulses is required to feed 10 mm of filament.
- The second value is to calculate how many filament feed pulses will occur during 10mm of filament feed, then take approx 95% of this value.
- The third value is how far you need to move the filament movement roll/code disc to turn off the beeper.

The 95% value allows for some tolerance with the difference ratio of high extruder STEP pulses compared to the low number that occurs for the filament movement.
We don't wish to cause false error conditions, basically we are saying that if we have at least 95% filament feeding, we don't have a filament jam.

Only forward extruder steps pulses are counted and any filament movement in either direction is counted, this means when retraction occurs, the filament
count will often be higher than what filament has really been feed forward. However this should not causes issues as a jam would be picked up soon anyway.
Not monitoring extruder direction can cause issues when retraction occurs, this causes a high extruder step count compared to what the filament count is.
If we just counted extruder step pulses and compared them with filament movement pulses, we would get false errors when small retractions occured. This well
happen when the code disc is rocked back and forth without a pulse being detected due to the high ratio of extruder pulses compared to filament movement
pulses. While it is possible to have sensors that are able to count up and down it just adds extra cost for little gain.

INTERRUPTS - The Arduino Leonardo Micro Pro uses, pin 3 for interrupt 0, pin 2 for interrupt 1.
LOADING FIRMWARE - Due to the nature of Arduino Leonardo Micro Pro there can be issues with uploading firmware, Often they upload with no issues and then
for no apparent reason they don't, usually you don't see both ports (Tools > Ports), if this occurs it is best to short the reset and GND pins prior to
uploading firmware and make sure ports are correctly selected. Often it takes a couple of goes to get them to load, you should see that both red LEDs flashing when loading.
Another issue - If code disc has been 3D printed, it can cause issues with LED sensor seeing though the plastic, use paint to block.
Another option is to use a PC printer and print a code disc onto a clear overhead projector film and then laminate it. This allows more pulses per
revolution and lowers the extruder to filament movement pulse ratio.

*/

//=================================== Program Variables ================================================================
int StepCheck = 1200; // Adjust this to when a check is to be made. Number of extruder STEP pulses.
int FilamentCheck = 5; // Adjust this to how many filament pulses should have occurred. Number of code disc pulses.
int RestoreCheck = 10; // Adjust this to how much the filament code disc needs to move to clear Beeping/Filament run out error.
int FilamentState = 0; // Current state of the filament sensor
int LastFilamentState = 0; // Previous state of the filament sensor
int DirectionState = 0; // Variable for reading direction of extruder
volatile int EX = 0; // Register for Extrude Stepper (STEP) pulse counter.
volatile int FL = 0; // Register for filament movement (Code disc) pulse counter.

//==================================== Program Setup =================================================================
void setup() {
pinMode(3, INPUT_PULLUP); // Set Pin 3 as input for monitoring extruder steps pulses.
attachInterrupt(0, EXTRUDER, RISING); // Attach interrupt 0, (interrupt on Pin 3). Set Interupt function (EXTRUDER) and on rising signal.
pinMode(2, INPUT_PULLUP); // Set Pin 2 as input for monitoring filament movement code disc pulses.
attachInterrupt(1, FILAMENT, CHANGE); // Attach interrupt 1, (interrupt on Pin 2. Set Interupt function (FILAMENT) and on changing signal.
pinMode(5, INPUT_PULLUP); // Set Pin 5 as input for monitoring extruder direction.
pinMode(4, OUTPUT); // Set Pin 4 for output to 3D printer (Marlin) - (Active low for filament run out error).
digitalWrite(4, HIGH); // Set Pin 4 High - e.g. Inactive on power up.
EX = 0; // Set Extrude Stepper (STEP) pulse counter to zero.
FL = 0; // Set filament movement (Code disc) pulse counter to zero.
//Serial.begin(9600); // Uncomment for testing purposes, Arduino monitor able to monitor activations.
}
//==================================== Main program =================================================================
void loop()
{
if((EX > StepCheck)&& (FL > FilamentCheck)) // Filament check (good)- if all OK - resets counters and loops again.
{(EX = 0);(FL = 0);}
if ((EX >= StepCheck)&& (FL < FilamentCheck )) // Filament check (bad) - if filament hasn't moved enough,
{digitalWrite(4, LOW); // Activate filament run out 3D printer pauses and starts beeping.
// Serial.println("Runout error"); // Uncomment for testing purposes, Arduino monitors activations.
delay(2000); // Delay to ensure no filament movement after normal feeding.
(FL = 0); // Reset the filament movement counter, now awaiting forced filament movement.

AwaitPulse: // Program label to allow looping for the detection of some filament code disc movement.
if(FL > RestoreCheck){(EX = 0);(FL = 0); // Awaits for some filament code disc movement. This allows the user to stop the LCD beeper while
// the filament issue is fixed, also it de-activation the filament run out signal and resets the
digitalWrite(4, HIGH);} // extruder and filament counters for next monitoring operation.
else
{ goto AwaitPulse; } // The program loops until there is some filament code disc movement.
} // After filament code disc movement, the 3D printer LCD beeper will stop beeping as the filament
} // run out signal is no longer active. After fixing fault, and reloading filament,
// the user can resume printing by now pressing the 3D printer LCD knob.

//==================================== Interrupts =================================================================
void EXTRUDER() { // Interrupt 0 - Extruder STEP pulse counter adds 1 to counter (EX) when received in a forward direction.
DirectionState = digitalRead(5); // Reads state of extruder stepper direction
if (DirectionState == LOW) {EX++;} // Adds 1 to counter (EX) if in forward direction.
}

void FILAMENT() {FL++;} // Interrupt 1 - Filament movement pulse counter, adds 1 to counter (FL) in any direction.

//================================================== End =======================================================================



Edited 3 time(s). Last edit at 12/22/2015 04:14AM by RepRot.
Attachments:
open | download - Filament Movement Sensor1.JPG (269.7 KB)
open | download - Filament Movement sensor2.JPG (365.4 KB)
Re: Filament Movement Sensor for Marlin firmware.
December 22, 2015 04:20AM
Makerbot did this already...

They put feedback marks on the idler wheel. And watched those...

They marketed it as unjamable smart extruder...

its was a disaster! there are still law suits pending over this I hear...

Anyways, take a look at [intentional3d.com]
Here is their idler wheel [intentional3d.com]
Re: Filament Movement Sensor for Marlin firmware.
December 22, 2015 04:49AM
Thanks Dust for the feedback,
idler picture is interesting, looks like they were using 48 marks on there idler wheel, I started out with 10, may look at increasing mine from 30 to higher amount as I wish to detect over a shorter length.
Appears there are a couple of filament movement monitors out there but they aren't wired into the firmware.

Cheers.
Re: Filament Movement Sensor for Marlin firmware.
December 23, 2015 03:33AM
In case this sparks something useful.... I had been tossing up the idea of detecting non-rotation of the spool to identify a filament jam or break. But

1. The spool sometimes spins a little and runs off a bit of slack, then stops for until the slack is used up
2. When the head is moving toward the spool, the spool may stop or even turn backward
3. I'd have to put marks on every spool

Another thought I had was to use one of those IoT things made up of a battery and accelerometer (or even just a mercury switch) and Bluetooth... clip that to the spool for motion sensing. But issues 1 & 2 still apply.

OTOH, it doesn't matter too much if there's a 5 minute timeout on filament motion sensing... worst case, you waste another 5 minutes of filament.
Re: Filament Movement Sensor for Marlin firmware.
December 23, 2015 02:38PM
I did look at using a Minisense MEAS100 vibration sensor, I read some where that they can be used to detect movement of fibre string in some clothing factory machines. By just being in contact with the string it creates vibration as the string moves. Thinking it would properly do the same with PLA and ASB but the vibrations would be smaller. Ended going for the roll / code disc idea due to the amount of vibration that occurs with 3D printers, may have had issues with filtering the vibrations and you don't want false errors occurring.
Currently working on another project using a MEAS100 vibration sensor to detect the amount of shock force for ground hardness - these sensors can output up to 90 volts so are very sensitive.
Attachments:
open | download - Minisense MEAS100.jpg (14.5 KB)
Re: Filament Movement Sensor for Marlin firmware.
January 01, 2016 10:31PM
Hey RepRot, I just wanted to say that this looks absolutely awesome. I'm going to try it out and get back to you, I've been meaning to do this for a while where it also notified OctoPrint. I think it should be hooked up to the RAMPS instead of the RPi though and then communicate to OctoPrint via the serial connection to notify of a jam. This is exactly what I was looking for! I might have some questions if I run into hurdles grinning smiley.

Cheers and Happy New Year!
Re: Filament Movement Sensor for Marlin firmware.
January 02, 2016 11:05PM
Let us all know how you get on.

It is good to have the feature to turn on or off with a switch to enable monitoring of filament movement, I found it is best to turn off when changing filament.
Also have found with my setup when printing first layer if you have the head very close to the heated bed that the extruder slips as it can't feed enough filament thru the nozzle, depending on the values you use it may detect that filament hasn't moved enough, you can either change values or disable for first layer.

Did a large print the other day and the movement monitor activated that not enough filament was feeding, found that the head had partly blocked, a quick removal of filament and a reload fixed the issue without destroying the print.

Cheers
Re: Filament Movement Sensor for Marlin firmware.
January 03, 2016 01:56PM
Here's a more manual filament spool rotation detector smiling smiley:



Spool Holder on Thingiverse
Re: Filament Movement Sensor for Marlin firmware.
January 04, 2016 05:03PM
Nice design..
You could add a photo sensor to your manual filament spool detector which would count the balls moving around then compare these pulses to the extruder step pulses....
Re: Filament Movement Sensor for Marlin firmware.
January 08, 2016 04:37PM
Attached is an SVG file of the code discs you may find helpful, if you don't have a program to open SVG files, you can use Inkscape a free downloadable program, then laser print them on Laser printer transparency film (clear plastic sheets for laser printers) and then laminate them.
I am currently using the 72 code disc at present.
Reduced my extrusion for the first layer and don't have issues with false activations, filament sensor was picking up slipping due to too much filament being feed for first layer.


Cheers
Attachments:
open | download - Code Disc.svg (39.6 KB)
Re: Filament Movement Sensor for Marlin firmware.
June 12, 2016 06:45AM
Hi RepRot.Very nice solution to the problem! I am trying to do something similar(but a little bit different) but my knowledge of electronics is minimal and coding non existent, so it's a bit difficult. I have set up my hardware and used your firmware but it is not working. I was wondering if you would be prepared to help me modify your firmware if necessary and sort out any other problems?

Thanks in advance
Re: Filament Movement Sensor for Marlin firmware.
June 13, 2016 03:56AM
Hi Plasticman,

I will try and help, just Pm me, Note: will be away for next couple of days.
Main thing is to get filament runout I/O signal detection working, you have to be using a LCD display for filament runout to work.
I started out using just a switch that detects that there is no filament present. Once you get that working then you can progress to using some sort of filament movement device that uses the filament runout detection I/O signal.

I worked with electronics for many years, still learning to program Arduino's.
Just designed and build a golf foot balance platform that uses 8 weight load cells + Arduino Nano and this allows a golfer foot balance data to be displayed on a PC via USB. Uses a sound sensor that detects when a golf ball has been hit and after a delay the balance data is then displayed as a graph for analysing. Using processing 3 for the PC to display the data. (very similar to programming Arduino's) Used my 3D printer to make the load cell mounts and to assemblies to hold the Arduino Nano and sound detection module. Plus a few other bits.

Still learning things about the marlin firmware - very complex firmware.

Cheers Bruce K
Re: Filament Movement Sensor for Marlin firmware.
June 15, 2016 08:25PM
Again, we need software that detects the stoppage, sounds an alarm, pauses the print, moves head to x home and waits for repair and then proceeds printing.
Re: Filament Movement Sensor for Marlin firmware.
June 15, 2016 11:56PM
Quote
elwood127
Again, we need software that detects the stoppage, sounds an alarm, pauses the print, moves head to x home and waits for repair and then proceeds printing.

We recently implemented the M581 command in RepRapFirmware. It lets you associate a gcode macro file with an input, which could be from a filament sensor. The macro file lives on the SD card. In it you can put whatever commands you want e.g. to pause the printer (M25), put a message on the display (M117), sound an alarm (M300) etc.



Large delta printer [miscsolutions.wordpress.com], Robotdigg SCARA printer, Crane Quad and Ormerod

Disclosure: I design Duet electronics and work on RepRapFirmware, [duet3d.com].
Sorry, only registered users may post in this forum.

Click here to login