【常用芯片】ULN2003工作原理及中文资料(实例:STM32驱动28BYJ48步进电机)

6 篇文章 33 订阅

ULN2003的基本介绍

ULN2003的概述

ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。一般采用DIP—16 或SOP—16 塑料封装。

ULN2003的主要特点:

  • ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
  • ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。

ULN2003的作用

ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中,可直接驱动继电器等负载输入5VTTL电平,输出可达500mA/50V。

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

 

ULN2003的引脚图和功能

ULN2003的引脚图

ULN2003的引脚功能

  • 引脚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脚信号输入端。

 

ULN2003工作原理驱动应用电路

ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成,每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

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

ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达500mA,9脚可以悬空。比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。

根据上面的原理,ULN2003的驱动应用电路的基本示例图,各个引脚的功能都标注在上面:

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

再介绍一个实际例程的ULN2003的驱动应用电路:

整体看下来:引脚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的本质了:

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

 

STM32驱动步进电机

硬件连接

  • 单片机: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。也就是说,同一时刻只能保持有一个相。

#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();
 }
}

 

©️2021 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值