电机控制

  1. 直流减速电机

直流减速电机控制原理非常简单,当给电机两根线一个压差时,电机就会获得一个速度,压差越大,电机速度越大。最简单的方法是直接用电池正负极接电机两端,可以用于测试电机好坏。

../_images/tt%E9%A9%AC%E8%BE%BE.png
  1. 电机驱动器

单片机能够输出5V的电压,但无法驱动电机,因为单片机输出电流的能力很小,即带负载能力小,带不动电机,因此需要一个驱动器,通过单片机控制驱动器,驱动器来输出电流驱动电机。常见直流减速电机驱动器如下:

TB6612

../_images/TB6612.png

L298N

../_images/L298N.png
  1. TB6612具体控制方法

一个TB6612模块能够独立控制两个电机,控制一个电机需要3个单片机引脚,分别为起名为IN1,IN2,PWM。其中IN1和IN2用于控制电机旋转的方向,PWM用于控制电机旋转的速度。参见 https://zhuanlan.zhihu.com/p/83373994

  1. 给出一个控制四个电机的例程如下

 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的高低电平逻辑来使得速度为正时,电机确实向前转。