单片机的管脚输出其实只有两种情况高电平或者低电平。高电平使直流马达全速运转,低电平则使马达停止。那么如何解决马达速度快慢的问题呢。这就涉及到PWM,那么什么是PWM呢?简单地说就是单片机的管脚原来如果是输出高电平,那么使用了pwm后,这个管脚不再是一直输出高电平了,而是在一个周期内,先输出一段时间的高电平,其余的时间输出的是低电平。由于一个周期的时间非常短,所以如果这时用万用表去测量这个管脚的电压时,会发现不再是高电平的电压了例如高电平是5伏,现在测出来的就不在是5伏特了,而是低于5伏特了。到底是多少呢,这就要看一个周期内高电平与低电平时间的比例,这个比例专业用语称作占空比。占空比越高,说明高电平的时间越长,低电平的时间越短。输出的电压就越高,反之则越低。由于施加给马达的电压越高它的转速越快,反之越慢,所以利用PWM就可以调整直流马达的速度了。
例如esp8266开发板,drv8833马达驱动板驱动两个轮子:
#define IN_1 5 //GPIO15(D8)
#define IN_2 4 //GPIO13(D7)
#define IN_3 12 //GPIO2(D4)
#define IN_4 13 //GPIO0(D3)
void setup() {
pinMode(IN_1, OUTPUT);
pinMode(IN_2, OUTPUT);
pinMode(IN_3, OUTPUT);
pinMode(IN_4, OUTPUT);
}
//ESP8266一个引脚高电平另一个低电平,电机模块驱动电机正转或者反转。
//高电平引脚使用analogWrite设置占空比,就可以控制电机的转速。
void goAhead() {
digitalWrite(IN_1, LOW);
// digitalWrite(IN_2, HIGH);
digitalWrite(IN_3, LOW);
// digitalWrite(IN_4, HIGH);
analogWrite(IN_4, 127);
analogWrite(IN_2, 127);
}
void goBack() {
//digitalWrite(IN_1, HIGH);
digitalWrite(IN_2, LOW);
//digitalWrite(IN_3, HIGH);
digitalWrite(IN_4, LOW);
analogWrite(IN_1, 127);
analogWrite(IN_3, 127);
}
void loop(){
goAhead();
goBack();
}
为什么会出现127这个数字呢,这就涉及到 analogWrite函数的参数限制了,第一个参数是管脚名称,第二个就是占空比,如果占空比是100%,那么就输入255,如果是50%就是255/2,由于这能输入整数所以这里就输入127了,当然输入128也可以。以上的程序就使得轮子半速前进,然后再半速后退。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)