版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)</p><p><b> 摘要</b></p><p> 本文介紹了以89S52單片機(jī)為核心控制器的步進(jìn)電機(jī)控制系統(tǒng)的設(shè)計(jì)方法.利用單片機(jī)的位操作功能輸出步進(jìn)電機(jī)工作所需要的脈沖電壓/電流;利用單片機(jī)的通用同步/異步串行口與PC通信,接收PC送來的控制信號(hào),控制步進(jìn)電機(jī)的工作狀態(tài);也可以通過對按鍵的操作完成步
2、進(jìn)電機(jī)的手動(dòng)控制;通過在電機(jī)車軸上安裝牙輪磁環(huán),利用霍爾傳感器檢測電機(jī)的實(shí)時(shí)轉(zhuǎn)速;電機(jī)的當(dāng)前工作狀態(tài)、轉(zhuǎn)速、步長、步進(jìn)方式等均可以由PC或鍵盤來設(shè)定,并在LCD上顯示出來。</p><p> 同時(shí)本文詳細(xì)論述了整個(gè)系統(tǒng)的整體框圖和各模塊的具體功能。整個(gè)控制器的操作方便、快捷且性能穩(wěn)定可靠。當(dāng)然,在設(shè)計(jì)中存在的一些問題,以及影控制精度的因素,和解決這些問題的可行性方法都作了詳細(xì)的說明。</p>&l
3、t;p> 關(guān)鍵字:步進(jìn)電機(jī)單片機(jī)串行通信</p><p><b> Summary</b></p><p> This text introduces to take a machine of 89 S52s as the core controller to tread the design method that controls the syst
4、em into the electrical engineering.An operation function that makes use of a machine outputs to tread into the electrical engineering work need of pulse electric voltage electric current;Make use of a machine in general
5、 use synchronous the difference treads the string to go the and PCs correspondence, receiving the control signal that PC deliver, controling to tread into the</p><p> At the same time detailed treatise of t
6、his text the whole frame diagram of the whole system and concrete function of each mold piece.The operation convenience of the whole controller, fast and the function stability credibility.Certainly, some problems exist
7、in the design, and the ying control the factor of the accuracy, definitely reach agreement these problem of possibility methods all made the expatiation.</p><p> Key word: Step Motor Microcontrollor Uni
8、t</p><p> Series Communication</p><p><b> 第一章緒論</b></p><p> 步進(jìn)電機(jī)(Step Motor)又稱為脈沖電動(dòng)機(jī)或階躍電動(dòng)機(jī),是一種無刷直流電動(dòng)機(jī),作為執(zhí)行元件,是機(jī)電一體化的關(guān)鍵產(chǎn)品之一, 廣泛應(yīng)用在各種自動(dòng)化控制系統(tǒng)中。步進(jìn)電動(dòng)機(jī)可以用數(shù)字信號(hào)直接進(jìn)行開環(huán)控制,系統(tǒng)簡單
9、;位移與輸入脈沖信號(hào)數(shù)相對應(yīng),步距誤差不長期積累,可以組成高精度的控制系統(tǒng);無刷,易于啟動(dòng)、停止、正反轉(zhuǎn)及變速,具有自鎖能力。隨著微電子和計(jì)算機(jī)技術(shù)的發(fā)展,步進(jìn)電機(jī)的需求量與日俱增,在各個(gè)國民經(jīng)濟(jì)領(lǐng)域都有應(yīng)用</p><p> 單片機(jī)是20世紀(jì)70年代中期發(fā)展起來的一種面向控制的大規(guī)模集成電路模塊,具有功能強(qiáng)、體積小、可靠性高、價(jià)格低廉等特點(diǎn),在工業(yè)控制、數(shù)據(jù)采集、智能儀表、機(jī)電一體化、家用電器等領(lǐng)域得到了廣泛
10、的應(yīng)用。由于單片機(jī)的精確位控制功能,在實(shí)時(shí)脈沖控制領(lǐng)域的應(yīng)用不斷擴(kuò)大。</p><p> 利用單片機(jī)控制步進(jìn)電機(jī),系統(tǒng)簡單,可靠。通過單片機(jī)輸出一組脈沖序列,經(jīng)過電流驅(qū)動(dòng)器,進(jìn)行精確控制。</p><p> 第二章步進(jìn)電機(jī)原理</p><p> 步進(jìn)電機(jī)是一種將電脈沖轉(zhuǎn)化為角位移的執(zhí)行機(jī)構(gòu)。當(dāng)步進(jìn)驅(qū)動(dòng)器接收到一個(gè)脈沖信號(hào),它就驅(qū)動(dòng)步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動(dòng)一個(gè)
11、固定的角度(稱為“步距角”),它的旋轉(zhuǎn)是以固定的角度一步一步運(yùn)行的。可以通過控制脈沖個(gè)數(shù)來控制角位移量,從而達(dá)到準(zhǔn)確定位的目的;同時(shí)可以通過控制脈沖頻率來控制電機(jī)轉(zhuǎn)動(dòng)的速度和加速度,從而達(dá)到調(diào)速的目的。步進(jìn)電機(jī)可以作為一種控制用的特種電機(jī),利用其沒有積累誤差(精度為100%)的特點(diǎn),廣泛應(yīng)用于各種開環(huán)控制。</p><p> 現(xiàn)在比較常用的步進(jìn)電機(jī)包括反應(yīng)式步進(jìn)電機(jī)(VR)、永磁式步進(jìn)電機(jī)(PM)、混合式步進(jìn)電
12、機(jī)(HB)和單相式步進(jìn)電機(jī)等。</p><p> 永磁式步進(jìn)電機(jī)一般為兩相,轉(zhuǎn)矩和體積較小,步進(jìn)角一般為7.5度 或15度;反應(yīng)式步進(jìn)電機(jī)一般為三相,可實(shí)現(xiàn)大轉(zhuǎn)矩輸出,步進(jìn)角一般為1.5度,但噪聲和振動(dòng)都很大。反應(yīng)式步進(jìn)電機(jī)的轉(zhuǎn)子磁路由軟磁材料制成,定子上有多相勵(lì)磁繞組,利用磁導(dǎo)的變化產(chǎn)生轉(zhuǎn)矩。 混合式步進(jìn)電機(jī)是指混合了永磁式和反應(yīng)式的優(yōu)點(diǎn)。它又分為兩相和五相:兩相步進(jìn)角一般為1.8度而五相步進(jìn)角一般為 0.
13、72度。這種步進(jìn)電機(jī)的應(yīng)用最為廣泛,也是本次細(xì)分驅(qū)動(dòng)方案所選用的步進(jìn)電機(jī)。</p><p> 電機(jī)固有步距角: </p><p> 它表示控制系統(tǒng)每發(fā)一個(gè)步進(jìn)脈沖信號(hào),電機(jī)所轉(zhuǎn)動(dòng)的角度。電機(jī)出廠時(shí)給出了一個(gè)步距角的值,如86BYG250A型電機(jī)給出的值為0.9°/1.8°(表示半步工作時(shí)為0.9°、整步工作時(shí)為1.8°),這個(gè)步距角可以稱之為‘
14、電機(jī)固有步距角’,它不一定是電機(jī)實(shí)際工作時(shí)的真正步距角,真正的步距角和驅(qū)動(dòng)器有關(guān)。</p><p><b> 步進(jìn)電機(jī)的相數(shù): </b></p><p> 是指電機(jī)內(nèi)部的線圈組數(shù),目前常用的有二相、三相、四相、五相步進(jìn)電機(jī)。電機(jī)相數(shù)不同,其步距角也不同,一般二相電機(jī)的步距角為0.9°/1.8°、三相的為0.75°/1.5°、
15、五相的為0.36°/0.72° 。在沒有細(xì)分驅(qū)動(dòng)器時(shí),用戶主要靠選擇不同相數(shù)的步進(jìn)電機(jī)來滿足自己步距角的要求。如果使用細(xì)分驅(qū)動(dòng)器,則‘相數(shù)’將變得沒有意義,用戶只需在驅(qū)動(dòng)器上改變細(xì)分?jǐn)?shù),就可以改變步距角。</p><p> 步進(jìn)電機(jī)的一些特點(diǎn):</p><p> 1.一般步進(jìn)電機(jī)的精度為步進(jìn)角的3-5%,且不累積。</p><p> 2.步
16、進(jìn)電機(jī)外表允許的最高溫度在150度以下。 </p><p> 3.步進(jìn)電機(jī)的力矩會(huì)隨轉(zhuǎn)速的升高而下降。 </p><p> 4.步進(jìn)電機(jī)低速時(shí)可以正常運(yùn)轉(zhuǎn),但若高于一定速度就無法啟動(dòng),并伴有嘯叫聲。 </p><p> 步進(jìn)電動(dòng)機(jī)以其顯著的特點(diǎn),在數(shù)字化制造時(shí)代發(fā)揮著重大的用途。伴隨著不同的數(shù)字化技術(shù)的發(fā)展以及步進(jìn)電機(jī)本身技術(shù)的提高,步進(jìn)電
17、機(jī)將會(huì)在更多的領(lǐng)域得到應(yīng)用。</p><p> 第三章設(shè)計(jì)原理與方案論證</p><p> 系統(tǒng)方框圖如下所示:</p><p> 控制信號(hào)的產(chǎn)生可以由鍵盤和計(jì)算機(jī)來完成。鍵盤直接對單片機(jī)I/O進(jìn)行操作,單片機(jī)通過檢測I/O信號(hào)的變化,判斷按鍵,完成相當(dāng)功能;計(jì)算機(jī)通過串行通信口與單片機(jī)相聯(lián),利用串行通信發(fā)送操作命令給單片機(jī),完成命令所指定的功能。單片機(jī)接收
18、到控制信號(hào)后,產(chǎn)生相應(yīng)的輸出信號(hào),控制電機(jī)驅(qū)動(dòng)電路產(chǎn)生相當(dāng)?shù)尿?qū)動(dòng)信號(hào),使電機(jī)運(yùn)轉(zhuǎn);同時(shí),單片機(jī)還要控制液晶顯示器顯示出當(dāng)前的系統(tǒng)信息。在電機(jī)運(yùn)轉(zhuǎn)過程中,單片機(jī)通過采樣霍爾傳感器采樣到的電機(jī)的轉(zhuǎn)速信息,即時(shí)顯示電機(jī)的當(dāng)時(shí)轉(zhuǎn)速和方向。</p><p> 系統(tǒng)程序流程圖如下所示:</p><p> 電機(jī)的選擇和方案論證:</p><p> 電機(jī)的種類繁多,本系統(tǒng)中采
19、用了二相小功率的步進(jìn)電機(jī),電路原理圖如下:</p><p> 該電機(jī)的正轉(zhuǎn)驅(qū)動(dòng)信號(hào)時(shí)序如下:</p><p> 通過改變時(shí)序的順序就可以控制其轉(zhuǎn)向,反轉(zhuǎn)時(shí)的時(shí)序?yàn)?-4-3-2.</p><p> 為了產(chǎn)生精確的時(shí)序脈沖,程序設(shè)計(jì)過程中采用中斷的方法產(chǎn)生脈沖信號(hào).并可以通過外部命令來控制產(chǎn)生時(shí)序的順序,從而實(shí)現(xiàn)正反轉(zhuǎn)的控制.</p><p&
20、gt;<b> 時(shí)序產(chǎn)生程序如下:</b></p><p> sbitAA=P3^4;</p><p> sbitAB=P3^5;</p><p> sbitBA=P3^6;</p><p> sbitBB=P3^7;</p><p> uchar thdata,tl
21、data;</p><p> bitstep_permit=0;</p><p> bitdirection,sisdf;//set direction flag</p><p> ucharint_cnt;</p><p> TMOD=0x21;//T0工作在方式1,T1工作在方式2自動(dòng)重裝</p>&
22、lt;p><b> EA=1;</b></p><p><b> TR1=1;</b></p><p><b> //產(chǎn)生脈沖波形</b></p><p> void Timer0(void)interrupt 1 using 1</p><p> {TL
23、0=(tldata+10);</p><p> TH0=thdata;</p><p> if(step_permit)int_cnt++;</p><p> if(direction)//反轉(zhuǎn)</p><p> {switch(cnt)</p><p><b>
24、{</b></p><p> case 0:AA=1;AB=1;BA=0;BB=0;break;</p><p> case 1:AA=0;AB=1;BA=1;BB=0;break;</p><p> case 2:AA=0;AB=0;BA=1;BB=1;break;</p><p> case 3:AA=1;AB=
25、0;BA=0;BB=1;break;</p><p> default:break;</p><p><b> }</b></p><p><b> }</b></p><p> else{switch(cnt)</p><p><b> {
26、</b></p><p> case 0:AA=1;AB=1;BA=0;BB=0;break;</p><p> case 1:AA=1;AB=0;BA=0;BB=1;break;</p><p> case 2:AA=0;AB=0;BA=1;BB=1;break;</p><p> case 3:AA=0;AB=1
27、;BA=1;BB=0;break;</p><p> default:break;</p><p><b> }</b></p><p><b> }</b></p><p><b> ++cnt;</b></p><p> if(
28、cnt==4)cnt=0;</p><p><b> }</b></p><p><b> 驅(qū)動(dòng)電路的設(shè)計(jì):</b></p><p> 本設(shè)計(jì)中步進(jìn)電機(jī)功率較小,采用普通的電流型驅(qū)動(dòng)器件即可,所以采用了UL2003的電流驅(qū)動(dòng)模塊,該項(xiàng)模塊的內(nèi)部結(jié)構(gòu)框圖如下:</p><p> 該驅(qū)動(dòng)模塊的
29、的電壓為12V,驅(qū)動(dòng)電流可達(dá)500MA.</p><p> 轉(zhuǎn)速檢測電路的設(shè)計(jì):</p><p> 本設(shè)計(jì)中利用霍爾傳感器磁敏感效應(yīng),通過在電機(jī)轉(zhuǎn)軸上安裝牙輪磁環(huán),來檢測出電機(jī)的轉(zhuǎn)速.</p><p> 霍爾傳感的工作原理如下:</p><p> 原邊電流Ip產(chǎn)生的磁通量聚集在磁路中,并由霍爾器件檢測出霍爾電壓信號(hào),經(jīng)過放大器放大,該
30、電壓信號(hào)精確地反映原邊電流。原邊電流Ip產(chǎn)生的磁通量與霍爾電壓經(jīng)放大產(chǎn)生的副邊電流Is通過副邊線圈所產(chǎn)生的磁通量相平衡。副邊電流Is精確地反映原邊電流。原邊電壓Vp通過原邊電阻R1轉(zhuǎn)換為原邊電流Ip,Ip產(chǎn)生的磁通量與霍爾電壓經(jīng)放大產(chǎn)生的副邊電流Is通過副邊線圈所產(chǎn)生的磁通量相平衡。副邊電流Is精確地反映原邊電壓。</p><p> 當(dāng)電機(jī)轉(zhuǎn)動(dòng)時(shí),霍爾傳感器將轉(zhuǎn)軸上磁環(huán)引起的磁場的變化轉(zhuǎn)換為電脈沖信號(hào),送往單片
31、機(jī),單片機(jī)根據(jù)脈沖頻率,計(jì)算出轉(zhuǎn)動(dòng)的速度.</p><p> 鍵盤的方案論證和電路及程序設(shè)計(jì):</p><p> 鍵盤可以分為獨(dú)立連接式和行列式(矩陣式)兩類。獨(dú)立式按鍵是指各按鍵相互獨(dú)立地接通一條輸入數(shù)據(jù)線,當(dāng)任何一個(gè)鍵按下時(shí),與之相連的輸入數(shù)據(jù)線即被清0或置1,利用單片機(jī)位處理指令十分方便查詢到按鍵。矩陣式按鍵采用列行掃描方式進(jìn)行按鍵的判斷,節(jié)約I/O線。相比之下,本設(shè)計(jì)由于I/O
32、線的占用數(shù)目不多,采用獨(dú)立式鍵盤電路簡單,容易實(shí)現(xiàn)。</p><p><b> 鍵盤電路設(shè)計(jì)如下:</b></p><p> 讀鍵值程序設(shè)計(jì)如下:</p><p> #include<reg52.h></p><p> uchar GetKey(void)</p><p>
33、 {uint i=0;</p><p> uchar keybuf=0;</p><p> if(P1!=0xff)</p><p><b> {</b></p><p> keybuf=P1;</p><p> if(keybuf!=0xff)</p><
34、p> {while((P1==keybuf)&&(i<0x6000))i+=1;</p><p> if(i>101) </p><p> { return keybuf;} </p><p> else return 0;</p><p>&
35、lt;b> }</b></p><p> else return0; </p><p><b> }</b></p><p> elsereturn 0;</p><p><b> }</b></p><p> 串行通信的方案
36、論證和電路及程序設(shè)計(jì):</p><p> 單片機(jī)的串行接口是一個(gè)可編程的全雙工通信接口,通過軟件編程它既可用作通用異步接收和發(fā)送器使用,也可作同步移位寄存器使用。</p><p><b> ①、單片機(jī)串行接口</b></p><p> 單片機(jī)的串行接口主要由兩個(gè)數(shù)據(jù)緩沖寄存器SBUF和一個(gè)輸入移位寄存器,以及一個(gè)串行控制寄存器SCON組成
37、。定時(shí)器T1常用做其波特率發(fā)生器。</p><p> 串行口可以有多種工作方式,不同工作方式的數(shù)據(jù)格式不同,在本系統(tǒng)中,采用的串行口工作方式1,波特率設(shè)置為2400。</p><p> 串行口通信接口電路設(shè)計(jì)如下:</p><p> 串行通信程序設(shè)計(jì)如下:</p><p> TMOD=0x21;// T1工作在方式2自動(dòng)重裝<
38、;/p><p> TH1=0xF3;//波特率設(shè)置;晶振12MHz;波特率為2400</p><p> TL1=0xF3;</p><p> SCON=0X50;//串行口工作在方式1,八位方式,允許接收</p><p> PCON=0;//SMOD設(shè)置為0</p><p><b> EA=1
39、;</b></p><p> ES=1; //串行中斷允許</p><p><b> ET0=0;</b></p><p> void SeriCab(void)interrupt 4 using 2</p><p> {ucharsda;</p><p><
40、;b> RI=0;</b></p><p><b> sda=SBUF;</b></p><p> if(sda>=64)</p><p> {if((sda<95)&&(run==0)){step_length=sda*3;stepflag=1;}</p>&
41、lt;p> elseif((sda==0x61)&&(SData_flag==1)){run=1;stopflag=0;}</p><p> elseif(sda==0x63){direction=0;sisdf=1;}</p><p> elseif(sda==0x64){direction=1;sisdf=1;}</p><p>
42、; elseif((sda==0x62)&&(SData_flag==1)){run=0;stopflag=1;}</p><p> elseif((sda==0x65)&&(SData_flag==1)){step_permit=1;}</p><p><b> }</b></p><p> e
43、lse {speed=sda*2;spdset=1;}</p><p> ++sicnt;</p><p> if(sicnt==2){sicnt=0;SData_flag=1;}</p><p><b> } </b></p><p> 顯示電路的方案論證和電路及程序的設(shè)計(jì):&l
44、t;/p><p> 單片機(jī)顯示電路一般由LED或LCD完成。LED顯示電路結(jié)構(gòu)簡單,成本低,但顯示內(nèi)容相對偏少。LCD顯示電路信息容量大,電路相對復(fù)雜。在本系統(tǒng)中,由于顯示的信息量大,所以采用HS12864顯示器。該顯示器為128*64點(diǎn)陣顯示屏,可以顯示4*8個(gè)漢字或4*16個(gè)字符。</p><p><b> 顯示電路設(shè)計(jì)如下:</b></p><
45、;p><b> 顯示程序設(shè)計(jì)如下:</b></p><p> #include<_REG52_.H></p><p> /*WRITE 12864.H*/ </p><p> sbit CS1=P2^3;</p><p> sbit CS2=P2^4;</p><
46、p> sbit RST=P2^5;</p><p> sbit DI=P2^0;</p><p> sbit RW=P2^1;</p><p> sbit ALE=P2^2; </p><p><b> //軟件復(fù)位程序</b></p><p> void
47、IntRst(void)</p><p> { uchar i;</p><p><b> RST=0;</b></p><p><b> i=0;</b></p><p><b> i=1;</b></p><p> RST=1;
48、 //軟件復(fù)位</p><p><b> }</b></p><p> voidBusy_Judge(void)//讀BUSY信號(hào)</p><p><b> {</b></p><p><b> uchari;</b></p><p&
49、gt; uchar temp;</p><p> do {P0=0xff;</p><p><b> ALE=1;</b></p><p><b> i=0;</b></p><p><b> temp=P0;</b></p><p>&l
50、t;b> ALE=0;</b></p><p> } while((temp&0x80)==1);</p><p><b> }</b></p><p> //12864發(fā)送命令子程序</p><p> voidComSend(ucharCOM)</p><p&
51、gt; {uchari; </p><p><b> DI=0;</b></p><p> RW=1; </p><p> Busy_Judge();//讀BUSY信號(hào)</p><p><b> RW=0;</b></p><p>
52、<b> P0=COM;</b></p><p><b> ALE=1;</b></p><p> i=0;//NOP</p><p><b> ALE=0;</b></p><p><b> }</b></p><p
53、> //12864發(fā)送數(shù)據(jù)子程序 </p><p> voidDaSend(uchar DAT)</p><p> { uchari; </p><p><b> DI=0;</b></p><p><b> RW=1;</b></p><p
54、> Busy_Judge();//讀BUSY信號(hào)</p><p><b> DI=1;</b></p><p><b> RW=0;</b></p><p><b> P0=DAT;</b></p><p><b> ALE=1;</b>&
55、lt;/p><p> i=0;//NOP</p><p><b> ALE=0;</b></p><p><b> }</b></p><p> //左半屏寫命令子程序 </p><p> voidLeft_ComSend(COM)</p><
56、p><b> {</b></p><p> CS2=0;CS1=1;</p><p> ComSend(COM);</p><p><b> CS1=0;</b></p><p><b> }</b></p><p> //左半屏寫數(shù)據(jù)
57、子程序 </p><p> voidLeft_DaSend(DAT)</p><p><b> {</b></p><p> CS2=0;CS1=1;</p><p> DaSend(DAT);</p><p><b> CS1=0;</b></p>
58、<p><b> }</b></p><p> //右半屏寫命令子程序 </p><p> voidRight_ComSend(COM)</p><p><b> {</b></p><p> CS1=0;CS2=1;</p><p> ComSen
59、d(COM);</p><p><b> CS2=0;</b></p><p><b> }</b></p><p> //右半屏寫數(shù)據(jù)子程序 </p><p> voidRight_DaSend(DAT)</p><p><b> {</b>
60、;</p><p> CS1=0;CS2=1;</p><p> DaSend(DAT);</p><p><b> CS2=0;</b></p><p><b> }</b></p><p> //左半屏寫一個(gè)字節(jié)數(shù)據(jù)程序,</p><p>
61、; //入口參數(shù)為X,Y的起始地址</p><p> //以及Y的變址范圍(寫入的字節(jié)數(shù))和寫入數(shù)據(jù)的指針</p><p> voidLeft_Bytes_DaSend(uchar x,uchar y,uchar *loc,uchar bytes)</p><p> {uchari;</p><p> Left_ComSend
62、(x|0xB8);//填入特征位0xB8,定位X</p><p> Left_ComSend(y|0x40);//填入特征位0x40 ,定位Y</p><p> for(i=0;i<bytes;i++)</p><p> Left_DaSend(*(loc+i));</p><p><b> }&
63、lt;/b></p><p> //右半屏寫一個(gè)字節(jié)數(shù)據(jù)程序,</p><p> //入口參數(shù)為X,Y的起始地址</p><p> //以及Y的變址范圍(寫入的字節(jié)數(shù))和寫入數(shù)據(jù)的指針</p><p> voidRight_Bytes_DaSend(uchar x,uchar y,uchar *loc,uchar bytes)
64、</p><p> {uchari;</p><p> Right_ComSend(x|0xB8);//填入特征位0xB8 ,定位X</p><p> Right_ComSend(y|0x40);//填入特征位0x40, 定位Y</p><p> for(i=0;i<bytes;i++)&l
65、t;/p><p> Right_DaSend(*(loc+i));</p><p><b> }</b></p><p><b> //開LCD</b></p><p> void Lcd_On(void)</p><p><b> {</
66、b></p><p> Left_ComSend(0x3F);</p><p> Right_ComSend(0x3F);</p><p><b> }</b></p><p><b> //關(guān)LCD</b></p><p> voidLcd_Off(voi
67、d)</p><p><b> {</b></p><p> Left_ComSend(0x3e);</p><p> Right_ComSend(0x3e);</p><p><b> }</b></p><p><b> //設(shè)置Z地址 </b
68、></p><p> voidLcd_SetZ(uchar z)</p><p><b> {</b></p><p><b> z=z*8;</b></p><p> Left_ComSend(z|0xc0);</p><p> Right_ComS
69、end(z|0xc0);</p><p><b> }</b></p><p> //顯示初始化程序集</p><p> //右邊顯示符號(hào)元素的子程序</p><p> voidRight_Show_Sign(uchar x,uchar y,uchar *pointer,uchar snum)</p&g
70、t;<p><b> {</b></p><p><b> uchar*p;</b></p><p> p=pointer;</p><p> p=(p+snum*16);</p><p> Right_Bytes_DaSend(x,y,p,8);<
71、/p><p> Right_Bytes_DaSend(x+1,y,p+8,8);</p><p><b> }</b></p><p> //左邊顯示符號(hào)元素的子程序</p><p> voidLeft_Show_Sign(uchar x,uchar y,uchar *pointer,uchar snum)
72、</p><p><b> {</b></p><p><b> uchar*p;</b></p><p> p=pointer;</p><p> p=(p+snum*16);</p><p> Left_Bytes_DaSend(x,y,p,
73、8);</p><p> Left_Bytes_DaSend(x+1,y,p+8,8);</p><p><b> }</b></p><p> //右邊顯示漢字元素的子程序</p><p> voidRight_Show_Word(uchar x,uchar y,uchar *pointer,ucha
74、r wnum)</p><p><b> {</b></p><p><b> uchar*p;</b></p><p> p=pointer;</p><p> p=(p+wnum*32);</p><p> Right_Bytes_DaSend(x
75、,y,p,16);</p><p> Right_Bytes_DaSend(x+1,y,p+16,16);</p><p><b> }</b></p><p> //左邊顯示漢字元素的子程序</p><p> voidLeft_Show_Word(uchar x,uchar y,uchar *p
76、ointer,uchar wnum)</p><p><b> {</b></p><p><b> uchar*p;</b></p><p> p=pointer;</p><p> p=(p+wnum*32);</p><p> Left_Byte
77、s_DaSend(x,y,p,16);</p><p> Left_Bytes_DaSend(x+1,y,p+16,16);</p><p><b> }</b></p><p><b> 系統(tǒng)源代碼</b></p><p><b> 主程序源代碼如下:</b&
78、gt;</p><p> #definelow_speed10</p><p> #define high_speed100</p><p> #include<_reg52_.h></p><p> #include<Key_Define.h></p><p> #includ
79、e<Get_Key_Declare.h></p><p> #include<Lcd_Init_Declare.h></p><p> //#include<Main_Define.h></p><p> uchar speed=50,step_length=10,thdata,tldata;</p><
80、;p> #include<Start.h></p><p> bitSData_flag=0;</p><p> bitstep_permit=0;</p><p> bitdirection,sisdf;//set direction flag</p><p> bitstepflag=0;
81、//步進(jìn)標(biāo)志</p><p> bitrun=0;//全帶運(yùn)行標(biāo)志</p><p> bitstopflag=0;</p><p> ucharint_cnt;</p><p> bitspdset;</p><p> sbitAA=P3^4;</p><p&g
82、t; sbitAB=P3^5;</p><p> sbitBA=P3^6;</p><p> sbitBB=P3^7;</p><p> ucharcnt;</p><p> ucharsicnt=0;</p><p><b> //產(chǎn)生脈沖波形</b></
83、p><p> void Timer0(void)interrupt 1</p><p><b> {</b></p><p> TL0=(tldata+10);</p><p> TH0=thdata;</p><p> if(step_permit)int_cnt++;
84、</p><p> if(direction)//反轉(zhuǎn)</p><p><b> {</b></p><p> switch(cnt)</p><p><b> {</b></p><p> case 0:AA=1;AB=1;BA=0;BB=0;br
85、eak;</p><p> case 1:AA=0;AB=1;BA=1;BB=0;break;</p><p> case 2:AA=0;AB=0;BA=1;BB=1;break;</p><p> case 3:AA=1;AB=0;BA=0;BB=1;break;</p><p> default:break;</p
86、><p><b> }</b></p><p><b> }</b></p><p><b> else{</b></p><p> switch(cnt)</p><p><b> {</b></p>
87、<p> case 0:AA=1;AB=1;BA=0;BB=0;break;</p><p> case 1:AA=1;AB=0;BA=0;BB=1;break;</p><p> case 2:AA=0;AB=0;BA=1;BB=1;break;</p><p> case 3:AA=0;AB=1;BA=1;BB=0;break;<
88、/p><p> default:break;</p><p><b> }</b></p><p><b> }</b></p><p><b> ++cnt;</b></p><p> if(cnt==4)cnt=0;</p&g
89、t;<p><b> }</b></p><p> void SeriCab(void)interrupt 4</p><p><b> {</b></p><p> ucharsda;</p><p><b> RI=0;</b><
90、/p><p><b> sda=SBUF;</b></p><p> if(sda>=64)</p><p><b> {</b></p><p> if((sda<95)&&(run==0)){step_length=sda*3;stepflag=1;}</p
91、><p> elseif((sda==0x61)&&(SData_flag==1)){run=1;stopflag=0;}</p><p> elseif(sda==0x63){direction=0;sisdf=1;}</p><p> elseif(sda==0x64){direction=1;sisdf=1;}</p>&
92、lt;p> elseif((sda==0x62)&&(SData_flag==1)){run=0;stopflag=1;}</p><p> elseif((sda==0x65)&&(SData_flag==1)){step_permit=1;}</p><p><b> }</b></p><p&g
93、t; else {speed=sda*2;spdset=1;}</p><p> ++sicnt;</p><p> if(sicnt==2){sicnt=0;SData_flag=1;}</p><p><b> }</b></p><p> voidST_Convert(vo
94、id)//將轉(zhuǎn)速轉(zhuǎn)換為T0常數(shù)</p><p><b> {</b></p><p> uinttdbuf;</p><p> tdbuf=(1000000/speed)/192;</p><p> tdbuf=0xffff-tdbuf;</p><p> tldata=(ucha
95、r)(tdbuf&0xff);</p><p> thdata=(uchar)((tdbuf>>8)&0xff);</p><p><b> }</b></p><p> bitOperating(void)//開機(jī)初始化程序</p><p> {ucharke
96、y;</p><p> bitstep_flag=0;</p><p> Show_Null();</p><p><b> key=0;</b></p><p> Show_Sign();//顯示===========</p><p> Show_Speed_Set(
97、);//顯示"請預(yù)置轉(zhuǎn)速 "</p><p> speed=Get_Speed(speed);//轉(zhuǎn)速設(shè)置子程序</p><p> Show_Null();</p><p> Show_Operation_Model();</p><p> while(key!=LEFT&&key!
98、=RIGHT)</p><p> key=GetKey();</p><p> Show_Null();</p><p> if(key==RIGHT)//步進(jìn)</p><p><b> {</b></p><p><b> key=0;</b>&
99、lt;/p><p> step_flag=1;</p><p> Show_Sign();//顯示===========</p><p> Show_Step_Length(); //顯示"請預(yù)置步長: " </p><p> step_length=Get_Step_Length(step_
100、length);//預(yù)置步長</p><p><b> }</b></p><p> returnstep_flag;</p><p><b> }</b></p><p> voidmain(void)</p><p><b>
101、; {</b></p><p> ucharkey,stl,stepcnt=0;</p><p> IntRst();</p><p> Lcd_SetZ(1);</p><p> Lcd_Off();</p><p> Show_Null();</p><p>
102、; Show_Sign();//顯示===========</p><p> Show_Greet();</p><p><b> Lcd_On();</b></p><p> TMOD=0x21;//T0工作在方式1,T1工作在方式2自動(dòng)重裝</p><p> TH1=0xF3;//波特率設(shè)置;晶
103、振12MHz;波特率為2400</p><p> TL1=0xF3;</p><p> SCON=0X50;//串行口工作在方式1,八位方式,允許接收</p><p> PCON=0;//SMOD設(shè)置為0</p><p><b> EA=1;</b></p><p> ES
104、=1; //串行中斷允許</p><p> ET0=0;//T0中斷禁止</p><p><b> TR1=1;</b></p><p> while((key==0)&&(SData_flag==0))</p><p> key=GetKey();</p><
105、;p> if(key)stepflag=Operating();</p><p> ST_Convert();//將轉(zhuǎn)速轉(zhuǎn)換為T0常數(shù)</p><p> TH0=thdata;</p><p> TL0=tldata;</p><p><b> TR0=1;</b></p><p
106、> Show_Null();</p><p> Show_Sign();//顯示===========</p><p> Show_Ready();//顯示"準(zhǔn)備好:"</p><p> Show_Direction(direction);</p><p><b> key=0;<
107、/b></p><p> while((key!=START)&&(run==0))</p><p><b> {key=0;</b></p><p> key=GetKey();</p><p><b> }</b></p><p&
108、gt; if(stepflag)//步進(jìn)方式</p><p> {stl=step_length*4;</p><p> Show_Null();//清屏</p><p> Show_Sign();//顯示===</p><p> //Show_Step();//顯示"步進(jìn)"<
109、/p><p> Show_Direction(direction);</p><p> Show_Speed(speed);</p><p> Show_StepCnt(stepcnt);//"顯示"步進(jìn):XXX""步進(jìn)數(shù)</p><p><b> while(1)</b>&l
110、t;/p><p><b> {</b></p><p> if(int_cnt==stl)</p><p> {ET0=0;</p><p> int_cnt=0;</p><p> step_permit=0;</p><p><b
111、> }</b></p><p> if(spdset){ST_Convert();Show_Speed(speed);spdset=0;}</p><p><b> key=0;</b></p><p> key=GetKey();</p><p> if(key==STEP)<
112、;/p><p><b> {</b></p><p> step_permit=1;</p><p> int_cnt=0;</p><p> ET0=1;</p><p> Show_StepCnt(++stepcnt);//"顯示":
113、XXX""步進(jìn)數(shù)</p><p><b> }</b></p><p> elseif((key==DIR)||sisdf)</p><p><b> {</b></p><p> direction=(~direction);</p><p>
114、 Show_Direction(direction);</p><p><b> sisdf=0;</b></p><p><b> }</b></p><p> else if(key==RESET)(*(void(*)())0)();//熱啟動(dòng)</p><p><b> }
115、</b></p><p><b> }</b></p><p> else//全速運(yùn)行方式</p><p> {</p><p><b> ET0=1;</b></p><p><b> run=0;<
116、;/b></p><p> //Show_Null();//清屏</p><p> //Show_Sign();//顯示===</p><p> //Show_Start();//顯示"啟動(dòng)"</p><p> Show_Null();//清屏</p><p&g
117、t; Show_Sign();//顯示===</p><p> Show_Running();//顯示"運(yùn)行中"</p><p> Show_Direction(direction);</p><p> Show_Speed(speed);</p><p><b> while(1)&l
118、t;/b></p><p><b> {</b></p><p> if(spdset)</p><p> {ST_Convert();</p><p> Show_Speed(speed);</p><p><b> spdset=0;</b></p
119、><p><b> }</b></p><p><b> key=0;</b></p><p> key=GetKey();</p><p> if((key==DIR)||sisdf)</p><p><b> {</b></p>
120、<p> direction=(~direction);</p><p> Show_Direction(direction);</p><p><b> sisdf=0;</b></p><p><b> }</b></p><p> else if((key==STOP)
121、||stopflag)</p><p> {ET0=0;</p><p> Show_Null();//清屏</p><p> Show_Sign();//顯示===</p><p> Show_Stop();//顯示"停止"</p><p> Show_D
122、irection(direction);</p><p> stopflag=0;</p><p><b> }</b></p><p> else if((key==START)||run)</p><p> {ET0=1;</p><p> //Show_Null(
123、);//清屏</p><p> //Show_Sign();//顯示===</p><p> //Show_Start();//顯示"啟動(dòng)"</p><p> Show_Null();//清屏</p><p> Show_Sign();//顯示===</p><p&g
124、t; Show_Running();//顯示"運(yùn)行中"</p><p> Show_Direction(direction);</p><p> Show_Speed(speed);</p><p><b> run=0;</b></p><p><b> }<
125、;/b></p><p> else if(key==RESET)(*(void(*)())0)();//熱啟動(dòng)</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>&l
126、t;/p><p> 第五章 總結(jié)與開發(fā)工具</p><p><b> 4.1、總結(jié)</b></p><p> 外界環(huán)境溫度的變化,將導(dǎo)致晶體的頻率發(fā)生一定的偏移,從而影響了定時(shí)精度,導(dǎo)致輸出的時(shí)序不夠精確。這種由于環(huán)境變化而影響的定時(shí)偏差可以采用穩(wěn)定性更高的晶體來解決。當(dāng)然,這種方法還是有受晶體制約的,要想得到更加穩(wěn)定的脈沖序列,則應(yīng)采用專用
127、的控制芯片,其誤差可可大大減小,且占用更少的CPU資源。</p><p><b> 4.2、結(jié)束語</b></p><p> 通過對本系統(tǒng)的測試與調(diào)試,結(jié)合本系統(tǒng)的實(shí)際情況,基本上達(dá)到設(shè)計(jì)要求。通過對流程的優(yōu)化,使得操作方便,可靠。</p><p><b> 4.3、使用工具</b></p><p
128、> 偉福E51/S仿真器</p><p><b> 示波器</b></p><p> KEIL C51編譯軟件</p><p><b> WD990徽機(jī)電源</b></p><p><b> 數(shù)字萬用表、電腦</b></p><p>&l
129、t;b> 參考文獻(xiàn)</b></p><p> [1]哈工大·成都電機(jī)廠.步進(jìn)電動(dòng)機(jī).科學(xué)出版社.1979.</p><p> [2]王宗培.步進(jìn)電動(dòng)機(jī).微特電機(jī).1976</p><p> [3]程樹康.步進(jìn)電動(dòng)機(jī)靜轉(zhuǎn)矩計(jì)算的數(shù)據(jù)前處理程序.微特電機(jī)1985.</p><p> [4]陳理壁.步進(jìn)電
130、動(dòng)機(jī)及其應(yīng)用.上??萍汲霭嫔?1985</p><p> [5]李忠杰,寧守信.步進(jìn)電動(dòng)機(jī)應(yīng)用技術(shù).北京:機(jī)械工業(yè)出版社.1988.</p><p> [6]、彭為、黃科、雷道仲編著 單片機(jī)典型系統(tǒng)設(shè)計(jì) 電子工業(yè)出版社</p><p> [7]凌玉華 等編著單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì) 中南大學(xué)出版社</p><p> [8]蔡美琴等編
131、著MCS-51系列單片機(jī)系統(tǒng)及其應(yīng)用 高等教育出版社</p><p> [9]楊忠煌、黃博俊、李文昌編著單芯8051實(shí)務(wù)與應(yīng)用 中國水利水電出版社</p><p><b> 致謝</b></p><p> 經(jīng)過長時(shí)間的努力,我順利地完成了畢業(yè)設(shè)計(jì)。</p><p> 這次畢業(yè)設(shè)計(jì)是單片機(jī)學(xué)習(xí)的第一次實(shí)戰(zhàn)
132、過程,在做畢業(yè)設(shè)計(jì)的過程中,遇到了很多的問題,但在萬琴和何敏教師的精心指導(dǎo)和嚴(yán)格要求下,并通過自己的耐心鉆研,查閱大量資料,把這些資料與自己的設(shè)計(jì)結(jié)合起來,完成了本次設(shè)計(jì)。</p><p> 在這段時(shí)間的學(xué)習(xí)與實(shí)踐中,我綜合了有關(guān)單片機(jī)的所有知識(shí)以及匯編語言程序設(shè)計(jì),鞏固了自己所學(xué)的專業(yè)知識(shí),并對單片機(jī)有了深刻的了解,為以后的學(xué)習(xí)打好了基礎(chǔ)。在這個(gè)實(shí)踐過程中,忠誠的感謝教師的教導(dǎo)和鼓勵(lì),老師開闊的思路、淵博的知
133、識(shí)、豐富的實(shí)踐經(jīng)驗(yàn)、嚴(yán)格的工作作風(fēng)、勇于創(chuàng)新的精神將成為我終生學(xué)習(xí)的榜樣。銘記教師的深深教誨,在以后的學(xué)習(xí)中不斷努力創(chuàng)新,用成績來向老師表示最誠摯的感謝!</p><p> 同時(shí),在本次畢業(yè)設(shè)計(jì)中,同學(xué)們也了我無私的幫助。在些向所有給予我?guī)椭凸膭?lì)的其他教師和同學(xué)表示感謝!</p><p><b> 附錄</b></p><p> LC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(jì)----基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
- 步進(jìn)電機(jī)畢業(yè)設(shè)計(jì)---基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)畢業(yè)設(shè)計(jì)論文
- 畢業(yè)設(shè)計(jì)----基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)
- 基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)--畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)畢業(yè)設(shè)計(jì)論文
- 畢業(yè)設(shè)計(jì)--基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 基于單片機(jī)步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)畢業(yè)正文
- 基于單片機(jī)的步進(jìn)電機(jī)控制畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的步進(jìn)電機(jī)控制畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----基于單片機(jī)的步進(jìn)電機(jī)控制
- 基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的步進(jìn)電機(jī)運(yùn)行控制系統(tǒng)畢業(yè)設(shè)計(jì)論文
- 基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)畢業(yè)設(shè)計(jì)(含外文翻譯)
- 基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)畢業(yè)論文
- 基于51單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)論文
- 基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)畢業(yè)設(shè)計(jì)(含外文翻譯)
- 基于單片機(jī)步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)畢業(yè)正文定
- 單片機(jī)課程設(shè)計(jì)——單片機(jī)控制步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
評論
0/150
提交評論