Duet3D Filament Monitor: Laser Version
How it works
- Filament moving through the filament monitor is detected by the laser optical sensor. The microcontroller in the filament monitor reads the amount and direction of motion and periodically sends the accumulated amount of motion to the Duet.
- When net extruder movement greater than the number of mm configured in the E parameter (for example 3mm) has been commanded, the extrusion measured by the filament monitor is compared with the amount of extrusion commanded.
- If the difference between what has been commanded and what has been measured by the filament monitor is greater than the configured tolerance (configured using the R parameter), the print is paused and an error is reported.
- Different filament materials and colours are detected with varying degrees of accuracy by the laser sensor. this can be handled through setting an appropriate trigger value for the sensor. While the sensor is accurate enough in all tested filaments to allow the print to be paused for filament run-out, jam or tangle, those filament types the sensor is least sensitive to may have 1-2mm of error in movement detection. Depending on where in the print the extruder jam or filament strip occurs will determine how much of an impact 1-2mm of unfed filament will have on the print.
Technical details
The filament monitor sends 16-bit words to the Duet. Two types of words are transmitted: normal words, and quality information words. When the data is changing (normally because the filament is moving), a normal word is sent every 40ms. When the data isn't changing, alternating quality information words and normal words are sent every 500ms.
For all words transmitted:
- Bit 14 is 0 for a normal word, 1 for a quality information word.
- Bit 15 is a parity bit, adjusted so that the total number of bits set in the 16-bit word is even.
For a normal word:
- If the filament monitor is not in an error state, bits 0-9 represent the movement count, which wraps around from 1024 to zero. Ideally, each count represents 0.02mm of filament movement.
- If the filament monitor is in an error state, bits 0-9 represent the error code. Currently this is always zero, meaning that initialisation of the optical sensor failed.
- Bits 10 and 11 are zero
- Bit 12 is the state of the optional filament present switch: 1 if the input is high (meaning no filament is present) and 0 if it is low.
- Bit 13 is 1 if the filament monitor is in an error state, 0 otherwise.
For a quality information word:
- Bits 0-7 report diagnostic data
- Bits 8-13 return a measure of the reflectivity of the filament and anything else in front of the optical sensor
The 16 bits are sent using a self-clocking protocol as follows. The nominal bit time is 1ms but the Duet firmware allows a reasonable tolerance because the filament monitor clock source is the internal R-C oscillator in the microcontroller, so its speed is somewhat variable.
Idle state: the line must be be at 0 for at least 8 bit times
Start bits: 1 followed by 0
Data bits 15, 14, 13, 12
Stuffing bit (inverse of bit 12)
Data bits 11,10,9,8
Stuffing bit (inverse of bit 8)
Data bits 7,6,5,4
Stuffing bit (inverse of bit 4)
Data bits 3,2,1,0
Stuffing bit (inverse of bit 0)
After the last stuffing bit, the line returns to 0 until the next start bit.