一台小车首先要有电机轮子,通过控制电机转动,小车实现不同方向行走。 电机可以是直流电机或者步进电机。 步进电机是以步阶方式分段移动,也就是每次只能控制转动一小段。所以步进电机的控制精度会很高,可以精确的控制转动距离,但是转速会比较慢。在控制精度要求很高的情况会用,例如机械手臂等。 而直流电机则相反,转速快,但是控制精度相对差。直流电机是通过电压控制,通电后电机就可以转,电压越大转速越快,电流方向决定电机转动方向。智能车多少采用直流电机控制。 当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。电流将驱动电机顺时针转动。 当Q2和Q3导通时,电流将从右至左流过电机。此时电流将驱动电机逆针转动。 实际使用的时候,用分立元件制作H桥是很麻烦的,很多时候采用H桥集成电路,接上电源、电机和控制信号就可以使用了,比如常用的L293D、L298N、TB6612FNG等。 上面两个图分别对应AlphaBot(L298P),AlphaBot2(TB6612FNG)的驱动电路图。这两个需要采用不同的芯片,但是控制方式是完全一样的。下面以TB6612FNG为例讲解。 这两个芯片都是对应A B两组H桥,分别控制两个电机。A组控制左轮,B组控制右轮。 每个电机分别由三个管脚控制,AIN1 AIN2两个管脚控制方向,PWMA通过PWM脉冲控制电机转动。 AIN1,AIN2电平一样时,电机不转,电平不一样时电机转动,转动方向和AIN1,AIN2的电平有关。 这里假设AIN1为低电平,AIN2为高电平时,电机正转,轮子向前走。BIN1为低电平,BIN2为高电平时,电机正转,轮子向前走。 控制原理
下面对应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); } 如果程序转动方向和实际转动方向不一致,可能是电机接线方向和我们的假设不一样。可以更改电机接线或者修改电机对应的引脚。 |