概述
演示直流电机的控制。
示例程序
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 和 方向:
时间: 2024-12-29 07:27:28