บทความนี้ เราจะมาใช้ arduino ขับ Dual H-Bridge Motor Driver
Port name | Direction | Description | Usage |
VMS GND | / | connect to external power supply(6V~35V) | ENA(ENB) connected to H state will enable MOTORA(MOTORB) IN1(IN3) connected to 5V and IN2(IN4) to GND MOTORA(MOTORB) will move clockwise IN1(IN3) connected to GND and IN2(IN4) to 5V MOTORA(MOTORB) will move Anti-clockwise if you want to control speed you can connect the ENA(ENB) to PWM. |
ENA | Input | TTL Compatible Enable Input:the L state disables the bridge A | |
IN1 | Input | TTL Compatible Inputs of the Bridge A | |
IN2 | Input | TTL Compatible Inputs of the Bridge A | |
ENB | Input | TTL Compatible Enable Input:the L state disables the bridge B | |
IN3 | Input | TTL Compatible Inputs of the Bridge B | |
IN4 | Input | TTL Compatible Inputs of the Bridge B | |
M)TORA | Output | Output of the Bridge A | |
MOTORB | Output | Output of the Bridge B | |
CSA(CSB) | / | use for testing electric current of Bridge A(Bridge B) | |
UR1 UR2 UR3 UR4 | / | pull-up resistor | |
5V +5V | / | 5V output | |
5V Chip Enable Jumper | / | if connected,5V chip will work. |
int ENA=5;//connected to Arduino's port 5(output pwm) int IN1=2;//connected to Arduino's port 2 int IN2=3;//connected to Arduino's port 3 int ENB=6;//connected to Arduino's port 6(output pwm) int IN3=4;//connected to Arduino's port 4 int IN4=7;//connected to Arduino's port 7 void setup() { pinMode(ENA,OUTPUT);//output pinMode(ENB,OUTPUT); pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); digitalWrite(ENA,LOW); digitalWrite(ENB,LOW);//stop driving digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH);//setting motorA's directon digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW);//setting motorB's directon } void loop() { analogWrite(ENA,255);//start driving motorA analogWrite(ENB,255);//start driving motorB }
ตรงค่า analogWrite(ENA,255); คุณสามารถแก้ได้ตั้งแต่ 0-255 เพื่อปรับ speed motor นะครับ
ต้องการ กลับทางหมุนเมอร์เตอร์ ก็ให้เพิ่ม
digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW);//setting motorA's directon
สลับจาก HIGH เป็น LOW
ถ้าต้องการให้ มอเตอร์หยุดหมุน ก็เป็น LOW LOW เช่น
digitalWrite(IN1,LOW); digitalWrite(IN2,LOW);//setting motorA's directon
//==================
ตัวอย่างนี้ให้ไปใส่แทน void loop เดินนะครับ ผลที่ได้คือ มอเตอร์จะหมุนซ้าย ห้าวินาที หมุนขวา ห้าวินาที แล้วหยุดห้าวินาที แล้วหมุนซ้ายห้าวินาที แล้วทำซำๆ
void loop() {
digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW);//setting motorA's directon
analogWrite(ENA,255);//start driving motorA
analogWrite(ENB,255);//start driving motorB
delay(5000) ;
digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW);//setting motorA's directon
analogWrite(ENA,255);//start driving motorA
analogWrite(ENB,255);//start driving motorB
delay(5000) ;
digitalWrite(IN1,LOW); digitalWrite(IN2,LOW);//setting motorA's directon
analogWrite(ENA,255);//start driving motorA
analogWrite(ENB,255);//start driving motorB
delay(5000) ;
}
เพียงเท่านี้ก็สามารถขับ dc motor ได้แล้วครับ