6 extruders, one endstop
I have 6 extruders, but only one end-stop input free on my control board.
I have endstops on all filament on the 6 extruders, meaning endstop is activated when filament comes to cirtain position in extruder.
I have endstops on all filament on the 6 extruders, meaning endstop is activated when filament comes to cirtain position in extruder.
Could serial connect the end stops from 6 extruders for my desired function. All 6 (or more) filaments must be unloaded to a cirtain position before signal comes to endstop input on control board. Only one is needed if the firmware supports it :-)
I want Repetier to remember which extruder is the last active extruder and when I give a command (via gcode) then the active filament (extruder) unloaduntil the endstop giving signal.
Then the next active extruder can be selected (via gcode as today I assume) and then firmware loads the filament with preset filament length.
When activating an extruder, the number for active extruder is stored in eeprom to remember the active extruder, (Also when the printer has been turned off) so it is ready for next unload and know active extruder.
Is this something I can configure in Repetier firmware, or can it be made?
I am not software guy, but it should be possible?
Regards
Then the next active extruder can be selected (via gcode as today I assume) and then firmware loads the filament with preset filament length.
When activating an extruder, the number for active extruder is stored in eeprom to remember the active extruder, (Also when the printer has been turned off) so it is ready for next unload and know active extruder.
Is this something I can configure in Repetier firmware, or can it be made?
I am not software guy, but it should be possible?
Regards
Comments
First question would be what the sensor is for? Normally I would guess out of filament sensor. But that conflicts with your retracting wish. You could in deactivate extruder script make the unretract but then you trigger out of filament unless you disable it temporary. Other problem is that such big retracts are often a problem if done frequently - sometimes it will fail to load filament. Can not say about your system, but it is not easy to do.
The bigger problem is when you enable printer, it will run select extruder 0 script. So for your logic select mean push into extruder. But some other extruder might be the active one when disabling and if not extruder 1 is already loaded so pushing again is also bad. So here you have extra problem that motherboard starts working often without power or moves do not occur when extruder is cold. Ok, you could use the cold does not extrude for powering condition, so it just don't move. So if you always switch to extruder 0 when disabling printer it can be solved simply using scripts, but there will be many tiny conditions that can make the system fail.
Une usefull addition to firmware might be a unretract until jam triggers or move is ended. Will think about that function at least. But maybe only for version 2.0
It is for 6 extruders feeding into one single nozzle (hotend) through a multi filament device like:
https://www.thingiverse.com/thing:2151191
I made my own for 6 filaments, lets call it 6 filament feeder. It is working perfect with manual shift between filaments.
Between the 6 filament feeder and each extruder is placed a opto endstop, 6 in total.
These 6 opto endstops are connected so that they give signal to endstop input on control board if all 6 filament is above the optocoupler (filament not blocking the light in opto). By this, all filaments is in a certain position, but not run out of extruder.
There are existing a M600 filament change command, but I con not use it for this.
Lets take example.
I will print a device with 3 filament. Lets assume X500 is unload filament, and X501 Y is load filament Y
Printer (firmware) remember (in eeprom) that filament 3 is loaded from last print and turnoff.
First third of device must be printed with filament 1. X500 is given until signal from endstop (all filament above 6 filament feeder). It can only unload the right filament as it remember in eeprom which one is active. If it would just unload all 6 filament, 5 filament run out of the extruders.
X501 1 is given. printer load filament 1 and print first third of device.
Next 50% must be printed with filament 6. X500 is given again, printer remember it has to unload filament 1.
X501 6 is given. printer load filament 6 and print next 50% of device.
Last part of device must be printed with filament 3. X500 is given again, printer remember it has to unload filament 6.
X501 3 is given. printer load filament 3 and print last of device.
So only one endstop is needed, but firmware need to store what filament is active, also after power off.
Of course, there is needed some parameters for specifying how much distance to load new filament.
It don't need parameters for unload/retract, as it unload/retract remembered active filament until signal is coming from endstop (optocouplers).
Maybe there should be some parameters for speed for load and unload.
When it get X500 5, printer (firmware) unload active filament, and load filament 5.
Maybe the command could be X500 5 200, meaning unload active filament, load filament 5 with 200mm.
Maybe not all filament path/tubes have same length, so one parameter for load length of all filament is maybe not usefull.
It is actually no limit on how many extruders it could support, as only one endstop is needed.
Only requirement is that the multi filament feeder is made with high quality, so that filament don't stock in the multi feeder.
So what we need here is a unload all function that can be put as first command in the select extruder script to get a defined starting condition. Adding the function is easy, hard part is how to make it work especially since it is a not watched pin. Here I see no real solution with only one pin for endstop. Storing active would be one but that is not feasable with limited lifetime. Are you sue you only have 1 free pin? I mean you do not need endstop pins to connect to. Difference between endstop pin and other digital pins is just that there are also 5v and gnd pin next to each other, but sharing a existing 5v/gnd with all endstops is no problem, so you just need 6 free pins as input sensor. Then you can write the unload allfunction simply be detecting the active one and retract in 1mm steps until the pin switches off. That would be quite easy then.
Depending on the chip they put on, it could last up to 1 million times. Normal external chips mostly supports that.
I think most print with more then one filament only change a few times (5-10), so that would give 100000 prints.
Reason for using only one endstop is that you already occupy lots of pins if you need 9 steppers (3 or 4 for X,Y,Z and 6 for extruders. I don't think many boards support both so many steppers, 6 endstops and additional have 6 input available for filament position detection. I don't think any 8 bit boards support 9 steppers, I did at least not find any....
So from what I hear you are using the 3 stepper extension board to get 9 stepper drivers running. That is in deed using nearly all pins. If you also have a display that they are really all used, otherwise the display port might have some, but some are behind a 5v level shifter so not sure if they also work as input, guess not. Then only the 3 pins for encoder and ok button are left.
But ok feel free to store you active extruder in eeprom for your special case. Just use a place after 4096 so it bypasses the eeprom handler from firmware and you do not need to adjust the checksum every write and also bypass the eeprom caching to ram.
Could it be possible to use the SD card for storing active extruder? Writing number in txt or json file?
Of course SD card resd/write is slower, but guess it is fast enough.
I don't know how many write cycles a SD card can take.
Best would be to handle it like storing printed filament. Only when extruders are not hot (all disabled). Then you do not change active extruder any more and that should be the starting point when you heat again. So you only need to remember to disable them after a print.