شحن مجاني للأوردرات فوق
1000 ج
رمضان كريم
2A Dual Channel H-Bridge for DC and Stepper Motors
The L298N is a high-voltage, high-current dual full-bridge driver designed to control inductive loads like DC motors and stepper motors. This module can drive two DC motors bidirectionally or one stepper motor with up to 2A per channel.

2A continuous current per channel
Full control of two DC motors
5V-35V operating range
PWM speed + direction control
| Driver IC | L298N Dual H-Bridge |
|---|---|
| Operating Voltage | 5V – 35V DC |
| Peak Current | 3A per channel (2A continuous) |
| Logic Voltage | 5V (compatible with 3.3V MCUs) |
| PWM Frequency | Up to 25kHz |
| Power Dissipation | 25W (with heatsink) |
| Control Signals | TTL/CMOS compatible |
| Dimensions | 43mm × 43mm × 27mm |

| Terminal | Function | Connection |
|---|---|---|
| +12V | Motor Power (5-35V) | Battery positive |
| GND | Ground | Battery negative |
| +5V | Logic Power (optional) | 5V (if jumper removed) |
| ENA | Channel A Enable | PWM capable pin |
| IN1/IN2 | Channel A Control | Digital pins |
| IN3/IN4 | Channel B Control | Digital pins |
| ENB | Channel B Enable | PWM capable pin |
| OUT1/OUT2 | Channel A Motor | Motor A terminals |
| OUT3/OUT4 | Channel B Motor | Motor B terminals |
// Motor A connections
const int enA = 9;
const int in1 = 8;
const int in2 = 7;
void setup() {
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
// Initial state - motor off
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
}
void loop() {
// Rotate clockwise at full speed
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(enA, 255); // Full speed
delay(2000);
// Rotate counter-clockwise at half speed
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(enA, 128); // Half speed
delay(2000);
// Motor brake
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
delay(1000);
// Motor stop
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
delay(1000);
}
const int stepsPerRevolution = 200; // Change for your stepper
const int in1 = 8, in2 = 7, in3 = 6, in4 = 5;
int stepDelay = 5; // ms between steps
void stepMotor(int step) {
switch(step) {
case 0: // 1000
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
break;
case 1: // 1100
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
break;
case 2: // 0100
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
break;
case 3: // 0110
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
break;
case 4: // 0010
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
break;
case 5: // 0011
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, HIGH);
break;
case 6: // 0001
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
break;
case 7: // 1001
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
break;
}
}
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void loop() {
// Rotate CW
for(int i=0; i<stepsPerRevolution; i++) { stepMotor(i % 8); delay(stepDelay); } delay(1000); // Rotate CCW for(int i=stepsPerRevolution; i>0; i--) {
stepMotor(i % 8);
delay(stepDelay);
}
delay(1000);
}
float readCurrent(int sensorPin) {
int rawValue = analogRead(sensorPin);
float voltage = rawValue * (5.0 / 1023.0);
float current = voltage / 0.1; // 0.1Ω sense resistor
return current;
}
void checkOverCurrent() {
if(readCurrent(A0) > 2.0) { // 2A threshold
digitalWrite(enA, LOW); // Emergency stop
Serial.println("OVER CURRENT!");
}
}
void smoothStart(int motorPin) {
for(int i=0; i<=255; i+=5) { analogWrite(motorPin, i); delay(50); } } void smoothStop(int motorPin) { for(int i=255; i>=0; i-=5) {
analogWrite(motorPin, i);
delay(50);
}
}
void processSerialCommands() {
if(Serial.available()) {
char cmd = Serial.read();
switch(cmd) {
case 'F': // Forward
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
break;
case 'B': // Backward
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
break;
case 'S': // Stop
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
break;
case '0'...'9': // Speed 0-9
int speed = map(cmd-'0', 0, 9, 0, 255);
analogWrite(enA, speed);
break;
}
}
}
No account yet?
Create an Account
Recent Comments