專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應(yīng)用測(cè)試 完善的開發(fā)代碼案例庫分享
從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!
提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力
提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)
在本文中,英銳恩單片機(jī)開發(fā)工程師們將講解如何使用89C51單片機(jī)控制步進(jìn)電機(jī)。步進(jìn)電機(jī)是當(dāng)前自動(dòng)化控制系統(tǒng)中應(yīng)用最為廣泛的電子原件之一,它的應(yīng)用涉及到了電子、機(jī)械、電機(jī)、計(jì)算機(jī)等多個(gè)領(lǐng)域知識(shí)。下面是有關(guān)如何將步進(jìn)電機(jī)與89C51單片機(jī)連接控制的簡(jiǎn)單教程。
一、步進(jìn)電機(jī)的運(yùn)行
我將在該方案中使用四相的步進(jìn)電機(jī)。通常,從四個(gè)線路的步進(jìn)電機(jī)中引出5或6條導(dǎo)線。在5根線中,一根是我們的vcc(外部電壓),四根重命名是階梯線。在6線中,2是我們的vcc(外部電壓),而重命名中的4是階梯線。
步進(jìn)電機(jī)工作在5伏到12伏。我在本文中使用的步進(jìn)電機(jī)是NEMA17。它是雙極步進(jìn)電機(jī)。NEMA 17步進(jìn)電機(jī)采取的每一步計(jì)數(shù)都增加了1.8度。因此,NEMA 17以200步完成一圈360(200 * 1.8 = 360)度的旋轉(zhuǎn)。在本文中,我們只關(guān)注旋轉(zhuǎn)步進(jìn)電動(dòng)機(jī)。
二、步進(jìn)電機(jī)的功耗
在帶負(fù)載的步進(jìn)旋轉(zhuǎn)過程中,步進(jìn)電機(jī)消耗0.1到1安培的電流。單片機(jī)無法輸出此電量。因此,我們無法將步進(jìn)電機(jī)直接與89C51單片機(jī)之類的單片機(jī)接口,該單片機(jī)的引腳可以輸出最大0.045安培的電流。
三、ULN2003驅(qū)動(dòng)器用于步進(jìn)電機(jī)
為了克服上述步進(jìn)電動(dòng)機(jī)的功率限制,我們需要一個(gè)外部電源,該電源可以驅(qū)動(dòng)重負(fù)載并為步進(jìn)電動(dòng)機(jī)的運(yùn)行提供足夠的功率。ULN2003是一種包含達(dá)林頓晶體管對(duì)的集成電路。ULN2003接受低功率輸入并輸出更大功率的信號(hào)。我決定使用此驅(qū)動(dòng)程序IC驅(qū)動(dòng)步進(jìn)電機(jī)。
四、如何使用8051單片機(jī)驅(qū)動(dòng)步進(jìn)電機(jī)
將8051(89C51)單片機(jī)端口1的低四位連接到ULN2003驅(qū)動(dòng)程序IC。89C51單片機(jī)無法輸出足夠的電壓或電流來驅(qū)動(dòng)電動(dòng)機(jī),因此需要驅(qū)動(dòng)器IC來滿足電動(dòng)機(jī)的電壓和電流的要求。 ULN2003的輸出連接到我們的步進(jìn)電機(jī)。將ULN2003的引腳8接地。在ULN2003引腳9上施加與電動(dòng)機(jī)相同的電壓。
步進(jìn)電機(jī)與89C51單片機(jī)的接口電路圖如下。在下面的GIF圖像中注意步進(jìn)電機(jī)采取的步驟。對(duì)于每個(gè)步驟,我們都必須將每個(gè)步驟引腳設(shè)為高電平,并遵循GIF圖像中顯示的模式。步進(jìn)電機(jī)的步進(jìn)銷/電線的顏色分別為黃色,棕色,黑色和綠色等。我們首先必須確認(rèn)一下步進(jìn)電線的圖,NEMA 17步進(jìn)電機(jī)模式如下GIF圖中所示。
五、基于8051單片機(jī)的步進(jìn)電機(jī)接口
代碼的編寫很簡(jiǎn)單,使用ceil ide作為軟件工具用c++語言編寫,用于編寫和編譯代碼。首先,包含必要的文件reg51.h。然后創(chuàng)建一個(gè)延遲函數(shù),以逐步提供一些延遲。此延遲非常重要,可以避免電動(dòng)機(jī)產(chǎn)生的反電動(dòng)勢(shì),否則步進(jìn)電動(dòng)機(jī)產(chǎn)生的反電動(dòng)勢(shì)會(huì)損壞控制器。你還可以通過減少延遲時(shí)間來加快電機(jī)旋轉(zhuǎn)速度。在主要功能中,我使用了一些命令來旋轉(zhuǎn)步進(jìn)電機(jī)。命令說明如下,這些命令采用十六進(jìn)制格式。
P1 = 0x01第一步使端口1的位0高。二進(jìn)制等效值 = 00000001
P1 = 0x00使端口1的所有位均為0,以進(jìn)行下一步。二進(jìn)制等效值 = 00000000
P1 = 0x02使端口1的位1高為第二步。二進(jìn)制等效值 = 00000010
P1 = 0x00將端口1的所有位設(shè)置為0,以進(jìn)行下一步。二進(jìn)制等效值 = 00000000
P1 = 0x04第三步使端口1的位2高。二進(jìn)制等效值 = 00000100
P1 = 0x00使端口1的所有位均為0,以進(jìn)行下一步。二進(jìn)制等效值 = 00000000
P1 = 0x08第四步將端口1的位3高電平。等效二值 = 00001000
你也可以單獨(dú)聲明這些位,并使它們的高電平和低電平足夠長(zhǎng)。while(1)循環(huán)一直沿順時(shí)針方向運(yùn)行電動(dòng)機(jī)。你還可以通過僅反轉(zhuǎn)命令來逆時(shí)針反轉(zhuǎn)方向,將最后一個(gè)命令(0x08)放在第一位,然后以相同的方式反轉(zhuǎn)其余命令的順序。
五、基于8051單片機(jī)控制步進(jìn)電機(jī)代碼
#include<reg51.h>
void delay(){ //產(chǎn)生可變延遲的函數(shù)
unsigned int i,j;
for( i=0;i<=30;i++)
for(j=0;j<1000;j++);
}
void main() //項(xiàng)目主函數(shù)
{
while(1){
P1=0x01; delay(); //Take first step
P1=0x00; delay();
P1=0x02; delay(); //Take second step
P1=0x00; delay();
P1=0x04; delay(); //Take third step
P1=0x00; delay();
P1=0x08; delay(); //Take fourth step
P1=0x00; delay();
}
}
以上就是英銳恩單片機(jī)開發(fā)工程師分享的使用89C51單片機(jī)控制步進(jìn)電機(jī)方法。英銳恩專注單片機(jī)應(yīng)用方案設(shè)計(jì)與開發(fā),提供8位單片機(jī)、16位單片機(jī)、32位單片機(jī)。