BTS7960 Motor Driver Overview
The Double BTS7960 is a fully integrated high-current 43A H-bridge motor driver module designed for demanding DC motor drive applications. Built around two Infineon BTS7960 half-bridge ICs configured as a full H-bridge, this module makes interfacing with microcontrollers like Arduino, ESP32, and Raspberry Pi straightforward thanks to its integrated driver ICs featuring logic-level inputs, current sense diagnostics, slew rate adjustment, and dead time generation.
The module includes comprehensive built-in protection against overtemperature, overvoltage, undervoltage, overcurrent, and short circuit conditions — making it an excellent choice for robotics, smart car platforms, electric vehicles, industrial automation, and any project requiring reliable high-current bidirectional DC motor control.
Features
- Dual BTS7960 half-bridge ICs in full H-bridge configuration
- Peak drive current of 43A per channel
- Motor supply voltage range: 6V to 27V DC
- Logic-level control inputs compatible with 3.3V and 5V microcontrollers
- PWM frequency capability up to 25 kHz
- Working duty cycle: 0% to 100%
- Current sense (IS) output pins for real-time current monitoring
- Integrated protection: overtemperature, overvoltage, undervoltage, overcurrent, and short circuit
- Over-voltage lock out and under-voltage shut down
- Isolated heat sink design for efficient thermal management
- Control mode: PWM or logic level
- Compact board size: 50mm × 50mm × 43mm (L × W × H)
- Weight: approximately 66g
Specifications
| Parameter | Value |
|---|---|
|
Driver IC
|
Dual BTS7960
|
|
Configuration
|
Full H-Bridge
|
|
Motor Supply Voltage (B+)
|
6V – 27V DC
|
|
Logic Input Voltage
|
3.3V – 5V
|
|
Peak Current
|
43A
|
|
Continuous Current
|
~10A (with adequate cooling)
|
|
PWM Frequency
|
Up to 25 kHz
|
|
Duty Cycle Range
|
0% – 100%
|
|
Operating Temperature
|
-40°C to +125°C
|
|
Board Dimensions
|
50mm × 50mm × 43mm
|
|
Weight
|
~66g
|
Schematic

Pin Descriptions
Control Input Header (8-Pin)
The 8-pin control header connects to your microcontroller. All logic inputs are active-high and compatible with both 3.3V and 5V logic levels.
| Pin | Label | Function | Description |
|---|---|---|---|
|
1
|
RPWM
|
Forward PWM Input
|
Forward level or PWM signal, Active High. Apply PWM here to control forward motor speed.
|
|
2
|
LPWM
|
Reverse PWM Input
|
Reverse level or PWM signal, Active High. Apply PWM here to control reverse motor speed.
|
|
3
|
R_EN
|
Forward Drive Enable
|
Forward drive enable input, Active High. Set LOW to disable forward drive.
|
|
4
|
L_EN
|
Reverse Drive Enable
|
Reverse drive enable input, Active High. Set LOW to disable reverse drive.
|
|
5
|
R_IS
|
Forward Current Sense
|
Forward drive side current alarm/sense output. Analog voltage proportional to motor current.
|
|
6
|
L_IS
|
Reverse Current Sense
|
Reverse drive side current alarm/sense output. Analog voltage proportional to motor current.
|
|
7
|
Vcc
|
+5V Logic Supply
|
+5V power supply input for the logic/control circuitry. Connect to microcontroller 5V output.
|
|
8
|
GND
|
Ground
|
Ground reference. Must be connected to the microcontroller ground.
|
Motor Power Screw Terminals
| Terminal | Label | Function | Description |
|---|---|---|---|
|
1
|
B+
|
Motor Power Supply (+)
|
Positive motor power supply input. 6V – 27V DC.
|
|
2
|
B−
|
Motor Power Supply (−)
|
Negative motor power supply / Ground.
|
|
3
|
M+
|
Motor Output (+)
|
Motor positive terminal connection.
|
|
4
|
M−
|
Motor Output (−)
|
Motor negative terminal connection.
|

