freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

51單片機控制四相步進電機畢業(yè)設(shè)計資料(已修改)

2025-08-18 05:07 本頁面
 

【正文】 51單片機控制四相步進電機  接觸單片機快兩年了,不過只是非常業(yè)余的興趣,實踐卻不多,到現(xiàn)在還算是個初學(xué)者吧。這幾天給自己的任務(wù)就是搞定步進電機的單片機控制。以前曾看過有關(guān)步進電機原理和控制的資料,畢竟自己沒有做過,對其具體原理還不是很清楚。今天從淘寶網(wǎng)買了一個EPSON的UMX1型步進電機,此步進電機為雙極性四相,接線共有六根,外形如下圖所示:  拿到步進電機,根據(jù)以前看書對四相步進電機的了解,我對它進行了初步的測試,就是將5伏電源的正端接上最邊上兩根褐色的線,然后用5伏電源的地線分別和另外四根線(紅、蘭、白、橙)依次接觸,發(fā)現(xiàn)每接觸一下,步進電機便轉(zhuǎn)動一個角度,來回五次,電機剛好轉(zhuǎn)一圈,說明此步進電機的步進角度為360/(45)=18度。地線與四線接觸的順序相反,電機的轉(zhuǎn)向也相反?! ∪绻脝纹瑱C來控制此步進電機,則只需分別依次給四線一定時間的脈沖電流,電機便可連續(xù)轉(zhuǎn)動起來。通過改變脈沖電流的時間間隔,就可以實現(xiàn)對轉(zhuǎn)速的控制;通過改變給四線脈沖電流的順序,則可實現(xiàn)對轉(zhuǎn)向的控制。所以,設(shè)計了如下電路圖:  制作的實物圖如下:  C51程序代碼為:代碼一include static unsigned int count。static unsigned int endcount。void delay()。void main(void) { count = 0。 P1_0 = 0。 P1_1 = 0。 P1_2 = 0。 P1_3 = 0。 EA = 1。 //允許CPU中斷 TMOD = 0x11。 //設(shè)定時器0和1為16位模式1 ET0 = 1。 //定時器0中斷允許 TH0 = 0xFC。 TL0 = 0x18。 //設(shè)定時每隔1ms中斷一次 TR0 = 1。 //開始計數(shù)startrun: P1_3 = 0。 P1_0 = 1。 delay()。 P1_0 = 0。 P1_1 = 1。 delay()。 P1_1 = 0。 P1_2 = 1。 delay()。 P1_2 = 0。 P1_3 = 1。 delay()。 goto startrun。} //定時器0中斷處理 void timeint(void) interrupt 1 { TH0=0xFC。 TL0=0x18。 //設(shè)定時每隔1ms中斷一次 count++。}void delay(){ endcount=2。 count=0。 do{}while(countendcount)。}  將上面的程序編譯,用ISP下載線下載至單片機運行,步進電機便轉(zhuǎn)動起來了,初步告捷!  不過,上面的程序還只是實現(xiàn)了步進電機的初步控制,速度和方向的控制還不夠靈活,另外,由于沒有利用步進電機內(nèi)線圈之間的“中間狀態(tài)”,步進電機的步進角度為18度。所以,我將程序代碼改進了一下,如下:代碼二include static unsigned int count。static int step_index。void delay(unsigned int endcount)。void gorun(bit turn, unsigned int speedlevel)。void main(void) { count = 0。 step_index = 0。 P1_0 = 0。 P1_1 = 0。 P1_2 = 0。 P1_3 = 0。 EA = 1。 //允許CPU中斷 TMOD = 0x11。 //設(shè)定時器0和1為16位模式1 ET0 = 1。 //定時器0中斷允許 TH0 = 0xFE。 TL0 = 0x0C。 // TR0 = 1。 //開始計數(shù) do{ gorun(1,60)。 }while(1)。} //定時器0中斷處理 void timeint(void) interrupt 1 { TH0=0xFE。 TL0=0x0C。 // count++。}void delay(unsigned int endcount){ count=0。 do{}while(countendcount)。}void gorun(bit turn,unsigned int speedlevel){ switch(step_index) { case 0: P1_0 = 1。 P1_1 = 0。 P1_2 = 0。 P1_3 = 0。 break。 case 1: P1_0 = 1。 P1_1 = 1。 P1_2 = 0。 P1_3 = 0。 break。 case 2: P1_0 = 0。 P1_1 = 1。 P1_2 = 0。 P1_3 = 0。 break。 case 3: P1_0 = 0。 P1_1 = 1。 P1_2 = 1。 P1_3 = 0。 break。 case 4: P1_0 = 0。 P1_1 = 0。 P1_2 = 1。 P1_3 = 0。 break。 case 5: P1_0 = 0。 P1_1 = 0。 P1_2 = 1。 P1_3 = 1。 break。 case 6: P1_0 = 0。 P1_1 = 0。 P1_2 = 0。 P1_3 = 1。 break。 case 7: P1_0 = 1。 P1_1 = 0。 P1_2 = 0。 P1_3 = 1。 } delay(speedlevel)。 if (turn==0) { step_index++。 if (step_index7) step_index=0。 } else { step_index。 if (step_index0) step_index=7。 } }  改進的代碼能實現(xiàn)速度和方向的控制,而且,通過step_index靜態(tài)全局變量能“記住”步進電機的步進位置,下次調(diào)用 gorun()函數(shù)時則可直接從上次步進位置繼續(xù)轉(zhuǎn)動,從而實現(xiàn)精確步進;另外,由于利用了步進電機內(nèi)線圈之間的“中間狀態(tài)”,步進角度減小了一半,只為9度,低速運轉(zhuǎn)也相對穩(wěn)定一些了。  但是,在代碼二中,步進電機的運轉(zhuǎn)控制是在主函數(shù)中,如果程序還需執(zhí)行其它任務(wù),則有可能使步進電機的運轉(zhuǎn)收到影響,另外還有其它方面的不便,總之不是很完美的控制。所以我又將代碼再次改進:代碼三include static unsigned int count。 //計數(shù)static int step_index。 //步進索引數(shù),值為0-7static bit turn。 //步進電機轉(zhuǎn)動方向static bit stop_flag。 //步進電機停止標(biāo)志static int speedlevel。 //步進電機轉(zhuǎn)速參數(shù),數(shù)值越大速度越慢,最小值為1,速度最快static int spcount。 //步進電機轉(zhuǎn)速參數(shù)計數(shù)void delay(unsigned int endcount)。//延時函數(shù),延時為endcount*void gorun()。 //步進電機控制步進函數(shù)void main(void) { count = 0。 step_index = 0。 spcount = 0。 stop_flag = 0。P1_0 = 0。 P1_1 = 0。 P1_2 = 0。 P1_3 = 0。EA = 1。 //允許CPU中斷 TMOD = 0x11。 //設(shè)定時器0和1為16位模式1 ET0 = 1。 //定時器0中斷允許 TH0 = 0xFE。 TL0 = 0x0C。 // TR0 = 1。 //開始計數(shù)turn = 0。speedlevel = 2。 delay(10000)。 speedlevel = 1。 do{ speedlevel = 2。 delay(10000)。 speedlevel = 1。 delay(10000)。 stop_flag=1。 delay(10000)。
點擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1