树莓派智能车AlphaBot教程2:直流电机控制

来自丢石头百科


一台小车首先要有电机轮子,通过控制电机转动,小车实现不同方向行走。


电机可以是直流电机或者步进电机。 步进电机是以步阶方式分段移动,也就是每次只能控制转动一小段。所以步进电机的控制精度会很高,可以精确的控制转动距离,但是转速会比较慢。在控制精度要求很高的情况会用,例如机械手臂等。 而直流电机则相反,转速快,但是控制精度相对差。直流电机是通过电压控制,通电后电机就可以转,电压越大转速越快,电流方向决定电机转动方向。智能车多少采用直流电机控制。


直流电机通常采用H桥控制。H桥式 电机驱动 电路包括4个 三极管 和一个电机。要使电机运转,必须导通对角线上的一对三极管。电流可能会从左至右或从右至左流过电机,从而控制电机的转向。


102638lxnllxsbccvxvv9l.jpg

当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。电流将驱动电机顺时针转动。


135119s1h4dwtrvtwtd1fo.jpg

当Q2和Q3导通时,电流将从右至左流过电机。此时电流将驱动电机逆针转动。



135119dvdmr866jnsqy5dy.jpg


实际使用的时候,用分立元件制作H桥是很麻烦的,很多时候采用H桥集成电路,接上电源、电机和控制信号就可以使用了,比如常用的L293D、L298N、TB6612FNG等。




135120v6dldem5d5m1mm9k.png



135120lxtzah0nfyooauhh.png



上面两个图分别对应AlphaBot(L298P),AlphaBot2(TB6612FNG)的驱动电路图。这两个需要采用不同的芯片,但是控制方式是完全一样的。下面以TB6612FNG为例讲解。 这两个芯片都是对应A B两组H桥,分别控制两个电机。A组控制左轮,B组控制右轮。 每个电机分别由三个管脚控制,AIN1 AIN2两个管脚控制方向,PWMA通过PWM脉冲控制电机转动。 AIN1,AIN2电平一样时,电机不转,电平不一样时电机转动,转动方向和AIN1,AIN2的电平有关。 这里假设AIN1为低电平,AIN2为高电平时,电机正转,轮子向前走。BIN1为低电平,BIN2为高电平时,电机正转,轮子向前走。 控制原理

<tbody></tbody>
AIN1AIN2BIN1BIN2描述
0101左右电机正转,小车前进
1010左右电机反转,小车后退
0110右电机反转,左电机正转,小车右转
1001左电机反转,右电机正转,小车左转
0000左右电机停止,小车停止


下面对应arduino的程序。

void forward()
{
analogWrite(PWMA,Speed);
analogWrite(PWMB,Speed);
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,HIGH);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,HIGH);
}
void backward()
{
analogWrite(PWMA,Speed);
analogWrite(PWMB,Speed);
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,LOW);
digitalWrite(BIN1,HIGH);
digitalWrite(BIN2,LOW);
}
void right()
{
analogWrite(PWMA,50);
analogWrite(PWMB,50);
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,HIGH);
digitalWrite(BIN1,HIGH);
digitalWrite(BIN2,LOW);
}
void left()
{
analogWrite(PWMA,50);
analogWrite(PWMB,50);
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,LOW);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,HIGH);
}
void stop()
{
analogWrite(PWMA,0);
analogWrite(PWMB,0);
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,LOW);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,LOW);
}


如果程序转动方向和实际转动方向不一致,可能是电机接线方向和我们的假设不一样。可以更改电机接线或者修改电机对应的引脚。