單片機課程設計-基于AT89S52單片機控制的步進電機_第1頁
單片機課程設計-基于AT89S52單片機控制的步進電機_第2頁
單片機課程設計-基于AT89S52單片機控制的步進電機_第3頁
單片機課程設計-基于AT89S52單片機控制的步進電機_第4頁
單片機課程設計-基于AT89S52單片機控制的步進電機_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

單片機原理與應用課程設計【項目名稱】基于AT89S52單片機控制的步進電機【指導教師】XXX【班級】XXX【學號】XXX【姓名】XXX目錄一、項目概述 4二、項目要求 4三、知識要點 6(一)AT89C52的資料 8(二)ULN2003資料 13四、系統(tǒng)設計 17(一)系統(tǒng)框圖設計 17(二)說明 17五、硬件設計 18(一)電路原理圖 181、按鍵功能 202、驅(qū)動電路 20(二)元件清單 23六、軟件設計 24(一)程序流程圖 24(二)源程序 26(三)系統(tǒng)仿真及調(diào)試 361、硬件調(diào)試 372、軟件調(diào)試 37七、總結 38(一)遇到的問題及其解決方法 381、硬件部分 382、軟件部分 39(二)功能擴展 411、已經(jīng)實現(xiàn)的擴展功能 412、暫未實現(xiàn)的擴展功能預想 42一、項目概述 步進電機是一種將電脈沖轉(zhuǎn)換成相應角位移或線位移的電磁機械裝置,也是一種能把輸出機械位移增量和輸入數(shù)字脈沖對應的驅(qū)動器件。步進電機具有快速啟動、停止的能力,精度高,控制方便,因此,在工業(yè)上得到廣泛應用。二、項目要求基于AT89C52單片機的控制步進電機正反轉(zhuǎn),具體要求如下:1、開始通電時,停止位指示燈亮,步進電機停止工作。2、單片機分別接有按鍵開關K1、K2、K3、K4、K5用來控制步進電機的轉(zhuǎn)動,具體要求如下:(1)K1為正轉(zhuǎn)按鈕。當按下K1時,步進電機正轉(zhuǎn),同時正轉(zhuǎn)指示燈亮。(2)K2為反轉(zhuǎn)按鈕。當按下K2時,步進電機反轉(zhuǎn),正轉(zhuǎn)指示燈熄滅,同時反轉(zhuǎn)指示燈亮。(3)K4為加速按鈕。當步進電機處于正轉(zhuǎn)或反轉(zhuǎn)狀態(tài)時,每按下一次加速按鈕,步進電機將正轉(zhuǎn)或反轉(zhuǎn)加速一次,最高加速四次,達到最大速度后再按加速按鈕步進電機的狀態(tài)不再變化。(4)K5為減速按鈕。當步進電機處于正轉(zhuǎn)或反轉(zhuǎn)狀態(tài)時,每按下一次減速按鈕,步進電機將正轉(zhuǎn)或反轉(zhuǎn)減速一次,最高減速四次,減到最小速度后再按減速按鈕步進電機的狀態(tài)不再變化。(5)K3為步進電機停止按鈕。當按下K3時,步進電機將停止轉(zhuǎn)動。3、一位數(shù)碼管用來顯示步進電機當前速度的檔位。當步進電機開始轉(zhuǎn)動或按下加速減速按鈕開關后數(shù)碼管都會顯示相應數(shù)字,數(shù)碼管顯示的數(shù)字表示步進電機當前工作檔位。4、正傳采用1相激磁方式,反轉(zhuǎn)采用1~2相激磁方式。三、知識要點通過學習和查閱資料,本項目需要掌握如下知識:1、+5電源原理設計,USB供電接口的連接。2、單片機復位電路工作原理及設計。3、按鍵電路的設計。4、光隔離電路、驅(qū)動電路的原理及設計。5、步進電機工作原理及控制設計。6、AT89C52單片機引腳。7、單片機控制步進電機C語言程序設計。(一)AT89C52的資料引腳說明:VCC:供電電壓。

GND:接地。

P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口作為AT89C51的一些特殊功能口,管腳備選功能:

P3.0RXD(串行輸入口)

P3.1TXD(串行輸出口)

P3.2/INT0(外部中斷0)

P3.3/INT1(外部中斷1)

P3.4T0(記時器0外部輸入)

P3.5T1(記時器1外部輸入)

P3.6/WR(外部數(shù)據(jù)存儲器寫選通)

P3.7/RD(外部數(shù)據(jù)存儲器讀選通)

RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。

ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。(二)ULN2003資料ULN2003的內(nèi)部結構和功能:ULN是集成達林頓管IC,內(nèi)部還集成了一個消線圈反電動勢的二極管,可用來驅(qū)動繼電器。它是雙列16腳封裝,NPN晶體管矩陣,最大驅(qū)動電壓=50V,電流=500mA,輸入電壓=5V,適用于TTLCOMS,由達林頓管組成驅(qū)動電路。ULN是集成達林頓管IC,內(nèi)部還集成了一個消線圈反電動勢的二極管,它的輸出端允許通過電流為200mA,飽和壓降VCE約1V左右,耐壓BVCEO約為36V。用戶輸出口的外接負載可根據(jù)以上參數(shù)估算。采用集電極開路輸出,輸出電流大,故可直接驅(qū)動繼電器或固體繼電器,也可直接驅(qū)動低壓燈泡。通常單片機驅(qū)動ULN2003時,上拉2K的電阻較為合適,同時,COM引腳應該懸空或接電源。

ULN2003是一個非門電路,包含7個單元,但獨每個單元驅(qū)動電流最大可達350mA.資料的最后有引用電路,9腳可以懸空。比如1腳輸入,16腳輸出,你的負載接在VCC與16腳之間,不用9腳。

ULN2003的作用:ULN2003是大電流驅(qū)動陣列,多用于單片機、智能儀表、PLC、數(shù)字量輸出卡等控制電路中??芍苯域?qū)動繼電器等負載。輸入5VTTL電平,輸出可達500mA/50V。

ULN2003是高耐壓、大電流達林頓陳列,由七個硅NPN達林頓管組成。該電路的特點如下:ULN2003的每一對達林頓都串聯(lián)一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路直接相連,可以直接處理原先需要標準邏輯緩沖器。

ULN2003是高壓大電流達林頓晶體管陣列系列產(chǎn)品,具有電流增益高、工作電壓高、溫度范圍寬、帶負載能力強等特點,適應于各類要求高速大功率驅(qū)動的系統(tǒng)。

ULN2003是高耐壓、大電流、內(nèi)部由七個硅NPN達林頓管組成的驅(qū)動芯片。經(jīng)常在以下電路中使用,作為:1、顯示驅(qū)動2、繼電器驅(qū)動3、照明燈驅(qū)動4、電磁閥驅(qū)動5、伺服電機、步進電機驅(qū)動等電路中。ULN2003的每一對達林頓都串聯(lián)一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路直接相連,可以直接處理原先需要標準邏輯緩沖器來處理的數(shù)據(jù)。

