Jump to content

UM2 extrusion rates


gr5

Recommended Posts

Posted · UM2 extrusion rates

I did another test tonight. I wanted to determine max extrusion rates. I don't know how to adjust the "trimpot current".

See daid's new M907 and M908 codes here:

https://github.com/Ultimaker/SecretMarlin

I don't know how they work and I don't know if I can increase the stepper current for the extruder. But for now, with Marlin 13.10-5, these appear to be the maximum extrusion rates for the UM2:

default throughput rates for UM2 with default trimpot current settings using ultimaker light blue PLA

 

Here they are in table form:

temp max volume max speed with .2mm layers

180C 1.59 mm³/sec 20mm/sec

190C 2.97 mm³/sec 37mm/sec

200C 4.24 mm³/sec 53mm/sec

210C 5.59 mm³/sec* 70mm/sec

220C 7.00 mm³/sec 87mm/sec

230C 8.25 mm³/sec* 103mm/sec

240C 9.54 mm³/sec 120mm/sec

* means it was derived but you can see from the graph that it is VERY linear. I got these values by sending extrude commands to the printer. Typically I extruded 5mm to 10mm of filament at different temps and speeds until I found the max speed with no "clicking". For example:

G1 F67 E7

Was the max speed I could go with no skipping at 220C. F67 is 67mm per minute or 7mm³/sec.

DO NOT TRY TO PRINT OVER THESE VALUES! At least I strongly discourage it. So if you are printing .1mm layer height (and um2 has .4mm nozzle) and you want to print at 220C your max print speed is 7/.1/.4=175mm/sec. But if you are printing .2mm layers your max speed 87mm/sec.

If you go over these values you will get lots of under extrusion.

This was for the blue ultimaker PLA that came with my UM2. I know I can print a bit faster than this with my UM original so people who are trying to print just as fast a throughput of PLA may have underextrusion issues. Note that at 240C, .1mm layer height you can print up to 240mm/sec without any underextrusion.

Other brands and colors of PLA will vary. Plus I think there is a way to mess with the current to the E-stepper (increase it) but I don't know anything about this yet. Daid?

The formula to derive these values for any nozzle temperature is:

mm³/sec = (temp - 168)*.133

mm/sec = Volume (mm³/sec) / layer height / .4mm (nozzle width)

 

  • Like 1
Link to post
Share on other sites

Posted · UM2 extrusion rates

Afaik you can change the stepper current with the "trimpot" = trimmer potentiometer on the driver boards. This will change the hardware-setting. There is no scale or display of what's set there exactly, so you have to measure manually.

/edit: by the way, that's for the UM1. Don't know if it's the same with UM2!

