PWM直流马达速度控制

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

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值