Mixing Nozzle / different steps per mm


does Repetier 0.92 support different -steps per mm- values for the extruder when using a mixing nozzle? (Not an option in der config tool).

I could also adjust the mixing ratio to get close, but adjusting steps would be a much "cleaner" solution.



  • Yes you can change them per extruder. Latest versions do support that. Have to check config tool to allow enetering it there too if not possible yet. Guess I did not change the tool afterwards.
  • Okay great! I will just change them in configuration.h then.

    thanks a lot!
  • Or in eeprom settings after uploading:-)
  • edited May 2016

  • I did some testing related to mixing ratios today and as long
    the steps/mm value is the same for every extruder it works pretty good:

    For example 3200 steps/mm for EXT0 and EXT1  [ 1
    Turn per mm
    - 200steps*16µStepping=3200 ]

    10mm, ratio: 1:1 --- EXT0: 5 turns, EXT1: 5 turns -----> 10 mm, material
    ratio 1:1

    10mm, ratio: 2:1 --- EXT0: 6,6 turns, EXT1: 3,3 turns -----> 10 mm, material
    ratio 2:1

    10mm, ratio: 4:1 --- EXT0: 8 turns, EXT1: 2 turns -----> 10 mm, material
    ratio 4:1

    But if I change steps: EXT0 - 3200 steps/mm [1 turn per mm] and EXT1
    - 6400
    steps/mm [2 turns per mm]

    the ratio of extruded material is not correct anymore (factor 2 - same as step
    ratio) and also the total amount of extruded material is to high.

    10mm, ratio: 1:1 --- EXT0: 7.5 turns, EXT1: 7.5 turns -----> 7.5 mm + 3,75mm
    = 11,25 mm, material ratio 2:1

    10mm, ratio: 2:1 --- EXT0: 8.8 turns, EXT1: 4.4 turns -----> 8.8 mm + 2.2 mm
    = 11,00 mm, material
    ratio 4:1

    10mm, ratio: 4:1 --- EXT0: 9.6 turns, EXT1: 2.4 turns -----> 9.6 mm + 1.2 mm
    = 10,80 mm, material ratio 8:1

    Maybe a small change in the step calculation is
    enough to fix this? :-)

  • I wrote an extra routine (called by M165) to correct the weights after initiliasing with original weights.

    void Extruder::recomputeWeights() {

            float sum = 0.0;
            float newWeight = 0.0;       
            float part_ext[NUM_EXTRUDER] = {0.0};
            int stepMixingW = 0;              
            mixingS = 0;    
            Com::printFLN(PSTR("Recalculation of weights")); 
            for(fast8_t i = 0; i < NUM_EXTRUDER; i++) {
                sum += extruder[i].stepsPerMM * extruder[i].mixingW;                   // steps of virtual axis with original weights     
            for(fast8_t i = 0; i < NUM_EXTRUDER; i++) {         
                part_ext[i] = (extruder[i].stepsPerMM * extruder[i].mixingW) / sum;    // calculate new ratio for extruder       
                newWeight = 10000*part_ext[i];                                                       // prepare for conversion to integer
                stepMixingW = static_cast<int>(newWeight);
                extruder[i].mixingW = stepMixingW;
                extruder[i].mixingE = stepMixingW;
                mixingS += extruder[i].mixingW;

    Skript for Repetier Host:

    ;color 1
    M163 S0 P1;
    M163 S1 P5;
    M165; recomputeWeights()
    M164 S0 P1;

    Now the ratios and the total amount of extruded material seems fine. :D
    The only Problem is that I have to resend the script after every tool change, because a recalculation of "e-axis steps per mm" is necessary after every tool change. And to get correct e-axis steps per mm the original ratio (not the recomputed one) is needed. For a clean soultion it should be stored somewhere (maybe also in EEPROM?)
  • Ok, I reevaluated my changes and I have in deed changed something to make different steps per mm work. It was the reason your formular worked, which was the half I did not add correctly. I have now included the formula in setMixingWeight so no extra calls are necessary any more.

    Please check if it works. I can't say when I get the time to build a testing setup, so a early confirmation would be great. Use dev version for testing!
  • I tested the dev version with three motors (motor 1 with stepspermm_a and motor 2+3 with stepspermm_b).

    It seems to work correctly now! :-) Thank you very much for the implementation!!

Sign In or Register to comment.