电机控制
直流减速电机
直流减速电机控制原理非常简单,当给电机两根线一个压差时,电机就会获得一个速度,压差越大,电机速度越大。最简单的方法是直接用电池正负极接电机两端,可以用于测试电机好坏。
电机驱动器
单片机能够输出5V的电压,但无法驱动电机,因为单片机输出电流的能力很小,即带负载能力小,带不动电机,因此需要一个驱动器,通过单片机控制驱动器,驱动器来输出电流驱动电机。常见直流减速电机驱动器如下:
TB6612具体控制方法
一个TB6612模块能够独立控制两个电机,控制一个电机需要3个单片机引脚,分别为起名为IN1,IN2,PWM。其中IN1和IN2用于控制电机旋转的方向,PWM用于控制电机旋转的速度。参见 https://zhuanlan.zhihu.com/p/83373994
给出一个控制四个电机的例程如下
1 void SetDirectionAndSpeed(int speed1, int speed2, int speed3, int speed4)
2 {
3 /*不同电机接线方向可能不同,改IN1 和 IN2的逻辑*/
4 if (speed1 < 0)
5 {
6 speed1 *= -1;
7 digitalWrite(IO_M1IN1, HIGH);
8 digitalWrite(IO_M1IN2, LOW);
9 analogWrite(IO_M1PWM, speed1);
10 }
11 else
12 {
13 digitalWrite(IO_M1IN1, LOW);
14 digitalWrite(IO_M1IN2, HIGH);
15 analogWrite(IO_M1PWM, speed1);
16 }
17 if (speed2 < 0)
18 {
19 speed2 *= -1;
20 digitalWrite(IO_M2IN1, HIGH);
21 digitalWrite(IO_M2IN2, LOW);
22 analogWrite(IO_M2PWM, speed2);
23 }
24 else
25 {
26 digitalWrite(IO_M2IN1, LOW);
27 digitalWrite(IO_M2IN2, HIGH);
28 analogWrite(IO_M2PWM, speed2);
29 }
30 if (speed3 < 0)
31 {
32 speed3 *= -1;
33 digitalWrite(IO_M3IN1, HIGH);
34 digitalWrite(IO_M3IN2, LOW);
35 analogWrite(IO_M3PWM, speed3);
36 }
37 else
38 {
39 digitalWrite(IO_M3IN1, LOW);
40 digitalWrite(IO_M3IN2, HIGH);
41 analogWrite(IO_M3PWM, speed3);
42 }
43 if (speed4 < 0)
44 {
45 speed4 *= -1;
46 digitalWrite(IO_M4IN2, HIGH);
47 digitalWrite(IO_M4IN1, LOW);
48 analogWrite(IO_M4PWM, speed4);
49 }
50 else
51 {
52 digitalWrite(IO_M4IN2, LOW);
53 digitalWrite(IO_M4IN1, HIGH);
54 analogWrite(IO_M4PWM, speed4);
55 }
56 }
注意
对于不同的电机接线方向可能不同,因此需要调试IN1和IN2的高低电平逻辑来使得速度为正时,电机确实向前转。