Jump to content

Ultimaker 2 motor drivers overheating

Recommended Posts

Posted (edited) · Ultimaker 2 motor drivers overheating

I noticed a huge heating on the Ultimaker 2 board and tried to find the reason for this. As turned out the stepper motor drivers A4988 is heated to 70°C and more even in idle stay. Ambient temperature is 20°C.

My settings (default) of stepper motors current are: for XYZ motor is 1300 mA and for Extruder motor is 1250 mA. Let's check it.

Regarding A4988 data-sheet the motor current controlled by a fixed off-time PWM current control circuit inside IC that limits the load current to a desired value Itrip. The maximum value of current limiting is set by the selection of RSx (current sense resistor = 0.05 Ohm) and the voltage at the Vref pin.

image.png (1)

I measured Vref voltage at TP403 test point which was 0.7374 V.


Regarding to equation (1) the limiting current is:

Itrip = 0.7374V / (8 x 0.05 Ohm) = 1.8435 A = 1843 mA

The value of 1843 mA is much excessive of expected 1300 mA and it is close to the maximum rated current of 2000 mA for A4988.

I tried decrease the current by changing settings of machine to 918 mA which leads to decrease Vref voltage to 0.5228 V and regarding to equation (1) the new actual limiting current value is 1300 mA as should be.

The temperature of stepper drivers in this case is not exceed 37°C which is much better.

The Vref voltage converted from PWM signal of microcontroller to DC voltage by two LPF filters R69 C46 and R70 C47 (for X and Y axis). In the meanwhile R69, R70 and R73 form the voltage divider. The transfer function of voltage divider is:

H = Vout / Vin = ( R73 / (R69 + R70 + R73) ) (2)

*Vin is PL5 point of the schematics above, Vout is TP403 point.

Let's take a look to the firmware to find out how the PWM signal is generated.

"stepper.cpp" file digipot_current() function:


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}


"pins.h" file:




The PWM value (let's call it Npwm) set to "(long)current * 255L / (long)MOTOR_CURRENT_PWM_RANGE" value.

Npwm = (*current x 255) / MOTOR_CURRENT_PWM_RANGE (3)

* "current" in mAmps

The voltage at the point TP403 can be calculated as:

Vout = Vcc x D x H = Vcc x (Npwm / 255) x H (4)

Vcc - Power supply voltage of microcontroller (5V in our case)

D - duty cycle of PWM signal

H - divider's voltage ratio

Regarding equation (1) and (4) the limit current Itrip is:

Itrip = Vout / (8 x Rs) = (Vcc x (Npwm / 255) x H) / (8 x Rs)

Regarding to equation (3) Itrip is:

Itrip = (Vcc x ( ((current x 255) / MOTOR_CURRENT_PWM_RANGE) / 255) x H) / (8 x Rs)

Itrip = (Vcc x (current / MOTOR_CURRENT_PWM_RANGE) x H) / (8 x Rs)

Itrip = (Vcc x current x H ) / (8 x Rs x MOTOR_CURRENT_PWM_RANGE)

Regarding to equation (2) we can calculate H value regarding actual resistor values:

H = 604 / (604 + 1000 + 1000) = 0.2319

Now we can calculate real Itrip value if we set current = 1300 mA in the machine.

Itrip = (5 x 1300 x 0.2319 ) / (8 x 0.05 x 2000) = 1.884 A = 1884 mA

This is close to the value of 1843 mA I calculated from measured Vout voltage. The difference is the result of tolerance of resistors, power supply voltage, internal voltage reference of A4988, etc.

So calculations are correct and conclusion is following: there is wrong current limiting transfer function of the firmware. There are two solutions to fix it:

1. Software: Change MOTOR_CURRENT_PWM_RANGE constant in the firmware to 2899

2. Hardware: Change divider's voltage ratio from 0.2319 to 0.16 by changing for example R73 to 381 Ohm

The questions are:

1. Does anyone found considerable heating of the drivers? If so, does current decreasing to 918 mA in printer settings solve the problem? Does the printer works properly without steps skipping in this case?

2. Does the Ultimaker team aware of this issue?



Edited by Guest
  • Link to post
    Share on other sites

    Posted · Ultimaker 2 motor drivers overheating

    They are certainly aware that some steppers - especially the Z stepper overheat. when they do overheat they turn off for a few seconds and the table falls down and you get bad results. I think something must have changed in this circuit because it works fine for most people.

    In the latest firmware I believe the currents are default to 1000ma (close to your suggested 918ma) and if you call support complaining about these problems they recommend lowering to 1000ma. I will call attention to this posting - thank you very much for this in depth posting - and let both the hardware designer and the firmware designer know of this. Unfortunately if the older boards use one resistor and the newer boards use a different resistor then I don't know how they can tell who has which!

    • Like 1
    Link to post
    Share on other sites

    Posted (edited) · Ultimaker 2 motor drivers overheating

    Thank you. 1000 mA is much closer to reality.

    The default current settings of latest firmware are:


    #define DEFAULT_PWM_MOTOR_CURRENT {1200, 1200, 1250}


    X,Y: 1200 mA

    Z: 1200 mA

    E: 1250 mA

    It's better, but still too high I think if interprets 1200 mA to real current of 1739 mA.

    Edited by Guest
  • Link to post
    Share on other sites

    • 1 year later...
    Posted · Ultimaker 2 motor drivers overheating

    Another easy solution is to drill some holes in the electronics cover, to allow air to flow in directly under the drivers. I did this after noticing that the boards around the drivers on my UM2 were turning overheat-brown.

    For some reason, Ultimaker did not bother with adequate ventilation for the electronics, as least on my UM2.

    • Like 1
    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

      • 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
      • Ultimaker Cura 5.6 stable released
        Cura now supports Method series printers!
        A year after the merger of Ultimaker and MakerBotQQ, we have unlocked the ability for users of our Method series printers to slice files using UltiMaker Cura. As of this release, users can find profiles for our Method and Method XL printers, as well as material profiles for ABS-R, ABS-CF, and RapidRinse. Meaning it’s now possible to use either Cura or the existing cloud-slicing software CloudPrint when printing with these printers or materials
        • 8 replies
    • Create New...