How It Works
The BTS7960 module operates as a full H-bridge, which allows current to flow through a DC motor in both directions — enabling both forward and reverse rotation as well as dynamic braking.
H-Bridge Basics: An H-bridge uses four switching elements (in this case, integrated MOSFETs inside the BTS7960 ICs) arranged in an "H" pattern around the motor. By activating different pairs of switches, current flows through the motor in either direction:
- Forward rotation: RPWM receives a PWM signal (with R_EN and L_EN both HIGH) → current flows from M+ to M−
- Reverse rotation: LPWM receives a PWM signal (with R_EN and L_EN both HIGH) → current flows from M− to M+
- Brake/Stop: Both RPWM and LPWM set LOW → motor coasts to a stop
- Fast Brake: Both RPWM and LPWM set HIGH → motor terminals are shorted, causing rapid deceleration
Speed Control: Motor speed is controlled by varying the duty cycle of the PWM signal applied to either RPWM (forward) or LPWM (reverse). A higher duty cycle means more average voltage is applied to the motor, resulting in higher speed. The module supports PWM frequencies up to 25 kHz, which is above the audible range and helps reduce motor whine.
Current Sensing: The R_IS and L_IS pins output an analog voltage proportional to the current flowing through the respective half-bridge. This can be read by a microcontroller's analog input to monitor motor current for diagnostics, stall detection, or current limiting.
Wiring / Hookup Guide
What You'll Need
- Double BTS7960 43A Motor Driver Module
- Arduino Uno, Mega, Nano, ESP32, or compatible microcontroller
- DC motor (rated within 6V–27V range)
- External power supply appropriate for your motor (6V–27V DC, sufficient current rating)
- Jumper wires (for control connections)
- Appropriately rated wires for motor power connections
Wiring Diagram — Arduino Uno
Connect the module to an Arduino Uno as follows:
| BTS7960 Pin | Arduino Uno Pin | Notes |
|---|---|---|
|
RPWM
|
Pin 5 (PWM)
|
Must be a PWM-capable pin
|
|
LPWM
|
Pin 6 (PWM)
|
Must be a PWM-capable pin
|
|
R_EN
|
Pin 7 (Digital)
|
Or tie directly to 5V to keep always enabled
|
|
L_EN
|
Pin 8 (Digital)
|
Or tie directly to 5V to keep always enabled
|
|
R_IS
|
A0 (Analog)
|
Optional — for current monitoring
|
|
L_IS
|
A1 (Analog)
|
Optional — for current monitoring
|
|
Vcc
|
5V
|
Logic power supply
|
|
GND
|
GND
|
Common ground is essential
|
Motor Power Side:
| BTS7960 Terminal | Connection |
|---|---|
|
B+
|
External power supply positive (+)
|
|
B−
|
External power supply negative (−) / Ground
|
|
M+
|
Motor terminal 1
|
|
M−
|
Motor terminal 2
|
⚠️ Important: The motor power supply ground (B−) and the Arduino ground (GND) must be connected together (common ground) for the control signals to work properly. Do NOT power the motor from the Arduino's 5V or Vin pin — always use a separate external power supply rated for your motor's voltage and current requirements.
Arduino Example Code
Basic Motor Speed and Direction Control
This example demonstrates controlling a DC motor's speed and direction using the BTS7960 module with an Arduino.
// BTS7960 Motor Driver - Basic Speed & Direction Control
// Envistia Mall - envistiamall.com// Pin Definitions
const int RPWM = 5; // Forward PWM pin
const int LPWM = 6; // Reverse PWM pin
const int R_EN = 7; // Forward enable pin
const int L_EN = 8; // Reverse enable pinvoid setup() {
// Set all control pins as outputs
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(R_EN, OUTPUT);
pinMode(L_EN, OUTPUT);// Enable both channels
digitalWrite(R_EN, HIGH);
digitalWrite(L_EN, HIGH);Serial.begin(9600);
Serial.println("BTS7960 Motor Driver Ready");
}void loop() {
// --- Forward: Ramp up speed ---
Serial.println("Forward - Accelerating...");
for (int speed = 0; speed <= 255; speed += 5) {
analogWrite(RPWM, speed);
analogWrite(LPWM, 0);
delay(50);
}
delay(2000); // Run at full speed for 2 seconds// --- Forward: Ramp down speed ---
Serial.println("Forward - Decelerating...");
for (int speed = 255; speed >= 0; speed -= 5) {
analogWrite(RPWM, speed);
analogWrite(LPWM, 0);
delay(50);
}
delay(1000); // Pause 1 second// --- Reverse: Ramp up speed ---
Serial.println("Reverse - Accelerating...");
for (int speed = 0; speed <= 255; speed += 5) {
analogWrite(RPWM, 0);
analogWrite(LPWM, speed);
delay(50);
}
delay(2000); // Run at full speed for 2 seconds// --- Reverse: Ramp down speed ---
Serial.println("Reverse - Decelerating...");
for (int speed = 255; speed >= 0; speed -= 5) {
analogWrite(RPWM, 0);
analogWrite(LPWM, speed);
delay(50);
}
delay(1000); // Pause 1 second
}
Motor Control with Current Monitoring
This example adds current monitoring via the R_IS and L_IS pins:
// BTS7960 Motor Driver - Speed Control with Current Monitoring
// Envistia Mall - envistiamall.com// Pin Definitions
const int RPWM = 5;
const int LPWM = 6;
const int R_EN = 7;
const int L_EN = 8;
const int R_IS = A0; // Forward current sense
const int L_IS = A1; // Reverse current sense// Current sense scaling factor (approximate)
// The IS pin outputs ~8.5 kA/A (8500:1 ratio)
// With a 10k pull-down resistor: V_IS = I_motor * 10000 / 8500
// Adjust this calibration factor based on your setup
const float CURRENT_SCALE = 0.0269; // Amps per ADC unit (approximate)void setup() {
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(R_EN, OUTPUT);
pinMode(L_EN, OUTPUT);
pinMode(R_IS, INPUT);
pinMode(L_IS, INPUT);digitalWrite(R_EN, HIGH);
digitalWrite(L_EN, HIGH);Serial.begin(9600);
Serial.println("BTS7960 Motor Driver with Current Monitoring");
}// Drive motor forward at specified speed (0-255)
void motorForward(int speed) {
analogWrite(RPWM, speed);
analogWrite(LPWM, 0);
}// Drive motor in reverse at specified speed (0-255)
void motorReverse(int speed) {
analogWrite(RPWM, 0);
analogWrite(LPWM, speed);
}// Stop the motor
void motorStop() {
analogWrite(RPWM, 0);
analogWrite(LPWM, 0);
}// Read and display current
void readCurrent() {
int r_current_raw = analogRead(R_IS);
int l_current_raw = analogRead(L_IS);float r_current = r_current_raw * CURRENT_SCALE;
float l_current = l_current_raw * CURRENT_SCALE;Serial.print("Forward Current: ");
Serial.print(r_current, 2);
Serial.print(" A | Reverse Current: ");
Serial.print(l_current, 2);
Serial.println(" A");
}void loop() {
// Run forward at 50% speed
Serial.println("Running forward at 50% speed...");
motorForward(128);
delay(500);
readCurrent();
delay(2000);// Stop
motorStop();
delay(1000);// Run reverse at 75% speed
Serial.println("Running reverse at 75% speed...");
motorReverse(192);
delay(500);
readCurrent();
delay(2000);// Stop
motorStop();
delay(2000);
}
Motor Control Truth Table
| R_EN | L_EN | RPWM | LPWM | Motor Action |
|---|---|---|---|---|
|
HIGH
|
HIGH
|
PWM
|
LOW
|
Forward at PWM-controlled speed
|
|
HIGH
|
HIGH
|
LOW
|
PWM
|
Reverse at PWM-controlled speed
|
|
HIGH
|
HIGH
|
LOW
|
LOW
|
Coast / Stop (motor free-wheels)
|
|
HIGH
|
HIGH
|
HIGH
|
HIGH
|
Fast Brake (motor terminals shorted)
|
|
LOW
|
LOW
|
X
|
X
|
Disabled (motor free-wheels, driver off)
|
|
LOW
|
HIGH
|
X
|
X
|
Forward disabled, reverse available
|
|
HIGH
|
LOW
|
X
|
X
|
Reverse disabled, forward available
|
Application Tips and Best Practices
Power Supply Sizing
- Always use an external power supply rated for your motor's stall current, not just its running current. A motor that draws 5A running may draw 20A+ at stall.
- Add a large electrolytic capacitor (1000µF – 4700µF, voltage rated above your supply) across the B+ and B− terminals to absorb voltage spikes from motor switching.
Heat Management
- The module's aluminum heat sinks are designed for moderate loads. At sustained currents above 10A, consider adding active cooling (a small fan directed at the heat sinks).
- Monitor the heat sinks during initial testing. If they become too hot to touch comfortably (~60°C+), reduce the load or add cooling.
PWM Frequency Selection
- The default Arduino
analogWrite()PWM frequency (~490 Hz on most pins, ~980 Hz on pins 5 and 6) works well for most applications. - For quieter motor operation, you can increase the PWM frequency up to 25 kHz using timer register manipulation. Higher frequencies reduce audible motor whine but may slightly reduce efficiency.
Wire Gauge
- Use appropriately rated wire for the motor power connections. For currents up to 10A, use at least 16 AWG wire. For higher currents, use 12 AWG or heavier.
- Keep motor power wires as short as practical to minimize voltage drop and electromagnetic interference.
Common Ground
- Always connect the ground of your microcontroller to the GND pin of the BTS7960 module AND to the B− terminal of the motor power supply. A missing common ground is the most common cause of erratic behavior.
Flyback Protection
- The BTS7960 ICs include internal flyback diodes, so external flyback diodes across the motor terminals are generally not required. However, adding them does not hurt and provides an extra layer of protection for very inductive loads.
Troubleshooting
| Symptom | Possible Cause | Solution |
|---|---|---|
|
Motor does not spin
|
Enable pins (R_EN / L_EN) not set HIGH
|
Ensure both enable pins are driven HIGH or tied to 5V
|
|
Motor does not spin
|
No common ground between MCU and module
|
Connect Arduino GND to module GND and B−
|
|
Motor does not spin
|
Insufficient motor power supply voltage
|
Verify B+ voltage is within 6V–27V and supply can deliver required current
|
|
Motor spins in wrong direction
|
RPWM and LPWM swapped
|
Swap the RPWM and LPWM connections, or swap M+ and M− motor wires
|
|
Motor stutters or behaves erratically
|
Missing or inadequate decoupling capacitor
|
Add a 1000µF+ electrolytic capacitor across B+ and B−
|
|
Module overheats
|
Sustained current too high without cooling
|
Reduce load, add active cooling (fan), or use shorter duty cycles
|
|
Arduino resets when motor starts
|
Motor inrush current causing voltage dip
|
Use a separate power supply for the motor; do not share with Arduino
|
|
No current reading on IS pins
|
IS pins not connected or no pull-down resistor
|
Ensure IS pins are connected to analog inputs; some modules require an external pull-down resistor
|
Frequently Asked Questions
Q: Can I drive two motors with this module?
A: No. This module uses two BTS7960 ICs configured as a single full H-bridge to drive one DC motor bidirectionally. To drive two motors independently, you need two of these modules.
Q: Can I use this with a 3.3V microcontroller like the ESP32?
A: Yes. The control inputs accept logic levels from 3.3V to 5V, making it compatible with both 5V Arduino boards and 3.3V boards like the ESP32, ESP8266, and STM32.
Q: What is the maximum continuous current?
A: While the BTS7960 ICs are rated for a 43A peak current, continuous current depends heavily on cooling. With the stock heat sinks and no active cooling, plan for approximately 10A continuous. With active cooling (fan), you can sustain higher currents.
Q: Can I use this for a stepper motor?
A: No. This module is designed for brushed DC motors only. For stepper motors, use a dedicated stepper driver such as the A4988 or DRV8825.
Q: Do I need to use the enable pins?
A: The enable pins (R_EN and L_EN) must be HIGH for the driver to operate. You can either control them from your microcontroller (useful for emergency stop functionality) or tie them directly to 5V if you want the driver always enabled.
Ready to get started?
Purchase this module: Buy the Double BTS7960 43A High Power Motor Driver
Resources
- BTS7960 IC Datasheet: Infineon BTS7960 Datasheet (PDF)
This guide is provided by Envistia LLC / Envistia Mall for educational and technical reference purposes. Always follow proper electrical safety practices when working with high-current motor drivers. Specifications are based on manufacturer data and are subject to change without notice.