# Sensing BLDC motor torque using a current sensor

As it is commonly known, the torque supplied by a motor is directly proportional to the current it draws. So when a motor is under heavy load, the torque required will be more hence it would draw more current

For a BLDC motor, the current is supplied via three phases which are switch by a motor driver. But this motor driver is supplied with a single DC supply.

Can I reliably measure the torque provided by my motor by measuring the current drawn by the driver?

My motor is currently mounted as part of a robotic arm and there is PID control loop for position control.

I only need to get an idea of the current load and detect load anomalies (like an impact i.e. higher load or loss of payload i.e. lower load etc).

Given that I can calculate the nominal load at any position and hence calculate the nominal current drawn, is it a good idea to use current sensing for this kind of load sensing?

Is there any research on this which analyses this method of torque control/load sensing which I can refer to?

• Sounds reasonable to me. Sep 13, 2016 at 10:44

It depends on the motor driver, but in the general case you can't expect the driver input current to equal the motor current. This is because good motor drivers are essentially switching power supplies, using the inductance of the motor as a integral part of the supply. The current thru a winding can be higher than the supply current, just like the output current of a buck switcher can be higher than the input current.

• Yes, I agree. I tested the driver current and the driver draws more current as I increase the Rpm of the motor (through a simple PWM speed controller in the driver itself). Is this also because of what you've mentioned? Sep 13, 2016 at 12:08

It doesn't give you motor current directly, but it does tell you how much power the motor is drawing. If you know what (average) voltage the controller is applying to the motor then you can easily calculate the current (since current = power / voltage). The problem is getting that voltage.

If the BLDC driver is controlled by 0-100% PWM and directly applies that same PWM ratio to the motor, then (assuming negligible voltage drops in the driver) motor voltage is simply supply voltage / PWM ratio. However if the driver is controlled by eg. a servo signal then there probably won't be a direct 1:1 relationship between the input control signal and motor voltage, so your calculated voltage will be less accurate. At low speed (low PWM ratio) there may be significant current ripple and extra power loss in the driver and motor.

Also motor current doesn't tell you exactly how much torque the motor is producing, since it includes current used to overcome internal losses, and when the motor is accelerating it needs extra torque to deal with its own inertia. If you can account for these effects then you should be able to get a reasonable estimate of output torque.

What you can absolutely depend on is that the mechanical power delivered by the motor (torque X speed) is equal to the input power (voltage X current) minus losses. You need to be able to accurately estimate the losses. For a system that produces less that 100 watts, losses might be as much as 50 to 100 watts. There will be some fixed losses, some that vary with speed and some that vary with load. You will also need to calculate the average or RMS value of current over an appropriate time period.

Estimating torque in this manner is not a trivial task, but it can be done quite effectively. However, it is not necessarily much less complex than using motor current measurements. There is a lot of research on doing this sort of thing.

• Your first two sentences are correct, but accurately estimating the losses is a serious gotcha. At the very least, you need to know the speed. For example, consider the case of a stalled motor, there the losses are 100%. Sep 13, 2016 at 11:58

You could use a non-contact Hall effect current sensor (from e.g. LEM, Allegro or Amploc) around one of the motor phase wires. Low-pass filter it with a pole somewhere between the motor electrical frequency and the controller PWM frequency, then either sample it with an ADC or use one of those "true RMS" converter ICs. That should give you a measurement of RMS motor current which is ideally proportional to torque.

You can use the power equivelence as above (torque X speed) = (voltage X current) - Losses as stated, but beware of your DC link large capacitance. This will heavily filter the DC signal and so can't really be used for any transient nature torque measurements, only for steady state.