ULN2003芯片工作原理

1 ULN2003A是什么芯片

ULN2003A高压大电流达林顿阵列芯片,包含七个具有公共发射极开路集电极达林顿对,一般采用DIP-16或SOP-16塑料封装。包含用于感应负载驱动的抑制**二极管**,输入固定在输出的对面,以简化电路板布局。

ULN2003A 是一款 16 引脚 IC,由 7 个达林顿对(每对受抑制二极管保护)组成,因此能够处理最多 7 个负载(可能是电感性的)。

简单来说,在单个 ULN2003 芯片中有 7 个驱动器。因此最多可以控制7 个负载。每个达林顿对可以处理最大 500mA 的负载,而峰值为 600mA。同样,每个达林顿对的最大输出电压为 50V。


2 ULN2003A引脚排列

2.1 引脚排列图如下


2.2 引脚描述如下

引脚9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该引脚必须接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通

感性负载:

线圈负载称为感性负载,电容负载称为容性负载,纯电阻负载称为阻性负载。例如,电动机是电感性负载,电容器是电容性负载,电炉电阻丝,白炽灯,碘码头灯等是电阻性负载。

电气或电子行业中负载阻抗特性的定义可以分为纯电阻,电感和电容类型。称为阻性,感性和容性。

续流作用:

续流是感性元件释放磁能的基本形式之一,简单地说,续流就是让电感的电流维持下去,而不是突然变为0。


3 ULN2003A CAD模型

3.1 ULN2003A电路符号


3.2 ULN2003A尺寸图


3.3 ULN2003A 3D模型


4 ULN2003A芯片工作原理

ULN2003A7 个相同的达林顿对组成。单个达林顿对由两个双极晶体管组成,其最大工作值为 50V 和 500mA(峰值 600mA)。ULN2003A的每一对达林顿都串联一个2.7K的基级电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

LN2003也是一个7路反向器电路,即当输入端为高电平时,ULN2003输出端为低电平;当输入端为低电平时,ULN2003输出端为高电平。

简单来说,ULN2003其实就是用来放大电流的,增加驱动能力。比如说单片机输出引脚一般就输出几mA,是无法驱动电机、继电器或者电磁阀的,想要让直流电机转动需要500mA,而用ULN2003放大后,可以通过单片机的输出引脚直接控制这些设备。

达林顿对的这两个晶体管有一个共同的发射极,而它们的集电极是开路的。这是单达林顿对的电路图,内部电路采用连接达林顿晶体管,如下图所示:

达林顿管:

达林顿管就是两个三极管接在一起,极性只认前面的三极管。具体接法如下,以两个相同极性的三极管为例,前面为三极管集电极跟后面三极管集电极相接,前面为三极管射极跟后面三极管基极相接,前面三极管功率一般比后面三极管小,前面三极管基极为达林顿管基极,后面三极管射极为达林顿管射极,用法跟三极管一样,放大倍数是两个三极管放大倍数的乘积。

ULN2003A 具有续流二极管,可**防止反电动势**。ULN2003A 逻辑图如下图所示:


5 ULN2003A替代品

下面为 ULN2003A 替代品图,这里只是列举出来,大家在实际应用时,还需要考虑到引脚,封装和功能实现


6 ULN2003A引脚怎么接

INPUT引脚 1 到引脚 7输入 1 到输入 7,具有达林顿对的 7 个输入引脚,每个引脚都连接到晶体管的基极,可以使用 +5V 触发

OUTPUT:引脚 10 到引脚 16 是输出 1 到输出 7,它们是 7 个输入引脚的相应输出。只有当其各自的输入引脚为高电平(+5V)时,每个输出引脚才会接地。

电路的接地:接地参考电压 0V。

COM:用作测试引脚,是可选的。

这里需要注意的是:尽管按照官方文献要求,控制电压输入需要在5V,其实只需要超过2.5V的电平信号基本都能够算作是高电平。也就是说,3.3V的单片机的IO口的高电平输出就能够直接来进行ULN2003的控制输入了。


7 ULN2003A芯片应用

1、ULN2003A 芯片基本电路

下面的电路是一个基本电路,主要用来评估 ULN2003A IC 的功能。

该电路将 LED 视为电路中的负载,将逻辑引脚(蓝色)视为连接到数字电路或 Arduino 等微控制器的引脚。

LED 的正极引脚连接到正负载电压,而负极引脚连接到 IC 的输出引脚,这是因为当 IC 的输入引脚变重时,相应的输出引脚会接地。

当 LED 的负极接地时,电路完成,LED 发光。

连接到输出引脚的每个负载不得超过 50C 和 500mA。但是,通过将两个或更多输出引脚组合在一起,你可以运行更高的电流负载。

COM 引脚通过开关接地,,这意味着当该引脚接地时,所有输出引脚都将接地。


2、ULN2003步进电机驱动电路1


3、ULN2003步进电机驱动电路2

整体看下来:引脚1-7是输入信号;引脚10-16是输出信号,引脚8接地,引脚9接VCC。

  • 引脚1输入RL信号,相对应的输出引脚16控制的是一个继电器。当引脚1输入高电平,继电器开启;
  • 引脚2-5输入D、C、B、A信号,相对应的输出引脚15、14、13、12作为四相来控制四相五线步进电机;
  • 引脚6输入SPK信号,相对应的输出引脚11控制的是一个喇叭。当引脚6输入高电平,喇叭开启;
  • 引脚7输入M0T信号,相对应的输出引脚10控制的是一个直流电机。当引脚6输入高电平,直流电机启动。

由于单片机的引脚输出电流太低了,无法驱动大部分的设备。而ULN2003只相当于是一个开关,设备(负载)的供电是在外围电路上,而它能够通过微弱的单片机输出电流来控制外围电路的开闭。这某种程度上也可以说是,放大电流,增加驱动能力。


