# Why is my PWM efficiency about 50%?

I'm using a BTS7960 module with an Arduino to adjust the voltage for my DC motor.

When I check efficiency there is a problem. PWM efficiency is supposedly about 90% but mine is only about 50%.

I have a 7S3P 29V li-ion battery and a 12V DC motor. While I was using it 50% PWM mode, I calculated the efficiency of power consumption and I realized that I almost lost half power in PWM.

How I measured the efficiency:

• I put a clamp meter between the battery and the BTS7960 and I have check voltage "B +" and "B-" terminals. Voltage is 29V and current is 11 amperes so my battery is giving 320 watts.
• Then I checked the consumption of the DC motor. I put a clamp meter between the BTS7960 and the DC motor and I measured voltage "M+" to "M-" terminals. Voltage is 13,6 and current is 13,8 amperes so as I understand my DC motor consumes 187 watts.

Either my PWM module efficiency is very bad or I'm doing something wrong.

The BTS7960 module became really hot while testing.

If you ask why I dropped 29 volts to 13 volts and drive the DC motor, it is because I have a 7S3P li-ion battery and I have a 12 volt Dc motor. If I can overcome the problem, I will drive a 24 volt DC motor with a 7S3P battery.

What is the reason for the high power loss?

(edit)Additional information: My clamp meter is Unit UT210E. Also you can reach datahseet this link:

UT210E English Manual

Also I measured current with multi meter(Unit UT39C)

Lastly I made same circuit with dc-dc convertor. The energy loss in the measurement was very low and I saw this as normal aslo With dc-dc converter, the battery and cables was not very hot, but in pwm modulation, the battery, cables and bts7960 integrated was very hot.

• Comments are not for extended discussion; this conversation has been moved to chat. Apr 10 at 5:55
• "I'm using a BTS7960 module with an Arduino" - what PWM frequency is your Arduino producing? "I have a 12 volt Dc motor" - Which motor is it? Apr 11 at 2:40
• "in pwm modulation, the battery, cables and bts7960 integrated was very hot." - what is the Ah capacity and max amps or 'C' rating of your battery, and what gauge is the wire? Apr 11 at 2:46

Your multimeter and your clamp meter are both not meant to observe PWM going through an inductive devices.

You need an oscilloscope with a high-bandwidth method of sensing current. I don't know your PWM frequency, but rule of thumb: estimate how fast the transition from fully on to fully off has to be, take the inverse of that time (yielding a frequency), and take 5, better at least 7 times that frequency as minimum bandwidth if you really want to see what happens on that cable. It's not DC, by any meaning of that word.

Current measurements can be quite tricky, so you might end up getting a hall effect sensor IC with something like 400 kHz or 1 MHz of bandwidth, and just live with current components that you cut off through that not-really-sufficient bandwidth.