ULN2003工作電壓高,工作電流大,灌電流可達500mA,并且能夠在關態(tài)時承受50V的電壓,輸出還可以在高負載電流并行運行。ULN2003的封裝采用DIP—16或SOP—16ULN2003在各種控制電路中常用它作為驅(qū)動繼電器的芯片,其芯片內(nèi)部做了一個消線圈反電動勢的二極管。ULN2003的輸出端允許通過IC電流200mA,飽和壓降VCE約1V左右,耐壓BVCEO約為36V。輸出電流大,故可以直接驅(qū)動繼電器或固體繼電器(SSR)等外接控制器件,也可直接驅(qū)動低壓燈泡。四、系統(tǒng)設計(一)系統(tǒng)框圖設計ATAT89C52單片機按鍵電路復位電路晶振電路電源電路驅(qū)動電路步進電機 圖4-1 基于AT89C52單片機的控制步進電機的控制框架(二)說明根據(jù)系統(tǒng)要求畫出基于AT89C52單片機的控制步進電機的控制框架如圖4-1所示。系統(tǒng)主要包括單片機、晶振電路,電源電路、按鍵電路、步進電機及驅(qū)動電路幾部分。五、硬件設計(一)電路原理圖根據(jù)圖4-1,可以設計出單片機控制步進電機的硬件電路圖,如4-2所示。其他各部分器件及功能如下:1、按鍵功能單片機分別接有按鍵開關K1、K2、K3、K4、K5用來控制步進電機的轉(zhuǎn)動,具體要求如下:(1)K1為正轉(zhuǎn)按鈕。當按下K1時,步進電機正轉(zhuǎn),同時正轉(zhuǎn)指示燈亮。(2)K2為反轉(zhuǎn)按鈕。當按下K2時,步進電機反轉(zhuǎn),正轉(zhuǎn)指示燈熄滅,同時反轉(zhuǎn)指示燈亮。(3)K4為加速按鈕。當步進電機處于正轉(zhuǎn)或反轉(zhuǎn)狀態(tài)時,每按下一次加速按鈕,步進電機將正轉(zhuǎn)或反轉(zhuǎn)加速一次,最高加速四次,達到最大速度后再按加速按鈕步進電機的狀態(tài)不再變化。(4)K5為減速按鈕。當步進電機處于正轉(zhuǎn)或反轉(zhuǎn)狀態(tài)時,每按下一次減速按鈕,步進電機將正轉(zhuǎn)或反轉(zhuǎn)減速一次,最高減速四次,減到最小速度后再按減速按鈕步進電機的狀態(tài)不再變化。(5)K3為步進電機停止按鈕。當按下K3時,步進電機將停止轉(zhuǎn)動。2、驅(qū)動電路單片機的輸出電流太小,不能直接與步進電機相連,需要增加驅(qū)動電路。對于電流小于0.5A的步進電機,可以采用UL2003類的驅(qū)動IC。ULN2003技術參數(shù)如下所示:最大輸出電壓:50V。最大連續(xù)輸出電流:0.5A。最大連續(xù)輸入電流:25mA。功耗:1W。如圖4-3所示為2001、2002、20030、2004系列驅(qū)動器引腳圖,左側(cè)1~7引腳為輸出端,接單片機P1口的輸出端,引腳8接地;右側(cè)10~16引腳為輸出端,接步進電機,引腳9接電源+5V,該驅(qū)動器可提供最高0.5A的電流。正轉(zhuǎn)采用1相激磁方式,反轉(zhuǎn)采用1~2相激磁方式。 1~7為輸入端 10~16為輸出端8號引腳接地 9號引腳接+5V電源驅(qū)動器引腳圖(二)元件清單AT89C52單片機控制步進電機系統(tǒng)元件清單如下表4-1所示。 表4-1 單片機控制步進電機系統(tǒng)元件清單六、軟件設計(一)程序流程圖程序設計流程圖如圖4-4所示,,主要包括鍵盤掃描模塊、步進電機正反轉(zhuǎn)切換模塊、步進電機停止及指示燈模塊。(二)源程序#include<REG52.H> //開始,只正轉(zhuǎn),不反轉(zhuǎn),用flag做全局變量來控制轉(zhuǎn)向#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlong#defineCLK_WISE0//順時針方向轉(zhuǎn)動#defineINVERSE1//逆時針方向轉(zhuǎn)動bitdirection=CLK_WISE;/***方向標志,取值為CLK_WISE或INVERSE*/staticuintspeedcount=0;//加速標志,越大轉(zhuǎn)速越快,最大到4,然后回歸到0,循環(huán)。 //程序中可以依據(jù)它來改變占空比//ucharstep[8]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03};//8個步ucharstep4[]={0x01,0x02,0x04,0x08,0x01,0x02,0x04,0x08};/*一相激磁,一整步*/ucharstep8[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};/*一、二相激磁,半步*/ucharth_0[8]={0x5D,0x85,0x9E,0xAE,0xBA,0xC2,0xC9,0xCF};//8個定時器值,高8位uchartl_0[8]={0x3D,0xEE,0x58,0x9E,0x3E,0xF7,0xBF,0x2C};//8個定時器值,低8位ucharshuma[8]={0x3f,0x06,0x5b,0x4f,0x66};//04//,0x7f ,0x66,0x6d,0x7d,0x07intstep_i=0;//當前處于哪一步sbitk1=P0^0; sbitk2=P0^1;sbitk3=P0^2;sbitD1=P0^5;sbitD2=P0^6;sbitD3=P0^7;ucharflag;//intstep_i=0;/***定時器t0***/voidtime0(void)interrupt1using1 //控制轉(zhuǎn)向 //方向反后,正轉(zhuǎn)快于反轉(zhuǎn)???難道是一二相激磁的原因?{ //P1=step4[step_i];//輸出電機控制信號 if(flag==1) //順時針轉(zhuǎn) { P1=step4[step_i];//輸出電機控制信號 TR0=1; step_i++; } else if(flag==2) //反時針轉(zhuǎn) { P1=step8[step_i];//輸出電機控制信號 TR0=1; step_i++; } if(step_i>7)//順時針到最后一步,需要調(diào)整到第一步 step_i=0; if(step_i<0)//順時針到第一步,需要調(diào)整到最后一步 step_i=7; TH0=th_0[speedcount];//根據(jù)當前速度設定定時器初值 TL0=tl_0[speedcount];}/****速度標志*****/voidint0_srv(void)interrupt0using0 //外部中斷0服務程序 //加速與減速結果相反,調(diào)整后,減速最小后,電機停止運動 ,難道是因為我把TR0設置取消了?{ if(INT0==0) //加速 { //TR0=1; while(!INT0); if(flag==1) {speedcount++; if(speedcount>4) { speedcount=4; } } if(flag==2) {speedcount++; if(speedcount>4) { speedcount=4; } }//最大為7,然后從0開始循環(huán) //沒次調(diào)速度,電機就會回到原來的位置,如果連續(xù)按加速,電機一直上下運動,因此把三句放到前面,值先調(diào)整變化,再改變速度 P2=shuma[speedcount]; TH0=th_0[speedcount];//根據(jù)當前速度設定定時器初值 TL0=tl_0[speedcount]; }}voidint1_srv(void)interrupt2using2 //外部中斷1服務程序{ if(INT1==0) { //TR0=1; while(!INT1); if(flag==1) {speedcount--; if(speedcount<=0) { speedcount=0; } } if(flag==2) {speedcount--; if(speedcount<=0) { speedcount=0; } } P2=shuma[speedcount]; TH0=th_0[speedcount];//根據(jù)當前速度設定定時器初值 TL0=tl_0[speedcount]; }}/*******加速********/voidmain(){P2=0x00; EA=1; TMOD=0x01; ET0=1;//定時器0初始化 //TR0=1; EX0=1; IT0=1;//外部中斷0 EX1=1; IT1=1;//外部中斷1 TH0=th_0[0]; TL0=th_0[0];//定時器0初始值 D3=0; while(1) { if(k3==0)//停止位 { P2=0x3f; flag=0; TR0=0; D1=1; D2=1; D3=0; speedcount=0; } if(k1==0)//正轉(zhuǎn){ flag=1; TR0=1; D1=0; D2=1; D3=1; } if(k2==0)//反轉(zhuǎn){ flag=2; TR0=1; D1=1; D2=0; D3=1; } }}(三)系統(tǒng)仿真及調(diào)試1、硬件調(diào)試硬件的調(diào)試主要是把電路各種參數(shù)調(diào)整到符合設計要求。具體步驟如下:先檢查排除硬件電路故障,包括設計性錯誤和工藝性障礙。一般原則是先靜態(tài)再動態(tài)利用萬能板或邏輯測試儀器,檢查電路中的各器件以及引腳是否連接正確,是否有短路故障。先要將AT89C52取下,對電路板進行通電檢查,通過觀察看是否有異常,然后用萬能表測試各電源電壓,若這些都沒有問題,則接上仿真機進行聯(lián)機調(diào)試觀察各接口電路是否正常。2、軟件調(diào)試軟件調(diào)試是利用仿真工具如PROTUES等進行在線仿真調(diào)試,除發(fā)現(xiàn)和解決程序錯誤外,也可以發(fā)現(xiàn)硬件故障。七、總結(一)遇到的問題及其解決方法1、硬件部分(1)焊接過程中芯片底座某個引腳不慎弄斷,不過整個電路設計中沒有用到那個引腳,所以影響不大。(2)有很多地方要接高電平或低電平,為了防止導線雜亂無章或方便檢測電路,我將焊接電路板的上面固定一條接高電平的導線,在下面固定一條接低電平的導線,采用這種方式后,電路板上的導線布局比較合理美觀了,電路性能檢測也非常方便。(3)連接用導線的絕緣皮非常薄,不耐高溫,焊接時容易被電烙鐵的高溫熔化從而導致線路短路,為避免此問題,焊接時盡量少用純金屬絲,不是焊接點的地方均需要有絕緣皮包裹導線,同時注意焊接時的細節(jié),不要將非焊接點的絕緣皮熔化了。(4)焊接發(fā)光二極管時犯了一個低級錯誤,本來應該二極管的正極接高電平負極接I/O口的,全部搞成了正極接I/O口負極接低電平,后來又得修改,造成了不小的麻煩。(5)完成設計作品后在使用過程中,發(fā)現(xiàn)數(shù)碼管的某一段始終不能顯示,即那一段始終是暗的,用萬用表檢查之后確定為焊接地方出現(xiàn)了技術上的問題,于是對癥下藥,對其重新焊接,將其他地方也進行了檢測及鞏固,之后產(chǎn)品性能總體效果不錯。2、軟件部分(1)開始的時候,步進電機只是振動,沒有轉(zhuǎn)動。程序中通過控制TR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論