I have been doing some experiments with a motor drive using this IBT-2 module the past month, and therefore I like to add some findings to this very good review by adam_david_66.
My remarks is about:
- Switching losses and change of slew-rate.
- My use of the module with current sensing.
- General remarks to previous statements and about the use of this module.
This is a link to the datasheet of the two used power devises on the module from Infenion:
https://www.infineon.com/dgdl/Infineon-BTS7960-DS-v01_01-en.pdf?folderId=db3a304412b407950112b408e8c90004&fileId=db3a304412b407950112b43945006d5d&ack=t
If have not been able to find a detailed datasheet for BTS7960B, and I suppose it do not differ that much from BTS7960.
- Switching losses.
The module got a specified max switching frequency of 25 kHz. It is normal to use 20 kHz switching frequency on motors in order to avoid audio noise and obtain a reasonable efficiency in a reasonable speed range of a DC motor. The “standard” Arduino PWM frequency is 488 Hz, and it is in my opinion far too low for DC motors.
However, at 20 kHz, the switching losses of the IBT-2 can be about 10 times higher that the losses from Rds-on of the transistors.
I measured the temperature on the surface of the BTS7960B with a K-type thermocouple. I use 10 kHz PWM frequency on each half bridge size providing 20 kHz frequency to the motor. The module is supplied by 24 VDC. The mean DC current to a loaded motor was 6.6 Amp and the speed was 410 rpm and supplied motor voltage 1.5 V.
After 2 minutes, the temperature raised to 124 C and I stopped at 6 minutes when the temperature was 148 C. The specified max chip temperature is up to 150 C, and it was likely exceeded here. The losses due to Rds-on = (10 mOhm + 14 mOhm) x 6.6A2 = 1.05 W.
The switching time is about 4 us with a slew rate of about 6 V/us. The mean energy loss in transistor during a transition is 24 V/2 x 6.6 A x 4 us = 0.32 mJ. You have a switching event with a frequency of 40 kHz, so the calculated switching losses will be 40k x 0.32 mJ = 12.7 W.
Be aware, that these loses will be 4 times higher at 24 VDC compared to 12 VDC, because at 12 VDC the switching time is only 2 us with the same voltage slew rate.
Yes, you can change the slew rate by a modification of the module. I cannot guarantee, that this modification can cause some unexpected undesired behavior, but I tried it, and was able to reduce the losses with about 40 % in same test setup.
The datasheet above explains how pin 5 of the BTS7960 is used to program the switching behavior by adding a resistance from pin 5 to Gnd. On my two IBT-2 modules was used 10k resistors, one to each half bridge. It is resistor no. 1 and 5 from left seen in this photo of my IBT-2:
I made a short circuit of the two resistors and tried the same experiment. According to datasheet, the slew rate should increase to 11 V/us. I could measure about 24 V/2 us. Now the measured temperature became like this:
After 2 minutes, the temperature raised to 92 C and after 6 minutes it became 97 C. After 10 minutes it became 104 C. Therefore the switching losses indeed dropped significantly and about 40 %.
As adam_david_66 points out, the heat transfer to the heat sink could have been made better, but I discovered, that the heat sink got about 2/3 of the temperature rise I saw on the BTS7960B, so it is not that bad in my case and do provide some cooling.
I have also tried to parallel my two IBT-2 modules. The losses due to Rds-on will of cause be lower, but the switching losses remains the same, but the two modules will now share these losses, and I can say that the share the losses quite well in my case.
- Current sensing
I use the provided current sense capability of the module. This is diagram of the current sense circuit I use with the module and Arduino Nano V3. It is able to measure a signed current in the motor when used with four quadrant control:
The Arduino use Timer1 like you see in this diagram, and the timer triggers the Analog to Digital Converter, ADC to measure the current when Timer1 counter is at bottom, and it is with a 10 kHz frequency:
This is the standard way to control a DC motor with an H-bridge in four quadrants. I am surprised not to see this way of control in the tutorials here (perhaps I need to do the article). You need to make some hardware near programming of Timer1 and of ADC to do this. You may be able to find some libraries, that can do that – I am still not that good in finding these libraries.
The current I measure in this way have been about 30 % below the typical indicated values in datasheet of the BTS7960. Therefore I think, that you need to adjust for variations in each case. The datasheet allows for a significant variation and especially at lower current values. I noticed, that at a current of 0.5 Amp, the indicated current became significantly lower, so the indications seems to be somewhat un-linear.
I use the current signal for a current control loop with the Arduino software, and it works quite well. Motor current control is a good option to obtain fast control loops of DC motor speed and position.
- General remarks to previous statements and about the use of this module.
I agree, that the quality of these modules are questionable. I did see some problematic reviews before I ordered them at a price of about 3 euro each three month ago. I think they are OK for hobby projects and something that do not cause a safety hazard. I have looked for other modules able to handle currents and voltages in same range and not that expensive, and I was not able to find that.
Do you know of any other H-bridges able to handle about 24 VDC, 10 Amp and 20 kHz?
I have later seen an evaluation kit from STM designed for brushless DC-motors, and I might try that out. But then you need to learn about programming a STM32 processor. I have seen them sold from many electronics distributors for a price about 18 euro. The used power transistors seems to be able to handle significantly more power than the IBT-2. It might be the next project to learn about them. ![]()
https://www.st.com/en/evaluation-tools/b-g431b-esc1.html
My IBT-2 modules do also have the 10k resistors and the power devices got some weak marking of BTS7960B.


