PWM直流马达速度控制

PWM直流马达速度控制,第1张

        单片机的管脚输出其实只有两种情况高电平或者低电平。高电平使直流马达全速运转,低电平则使马达停止。那么如何解决马达速度快慢的问题呢。这就涉及到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也可以。以上的程序就使得轮子半速前进,然后再半速后退。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/874879.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存