概述
演示直流电机的控制。
示例程序
PWM控制直流电机
略过控制电机转停的示例啦,有需要就把这里的 PWM 换成数字口输出 HIGH 或 LOW 就行了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
上个接线图和效果图:
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 桥,太乱了就看个效果吧,建议直接用现成的芯片。
PWM + 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 桥就看个效果啦,建议直接用现成的芯片。