飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

Arduion使用ULN2003APG驱动直流电机实现转速控制

Author:飘易 Source:飘易
Categories:物联网 PostTime:2019-8-25 21:40:35
正 文:

Arduion使用ULN2003APG驱动直流电机(3-6V),同时通过电位器实现控制直流电机的不同转速,本着最简电路的原则,不考虑复杂的稳定措施,下面就跟着飘易一起来设计这套硬件电路吧。


使用到的硬件:

1、Arduino UNO R3开发板

2、ULN2003APG驱动芯片

3、3-6V直流电机

4、电位器


Arduino UNO板子不多说。我们来看一下ULN2003驱动芯片。


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程序

打开 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电源。



【参考】:

1、ESP8266电源与供电问题

作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:没有了
下一篇:pure-ftpd创建只读账户(虚拟账户)
0条评论 “Arduion使用ULN2003APG驱动直流电机实现转速控制”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
目 录
飘易搜索
最新文章
相关文章
随机文章
© 2007-2019 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有