• I check the pwm frequency with oscilloscope and it was 500HZ and duty cycle was %50. I just want know what is my real power consumption ? Or can I say is my real power consumption can measure between the battery and the BTS7960 (29 volt * 11 amper) because there is no modulation on this cable. And lastly how I can measure current after pwm modulation ? Apr 9 at 12:39
• 1. 500 Hz sounds very low for a PWM frequency. 2. it's not about the frequency, but about the bandwidth, which is defined (mostly) by how steep the edges between on and off are. Apr 9 at 12:45
• 1- Yes I read somewhere about this, it's making noise and I check my hedge trimmer it's working with 50KHz pwm(%75 duty cycle). 2- You mean duty cycle ?(I'm sorry I am asking because I do not have enough information. Maybe I can bother you) Apr 9 at 13:01
• no, I don't mean duty cycle. I mean edge speed (as I said three times now), the time it takes to go from "on" to "off" (and vice versa). Apr 9 at 13:30
• The arduino uno pwm output library has a default frequency of around 700Hz
– Drew
Apr 11 at 3:12

You need to increase PWM frequency to at least a few kHz for the motor inductance to smooth out the PWM. Some types of motors have more inductance than others, so the optimum frequency will vary with motor type.

Otherwise you will get large RMS current and corresponding large I^2*R losses in the motor, transistors and connecting wires. The BTS7960 is supposed to be good up to 25kHz, perhaps optimum frequency would be in the 10-15kHz range. Here is some info on changing PWM frequency.

When you have a high enough frequency you may be able to accurately read the motor current with your clamp-on (because it will be relatively smooth), however reading the battery current will not likely be very close to correct.

The Arduino's default PWM frequency is ~490 Hz. At this low frequency the motor probably won't have sufficient inductance to make the current continuous, so the rms current and voltage will be much higher than the average values that your meters read.

I created a simulation in LTspice representing your situation, adjusting the motor's internal resistance, inductance, and back-emf to get figures close to your measurements. Here's the circuit:-

simulate this circuit – Schematic created using CircuitLab

You say that the battery and wiring got hot, so I added resistors R1 and R2 representing possible battery and wiring resistance. With these values LTspice calculated:-

• Average battery current: 11.2 A
• rms battery current: 16.7 A
• Average motor current: 13.6 A
• rms motor current: 18 A
• Average motor voltage: 13.5 V

Here's a plot of the motor current. The motor's inductance has slowed the current rise and fall a little, but not nearly enough to stop it reaching a peak of ~30 A. This high peak current causes extra loss in the resistances in the circuit.

Then I changed the PWM frequency to 3 kHz, and got this:-

Now the peak current is only 16.8 A, the rms current is 11.5 A, and the average current is 11 A. As well as being more efficient, the higher PWM frequency produces average meter readings closer to the rms values that represent the true power losses in the circuit.

• Your answer was very enlightening indeed,I understand better now thank you. Basically I realized that the big reason for my loss is low frequency. I had a battery hedge trimmer, I measured frequency it and saw it was driving the dc motor with 50Khz. I guess I need to get closer to these frequencies too. But for this I have to test the most suitable frequency with a dc motor. Is it possible see in oscilloscope this simulation which you made with LTspice? Apr 15 at 20:27
• You can see motor current with a scope by inserting a low value resistor (eg. 0.1 Ohms) in series with the motor and probing voltage across it (eg. on 0.1V/div scale the display would be 1A/div). However one scope connection will be ground, so the rest of the circuit (battery, controller, Arduino) must be 'floating' (ie. no electrical connection to anything else that is earthed or mains powered). Alternatively you could use a hall current sensor eg. ACS712 (sparkfun.com/datasheets/BreakoutBoards/0712.pdf) which is less accurate but safer. Apr 16 at 0:15

I quite sure that is measuring problem because if you loss power of 133W on driver, it totally melt down due to power converted to heat. Only reason for that is measuring tool can not average changing voltage or current to get correct value. I suggest to use RD low pass filter before measuring as shown. Note value for component just for example, you need to caluculate it by your self.

simulate this circuit – Schematic created using CircuitLab

Question

How come my BTS7960 DC Motor Driver using PWM has efficiency of only 50%?

Well, there are many possible reasons. Perhaps we can do some research to find out the reason.

1. I would suggest to wire up a test rig for testing the motor driver with a DC motor, as shown below.

Notes

a. The OP's BTS7971 driver has been replaced by the newer model BTN7971B. They have very similar characteristics and operation. So I have taken the liberty to test the newer driver. I think the OP can compare and contrast the two devices and modify my suggested test accordingly.

2. Now I am going to test the motor driver, measuring the voltage across the motor coil and the current passing through it.

3. The OP might have initialized his clamp meter with "VFC"

I googled to find that "VFC" introduces a low pass filter for AC measurements - cutting off above 400 Hz.

VFC might be good for AC measurement of mains frequency of 50Hz/60Hz.

However, if the OP is measuring at V/I values at PWM frequency 400Hz or above, signals should be much attenuated by the VFC low pass filter.

4. PWM Module for inputting to DC Motor Driver BTN7971b

The time has come to use my cheappy US$2 PWM module to test the motor driver. I will first try randomly, a couple of frequencies and duty cycles, to get a feeling how the OP get so low a 50% efficiency. See Refs 3, 4 for more details on how I use the cheapy toy. BTW, I am also going to use my cheapy, US$300 scope to measure the motor coil voltage and current. This morning I read a EESE Q&A about accuracy between using a scope and a DMM. This Q&A every well refreshes my memory of using a scope. Perhaps the OP and other newbie readers might also find it educational.

Differences between oscilloscope, multimeter, and power supply voltage readings - EESE, Asked 4 days ago, Active yesterday, Viewed 2k times

5. BTN7971b Dual Half Bridge Module Wiring Explanation

I started learning motor driver with L293 and L293D (with flyback diode) which consists of 4 half bridges. So I learned how to use one half bridge to dirve one DC motor in one direction, then use two half bridge to form one full bridge to driver in two directions (still one coil), then all four coils as two full bridges to drive a bipolar stepper motor with two coils. Later I learned how to use L298N with two full bridges to drive two DC motors or one bipolar stepper motor. Going step by step, from half bridge, to one full bridge, to two full bridges, everything makes sense to me.

However, when first using this dual BTN7971b module with two BTN7971b, each forming one full bridge with two half bridges, I found it confused, because the datasheet is very brief, assuming not to be used by newbies. So I think it is useful for me ninja and newbies alike to go back to the past 1970's to learn L293, L297, L298 etc which have detailed explanation and often with example app schematics and wiring diagrams I think knowing basic principle is very important, especially for the OP which is driving motors with huge (well, over 10A) current and power, which might be fatal, when things go wrong.

That is why, I have read basic things again, before doing the wiring part of this PWM motor efficiency test. I have included the basic wiring articles in the three L293D references (Refs 6 ~8) below. The tutorial by MakerPro is very newbie friendly and highly recommended.

6. PWM Sigal Waveform

Now I will be using this PWM signal to test the motor driver PWM efficiency.

7. The OP's power connecting wire and motor driver module getting too hot problem

The OP says the motor driver and connecting wires are getting "very hot". If the connecting wires are hot, the OP might have used wires too thin, and he might consider changing to a heavy duty wire. For me below 1A testing, I start with 500mA, using MIZU AWG #26 wires paralleled, or AWG #22 wires. If I find wires getting hot, I just parallel one more wire, and not bother checking out the AWG vs max current chart.

One the motor driver getting "too hot" problem, we need to do two things: (a) use a temperature sensor to measure the temperature at the IC or heat sink plate, (b) check the datasheet to see if it is within operation limit.

If it is really "too hot", we can do a couple of things, including: (a) use a bigger heat sink, (b) parallel more drivers to share current load. (Ref 11), (c) check if motor driver is a fake/counterfeit guy, and replace it with a real one.

AWG Wire Gauge and Current Limits (AWG#26 ~= 2A, #22 ~= 7A, #16 ~= 20A) - Power Stream, 2019oct18

To measure the working temperature, I am using an industrial grade sensor (Ref 10) as shown in the following photo:

Note

a. BTN7971B datasheet specifies operating characteristics over a range up to 150°C, and most important of all is that the IC has a built in temperature sensor and automatic thermal shut down/protection. So there is no worry that the IC will meltdown. In other words, talking about worries of "very hot", or using heat sink etc, is just amateurish. So I won't talk about it any more, or my reputation would be damaged, though I will use my cheapy CNY16, industrial grade, 0.1°C accuracy sensor to measure the IC heat sink temperature for the OP to compare and contrast, and his peace of mind.

8. Draft proposal on how to find the efficiency of a PWM motor driver

8.1 I have been hearing for years that the classic dual NPN BJT full H-bridge L298N motor driver module is energy inefficient, because of the energy loss of high Vce(sat) junctions of the H-bridge.

8.2 Now I am going to check out the energy efficiency of BJN7971B, a P/N-channel power MOSFET half bridge motor driver. Below is the draft testing plan.

/ to continue, ...

References

Appendices

Appendix A - UNI-T UT210E Pro Mini Digital Clamp Meter

• The OP's problem is most likely due to inadequate instrumentation that can not handle PWM. The OP doesn't need to test with another driver as the one s/he's got is not burning out so it can't be dissipating that much heat. Apr 10 at 8:22
• "Now I am going to test the motor driver ..." As explained before, SE is not a blog site. If you think you know why the efficiency calculations are so low then just answer that question. There's no need for a photo of another board or a schematic. Apr 10 at 9:22