BTS7960 BTN7960N IBT_2 motor drive module

I am using 4 motor drive modules that are commonly found on EBay or Aliexpress.
I thought I would write some notes about it so that hopefully these notes will be of use to someone.

The modules look like this on top and have a thumping big heatsink on the back. More about that later. If you have a search about you will find there is a schematic for this on the net. This schematic appears in multiple places but appears to be the exact same schematic.

BTS7960 or BTN7960 which is it? The module can be listed as either or both on the usual sites.
The number refers to the part number of the power IC of which there are two on this board to make a full H bridge from two half H bridges.

The power IC is made by Infineon. The BTS7960B (TO263 package) was introduced Sep 2008 and end of life March 2009. The BTN7960B is listed as the replacement for the BTS7960 however its
announcement and retirement dates are the same. What is the difference? Not a great deal if you are doing a hobby project. Digging through the datasheets some parameters are a bit better on the BTN7960. Infineon list the current replacement as the BTN8982TA which pretty much looks the same but some parameters have got a bit better.

The module I got from Ebay has the BTS chips on it. I'm guessing that the reason there are so many of these boards out there for almost nothing is that this chip has not been made for 14 years so there probably was a lot of them left over surplus somewhere. Yay we get a really good high current drive board for very little. I don't know how long this will last. When the grey market surplus stock is used up they will probably disappear.

So some things I have noticed comparing the board to the schematic. They are different! There are 8 surface mount resistors on the board and we can group them into two blocks. Four resistors act as pull-down on A1-A4, the inputs to the 74HC244 octal buffer/driver. The other 4 are connected to the SR (slew rate) and IS (current sense and diagnostic) pins. In the circuit diagram all the resistors are 1K. On my board and all the boards I could find on line with a decent photo I could read have 10K resistors on SR and IS. The pull-down resistors are 30K. The schematic has the resistors as R2-R9 there is no R1. The sikscreen lists them as R1-R8. Oh dear :frowning:

If you care about the slew rate or are using the current sense output have a look at the board not the schematic.

My module has a 74HC244 octal buffer driver for the input signal (IN) and the inhibit signal (INH). In the schematic this is a 74AHC244 and only half of it is used. On my board and photos of other boards this is a 74HC244. It is a bit of a mystery why this is here. The BTS7960 datasheet says that the inputs can be driven directly from a microprocessor. It says the inputs are TTL/CMOS compatible schmitt triggers. The datasheet says high level input voltage (section 4.4.6) is at most 2.15V so it will work directly from a 3.3V or 5Vmicro.

So the presence of the 74HC244 is a mystery. Its not acting as a level shifter if you are using a 3.3V micro.

A look at the silkscreen next to the 8 pin input connector shows the top row of pins (1,3,5) as RPWM, R_EN, R_IS. The bottom row of pins (2,4,6) as LPWM, L_EN, L_IS. You would expect that RPWM would be for the right hand BTS7960, U3 on the schematic and LPWM for the left one.

NOT SO

In the schematic and buzzing out my board the top row (1,3,5) goes to U2 on the left and the bottom row (2,4,6) goes to U3 on the right.

It might have been nice if they had kept the input pin names the same as the Infineon datasheet.
R/LPWM goes to IN pin. Yes this would probably be driven by a PWM output from an Arduino
R/L_EN goes to INH (inhibit pin) hold this pin HIGH. LOW turns everything off
R/L_IS is the IS pin. Current sense and diagnostic output pin. I'm not going to delve into how to use this, That would be a whole article to itself. Remember to check what resistor is actually connected to your board if you are going to use it.

The board has a great big heatsink on the back and this is a problem. It is there for show more than anything. The BTS7960B is a TO263 package. The tab (metal back) of the package is soldered to the PCB and the die inside is in close thermal contact with the tab. Almost all of the heat comes out of the tab into the PCB. For the real low down see Infineon application note AN-2021-02

The PCB top if you look closely has large copper areas between the tabs and the motor connector and this is a good thing. Its the top PCB copper that is the main heat conductor. Looking at the back of the PCB with the heatsink off.

There are two pads with an array of via holes to carry the heat from the tab, through the board and the heatsink is against this side.

This is a terrible terrible idea. All those via holes are electrically connected to the tabs. The tabs are connected to the motor outputs. Now screw a big piece of aluminium across them. The ONLY thing stopping this from shorting the motor outputs together is the paint on the heatsink.

Also, the screws holding the heatsink to the board do not have enough clearance on the top side copper layer. The only thing stopping the screw heads from electrically connecting the heatsink to whatever is the top side copper pour around the screws is the top solder mask.

The heatsink has no thermal grease or other thermal conducting material and is not likely to be in good thermal contact with the PCB bottom which in turn is only thermally connected to the tab where the heat is actually coming from by vias through the board. This is not how you remove heat from a TO263 package. See application note listed above.

I'm leaving the heatsink off in my project.

One last thing. The battery negative supply and pin 8 are both GROUND. There is only one GROUND reference on this board. The battery GROUND is going to be a big wire. Pin 8 is going to be a little wire. The obvious is to have the Arduino GROUND connected to the battery negative and ALSO run a small wire from a GND pin on the Arduino to pin 8. This will create a ground loop. You will probably find a document by Handson Technology on how to wire up and use a BTS7960. Don't do what they show with GND. Look up ground loops.

Conclusion. BTS7960 is cheap and a lot of motor drive for little money. Some of the design is poor. Some of the design is why is that there? Documentation (Such that it is) does not correspond with the actual board and they are likey to go away when whatever surplus stock of these power IC get used up.

Happy hacking. Hope this is of use to someone.

3 Likes

That is an old design, considering its age there was not much to compete with it in its day. You are correct there are several versions of this available. I have some that have the HCT14 devices. They all work without problems for me.

Hi, @adam_david_66
Not sure how your schematic appeared to others, but it as black to me, So I down loaded it and ran it through Paint and it came up as white.

Not your fault just a quirk of the system it seems.

Thanks. Tom.. :smiley: :+1: :coffee: :australia:

Now that is an interesting concept that wasn't immediately obvious to me.

The PWM output of an Arduino, from the tutorial page.

PWM

Say we connect two of these PWM from an Arduino to the BTS7960 board, one to the left IC and one to the right with a board that does not have an inverter such as a 74HC14 on the board which appears to be the case for the cheap boards currently on sale. Say we set the left PWM to some duty cycle and the right to duty cycle 0 which is always low.

hbridge

When the left PWM is high the top left FET is on otherwise the lower FET is on. The right hand bottom FET is always on.

If you want to use the IS pin output to measure the current, the IS output is only active whilst the top FET is on. With this arangement you have to read the IS output in the window when the PWM is high. This needs careful choreography and gets harder and harder as the duty cycle gets shorter.

If however there is an inverter such as a 74HC14 on the motor board all the logic is inverted. Now the left bottom FET is active when the PWM is high and the TOP FET active when PWM low. The right top FET is always active.

This means that the right top FET is alway on and hence the IS output pin of the right hand BTS7960 is outputing the motor current all the time. No more tricky timing issues.

If you have a board that does not have an inverter on it but a buffer like 74HC244 which all the cheap boards on Ebay at the moment seem to have, the same logic inversion can be done in software.

If we want to have a PWM duty cycle of n where n is between 0 and 255 applied to the motor. In this case set the left hand PWM to (255-n) and the right PWM to 255 which is always high. This is exactly equivalent to the board with the 74HC14 inverter on it. The side not receiving the PWM signal has the IS pin active all the time with a continious output proportional the the motor current at any point in time.

Just for reference, attached are the Truth Table of BTS790 module. I removed the logo to prevent any copyright issues.

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:

  1. Switching losses and change of slew-rate.
  2. My use of the module with current sensing.
  3. 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.

  1. 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.

  1. 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.

  1. 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. :slightly_smiling_face:
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.

Thanks for the advice on the schematic png - I also loaded into Paint and resaved it to get white.
Tony

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.