Arduion使用ULN2003APG驱动直流电机(3-6V),同时通过电位器实现控制直流电机的不同转速,本着最简电路的原则,不考虑复杂的稳定措施,下面就跟着飘易一起来设计这套硬件电路吧。
使用到的硬件:
1、Arduino UNO R3开发板
2、ULN2003APG驱动芯片
3、3-6V直流电机
4、电位器
Arduino UNO板子不多说。我们来看一下ULN2003驱动芯片。
ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。输入5V TTL电平,输出可达500mA/50V。ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。
该电路的特点如下: ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
看一下2003的引脚:
一共16个引脚,注意有凹槽的这边开始从1编号,一直到16:
引脚1:CPU脉冲输入端,端口对应一个信号输出端。 引脚2:CPU脉冲输入端。 引脚3:CPU脉冲输入端。 引脚4:CPU脉冲输入端。 引脚5:CPU脉冲输入端。 引脚6:CPU脉冲输入端。 引脚7:CPU脉冲输入端。 引脚8:接地。 引脚9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。 引脚10:脉冲信号输出端,对应7脚信号输入端。 引脚11:脉冲信号输出端,对应6脚信号输入端。 引脚12:脉冲信号输出端,对应5脚信号输入端。 引脚13:脉冲信号输出端,对应4脚信号输入端。 引脚14:脉冲信号输出端,对应3脚信号输入端。 引脚15:脉冲信号输出端,对应2脚信号输入端。 引脚16:脉冲信号输出端,对应1脚信号输入端。
本电路中,飘易用的四个引脚分别是1、8、9、16号引脚,具体怎么连接,下面细说。
转速约1000-2000转,轴长38mm,外径20mm。
重量:17g。
电压:3V~6V。
3V时,空转电流显示为0.14A,用手捏住电机轴,不让轴转,堵转电流为0.92A;
6V时,空转电流显示为0.18A,堵转电流为1.5A。
电位器是具有三个引出端、阻值可按某种变化规律调节的电阻元件。电位器通常由电阻体和可移动的电刷组成。当电刷沿电阻体移动时,在输出端即获得与位移量成一定关系的电阻值或电压。
注意看GND引脚接地,VCC引脚接arduino板子的5V电源,中间的IN接arduino的模拟输入口,比如A0。
总的接线如下:
ULN2003驱动 | arduino板 | 直流电机 |
1号引脚 | PWM模拟输出口,如 5号引脚 | - |
8号引脚 | GND | - |
9号引脚 | 5V VCC | - |
16号引脚 | - | 任意一个引脚 |
- | 5V VCC | 另外一个引脚 |
最后的接线成品图类似下面这样的:
打开 arduino IDE 编写代码:
#define DWQPIN A0 //电位器输入引脚 #define DJPWMPIN 5 //脉冲宽度调制PWM输出引脚 - 控制电机转速 int djSpeed = 0;// 直流电机转速 0-255 /* * 注意,直流电机的5V电源请不要使用Arduino的5V接口,会供电不足,导致Arduino板不断重启!Arduino板请接接9V/1A电源。 */ void setup() { Serial.begin(9600); } void loop() { //读取模拟量值 int sensorValue = analogRead(DWQPIN);// 电位器电压,读取模拟量 0-1023 djSpeed = map(sensorValue, 0, 1023, 0, 255); // 转换为0-255 analogWrite(DJPWMPIN, djSpeed);// 写入模拟量 Serial.print("sensor="); Serial.print(sensorValue); Serial.print("\t output="); Serial.println(djSpeed); delay(1000); }
上面的电路接法,如果没有其它额外的比较大的负载,是完全OK的,但是如果arduino板子还带着乐鑫的ESP8266 WIFI模组的话,就会造成供电不足的问题了,表现为:
1、当启动电机的时候,会造成wifi模组供电不足,wifi失去响应,发任何AT指令给ESP8266都没响应;
2、在最高转速时偶尔还会让Arduino板不断重启!
ESP8266 对外部电源的要求是出名的严格(耗电),外部电源不稳定可能会造成ESP模组莫名其妙的Reset。ESP8266模组使用手册中有提到的一个ESP8266的耗电量平常是100mA,最多是200mA。电流消耗可能依工作型态不同而不同,例如在持续传送资料时可能消耗电流平均值0-70mA,甚至到200mA。Espressif 针对ESP8266模组的电源消耗作了一个统计,发现当ESP8266模组使用802.11b 11Mbps资料传输时要消耗170mA的电流。
图片来源:ESP8266 Power Consumption
疑问1:使用Arduino Uno版的3.3V输出电源是否可以当做ESP8266的外部电源?
根据Arduino Uno的官方技术规格书中写到3.3V的输出电源只能提供50mA 的电流(DC Current for 3.3V Pin 50 mA),但是ESP8266的平常耗电量可能要0~100mA,因此感觉上这种供电方式似乎是不太足够的。但是有人做过测试,利用这种方式跑测试资料,开Client模式传资料时,整个板最多100mA,没出什么问题,但是在烧录程式时,板子就会变得不稳定。因此如我们从Arduino供电给ESP8266运作的技术文件上来看,实际上是不太足够的,特别时在开发阶段要烧录资料或修改程式都会有问题,甚至于在执行阶段要做资料传输工作电流有时是不够的,因此所以最好的方式还是要另接外部电源。否则在需要高电流的需求情况下,有可能ESP8266就宕机了。
疑问2:许多USB to Serial晶片会产出3.3V的DC,ESP8266模组是否可以使用这个3.3V的电压?
许多教学网站会使用到USB to Serial晶片(例如PL-2303HX 晶片),该晶片会提供 3.3V的直流电压,有些网站会直接利用这个输出接到ESP8266模组,并没有外接3.3V的电源,这是可行的吗?其实答案跟上面一样,有些会成功,有时会有问题,为什么?因为从FT2303 IC 内的技术规格书中提到内部有个5 to 3.3V的稳压电路,3.3V的输出电压为3.0V~3.6V,平均输出电压是3.3V,但在输出电流部份只有描述到5V输出端最大电流为150mA,但没写到3.3V输出端的最大输出电流是多少。那我们假设这晶片最大输出电流为150mA。因此我们的结论:使用PL-2302晶片供电给ESP8266模组有些时候可以,但在利用wifi传输数据时可能会不稳定。
方案一、直流电机的电源不使用Arduino的5V接口,会供电不足,另外接入独立的5V电源。电路连接改为:
ULN2003驱动 | arduino板 | 直流电机 | 独立5V电源 |
1号引脚 | PWM模拟输出口,如 5号引脚 | - | - |
8号引脚 | GND(共地) | - | GND(共地) |
9号引脚 | - | - | 5V VCC |
16号引脚 | - | 任意一个引脚 | - |
- | - | 另外一个引脚 | 5V VCC |
外接独立电源时,一共要注意把GND连到一起,否则电路无法按照预期工作。
方案二、WIFI模组外接独立的3.3V电源。
【参考】: