CAT | 基本电路
除了使用传感器对各种外部物理量进行感知之外,能够对实际物体的运动进行相应的控制也是互动设计中不可或缺的一部分。在所有这类动力装置中,电机显然是最常见、最基本、最便宜的解决方案了,常用的电机的种类有很多种,如直流电机,步进电机,伺服电机,减速电机等,并且每一种电机的控制方法都有所不同。
如果你是一个电子高手,控制普通的直流电机用几个三极管就行了,否则话像L293这样的芯片将是一个更好的选择。L293芯片的核心是两个H-桥,所有的H-桥芯片都具有如下一些引脚:
- 逻辑输入
- 逻辑电压
- 电源电压
- 电源输出
- 地
其中逻辑电压引脚采用与微控制器相同的电压和电流,电源电压采用与运行电机所需要的电压和电流。逻辑输入引脚连接到用来向H-桥输出控制信号的微控制器上的引脚,而电源输出引脚则连接到电机上。
这么专业的术语翻译到Arduino上可以这样来理解。首先,我们需要两套电源,一套用来给Arduino供电,一套用来给电机供电。其次,我们需要用到Arduino的数字I/O管脚来控制L293,并把电机接到L293上接受控制。说到这里,正好解释一下Arduino的供电系统,通常Arduino有三种供电方式:
- USB供电
- 电池供电
- 变压器供电
后两者在Arduino上统称为外部供电。供电方式的选择是通过Arduino上的电源选择跳线来实现的,当把跳线接到“USB”一端时,采用的是USB供电方式,这时整个Arduino及其附属电路上的电源都由PC的USB接口提供,此时电流一般比较小,只能驱动功率比较小的电路,如LED等。当把跳线接到“EXT”一端时,采用的是外部供电方式,这时一般能够驱动比较大的设备,如电机等。Arduino内部一套电源转换电路,可以用来将外部供电时的电压(6-12V)转换成内部所需要的5V电压,使用L293控制电机正是需要这两套电源。
下面这个就是基于L293D芯片的Arduino专用电机驱动扩展板,它能够用来驱动两个直流电机。
使用该扩展板来驱动直流电机非常简单,只需要将扩展板插到Arduino上,同时将直流电机连接到扩展板上的motors引脚上就可以了。
正如上面所提到的,此时应该采用Arduino的外部供电方式,并使用变压器或者电源为Arduino提供电力。这里我选用的是9V变压器和9V的直流电机:
电机扩展板上motors引脚的上面两针是用来接电机1的,下面两针是用来接电机2的。
电路连接好之后,剩下的工作就是如何用程序进行控制了。使用这一扩展板我们能够控制直流电机的转动方向和转动速度,其中对转动方向的控制是通过Arduino上的数字I/O引脚12和13来实现的,对转速的控制则是通过数字I/O引脚9和10来实现的。
如果要控制直流电机1,我们需要向引脚9输出相应的PWM信号来控制电机的速度,同时设置引脚12和13的高低电压来控制电机的方向。如果要控制直流电机2,则需要向引脚10输出相应的PWM信号来控制电机的速度,此时也是通过设置引脚12和13 的高低电压来控制电机的方向的。
电机扩展板上带有S1和S2两个按钮,分别对应于Arduino数字I/O的7号和6号管脚 ,并且在按下时为低电平。因此我们可以像下面的程序这样利用S1来控制电机1的正反转:
int switchPin = 7; // switch pin
int dir1Pin = 12; // direction 1
int dir2Pin = 13; // direction 2
int speedPin = 9; // spped pin
void setup() {
pinMode(switchPin, INPUT);
pinMode(dir1Pin, OUTPUT);
pinMode(dir2Pin, OUTPUT);
pinMode(speedPin, OUTPUT);
}
void loop() {
// switch is pressed
if (digitalRead(switchPin) == LOW) {
// set spped
analogWrite(speedPin, 250);
// set direction
digitalWrite(dir1Pin, LOW);
digitalWrite(dir2Pin, HIGH);
} else {
analogWrite(speedPin, 100);
digitalWrite(dir1Pin, HIGH);
digitalWrite(dir2Pin, LOW);
}
}
在将上述程序下载到Arduino上并运行起来之后,我们就可以通过按S1键,来改变电机的旋转速度和方向了:)
P.S. 在调试这一电机扩展板的奇遇是,在将其插入到Arduino Diecimila的贴片版本上时,发现MC33269异常热,并且电机偶尔才能工作。进一步设计发现如果把整个扩展板很好地插入到Arduino上时,5V和Gnd之间居然是短路的。一开始并没有发现问题在哪,后来才发现扩展板上的电容C9与USB接头的外壳短路了!将其锡去掉一下,并抬高扩展板时问题得到解决。实际使用时请检查下图电容下面的引脚是否与USB接口的外壳短路了,特别是对于贴片版本来讲,最好在通电前用万用表检查一下5V和Gnd之间的电阻值:)

No tags




