X2 motor doesn't move in IDEX
I just completed building IDEX printer and stumbled on the following issue with X2 motor:
Homing with G28 works as it should - X1 (left) printhead moves to the left to X-Min position, X2 (right) printhead moves to the right to X-Max position. X1 moves with G0/G1 commands and I have already printed several things using single printhead without issues.
X2, however, does not move after homing. I am trying to make it move by switching to Tool 1 (T1) and executing G0/G1 with different X values. When I execute T1, X1 printhead moves to home position, which is correct. In addition to running manual commands I tried to run GCODE that should print with X2 only, but it still did not move. I suspect I have some kind of issue with my configuration settings and hoping someone can pinpoint me to the culprit.
The image below shows the dimensions of my printer. It is followed by relevant configuration settings. I am using the latest 1.x development version of the firmware.
Homing with G28 works as it should - X1 (left) printhead moves to the left to X-Min position, X2 (right) printhead moves to the right to X-Max position. X1 moves with G0/G1 commands and I have already printed several things using single printhead without issues.
X2, however, does not move after homing. I am trying to make it move by switching to Tool 1 (T1) and executing G0/G1 with different X values. When I execute T1, X1 printhead moves to home position, which is correct. In addition to running manual commands I tried to run GCODE that should print with X2 only, but it still did not move. I suspect I have some kind of issue with my configuration settings and hoping someone can pinpoint me to the culprit.
The image below shows the dimensions of my printer. It is followed by relevant configuration settings. I am using the latest 1.x development version of the firmware.
#define HOMING_ORDER HOME_ORDER_ZXY
#define INVERT_X_DIR 1
#define INVERT_X2_DIR 0
#define X_HOME_DIR -1
#define X_MIN_POS -52
#define X_MAX_LENGTH 408
#define EXT0_X_OFFSET 0
#define EXT1_X_OFFSET 52
#define DUAL_X_AXIS 1
#define DUAL_X_RESOLUTION 0
#define LAZY_DUAL_X_AXIS 0
#define DUAL_X_AXIS_MODE 1
-----
Thanks
Comments
Found from this topic that EXT1_X_OFFSET needs to be the distance in steps. Then found ever more info in Configuration.h file.
Will need to test this:
#define EXT1_X_OFFSET 32640 // 408 mm * 80 step/mm
#define EXT0_X_OFFSET 0
#define X_MIN_POS -52
#define X_MAX_LENGTH 356
#define EXT1_X_OFFSET 32560 // 407 mm * 80 step/mm
#define DUAL_X_AXIS 1
#define DUAL_X_AXIS_MODE 1
With these settings X2 could move and cover almost entire print area, however X1 could only move up-to X=304 (356-52).
Above configuration allowed me to successfully print with single X2 print-head. Then I decided to try ditto mode, but nevertheless ditto was enabled in configuration file, I got error saying M280 is unknown command. But that is a new issue and I may start a separate discussion for it.
Thanks
#define FEATURE_DITTO_PRINTING 1
As for FEATURE_DITTO_PRINTING, yes, I have it set to 1, but still getting unknown command error, which is strange. Will double check all the settings later today.
Thanks
I just want to add few notes for those who may be facing similar issues:
- Earlier in this thread I wrote that the fact that "both extruders must have offset x set relative to x = 0" is not documented anywhere. Actually, it is mentioned in configuration.h file, but it applies only to DUAL_X_AXIS legacy mode. I chose to use "new mode" with DUAL_X_AXIS_MODE = 1 and did not pay attention to the above comment about offsets, since it does not apply to my setup. If you decide to use legacy mode - follow this rule.
- The settings that allowed me properly switch between 2 X-motors and position cartridges anywhere within print area are:
#define X_MIN_POS -52
#define X_MAX_LENGTH 407.95
#define EXT0_X_OFFSET 0
#define EXT1_X_OFFSET 32640 // 408 mm * 80 step/mm
- The issue I had earlier with M280 command went away after re-flashing firmware with EEPROM switched off. Not sure if this was related. I will re-enable EEPROM later and re-test.
One remaining question I have is about print-head positioning in ditto mode:
After executing M280 S1 both print-heads move towards corresponding ends-stops and then X2 moves left close to the middle of the bed. X1 remains at parked position. As the result, in my case, the distance between two nozzles in ditto mode is about 255mm. I'd expect it to be half the print area width, 356 /2 = 178mm. Am I still missing something, or this is expected for 1.x dev version?
Thanks
That is -204mm and ext0 would be at x=0 (not at parked pos -52).
Not 100% sure if that is an error with the new mode allowing to move beside 0 point. Here we get in trouble I guess with that mode. You can not print left to 0 but should we assume same offset to right exruder? We do not know where the bed really ends. Guess adding that offset would be more correct here.
On the other side X_MAX_LENGTH is measured from X_MIN_POS so I think more that X_MAX_LENGTH should be 460 instead. It is not X_MAX_POS if bed is 356mm wide.
My above calculation was incorrect. For each printhead to cover half of bed area along X the distance between nozzles in ditto mode has to be half of X_MAX_LENGTH, so 204 mm in my case.
Above code appears in 4 files
\src\ArduinoDUE\Repetier\Commands.cpp
\src\ArduinoDUE\Repetier\ui.cpp
\src\ArduinoAVR\Repetier\Commands.cpp
\src\ArduinoAVR\Repetier\ui.cpp
I am using ArduinoDUE branch and currently do not have LCD, so I just updated only the 1st file in above list in my local copy. Hopefully this change does not break legacy and/or lazy modes and can be applied as a fix.
Thanks
#if LAZY_DUAL_X_AXIS
But if LAZY_DUAL_X_AXIS is set to 0, X1 remains at parked position and X2 should move further left. This actually means that my change is needed only in new mode with LAZY mode switched off.
The description of dual x settings in configuration.h file gives an impression that LAZY_DUAL_X_AXIS setting applies only to DUAL_X_AXIS_MODE=0 (legacy mode). LAZY_DUAL_X_AXIS is not mentioned under new mode description at all. After checking the code I realized that this may not be the case.
I am planning to run more tests. I will try both - legacy and new modes with and without lazy mode and will report the results.
Thanks
Thanks