概述
演示直流電機的控制。
示例程序
PWM控制直流電機
略過控制電機轉停的示例啦,有需要就把這里的 PWM 換成數字口輸出 HIGH 或 LOW 就行了。
// ---------------------------------------------------------------------------- // pwmMotor.ino // // Created 2015-06-11 // By seesea <seesea2517#gmail#com> // // PWM 控制直流電機轉速 // 其實就是之前的 PWM 控制 LED 的程序,完全一樣,只是硬件上加上一個三極管用來驅動電機而已 // // 11 腳接 NPN 三極管的基極,三極管集電極接電機一腳,電機另一腳接外接電源正極,三極管發射極接外接電源負,arduino 的 GND 也接到三極管發射極 // ---------------------------------------------------------------------------- const unsigned char motor = 11; const unsigned char sensor = A0; void setup() { pinMode(motor, OUTPUT); pinMode(sensor, INPUT); } void loop() { // 用 map 函數進行范圍的映射 analogWrite(motor, map(analogRead(sensor), 0, 1023, 0, 255)); }
上個接線圖和效果圖:
![]() |
![]() |
H橋控制直流電機
// ---------------------------------------------------------------------------- // hBridgeMotor.ino // // Created 2015-06-11 // By seesea <seesea2517#gmail#com> // // H 橋控制直流電機演示 // 通過 H 橋控制直流電機的轉動方向 // 先順時針轉一秒,再逆時針轉一秒,停一秒,重復前述動作 // // 根據 H 橋實際的電路進行接線。手頭沒有現成的芯片,用了四個三極管搭的粗糙的 H 橋原型來做的實驗 // ---------------------------------------------------------------------------- const unsigned char pinMotorCW = 10; // 接控制電機順時針轉的 H 橋引腳 const unsigned char pinMotorCCW = 11; // 接控制電機逆時針轉的 H 橋引腳 // 電機停轉 void motorStop() { digitalWrite(pinMotorCW, LOW); digitalWrite(pinMotorCCW, LOW); } // 電機順時針轉 void motorCW() { digitalWrite(pinMotorCW, HIGH); digitalWrite(pinMotorCCW, LOW); } // 電機逆時針轉 void motorCCW() { digitalWrite(pinMotorCW, LOW); digitalWrite(pinMotorCCW, HIGH); } void setup() { pinMode(pinMotorCW, OUTPUT); pinMode(pinMotorCCW, OUTPUT); } void loop() { motorCW(); delay(1000); motorCCW(); delay(1000); motorStop(); delay(1000); }
手工搭的 H 橋,太亂了就看個效果吧,建議直接用現成的芯片。
接了紅綠兩個 LED 用來直觀的看 PWM 和 方向:
![]() |
PWM + H 橋控制直流電機
同時控制直流電機的方向及轉速
// ---------------------------------------------------------------------------- // pwmHBridgeMotor.ino // // Created 2015-06-11 // By seesea <seesea2517#gmail#com> // // PWM 通過 H 橋控制直流電機 // 既控制電機的轉速,也控制電機的方向 // 控制電機順時針逐漸轉快,再逐漸轉慢,然后逆時針由慢轉快再轉慢,又回到順時針的轉動循環 // // 根據 H 橋實際的電路進行接線。手頭沒有現成的芯片,用了四個三極管搭的粗糙的 H 橋原型來做的實驗 // ---------------------------------------------------------------------------- const unsigned char pinMotorCW = 10; // 接控制電機順時針轉的 H 橋引腳 const unsigned char pinMotorCCW = 11; // 接控制電機逆時針轉的 H 橋引腳 // 電機停轉 void motorStop() { digitalWrite(pinMotorCW, LOW); digitalWrite(pinMotorCCW, LOW); } // 電機以參數設定的 pwm 值順時針轉 void motorCW(unsigned char pwm) { analogWrite(pinMotorCW, pwm); digitalWrite(pinMotorCCW, LOW); } // 電機以參數設定的 pwm 值逆時針轉 void motorCCW(unsigned char pwm) { digitalWrite(pinMotorCW, LOW); analogWrite(pinMotorCCW, pwm); } void setup() { pinMode(pinMotorCW, OUTPUT); pinMode(pinMotorCCW, OUTPUT); } void loop() { unsigned char i; // 順時針由慢到快 for (i = 0; i < 255; ++i) { motorCW(i); delay(10); } // 順時針由快到慢 for (i = 255; i > 0; --i) { motorCW(i); delay(10); } // 逆時針由慢到快 for (i = 0; i < 255; ++i) { motorCCW(i); delay(10); } // 逆時針由快到慢 for (i = 255; i > 0; --i) { motorCCW(i); delay(10); } }
用三極管搭的簡陋 H 橋就看個效果啦,建議直接用現成的芯片。
接了紅綠兩個 LED 用來直觀的看 PWM 和 方向:
![]() |