Like buildrob, I've been thinking about dual X-carriages for a while now. Been accumulating parts for about a year. Perhaps someday I will have time to do something with them.
The design floating around in my head is a bit different than his. My design criteria are:
- Minimize firmware mods
- Minimize the building of new electronics
Our current Azteeg controller has one driver for the X axis motor, one input for the X axis endstop, and firmware to interact with these things. By some strange coincidence, a dual X-carriage machine only needs to run one X axis motor at a time, and only needs listen to one X axis endstop at a time; the other carriage is parked and doing nothing. So maybe we can share our existing electronics between the two carriages by simply putting a switch between them.
In this other design, a 3PDT relay is used as the switch. (You only need to switch three wires; two wires to the carriage motors, and one for the endstop.) All we need is a control signal to run the relay.
The Marlin firmware in the Azteeg knows which tool is currently active. This is controlled with gcode; T0 activates tool zero, T1 activates tool one, etc. So somewhere in the Azteeg is a binary number that indicates the current tool. All we have to do is output the least-significant bit of that number to a pin on the Azteeg, and hook the relay coil to that signal. Shouldn't take more than a few lines of code in Marlin to add this capability. Best of all, this doesn't affect anything else, other than using up one of the spare pins on the Azteeg, so if this gets popular it wouldn't hurt to add this to the Marlin firmware on every Bukobot, and perhaps send this upstream as well.
There is no need to modify Marlin to put the X axis home position on the right side of the printer. Both of the endstops can be on the left, mounted next to each other. The right-hand carriage simply needs a long extension of some kind, projecting off to the left, reaching under the left-hand carriage to hit its dedicated endstop.
For both carriages, home is all the way to the left, as defined by the corresponding endstop.
A new position, let's call it "stow", is defined. For the left carriage, stow is all the way to the left (same position as home). For the right carriage, stow is all the way to the right, just shy of the physical limit of the carriage's movement. Marlin does not need to understand the concept of stow; it's defined in gcode, and specified in the "Tool change G-code" setting in Slic3r (see http://manual.slic3r.org/MultipleExtruders.html
, under "Configuring Tool Changes".)
Consider what happens when the printer is printing. At the beginning the right carriage is stowed, and the first layer is printed with the left carriage (tool # 0). When it's tool change time, our custom tool change code homes the current carriage, then issues T1, which, thanks to the pin we programmed, switches the relay on. The left carriage goes dead, with its endstop deactivated. Its extruder motor is still active, but not doing anything because no commands are being sent to it. Its heater is still working, holding its specified temperature; the nozzle will slowly dribble into the left-hand spitoon (an optional feature on the deluxe model). The left carriage has now been stowed.
After the relay switches on, the right carriage motor becomes energized. The carriage may jump a small distance to the right or left, and we cannot assume anything about its position. Because we can't make assumptions about how long this nozzle has been dribbling, we advance the filament a bit to charge the nozzle, and wait a bit (G4 P1000 or similar). We now home the current X carriage in the usual way, G28 X0. It moves to the left until its long probe reaches its endstop. Then we start printing.
After this layer is printed, it's time to change tools again. Our custom tool-change code stows the current carriage by moving it to the specified stow position at the right, then issues T0 which switches the relay back off. The right carriage goes dead, with its endstop deactivated. Its extruder motor is still active, but not doing anything because no commands are being sent to it. Its heater is still working, holding its specified temperature; the nozzle will slowly dribble into the right-hand drool bucket. The right carriage has now been stowed.
After the relay switches off, the left carriage motor becomes energized once again. The carriage may jump a small distance to the right or left, and we cannot assume anything about its position. Because we can't make assumptions about how long this nozzle has been dribbling, we advance the filament a bit to charge the nozzle, and wait a bit. We now home the current X carriage in the usual way, G28 X0. It moves to the left until it reaches its endstop. Then we start printing again.
And so forth.
There are a number of questions to be investigated. Will there be a problem with the Azteeg's driver when one motor is switched out and another switched in? We cannot assume that the motors will physically be at the same step phase during this transition, so the next motor will have to jump to whatever phase the driver is currently at. This will send a brief current spike back to the driver. Hopefully nothing amiss will occur.
When one carriage is deactivated, some force (your elbow? the cat? deezmaker and whosawhatsis carrying the printer around the fairgrounds while it prints on battery power?) might cause that carriage to move around. If it moves far enough from its stow position so that the other carriage can hit it, weird things might happen. It might be a good idea to add something to keep deactivated carriages from moving. I'm thinking electromagnets, or maybe those gravity amplifiers from Area 51.
When a carriage moves from its stowed position, it will probably have a long thread of plastic hanging from it. It would be best to remove that before the nozzle leaves the vicinity of stow. How best to do that? Whatever you grab it with might gradually build up a glacier of plastic, which might eventually cause problems.
So what do you think? Is this totally the dumbest idea you have ever heard?