Extruder 3 & 4 - EXT_Motors will not turn (0.92 Latest)

I am trying to add 2 more extruders to Ramps 1.4 board using stepper expansion board for ext motors 3 and 4.  I already have MOSFETs and other circuitry wired, all 4 nozzles can be heated and work fine.  Extruders 1 and 2 spin fine when command is given from host.  But Extruders 3 and 4 do not turn.   When command is given I know that enable pin has worked because motor "locks up".  
I know it is not electrical issue because I changed pins.h so that firmware ext_0 is routed to the expansion board (physical motor 3) and it turns fine but then firmware ext_3 routed to ramps onboard extruder (physical motor 1) does not turn and exhibits same behavior as described above.  Thus I believe this is something to do with firmware.

I have tested many pins, created clean version of repetier firmware with just 3 extruders specified and tried to get it working, removed board reference to Ramps 1.4 and  made custom userpins.h file, always same behavior as described above.

Ultimate firmware for this printer in current state:  https://www.dropbox.com/s/q61vo34c2o7izbd/Repetier-Firmware-2015-05-31.zip?dl=0

As far as pins, I have tried these lines in the configuration.h, in the board 33 sections of pins.h, and also in the custom userpins.h file.

#define ORIG_E2_STEP_PIN         64
#define ORIG_E2_DIR_PIN          44
#define ORIG_E2_ENABLE_PIN       66

#define ORIG_E3_STEP_PIN         40
#define ORIG_E3_DIR_PIN          42
#define ORIG_E3_ENABLE_PIN       65


As mentioned I have the same behavior even with clean repetier-firmware with 3 extruders specified and these pins for E2 added.  

Any help is much appreciated.
Thank you,


  • Pin numbers for motors undergo some transformations so it becomes hard to define them anywhere else then pins.h motherboard section. It is quite important to define it before transformations take place.

    Easier is to modify configuration,h and not use symbolic names but put directly the pin numbers there.
  • Sure, I tried this but same results as before.  

    I commented out the pin definitions from my last post in configuration.h and put them in with ...motherboard == 33... section of pins.h.

    Same behavior as always.  
    Then I also changed the definitions of E2_STEP_PIN, E2_DIR_PIN, and E2_ENABLE_PIN at the bottom of pins.h to the pin numbers directly  (you said configuration.h in your last sentence but is this what you meant?).  Again same behavior:  extruder 1 works fine, extruder 3 just locks up when given command to turn (enable pin seems to be working) but nothing else.  

    New firmware (pin defs commented out in configuration.h/ modifications to pins.h/ lowered minimum defect temperature for being able to test by enabling cold extrude without 4 thermistors plugged in(motor1 works fine this way) )

    Please advise and test the build if you have a board available, even just by switching pin assignments for extruders 1 and 3 and seeing if you can reproduce my issue. 

  • No time to build and test other configs, sorry.

    As a first test since E0/E1 are working. Set to 2 extruder and in pins.h change the E0/E1 pins to the one you have. Since it worked before you then know these pin nunbers are correct and hardware works.

    What I mean as safe solution was not using

    #define EXT2_STEP_PIN E2_STEP_PIN
    #define EXT2_DIR_PIN E2_DIR_PIN
    // set to false/true for normal / inverse direction
    #define EXT2_INVERSE true

    but instead

    #define EXT2_STEP_PIN 40
    #define EXT2_DIR_PIN 42
    // set to false/true for normal / inverse direction
    #define EXT2_INVERSE true
    #define EXT2_ENABLE_PIN 65

    in configuration.h

  • Same problem as always when trying safe solution in configuration.h  

    With 2 extruders setup, expansion board works when defined as E0 but not as E1.  I tired defining both sets of pins we use for motors 3 and 4 and all work when set up as E0 but not as E1.  Not sure what this means.  But the hardware seems to be working.  

  • Unless you haven't set the same pins to E0 and E1 or use the pins for other functions like a display that makes no real sense. I know printers running the firmware with 4 extruders so it normally works.

    I agree that if pins work with E0 they should also work with E1-E3. 

    Stupid question but NUM_EXTRUDER was set to 4?
  • edited June 2015
    Yes, of course.

    We actually got it working by defining the Azteeg X3 Pro Controller (5 extruder capability) and changing all the pins to the Ramps and Expansions setup.  Extruder Motors 3 and 4 are spinning, and I have to get everything else like the servo and probe tested later.  I don't know why this didn't work when I tried the same thing with 3 extruders defined and the Megatronics 3.0 (3 extruder capability).  

    Any chance this could have something to do with EEPROM settings?  In all previous builds that didn't work EEPROM set 1 was defined but for this it got changed to EEPROM set 2 at the same time.  

    Anyways, we also want to add an extremely basic filament run-out sensor using a roller switch. Since it's a constant signal I don't know if it will work with the jam detection you've written. 

    I'm thinking to just put an extremely basic (if sensor_pin == tripped_state) M600 into the main loop but if you can comment on the best way to do this I would be much appreciative.  Obviously if there are other conditions like (is print in progress) or which extruder is selected (I know I saw these variables when dealing with the first issue) then there could be a switch per extruder but I don't have that many pins left :).  

    EDIT:  If the printer doesn't know when a print is in progress (I mean it could be idle and I send some commands from Host to move or heat up or something, and would it know the difference?) perhaps a custom gcode command that can be added to start and end gcode in slicer?   This command would simply toggle a print_in_progress state in the code that could be used in the above conditional.

    Thanks for your help, looking forward to hearing your thoughts on this.  
  • It might in deed be a eeprom problem. If you had first set only 1 or 2 extruder, the eeprom is initialized only for them. Increasing it later will not fill in values like steps per mm I think, so it would not work. But you should have seen this when viewing the eeprom settings in the host, but I guess you didn't?

    Out of filament is tricky. There is a key action for it, but that is not a very good solution since it would trigger again and again keeping in a loop. I think I would need to make a special case for the jam detector with steps = 0 => only out of filament. These are per printer and trigger usefull actions like wait for filament change on the right extruder.
Sign In or Register to comment.