本文是關(guān)于直流電機(jī)使用的相關(guān)介紹。
51單片機(jī)的應(yīng)用中,電機(jī)控制方面的應(yīng)用也很多。在學(xué)習(xí)直流電機(jī)(PWM)之前,先使用GPIO控制電機(jī)的正反轉(zhuǎn)和停止。但不能直接使用GPIO來驅(qū)動電機(jī),需要用相應(yīng)的驅(qū)動芯片來實現(xiàn)。
這里使用ULN2003芯片來驅(qū)動電機(jī),實現(xiàn)的功能是:直流電機(jī)工作約5s后停止。
一、直流電機(jī)介紹
直流電機(jī)是指能將直流電能轉(zhuǎn)換成機(jī)械能(直流電動機(jī)),或?qū)?strong>機(jī)械能轉(zhuǎn)換成直流電能(直流發(fā)電機(jī))的旋轉(zhuǎn)電機(jī),它是能實現(xiàn)直流電能和機(jī)械能互相轉(zhuǎn)換的電機(jī)。
當(dāng)它作電動機(jī)運行時是直流電動機(jī),將電能轉(zhuǎn)換為機(jī)械能;作發(fā)電機(jī)運行時是直流發(fā)電機(jī),將機(jī)械能轉(zhuǎn)換為電能。
直流電機(jī)的結(jié)構(gòu)由定子和轉(zhuǎn)子兩大部分組成。
直流電機(jī)運行時靜止不動的部分稱為定子,定子的主要作用是產(chǎn)生磁場,由機(jī)座、主磁極、換向極、端蓋、軸承和電刷裝置等組成。
運行時轉(zhuǎn)動的部分稱為轉(zhuǎn)子,其主要作用是產(chǎn)生電磁轉(zhuǎn)矩和感應(yīng)電動勢,是直流電機(jī)進(jìn)行能量轉(zhuǎn)換的樞紐,所以通常又稱為電樞,由轉(zhuǎn)軸、電樞鐵心、電樞繞組、換向器和風(fēng)扇等組成。
直流電機(jī)沒有正負(fù)之分,在兩端加上直流電就能工作。需要知道直流電機(jī)的額定電壓和額定功率,不能使之長時間超負(fù)荷運作。在交換接線后,可以形成正反轉(zhuǎn)。
其中一種直流電機(jī)的參數(shù)如下:
軸長:8mm;軸徑:2mm;電壓1-6V;參考電流:0.35-0.4A;
直流電機(jī)外觀實物如下:

內(nèi)部結(jié)構(gòu)如下:

二、ULN2003芯片介紹
51單片機(jī)主要是用來控制而非驅(qū)動,如果直接使用芯片的GPIO管腳驅(qū)動大功率器件,要么將芯片燒壞,要么驅(qū)動不起來。所以要驅(qū)動大功率器件,比如電機(jī),就必須搭建外部驅(qū)動電路。
這里使用ULN2003芯片進(jìn)行驅(qū)動,該芯片在蜂鳴器使用時已經(jīng)介紹過,這里再重新介紹下。
ULN2003芯片是一個單片高電壓、高電流的達(dá)林頓晶體管陣列集成電路,不僅可以用來驅(qū)動直流電機(jī),還可以用來驅(qū)動五線四相步進(jìn)電機(jī),比如28BYJ-48步進(jìn)電機(jī)。
ULN2003是由7對NPN達(dá)林頓管組成,它的高電壓輸出特性和陰極箝位二極管可以轉(zhuǎn)換感應(yīng)負(fù)載。單個達(dá)林頓對的集電極電流是500mA。達(dá)林頓管并聯(lián)可以承受更大的電流。此電路主要應(yīng)用于繼電器驅(qū)動器,字錘驅(qū)動器,燈驅(qū)動器,顯示驅(qū)動器(LED氣體放電),線路驅(qū)動器和邏輯緩沖器。
ULN2003的每對達(dá)林頓管都有一個2.7K串聯(lián)電阻,可以直接和TTL或5V CMOS裝置。
ULN2003的主要特點:
500mA額定集電極電流(單個輸出)
高電壓輸出:50V
輸入和各種邏輯類型兼容
繼電器驅(qū)動器
UL2003N的邏輯框圖如下:

從上圖中可以理解該芯片的使用方法,其內(nèi)部相當(dāng)于非門電路,當(dāng)輸入高電平時輸出低電平,當(dāng)輸入低電平時輸出截止。
如果使用該芯片驅(qū)動直流電機(jī),只可實現(xiàn)單方向控制,電機(jī)一端接電源正極,另一端接芯片的輸出口。
如果想控制五線四相步進(jìn)電機(jī),則可將四路輸出接到步進(jìn)電機(jī)的四相上,點擊另一條線接電源正極。
三、在proteus中仿真實現(xiàn)對電機(jī)的驅(qū)動
使用ULN2003芯片控制五線四相步進(jìn)電機(jī),proteus仿真設(shè)計如下

芯片的輸入通過單片機(jī)的P1^0 ~ P1^5 IO口提供,輸出連接到步進(jìn)電機(jī)。
軟件設(shè)計如下:
/*
實現(xiàn)功能:ULN2003芯片控制直流電機(jī)轉(zhuǎn)動
[2023-12-13] zoya
*/
#include "reg52.h"
#include "intrins.h"
#include "typedef.h"
sbit moto1 = P1^0;
// 延時函數(shù),i=1時延時10us
void Delay(u16 i)
{
while(i--);
}
void main()
{
u8 i;
moto1 = 0; // 關(guān)閉電機(jī)
for(i=0;i<10;i++) {
moto1 = 1; // 開啟電機(jī)
Delay(5000); // 延時大約50ms
}
moto1 = 0; // 關(guān)閉電機(jī)
while(1)
{
}
}
仿真結(jié)果:
