The BTS7960 is a high-current full-bridge motor driver module. The Key features are:
- Input voltage: 6V to 27V
- Maximum allowable current: 43 A
- PWM capability: up to 25 kHz
- Two PWM output pins for speed control in direct and reverse directions
- Two EN output pins to control motors
- Two IS input pins to protect against high current and heat

BTS7960 is a fully integrated high current half bridge for motor drive applications.
This contains one P- channel high side MOSFET and one N channel low side MOSFET with
an integrated driver IC in one package.
This module can be used to drive 2 wire huge current Motors .Not suitable for Stepper Motors .
In this post we will be using a huge current Motor 24v 250Watts like this :
A separate power source is required for this Motor.
24v 10Amp Metal SMPS is used for this source
This module has 12 pins:
Microcontroller pins (Low current):
- VCC: Module power supply – 5V
- GND: Ground
- IS-R: Input signal for detecting high current – Straight rotation
- IS-L: Input signal for detecting high current – Inverse rotation
- EN-R: PWM Signal for controlling motor speed – Straight rotation
- EN-L: PWM Signal for controlling motor speed – Inverse rotation
- PWM-R: for controlling motor RIGHT direction
- PWM-L: for controlling motor LEFT direction.
Motor pins (High current):
- M+: Motor Positive
- M-: Motor negative
- B+: Battery positive
- B+: Battery negative
- You cannot overload the BTN7960B to destruction. It will overheat and safely shut off. Then restart when it cools and the Enable line is pulsed low then high . Under voltage Shut Down: To avoid uncontrolled motion of the driven motor at low voltages the device shuts off . If the Supply voltage drops below 5.4V , The Motor driver will switched Off , And won’t turned on untill the Supply voltage increased to 5.5V Or more .
- Over temperature Protection: The BTS 7960 is protected against over temperature by an integrated temperature sensor. Over temperature leads to a shut down of both output stages.
- Current Limitation : The current in the bridge is measured in both switches, High and Low side.If the current reaching the limit current the switch is deactivated and the other switch is activated for a certain time.
- To get the Motor to move in an H-bridge the Enable inputs should be held high and PWM-A and PWM-B should be different polarity.
- Don’t pulse the enables and hold the PWM inputs at a DC level. Some old driver chips can do this. The BTN7960B doesn’t work that way.
- The naming convention is bit confusing.
- R PWM & L PWM pins can be pulled HIGH or LOW to enable Direction of Rotation.
- R-EN & L-EN pins are used for speed control using PWM.Generally , these 2 pins are connected together to a PWM pin of Arduino. AnalogWrite command is used to control speed.
Connect the Motor red wire to M+ and black wire to M-.
Connect B+ of module to positive of 24v 10amp power source . B- to negative of SMPS.
Make use of thick copper wires for power connection as the motor takes high current.
The module has 8 control pins.
Vcc is connected to 5v of Arduino & Gnd to Gnd of Arduino.
R_IS & L_IS are for current limit alarm outputs, which are not used in this demo.
R_EN & L_EN ins are Right,Left speed control pins .Both are connected together to D11 of Arduino. Note that we use a PWM enabled pin of Arduino for this.
L_PWM is connected to D10 , R_PWM is connected to D9. These 2 pins decide the direction control of the motor.

Now upload the following code to Arduino.
To run the motor in CW direction we make R_PWM pin High and L_PWM pin Low.
To make the motor run in CCW – R_PWM pin Low and L_PWM pin HIGH.
To stop the motor both pins are made LOW.
Speed is controlled using ANALOGWRITE function where the PWM pin is given a value from 0 to 255.
——————–
#define RPWM 9
#define LPWM 10
#define PWM 11
void motor_cw(){ //CLOCK WISE
digitalWrite (LPWM, LOW);
digitalWrite (RPWM, HIGH);
analogWrite (PWM, 255); // 0- 255
Serial.println (“MOTOR RUNS CW”);
}
void motor_ccw(){ //ANTI CLOCK WISE
digitalWrite (LPWM, HIGH);
digitalWrite (RPWM, LOW);
analogWrite (PWM, 255);
Serial.println (“MOTOR RUNS CCW”);
}
void motor_stop(){ //motor stop
digitalWrite (LPWM, LOW);
digitalWrite (RPWM, LOW);
analogWrite (PWM, 0);
Serial.println (“STOP”);
}
void setup() {
Serial.begin(9600);
Serial.println(“START”);
pinMode (RPWM, OUTPUT);
pinMode (PWM, OUTPUT);
pinMode (LPWM, OUTPUT);
}
void loop()
{
delay(2000);
motor_cw();
delay(5000);
motor_stop();
delay(5000);
motor_ccw();
}