4、ULN2003步进电机驱动电路3

硬件连接
单片机:STM32F103ZET6
步进电机:28BYJ-48
驱动电路:ULN2003芯片的驱动板【TELESKY】5V 步进电机马达+ ULN2003驱动板5V测试模块板 (1套)
引脚连接:IN1:PC3、IN2:PC2、IN3:PC0、IN4:PC13、OUT1:步进电机4、OUT2:步进电机3、OUT3:步进电机2、OUT4:步进电机1、步进电机5:VCC电源正极(5V)、GND:共地、COM:VCC电源正极(5V)。
5V直流电源:STM32F103ZET6开发板上的5V电压引脚(下图中的VCC)。
之前提到:STM32的IO口高电平3.3V能够作为ULN2003的控制输入信号,这里再强调一次。

具体的硬件连接的图如下所示:

STM32控制程序
步进电机是一种将电脉冲转化为角位移的执行设备。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。我们可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时我们可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

28BYJ48型步进电机是四相八拍电机,电压为DC5V~DC12V。当对步进电机按一定顺序施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号使得步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A……),双(双相绕组通电)四拍(AB-BC-CD-DA-AB……),四相八拍(A-AB-B-BC-C-CD-D-DA-A……)。

所以说,要想启动步进电机只需要依次给各个相输入高电平信号就可以了。注意,当给某一相输入信号的时候,其他相要重新置0。也就是说,同一时刻只能保持有一个相。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "stm32f10x.h"
#include "delay.h"

//引脚连接
//IN1:PC3、IN2:PC2、IN3:PC0、IN4:PC13、

//步进电机初始化函数
void Motor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//开启时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_ResetBits(GPIOC,GPIO_Pin_13);//默认低电平
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
GPIO_ResetBits(GPIOC,GPIO_Pin_2);
GPIO_ResetBits(GPIOC,GPIO_Pin_3);

}

//步进电机正转函数
void Motorcw(void)
{
GPIO_SetBits(GPIOC,GPIO_Pin_13);//依次高电平输出
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
GPIO_ResetBits(GPIOC,GPIO_Pin_2);
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
delay_ms(10);

GPIO_ResetBits(GPIOC,GPIO_Pin_13);
GPIO_SetBits(GPIOC,GPIO_Pin_0);
GPIO_ResetBits(GPIOC,GPIO_Pin_2);
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
delay_ms(10);

GPIO_ResetBits(GPIOC,GPIO_Pin_13);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
GPIO_SetBits(GPIOC,GPIO_Pin_2);
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
delay_ms(10);

GPIO_ResetBits(GPIOC,GPIO_Pin_13);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
GPIO_ResetBits(GPIOC,GPIO_Pin_2);
GPIO_SetBits(GPIOC,GPIO_Pin_3);
delay_ms(10);

}

int main(void)
{
delay_init();//delay初始化函数
Motor_Init();
while(1)
{
Motorcw();
}
}

5、ULN2003 IC 作为继电器驱动器

电路所需组件:

继电器与 ARDUINO 的 ARDUINO 接口 - 直流负载(5V、12V、24V……)

继电器与 ARDUINO 的 ARDUINO 接口 – 交流负载 (~ 220 V)

我们可以使用继电器为低压高压电器(如 110/220 V、60/50 Hz 交流 电器)连接 LED。对于连接,交流电器见下面的电路图。

我们知道 ULN IC 是达林顿对 IC 并且芯片上有晶体管,我们知道晶体管有 3 个端子,即极、发射极集电极,因此输入的基极范围从1B 到 7B ,共发射极接地到所有七个驱动器和相应的集电极每个基本输入的输出。+12V 到 COM 点用于保护电路免受反电动势影响的反激二极管

ULN2003 IC作为继电器驱动器的工作原理

  • 初始条件–引脚 2 为低电平(输入),引脚 13 为低电平(输出)。
  • 按下连接在针脚 2 上的按钮,这将在针脚 2 处提供高电平信号。这将使 引脚 13的输出为高电平
  • ULN 的输入 1 (1B) 接收 高信号,作为 ULN 反转逻辑,将在输出 (1C) 处获得低信号
  • 继电器的一个端子连接到**+12 V电源(高电平),另一个端子从引脚 1C 变为低电平。这将使继电器线圈通电并将继电器杆吸引到常开 (NO) 触点。导致打开**连接到继电器的设备
  • 输出:按下按钮时,它会发出一个高信号,然后从针脚 13 发出一个高信号作为输出以触发继电器,这将打开直流或交流设备。当你松开按钮时,电器将关闭。

6、使用 ULN2003 IC 并口的步进电机驱动器

下图为一个易于构建的步进电机驱动器,可让你通过计算机的并行端口精确控制单极步进电机。有了步进电机,你可以搭建很多有趣的小玩意,比如机器人、电梯、PCB钻孔机、摄像头平移系统、自动喂鱼器等等。

这个步进电机控制器连接图使用 2 个端口电压是 5Volt 和 12V 以及四个电阻,一个齐纳二极管。

ULN2003(高压大电流达林顿晶体管阵列)/MC1413 的四线连接是一个 7 位 50V 500mA TTL 输入 NPN 达林顿驱动器,这足以控制诸如 KP4M4-001 之类的四相单极步进电机。


7、其他应用

  • 逻辑缓冲器
  • 继电器驱动器(用于驱动不同的负载)
  • 灯驱动器
  • LED显示驱动器(显示设备)
  • 电机(步进和直流有刷电机)驱动器
  • 用于使用数字电路驱动大电流负载
  • 可驱动大电流 LED
  • 数字电子产品中的逻辑缓冲器
  • 用作 Arduino 的触摸传感器