ULN2003是高耐壓、大電流復(fù)合晶體管陣列,由七個(gè)硅NPN 復(fù)合晶體管組成。一般采用DIP—16 或SOP—16 塑料封裝。
ULN2003的主要特點(diǎn):
ULN2003 的每一對(duì)達(dá)林頓都串聯(lián)一個(gè)2.7K 的基極電阻,在5V 的工作電壓下它能與TTL 和CMOS 電路直接相連,可以直接處理原先需要標(biāo)準(zhǔn)邏輯緩沖器來(lái)處理的數(shù)據(jù)。ULN2003 工作電壓高,工作電流大,灌電流可達(dá)500mA,并且能夠在關(guān)態(tài)時(shí)承受50V 的電壓,輸出還可以在高負(fù)載電流并行運(yùn)行。ULN2003的作用ULN2003是大電流驅(qū)動(dòng)陣列,多用于單片機(jī)、智能儀表、PLC、數(shù)字量輸出卡等控制電路中,可直接驅(qū)動(dòng)繼電器等負(fù)載。輸入5VTTL電平,輸出可達(dá)500mA/50V。
簡(jiǎn)單地說(shuō),ULN2003其實(shí)就是用來(lái)放大電流的,增加驅(qū)動(dòng)能力。比如說(shuō)單片機(jī)輸出引腳一般輸出就幾mA,是無(wú)法驅(qū)動(dòng)電機(jī)、繼電器或者電磁閥的,像要讓直流電機(jī)轉(zhuǎn)需要500mA,而用ULN2003放大后,可以通過(guò)單片機(jī)的輸出引腳直接控制這些設(shè)備。
?
ULN2003的引腳圖和功能 ULN2003的引腳圖ULN2003的引腳功能 引腳1:CPU脈沖輸入端,端口對(duì)應(yīng)一個(gè)信號(hào)輸出端;引腳2:CPU脈沖輸入端;引腳3:CPU脈沖輸入端;引腳4:CPU脈沖輸入端;引腳5:CPU脈沖輸入端;引腳6:CPU脈沖輸入端;引腳7:CPU脈沖輸入端;引腳8:接地;引腳9:該腳是內(nèi)部7個(gè)續(xù)流二極管負(fù)極的公共端,各二極管的正極分別接各達(dá)林頓管的集電極。用于感性負(fù)載時(shí),該腳接負(fù)載電源正極,實(shí)現(xiàn)續(xù)流作用。如果該腳接地,實(shí)際上就是達(dá)林頓管的集電極對(duì)地接通;引腳10:脈沖信號(hào)輸出端,對(duì)應(yīng)7腳信號(hào)輸入端;引腳11:脈沖信號(hào)輸出端,對(duì)應(yīng)6腳信號(hào)輸入端;引腳12:脈沖信號(hào)輸出端,對(duì)應(yīng)5腳信號(hào)輸入端;引腳13:脈沖信號(hào)輸出端,對(duì)應(yīng)4腳信號(hào)輸入端;引腳14:脈沖信號(hào)輸出端,對(duì)應(yīng)3腳信號(hào)輸入端;引腳15:脈沖信號(hào)輸出端,對(duì)應(yīng)2腳信號(hào)輸入端;引腳16:脈沖信號(hào)輸出端,對(duì)應(yīng)1腳信號(hào)輸入端。
?
ULN2003工作原理驅(qū)動(dòng)應(yīng)用電路ULN2003是高耐壓、大電流復(fù)合晶體管陣列,由七個(gè)硅NPN 復(fù)合晶體管組成,每一對(duì)達(dá)林頓都串聯(lián)一個(gè)2.7K 的基極電阻,在5V 的工作電壓下它能與TTL 和CMOS 電路直接相連,可以直接處理原先需要標(biāo)準(zhǔn)邏輯緩沖器來(lái)處理的數(shù)據(jù)。
LN2003也是一個(gè)7路反向器電路,即當(dāng)輸入端為高電平時(shí),ULN2003輸出端為低電平;當(dāng)輸入端為低電平時(shí),ULN2003輸出端為高電平。
ULN2003是一個(gè)非門電路,包含7個(gè)單元,單獨(dú)每個(gè)單元驅(qū)動(dòng)電流最zydxb達(dá)500mA,9腳可以懸空。比如1腳輸入,16腳輸出,你的負(fù)載接在VCC與16腳之間,不用9腳。
根據(jù)上面的原理,ULN2003的驅(qū)動(dòng)應(yīng)用電路的基本示例圖,各個(gè)引腳的功能都標(biāo)注在上面:
這里需要注意的是:盡管按照官方文獻(xiàn)要求,控制電壓輸入需要在5V,其實(shí)只需要超過(guò)2.5V的電平信號(hào)基本都能夠算作是高電平。也就是說(shuō),3.3V的單片機(jī)的IO口的高電平輸出就能夠直接來(lái)進(jìn)行ULN2003的控制輸入了。
再介紹一個(gè)實(shí)際例程的ULN2003的驅(qū)動(dòng)應(yīng)用電路:
整體看下來(lái):引腳1-7是輸入信號(hào);引腳10-16是輸出信號(hào),引腳8接地,引腳9接VCC。
引腳1輸入RL信號(hào),相對(duì)應(yīng)的輸出引腳16控制的是一個(gè)繼電器。當(dāng)引腳1輸入高電平,繼電器開(kāi)啟;引腳2-5輸入D、C、B、A信號(hào),相對(duì)應(yīng)的輸出引腳15、14、13、12作為四相來(lái)控制四相五線步進(jìn)電機(jī);引腳6輸入SPK信號(hào),相對(duì)應(yīng)的輸出引腳11控制的是一個(gè)喇叭。當(dāng)引腳6輸入高電平,喇叭開(kāi)啟;引腳7輸入M0T信號(hào),相對(duì)應(yīng)的輸出引腳10控制的是一個(gè)直流電機(jī)。當(dāng)引腳6輸入高電平,直流電機(jī)啟動(dòng)。這個(gè)時(shí)候大概就能理解ULN2003的本質(zhì)了:
由于單片機(jī)的引腳輸出電流太低了,無(wú)法驅(qū)動(dòng)大部分的設(shè)備。而ULN2003只相當(dāng)于是一個(gè)開(kāi)關(guān),設(shè)備(負(fù)載)的供電是在外圍電路上,而它能夠通過(guò)微弱的單片機(jī)輸出電流來(lái)控制外圍電路的開(kāi)閉。這某種程度上也可以說(shuō)是,放大電流,增加驅(qū)動(dòng)能力。
?
STM32驅(qū)動(dòng)步進(jìn)電機(jī) 硬件連接 單片機(jī):STM32F103ZET6步進(jìn)電機(jī):28BYJ-48驅(qū)動(dòng)電路:ULN2003芯片的驅(qū)動(dòng)板【TELESKY】5V 步進(jìn)電機(jī)馬達(dá)+ ULN2003驅(qū)動(dòng)板5V測(cè)試模塊板 (1套)引腳連接:IN1:PC3、IN2:PC2、IN3:PC0、IN4:PC13、OUT1:步進(jìn)電機(jī)4、OUT2:步進(jìn)電機(jī)3、OUT3:步進(jìn)電機(jī)2、OUT4:步進(jìn)電機(jī)1、步進(jìn)電機(jī)5:VCC電源正極(5V)、GND:共地、COM:VCC電源正極(5V)。5V直流電源:STM32F103ZET6開(kāi)發(fā)板上的5V電壓引腳(下圖中的VCC)。之前提到:STM32的IO口高電平3.3V能夠作為ULN2003的控制輸入信號(hào),這里再?gòu)?qiáng)調(diào)一次。
具體的硬件連接的圖如下所示:
STM32控制程序
步進(jìn)電機(jī)是一種將電脈沖轉(zhuǎn)化為角位移的執(zhí)行設(shè)備。通俗一點(diǎn)講:當(dāng)步進(jìn)驅(qū)動(dòng)器接收到一個(gè)脈沖信號(hào),它就驅(qū)動(dòng)步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動(dòng)一個(gè)固定的角度(即步進(jìn)角)。我們可以通過(guò)控制脈沖個(gè)數(shù)來(lái)控制角位移量,從而達(dá)到準(zhǔn)確定位的目的;同時(shí)我們可以通過(guò)控制脈沖頻率來(lái)控制電機(jī)轉(zhuǎn)動(dòng)的速度和加速度,從而達(dá)到調(diào)速的目的。
28BYJ48型步進(jìn)電機(jī)是四相八拍電機(jī),電壓為DC5V~DC12V。當(dāng)對(duì)步進(jìn)電機(jī)按一定順序施加一系列連續(xù)不斷的控制脈沖時(shí),它可以連續(xù)不斷地轉(zhuǎn)動(dòng)。每一個(gè)脈沖信號(hào)使得步進(jìn)電機(jī)的某一相或兩相繞組的通電狀態(tài)改變一次,也就對(duì)應(yīng)轉(zhuǎn)子轉(zhuǎn)過(guò)一定的角度。當(dāng)通電狀態(tài)的改變完成一個(gè)循環(huán)時(shí),轉(zhuǎn)子轉(zhuǎn)過(guò)一個(gè)齒距。四相步進(jìn)電機(jī)可以在不同的通電方式下運(yùn)行,常見(jiàn)的通電方式有單(單相繞組通電)四拍(A-B-C-D-A……),雙(雙相繞組通電)四拍(AB-BC-CD-DA-AB……),四相八拍(A-AB-B-BC-C-CD-D-DA-A……)。
所以說(shuō),要想啟動(dòng)步進(jìn)電機(jī)只需要依次給各個(gè)相輸入高電平信號(hào)就可以了。注意,當(dāng)給某一相輸入信號(hào)的時(shí)候,其他相要重新置0。也就是說(shuō),同一時(shí)刻只能保持有一個(gè)相。
#include "stm32f10x.h"#include "delay.h"http://引腳連接//IN1:PC3、IN2:PC2、IN3:PC0、IN4:PC13、//步進(jìn)電機(jī)初始化函數(shù)void Motor_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開(kāi)啟時(shí)鐘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);//默認(rèn)低電平GPIO_ResetBits(GPIOC,GPIO_Pin_0);GPIO_ResetBits(GPIOC,GPIO_Pin_2);GPIO_ResetBits(GPIOC,GPIO_Pin_3);}//步進(jìn)電機(jī)正轉(zhuǎn)函數(shù)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初始化函數(shù)Motor_Init(); while(1) {Motorcw(); }}
?