I don't know if there is a software-setting, too. With sw-setting, you should only be able to lower the maximum current, but not increase beyond what's set in hardware. Again, I don't have a clue on how the stepper firmware works, that's just an assumption based on how it's usually done.

 

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    I did a little bit of digging around those stepper current controls. Not sure if it's any help to you but maybe it's a starting point?

    Comments above each section is "filename - line number"

     


    /*************************************
    Marlin_main.cpp - 207
    *************************************/
    const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'};
    /*************************************
    Configuration_adv.h - 203
    *************************************/
    // Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
    #define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
    // Default motor current for XY,Z,E in mA
    #define DEFAULT_PWM_MOTOR_CURRENT {1300, 1300, 1250}
    /*************************************
    pins.h - 1217
    *************************************/
    //Motor current PWM conversion, PWM value = MotorCurrentSetting * Range / 255
    #define MOTOR_CURRENT_PWM_RANGE 2000
    /*************************************
    Marlin_main.cpp - 1965
    *************************************/
    case 907: // M907 Set digital trimpot motor current using axis codes.
    {
    #if defined(DIGIPOTSS_PIN) && DIGIPOTSS_PIN > -1
    for(int i=0;i<NUM_AXIS;i++) if(code_seen(axis_codes[i])) digipot_current(i,code_value());
    if(code_seen('B')) digipot_current(4,code_value());
    if(code_seen('S')) for(int i=0;i<=4;i++) digipot_current(i,code_value());
    #endif
    }
    break;
    case 908: // M908 Control digital trimpot directly.
    {
    #if defined(DIGIPOTSS_PIN) && DIGIPOTSS_PIN > -1
    uint8_t channel,current;
    if(code_seen('P')) channel=code_value();
    if(code_seen('S')) current=code_value();
    digitalPotWrite(channel, current);
    #endif
    }
    /*************************************
    stepper.cpp - 961
    *************************************/
    void digipot_current(uint8_t driver, int current)
    {
    #if defined(DIGIPOTSS_PIN) && DIGIPOTSS_PIN > -1
    const uint8_t digipot_ch[] = DIGIPOT_CHANNELS;
    digitalPotWrite(digipot_ch[driver], current);
    #endif
    #if MOTOR_CURRENT_PWM_XY_PIN > -1
    if (driver == 0) analogWrite(MOTOR_CURRENT_PWM_XY_PIN, (long)current * 255L / (long)MOTOR_CURRENT_PWM_RANGE);
    if (driver == 1) analogWrite(MOTOR_CURRENT_PWM_Z_PIN, (long)current * 255L / (long)MOTOR_CURRENT_PWM_RANGE);
    if (driver == 2) analogWrite(MOTOR_CURRENT_PWM_E_PIN, (long)current * 255L / (long)MOTOR_CURRENT_PWM_RANGE);
    #endif
    }
    /*************************************
    UltiLCD2_menu_first_run.cpp - 382
    *************************************/
    digipot_current(2, motor_current_setting[2]*2/3);//Set E motor power lower so the motor will skip instead of grind.
    /*************************************
    ConfigurationStore.cpp - 278
    *************************************/
    float tmp_motor_current_setting[]=DEFAULT_PWM_MOTOR_CURRENT;
    motor_current_setting[0] = tmp_motor_current_setting[0];
    motor_current_setting[1] = tmp_motor_current_setting[1];
    motor_current_setting[2] = tmp_motor_current_setting[2];
  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    Okay. So if the code works, then:

    1250ma is default stepper current - in another post, Daid said that higher currents than 1250ma didn't pull any harder on the filament.

    2/3 of this is applied for when feeding filament (833ma)

    2000ma is the max current

    M907 S255

    Sets XY,Z,E currents all to 2000ma

    M907 E255

    Should set just E axis

    M907 B255 set's some "other" stepper current to 2 amps? WTF? B=Bed? B=Burner? Oh! Maybe this is extruder B?

    edit: confirmed that "B" is the second extruder when UM gets around to selling this.

    There is also M908 (not sure why) where you can do more complete control:

    M908 P1 S255 which sets something to full value but I don't know the "P" (pin) values as Robert didn't include that part. M908 seems dangerous so I wouldn't mess with it.

    edit: with more info from Robert I see that

    M908 P0 S255

    M908 P1 S200

    is the same as

    M907 X255 Y200

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    that mai vary on a real print..

     

    Yes. So if your print has lots of corners and short line segments then obviously it is printing much slower than the requested speed. In every case I could print quite a long distance before pressure got high enough for it to "click" (loose steps). When it *does* lose steps it loses a lot!

    Also this was in open air. When you press the nozzle close to the print and are trying to extrude into a small area the pressures might be even higher and you might have to print even slower. But I think this is probably not as serious a factor. So you can probably print fully up to the speeds I published.

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    M908 P1 S255 which sets something to full value but I don't know the "P" (pin) values as Robert didn't include that part. M908 seems dangerous so I wouldn't mess with it.

     

    Sorry, missed that one.

     

    
    

    /*************************************

    pins.h - 1769

    *************************************/

    #define DIGIPOT_CHANNELS {4,5,3,0,1} // X Y Z E0 E1 digipot channels to stepper driver mapping

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    Well the M907 and M908 commands don't affect the extruder in any way.

    I tried:

    M907 E20

    M907 E0

    M907 E255

    M907 S20

    M907 S0

    M908 P0 S0

    M908 P1 S0

    M908 P2 S0

    M908 P3 S0

    M908 P4 S0

    Nothing affected the current to the extruder motor. At least it had the same amount of power before it skips regardless. I did all this through pronterface. Maybe you have to put it on the SD card for it to work?

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    Here they are in table form:

    temp max volume max speed with .2mm layers

    180C 1.59 mm³/sec 20mm/sec

    190C 2.97 mm³/sec 37mm/sec

    200C 4.24 mm³/sec 53mm/sec

    210C 5.59 mm³/sec* 70mm/sec

    220C 7.00 mm³/sec 87mm/sec

    230C 8.25 mm³/sec* 103mm/sec

    240C 9.54 mm³/sec 120mm/sec

     

    Nice one, good job!

    Just to put in some tolerances here:

    I need 235°C for 65mm/s, same configuration as yours...

    At least for me, the new, "no manual operation" material feeder is one of the biggest

    disadvantages of the UM2, it lacks the tactile feedback...

    Time for a tear down ;-)

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    Well the M907 and M908 commands don't affect the extruder in any way.

    ...

    Nothing affected the current to the extruder motor. At least it had the same amount of power before it skips regardless. I did all this through pronterface. Maybe you have to put it on the SD card for it to work?

     

    DIGIPOTSS_PIN is not defined for this board, so you can't change the motor currents via M907/908:

     

    
    

    case 907: // M907 Set digital trimpot motor current using axis codes.

    {

    #if defined(DIGIPOTSS_PIN) && DIGIPOTSS_PIN > -1

    for(int i=0;i<NUM_AXIS;i++) if(code_seen(axis_codes)) digipot_current(i,code_value());

    if(code_seen('B')) digipot_current(4,code_value());

    if(code_seen('S')) for(int i=0;i<=4;i++) digipot_current(i,code_value());

    #endif

    }

    They obviously did it the cheap way, via a filtered PWM on pins 44, 45 and 46:

     

    
    

    #define MOTOR_CURRENT_PWM_XY_PIN 44

    #define MOTOR_CURRENT_PWM_Z_PIN 45

    #define MOTOR_CURRENT_PWM_E_PIN 46

    ...

    //Set timer5 to 31khz so the PWM of the motor power is as constant as possible.

    TCCR5B = (TCCR5B & ~(_BV(CS50) | _BV(CS51) | _BV(CS52))) | _BV(CS50);

    ...

    void digipot_current(uint8_t driver, int current)

    {

    #if defined(DIGIPOTSS_PIN) && DIGIPOTSS_PIN > -1

    const uint8_t digipot_ch[] = DIGIPOT_CHANNELS;

    digitalPotWrite(digipot_ch[driver], current);

    #endif

    #if MOTOR_CURRENT_PWM_XY_PIN > -1

    if (driver == 0) analogWrite(MOTOR_CURRENT_PWM_XY_PIN, (long)current * 255L / (long)MOTOR_CURRENT_PWM_RANGE);

    if (driver == 1) analogWrite(MOTOR_CURRENT_PWM_Z_PIN, (long)current * 255L / (long)MOTOR_CURRENT_PWM_RANGE);

    if (driver == 2) analogWrite(MOTOR_CURRENT_PWM_E_PIN, (long)current * 255L / (long)MOTOR_CURRENT_PWM_RANGE);

    #endif

    }

    Hopefully that timer never stops :wink:

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    @gr5:

    How did you measure the volume of the extruded filament?

     

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    He didn't... he just looked for the point at which the extruder started clicking, to indicate a hard limit had been reached. It's a quick and dirty test, but pretty useful nonetheless. It's possible that the extruder was also under-extruding immediately prior to totally failing and clicking (as I found in my http://www.extrudable.me/2013/04/18/exploring-extrusion-variability-and-limits/ on the UM1... but in order to test that you would have to check the volume of extrusion or, at least, the amount of filament fed in to the extruder. But as I found out, that's a much more painful test to do.

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    Like I assumed above:

    UM2 A4988 REF

     

    Reference voltage is created by an RC low-pass filtered PWM.

    Image shows X-stepper, but all others are the same.

     

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    1) Where did you get the UM2 schematic?

    2) Good detective work on the DIGIPOTSS_PIN define. Do you think this is a bug? Do you think I could mess with this and rebuild UM2 Marlin?

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    Nice Overview gr5, thanks! That would help me a lot.

    Is it possible to do this also with ABS?

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    Hopefully that timer never stops :wink:

     

    As that timer also controls the heater, and the heater is under watchdog, if that timer stops, the printer will disable everything and halt.

    I'm adding M907 for the next UM2 firmware version. https://github.com/Ultimaker/SecretMarlin/commit/38de4aa8b88e2907444a247c0bf81d8cd12a2d41

    Note that more then 1.25A on the extruder did not have any effect in our tests.

    (As for building the firmware, it can be done with the Arduino IDE, but you have to edit the twi.c file in Arduino. As it uses an interrupt that the new O-LED display code also uses, causing a conflict)

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    Is it possible to do this also with ABS?

     

    Some day. It's a pretty easy test for anyone to try. I was going to try nylon last night but ran out of time. Possibly tonight but I have lots of things on the schedule for tonight.

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    1) Where did you get the UM2 schematic?

     

    https://github.com/Ultimaker/Ultimaker2

     

    Do you think this is a bug?

    Do you think I could mess with this and rebuild UM2 Marlin?

     

    1) No, I guess Dhaid (*1*) left it out intentionally.

    2) Yes. The code is already about to hit the last stages of entropy. You won't break it (no offense, here !-)

    ===

    (*1*)

    Neither I am, nor I know the guy who posted this, but I can't get this out of my head (-;

    I very much apologize for this...

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    I very much apologize for this...

     

    Are you talking about the spelling "Dhaid"? His name is actually "David" but he goes by Daid on the forum. You are welcome to call him David if that is easier. I call him "Daid" so that people who don't know his name don't get confused.

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    Yes, I know all of this (and more 8)

    But I don't want to hijack your thread, so back to the topic:

    I increased the filament driver current a bit and it's definitely working better now,

    but I still, really miss the tactile feedback.

    I guess I will replace the filament driver with a one that can be used manually.

    Also, I tried to exchange a 250°C filament with a 180°C type and vice versa.

    Not (safely) possible without a PC attached to the serial port...

     

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    Hey Gr5

    Great post here. I am wondering whats the math behind mm3/s and temperature. Is it empirical or is it some how derived based on your graph?

     

    The reason i ask should i be doing this for each material spool i have?

     

    Uma

    gr5 edit: removed massive quote of entire first post.

  • Link to post
    Share on other sites

    Posted · UM2 extrusion rates

    I am wondering whats the math behind mm3/s and temperature. Is it empirical or is it some how derived based on your graph?

     

    No math. I just told the extruder to extrude into thin air faster and faster until the stepper started skipping. Unfortunately this doesn't account for additonal pressure of having the nozzle partly blocked .2mm away by the part being printed. So I repeated the test during a real print here:

    http://umforum.ultimaker.com/index.php?/topic/4127-um2-extrusion-rates-revisited/

    And got slightly lower values for max print speed. You should cut the values in this table in half anyway.

     

    The reason i ask should i be doing this for each material spool i have?

     

    Seems like a lot of work. If you are running a business and have 10 printers going all day then maybe. But some steppers seem to be stronger than others plus you might have a 10% nozzle clog yet it prints fine but your max speed is lower because of this so really it's going to vary a lot. I just take the max speed from my tests and cut it by 2X or more.

    Part of the purpose of this graph is so that people understand that raising the temp by 10C might make their underextrusion problem go away. Or lowering by 10C might cause other problems if they don't slow it down a bit. Also some people claimed the um2 extrusion was worse than the um original (it is for some people but for most printers it's about the same). Also when people post that they printed something at 60mm/sec .2mm layers at 200C and wonder why there is holes in the side I refer them to this graph and show how they are trying to print faster than this graph says you can. They might say "but I printed 75mm/sec just fine before" and I'll say "not at 200C, .2mm layers you didn't".

     

  • Link to post
    Share on other sites

    Create an account or sign in to comment

    You need to be a member in order to leave a comment

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now
    • Our picks

      • UltiMaker Cura 5.7 stable released
        Cura 5.7 is here and it brings a handy new workflow improvement when using Thingiverse and Cura together, as well as additional capabilities for Method series printers, and a powerful way of sharing print settings using new printer-agnostic project files! Read on to find out about all of these improvements and more. 
         
          • Like
        • 18 replies
      • S-Line Firmware 8.3.0 was released Nov. 20th on the "Latest" firmware branch.
        (Sorry, was out of office when this released)

        This update is for...
        All UltiMaker S series  
        New features
         
        Temperature status. During print preparation, the temperatures of the print cores and build plate will be shown on the display. This gives a better indication of the progress and remaining wait time. Save log files in paused state. It is now possible to save the printer's log files to USB if the currently active print job is paused. Previously, the Dump logs to USB option was only enabled if the printer was in idle state. Confirm print removal via Digital Factory. If the printer is connected to the Digital Factory, it is now possible to confirm the removal of a previous print job via the Digital Factory interface. This is useful in situations where the build plate is clear, but the operator forgot to select Confirm removal on the printer’s display. Visit this page for more information about this feature.
          • Like
        • 0 replies
    ×
    ×
    • Create New...