版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《計(jì)算機(jī)控制技術(shù)》課 程 設(shè) 計(jì)</p><p> 單閉環(huán)直流電機(jī)調(diào)速系統(tǒng)</p><p><b> 1 設(shè)計(jì)目的</b></p><p> 計(jì)算機(jī)控制技術(shù)課程是集微機(jī)原理、計(jì)算機(jī)技術(shù)、控制理論、電子電路、自動(dòng)控制系統(tǒng)、工業(yè)控制過(guò)程等課程基礎(chǔ)知識(shí)一體的應(yīng)用性課程,具有很強(qiáng)的實(shí)踐性,通過(guò)這次課程設(shè)計(jì)進(jìn)一步加深對(duì)計(jì)算機(jī)控制
2、技術(shù)課程的理解,掌握計(jì)算機(jī)控制系統(tǒng)硬件和軟件的設(shè)計(jì)思路,以及對(duì)相關(guān)課程理論知識(shí)的理解和融會(huì)貫通,提高運(yùn)用已有的專業(yè)理論知識(shí)分析實(shí)際應(yīng)用問(wèn)題的能力和解決實(shí)際問(wèn)題的技能,培養(yǎng)獨(dú)立自主、綜合分析與創(chuàng)新性應(yīng)用的能力。</p><p><b> 2 設(shè)計(jì)任務(wù)</b></p><p><b> 2.1 設(shè)計(jì)題目</b></p><p&
3、gt; 單閉環(huán)直流電機(jī)調(diào)速系統(tǒng)</p><p> 實(shí)現(xiàn)一個(gè)單閉環(huán)直流電機(jī)調(diào)壓調(diào)速控制,用鍵盤(pán)實(shí)現(xiàn)對(duì)直流電機(jī)的起/停、正/反轉(zhuǎn)控制,速度調(diào)節(jié)要求既可用鍵盤(pán)數(shù)字量設(shè)定也可用電位器連續(xù)調(diào)節(jié),需要有速度顯示電路。擴(kuò)展要求能夠利用串口通信方式在PC上設(shè)置和顯示速度曲線并且進(jìn)行數(shù)據(jù)保存和查看。</p><p><b> 2.2 設(shè)計(jì)要求</b></p><
4、;p> 2.2.1 基本設(shè)計(jì)要求</p><p> ?。?)根據(jù)系統(tǒng)控制要求設(shè)計(jì)控制整體方案;包括微處理芯片選用,系統(tǒng)構(gòu)成框圖,確定參數(shù)測(cè)范圍等;</p><p> (2)選用參數(shù)檢測(cè)元件及變送器;系統(tǒng)硬件電路設(shè)計(jì),包括輸入接口電路、邏輯電路、操作鍵盤(pán)、輸出電路、顯示電路;</p><p> ?。?)建立數(shù)學(xué)模型,確定控制算法;</p>&l
5、t;p> (4)設(shè)計(jì)功率驅(qū)動(dòng)電路;</p><p> ?。?)制作電路板,搭建系統(tǒng),調(diào)試。</p><p> 2.2.2 擴(kuò)展設(shè)計(jì)要求</p><p> ?。?)在已能正常運(yùn)行的微計(jì)算機(jī)控制系統(tǒng)的基礎(chǔ)上,通過(guò)串口與PC連接;</p><p> ?。?)編寫(xiě)人機(jī)界面控制和顯示程序;編寫(xiě)微機(jī)通信程序;實(shí)現(xiàn)人機(jī)實(shí)時(shí)交互。</p>
6、;<p><b> 3方案比較</b></p><p> 方案一:采用繼電器對(duì)電動(dòng)機(jī)的開(kāi)或關(guān)進(jìn)行控制。這個(gè)方案的優(yōu)點(diǎn)是電路較為簡(jiǎn)單,缺點(diǎn)是繼電器的響應(yīng)時(shí)間慢、機(jī)械結(jié)構(gòu)易損壞、壽命較短、可靠性不高。</p><p> 方案二:采用電阻網(wǎng)絡(luò)或數(shù)字電位器調(diào)整電動(dòng)機(jī)的分壓,從而達(dá)到調(diào)速的目的。但是電阻網(wǎng)絡(luò)只能實(shí)現(xiàn)有級(jí)調(diào)速,而數(shù)字電阻的元器件價(jià)格比較昂貴。更
7、主要的問(wèn)題在于一般電動(dòng)機(jī)的電阻很小,但電流很大;分壓不僅會(huì)降低效率,而且實(shí)現(xiàn)很困難。</p><p> 方案三:采用由電力電子器件組成的H型PWM電路。用單片機(jī)控制電力電子器件使之工作在占空比可調(diào)的開(kāi)關(guān)狀態(tài),精確調(diào)整電動(dòng)機(jī)轉(zhuǎn)速。這種電路由于工作在電力電子器件的飽和截止模式下,效率非常高;H型電路保證了可以簡(jiǎn)單地實(shí)現(xiàn)轉(zhuǎn)速和方向的控制;電子開(kāi)關(guān)的速度很快,穩(wěn)定性也極佳,是一種廣泛采用的PWM調(diào)速技術(shù)。</p&
8、gt;<p> 兼于方案三調(diào)速特性優(yōu)良、調(diào)整平滑、調(diào)整范圍廣、過(guò)載能力大,因此本設(shè)計(jì)采用方案三。</p><p> 4單閉環(huán)直流電機(jī)調(diào)速系統(tǒng)設(shè)計(jì)</p><p> 4.1單閉環(huán)調(diào)速原理</p><p> 4.1.1 閉環(huán)系統(tǒng)框圖</p><p> 4.1.2 調(diào)速原理</p><p><b
9、> 直流電機(jī)轉(zhuǎn)速有:</b></p><p> 常數(shù)Ke Ka不變,Ra比較小。 所以調(diào)節(jié)Ua就能調(diào)節(jié)n。</p><p><b> 4.2 系統(tǒng)框圖</b></p><p><b> 4.3系統(tǒng)基本原理</b></p><p> 通過(guò)鍵盤(pán)按鍵控制
10、電機(jī)的啟停、正反轉(zhuǎn)、加速和減速,單片機(jī)接收鍵盤(pán)信號(hào)與反饋信號(hào)進(jìn)行比較處理,也可以通過(guò)電位器調(diào)速,將模擬調(diào)節(jié)量轉(zhuǎn)換為數(shù)字量后送給單片機(jī)處理,電機(jī)的速度由傳感器測(cè)量后回饋給單片機(jī)處理,單片機(jī)接收到各路信號(hào)后控制顯示器顯示特定的內(nèi)容,同時(shí)控制電機(jī)驅(qū)動(dòng)電路工作,從而控制直流電機(jī)的轉(zhuǎn)速。</p><p><b> 5系統(tǒng)硬件電路設(shè)計(jì)</b></p><p><b>
11、 5.1電機(jī)驅(qū)動(dòng)電路</b></p><p> 電機(jī)驅(qū)動(dòng)電路主要有L298N和四個(gè)二極管組成,其中PWM驅(qū)動(dòng)原理如下</p><p> Ud是有效值,調(diào)節(jié)占空比就能調(diào)節(jié)Ud進(jìn)而調(diào)節(jié)n.</p><p> PWM驅(qū)動(dòng)器由L298來(lái)實(shí)現(xiàn)的,L298是SGS公司的產(chǎn)品,比較常見(jiàn)的是15腳Multiwatt封裝的L298N,內(nèi)部同樣包含4通道邏輯驅(qū)動(dòng)電路
12、??梢苑奖愕尿?qū)動(dòng)兩個(gè)直流電機(jī),或一個(gè)兩相步進(jìn)電機(jī)。</p><p><b> 3</b></p><p> iii. 如圖4,L298的封裝和功能表。通過(guò)改變C、D的狀態(tài)來(lái)改變電機(jī)的正反轉(zhuǎn)和急停和調(diào)節(jié)占空比進(jìn)而調(diào)速;Ven直接接高電位。是對(duì)C、D分別輸出0和PWM波或者PWM波和0來(lái)進(jìn)行的,初始化的占空比為50%。</p><p><
13、;b> 5.2 測(cè)速電路</b></p><p> 測(cè)速電路用自制的光電編碼盤(pán),通過(guò)紅外接收發(fā)射管和施密特觸發(fā)器組成。當(dāng)接收管接收到發(fā)射管發(fā)出的低電平信號(hào),再通過(guò)施密特整形送給單片機(jī)的INT0,進(jìn)而通過(guò)程序進(jìn)行計(jì)算速度。</p><p><b> 5.3 顯示電路</b></p><p> LCD 1602顯示電路用于
14、顯示轉(zhuǎn)速設(shè)定值與當(dāng)前值。</p><p><b> 5.4 鍵盤(pán)</b></p><p> 0-9按鍵為數(shù)值的設(shè)定,CLR為后退按鍵,ENT為確定鍵,KEY為鍵盤(pán)輸入按鍵,REP為電位器調(diào)速按鍵,RUN為運(yùn)行/正轉(zhuǎn)按鍵,F(xiàn)為運(yùn)行/反轉(zhuǎn)按鍵, STOP為停止按鍵。</p><p> 5.5 模擬調(diào)速電路</p><p&g
15、t; 模擬調(diào)速電路由電位器分壓輸出給定電壓,再經(jīng)過(guò)AD轉(zhuǎn)換器ADC0831輸入的單片機(jī)中。</p><p><b> 5.6 電源電路</b></p><p><b> 5</b></p><p> 6V /0.5A的外部輸入電壓Vin經(jīng)過(guò)由MC7805ACK與兩個(gè)由470Pf、一個(gè)100uf的電解電容組成的穩(wěn)壓電
16、路,穩(wěn)壓成5V的電壓,供系統(tǒng)使用。</p><p> 5.7 串口通信電路</p><p> 主要用來(lái)燒寫(xiě)程序進(jìn)去單片機(jī)。MAX232將ttl電平轉(zhuǎn)換成可以和電腦串口匹配的電壓。從而與PC機(jī)進(jìn)行通信。</p><p><b> 6</b></p><p> 上圖位stc單片機(jī)專用ISp下載軟件。</p>
17、;<p> 5.8 晶振和復(fù)位電路</p><p> 左邊為復(fù)位電路、右邊為12M的晶振電路,這兩塊與單片機(jī)組成最小系統(tǒng)。</p><p><b> 7</b></p><p><b> 6 軟件設(shè)計(jì)</b></p><p> 如圖12,主程序是先初始化LCD1602和中斷,
18、然后進(jìn)入轉(zhuǎn)速設(shè)定和調(diào)節(jié)循環(huán)。其中INT0中斷是用來(lái)測(cè)試輔助的,TO和T1配合參數(shù)PWM波和調(diào)節(jié)占空比(其中PWM為一個(gè)8位二進(jìn)制數(shù)0-255),轉(zhuǎn)速的反饋調(diào)節(jié)主要是進(jìn)行優(yōu)化的P調(diào)節(jié)。</p><p> 如題13和圖14,是T0和T1的中斷服務(wù)程序,TO設(shè)定256us的循環(huán)和初始化T1,然后對(duì)電機(jī)進(jìn)行正轉(zhuǎn)、反轉(zhuǎn)、停機(jī)(急停)三個(gè)判斷;T1中斷服務(wù)程序只負(fù)責(zé)關(guān)閉T1中斷。</p><p>
19、 如圖14,外部中斷INT0處理調(diào)理好的測(cè)試脈沖,中斷服務(wù)程序?qū)γ恳粋€(gè)測(cè)速脈沖對(duì)變量n進(jìn)行加+,返回到主函數(shù)的測(cè)速程序。</p><p> PWM的優(yōu)化型P控制算法,對(duì)轉(zhuǎn)速比較盡興分級(jí)調(diào)節(jié),當(dāng)實(shí)際值無(wú)設(shè)定值相差超過(guò)1000rpm時(shí)PWM調(diào)整15,相差超過(guò)500rpm時(shí)調(diào)整10,相差超過(guò)300時(shí)調(diào)整6,相差超過(guò)100時(shí)調(diào)整2,相差小于100時(shí)調(diào)整1。</p><p><b>
20、8</b></p><p><b> 9</b></p><p><b> 10</b></p><p> 7 電路與程序仿真和軟件調(diào)試</p><p> 7.1 Proteus仿真電路</p><p> 可以導(dǎo)入HXE文件,對(duì)編寫(xiě)好的程序和電路圖進(jìn)行仿
21、真。</p><p><b> 11</b></p><p> 7.2Keil程序編寫(xiě)與編譯。</p><p><b> 12</b></p><p><b> 8 硬件焊接與調(diào)試</b></p><p><b> 8.1 焊接與高度
22、</b></p><p> 單片機(jī)最小系統(tǒng)的焊接,成功后進(jìn)行下一步。</p><p> 串口通信電路焊接,焊完進(jìn)行串行通信,通過(guò)與PC機(jī)進(jìn)行通信、刷寫(xiě)程序進(jìn)入單片機(jī),成功進(jìn)行下一步。</p><p> 鍵盤(pán)電路與LCD1062顯示電路焊接,程序已經(jīng)寫(xiě)進(jìn)單片機(jī)里面,可以進(jìn)行參數(shù)設(shè)置來(lái)檢查按鍵與顯示是否正常,成功進(jìn)行下一步。</p>&l
23、t;p> 模擬調(diào)速電路焊接,焊完進(jìn)行模擬調(diào)速設(shè)置,從顯示器能觀察是否正常。</p><p> 電機(jī)驅(qū)動(dòng)電路焊接,焊完進(jìn)行調(diào)試,發(fā)現(xiàn)電機(jī)接上之后系統(tǒng)不穩(wěn)定,經(jīng)分析發(fā)現(xiàn)是電源功率不足,電源是一個(gè)6V0.5A的小型電源,正好驅(qū)動(dòng)芯片L298的電源電路分開(kāi)供電,用另外的電源給電機(jī)供電,改裝完后系統(tǒng)正常,進(jìn)行下一步。</p><p> 測(cè)速電路焊接,連接到單片機(jī)后一切正常。</p&
24、gt;<p> 整體焊接完成后對(duì)軟件進(jìn)行實(shí)物調(diào)試,通過(guò)不斷的運(yùn)行測(cè)試和重新刷寫(xiě)程序,主要克服的問(wèn)題有:調(diào)速反應(yīng)遲鈍、速度顯示精度、PWM調(diào)試算法。</p><p><b> 成品系統(tǒng)。</b></p><p><b> 13</b></p><p> 8.2 系統(tǒng)參數(shù)與實(shí)驗(yàn)數(shù)據(jù)</p>
25、<p><b> 系統(tǒng)的調(diào)試參數(shù):</b></p><p> 轉(zhuǎn)速測(cè)量誤差范圍:+ —30 rpm</p><p> 所使用電機(jī)PWM調(diào)壓范圍:0—7.5V</p><p> 所使用電機(jī)PWM穩(wěn)定調(diào)速范圍:正轉(zhuǎn)時(shí)390—2460rpm</p><p> 反轉(zhuǎn)時(shí)390—2700rpm</p>
26、<p><b> 調(diào)試結(jié)果表格</b></p><p> 上述調(diào)試結(jié)果表明:實(shí)際轉(zhuǎn)速跟設(shè)定轉(zhuǎn)速的差值不超過(guò)30rpm,效果較好,符合設(shè)計(jì)要求。</p><p><b> 14</b></p><p><b> 9 結(jié)論</b></p><p> 在此次課
27、程設(shè)計(jì)中,設(shè)計(jì)了PWM單閉環(huán)調(diào)速系統(tǒng),它由STC89C52RC單片機(jī)的I/O口輸出PWM信號(hào),直接用TTL電平控制驅(qū)動(dòng)芯片L298實(shí)現(xiàn)對(duì)電動(dòng)機(jī)進(jìn)行調(diào)速,這樣能夠充分發(fā)揮單片機(jī)的效能,對(duì)于簡(jiǎn)易速度控制系統(tǒng)的實(shí)現(xiàn)提供了一種有效的途徑。軟件方面,它采用計(jì)數(shù)法加軟件延時(shí)法進(jìn)行設(shè)計(jì)的思路,為采用純軟件對(duì)電機(jī)速度的平滑調(diào)節(jié)提供了一種不錯(cuò)的解決方案。運(yùn)行實(shí)驗(yàn)表明,系統(tǒng)硬件接口電路簡(jiǎn)單,工作穩(wěn)定可靠,滿足了調(diào)速的功能要求,有很好的可操作性和維護(hù)性,具有
28、較大的理論及實(shí)用價(jià)值。</p><p><b> 10 心得體會(huì)</b></p><p> 通過(guò)這次課程設(shè)計(jì),我們?cè)谑斋@知識(shí)的同時(shí),還收獲了閱歷,收獲了成熟。在此過(guò)程中,我們通過(guò)查找大量資料,請(qǐng)教老師,以及不懈的努力,不僅培養(yǎng)了獨(dú)立思考、動(dòng)手操作的能力,在各種其它能力上也都有了提高。更重要的是,在課程設(shè)計(jì)上,我們學(xué)會(huì)了很多學(xué)習(xí)的方法。而這是日后最實(shí)用的,真的是受益
29、匪淺。要面對(duì)社會(huì)的挑戰(zhàn),只有不斷的學(xué)習(xí)、實(shí)踐,再學(xué)習(xí)、再實(shí)踐。在如今單一的理論學(xué)習(xí)中,很少有機(jī)會(huì)能有實(shí)踐的機(jī)會(huì),但我們可以,而且設(shè)計(jì)也是一個(gè)團(tuán)隊(duì)的任務(wù),一起的工作可以讓我們有說(shuō)有笑,相互幫助,配合默契。我們的工作是一個(gè)團(tuán)隊(duì)的工作,團(tuán)隊(duì)需要個(gè)人,個(gè)人也離不開(kāi)團(tuán)隊(duì),必須發(fā)揚(yáng)團(tuán)結(jié)協(xié)作的精神。某個(gè)人的離群都可能導(dǎo)致導(dǎo)致整項(xiàng)工作的失敗。課程設(shè)計(jì)中只有一個(gè)人知道原理是遠(yuǎn)遠(yuǎn)不夠的,必須讓每個(gè)人都知道,否則一個(gè)人的錯(cuò)誤,就有可能導(dǎo)致整個(gè)工作失敗。團(tuán)結(jié)協(xié)
30、作是我們實(shí)習(xí)成功的一項(xiàng)非常重要的保證。而這次實(shí)習(xí)也正好鍛煉我們這一點(diǎn),這也是非常寶貴的。對(duì)我們而言,知識(shí)上的收獲重要,精神上的豐收更加可喜。挫折是一份財(cái)富,經(jīng)歷是一份擁有。這次實(shí)習(xí)必將成為我人生旅途上一個(gè)非常美好的回憶!</p><p><b> 11 致謝</b></p><p> 感謝我們的指導(dǎo)老師,不管在選題階段,還是在設(shè)計(jì)階段,在制作階段,正是她給予我不斷
31、的指導(dǎo)與鼓勵(lì),我們才能順利地完成我的課程設(shè)計(jì),她那種對(duì)待學(xué)生和藹親切,對(duì)待工作一絲不茍的品質(zhì)和精神值得我們每一個(gè)人學(xué)習(xí)。借此,向我們的指導(dǎo)老師畢老師表示衷心的感謝。</p><p> 在此我要感謝我的同學(xué)們,在電路設(shè)計(jì)、程序編寫(xiě)和焊接過(guò)程遇到困難時(shí),正是由于同學(xué)們的指導(dǎo)我們才能順利地完成本次課程設(shè)計(jì)。</p><p><b> 15</b></p>
32、<p><b> 16</b></p><p> 附錄(一)小組分工情況表</p><p><b> 17</b></p><p><b> 附錄二 總電路圖</b></p><p><b> 18</b></p><
33、;p><b> 附錄(三)</b></p><p><b> 元器件清單</b></p><p><b> 附錄(四)</b></p><p><b> 控制程序</b></p><p> #include<reg52.h>&l
34、t;/p><p> #include <intrins.h></p><p> #define LCM_Data P0 //數(shù)據(jù)接口</p><p> #define uchar unsigned char</p><p> #define uint unsigned int </p><p>
35、uchar code uctech[] = {"SSpeed="};</p><p> uchar code net[] = {"RSpeed="};</p><p> uchar code Data[]={'0','1','2','3','4','5'
36、;,'6','7','8','9'}; </p><p> uchar idata plus[8]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03};</p><p> uchar SSpeed[4]={0,0,0,0};</p><p> uchar RSpee
37、d[4]={0,0,0,0};</p><p> uchar k; FLAG;</p><p> uchar PWM=0x7f ; //賦初值</p><p> uint n=0; num=0; //T0中斷次數(shù)和INT0中斷次數(shù)</p><p> uint speed; //實(shí)際轉(zhuǎn)速</p><p&
38、gt; uint SetSpeed; // 數(shù)字和模擬速度設(shè)定值</p><p><b> 20</b></p><p> sbit D=P2^0;</p><p> sbit A=P2^1;</p><p> sbit Run=P2^2; </p><p> sbit Fan=P
39、2^3; </p><p> sbit Stop=P2^4;</p><p> sbit LCM_E=P2^5;//定義接口</p><p> sbit LCM_RW=P2^6;</p><p> sbit LCM_RS=P2^7;</p><p> sbit IN1=P3^4; //L298兩驅(qū)
40、動(dòng)端口</p><p> sbit IN2=P3^5;</p><p> sbit SCL2=P3^7;//連接ADC0831SCL腳</p><p> sbit SDA2=P3^6;//連接ADC0831SDA腳</p><p> sbit CS=P3^3;</p><p> void LCM_Wr
41、iteData(uchar WDLCM); //LCD寫(xiě)數(shù)據(jù)</p><p> void LCM_WriteCommand(uchar WCLCM,BuysC); //LCD寫(xiě)命令</p><p> uchar LCM_ReadData(void); //LCD讀數(shù)據(jù) </p><p> uchar LCM_ReadStatus(vo
42、id); //LCD讀狀態(tài)</p><p> void LCM_Init(void); //LCD初始化</p><p> void DisplayOneChar(uchar X, uchar Y, uchar DData); //LCD顯示1個(gè)字符</p><p> void DisplayListChar(uc
43、har X, uchar Y, uchar code *DData); //LCD顯示一串字符</p><p> void break_Init(void); //定時(shí)器和中斷初始化</p><p> void delay200us(void); //延時(shí)200us</p><p> void delay400ms(void);
44、 //延時(shí)400ms</p><p> void delay10ms(void); //延時(shí)10ms</p><p> void Getch (void); //鍵值判斷函數(shù)</p><p> void GetchIt(void); //鍵值獲取函數(shù)</p><p> void InputSet(void
45、); //鍵盤(pán)設(shè)定函數(shù)</p><p> void motorPWM(void); //PWM調(diào)速</p><p> void RSpeeddisplay(void); //實(shí)際轉(zhuǎn)速顯示</p><p><b> 21</b></p><p> uchar ad0831read(void);
46、//定義該函數(shù)為讀取ADC0831的數(shù)據(jù)</p><p> void Vvchange(void); //AD采集與轉(zhuǎn)速轉(zhuǎn)換,同時(shí)顯示電位器設(shè)定轉(zhuǎn)速值</p><p> void main(void)</p><p><b> {</b></p><p> delay400ms();//啟動(dòng)等待,等LCM講入
47、工作狀態(tài)</p><p> LCM_Init();//LCM初始化</p><p> delay200us();//延時(shí)片刻(可不要)</p><p> DisplayListChar(1, 0, uctech);</p><p> DisplayListChar(12,0,"RPM");</p>&
48、lt;p> DisplayListChar(1, 1, net);</p><p> DisplayListChar(12,1,"RPM");</p><p> LCM_WriteCommand(0x0c,1);// 顯示關(guān)光標(biāo)設(shè)置 指令4:置功能</p><p> LCM_WriteCommand(0x0c,1);// 顯示關(guān)光標(biāo)
49、設(shè)置 指令4:置功能</p><p> break_Init(); //中斷初始化</p><p><b> while(1)</b></p><p><b> { Run=1;</b></p><p><b> Fan=1;</b></p><p&
50、gt;<b> D=1;</b></p><p><b> A=1;</b></p><p> if(D==0) //按數(shù)字參數(shù)設(shè)定鍵可設(shè)定一次參數(shù),此處是為了節(jié)省CPU工作資源,使CPU運(yùn)行效率更高!</p><p><b> {</b></p><p> I
51、nputSet();</p><p> LCM_WriteCommand(0x0c,1);// 顯示關(guān)及光標(biāo)設(shè)置 指令4:置功能</p><p><b> n=0;</b></p><p><b> }</b></p><p><b> 22</b></p>
52、<p> if(A==0) //按電位器模擬參數(shù)設(shè)定</p><p><b> {</b></p><p> Vvchange();</p><p><b> n=0}</b></p><p> if(n==745) //每0.2S進(jìn)行一次實(shí)際速度計(jì)算,同時(shí)顯示實(shí)際轉(zhuǎn)速
53、,進(jìn)行一次PWM調(diào)速。</p><p> {speed=30*num;</p><p><b> num=0;</b></p><p><b> n=0;</b></p><p> RSpeeddisplay(); //顯示實(shí)際轉(zhuǎn)速</p><p> moto
54、rPWM(); //PWM調(diào)速</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /**********************************</p>
55、<p><b> 鍵盤(pán)和轉(zhuǎn)速設(shè)定函數(shù)</b></p><p> **********************************/</p><p> void delay10ms(void) //延時(shí)程序</p><p><b> { </b></p><p> uchar
56、 i,j; </p><p> for(i=20;i>0;i--) </p><p> for(j=248;j>0;j--); </p><p><b> } </b></p><p> void Getch ()</p><p> { unsigned char X,Y
57、,Z;</p><p><b> P1=0xff;</b></p><p> P1=0x0f; //先對(duì)P1置數(shù) 行掃描</p><p><b> 23</b></p><p> if(P1!=0x0f) //判斷是否有鍵按下</p><p>
58、 {delay10ms(); //延時(shí),軟件去干擾</p><p> if(P1!=0x0f) //確認(rèn)按鍵按下X = P1;</p><p><b> {</b></p><p> X=P1; //保存行掃描時(shí)有鍵按下時(shí)狀態(tài)</p><p> P1=0xf0; //列掃描
59、</p><p> Y=P1; //保存列掃描時(shí)有鍵按下時(shí)狀態(tài)</p><p> Z=X|Y; //取出鍵值</p><p> switch ( Z ) //判斷鍵值(那一個(gè)鍵按下)</p><p><b> {</b></p><p> case
60、0xee: k=1;FLAG=0;break; //對(duì)鍵值賦值,10代表清零,11代表確認(rèn)</p><p> case 0xde: k=2;FLAG=0;break; </p><p> case 0xbe: k=3;FLAG=0;break; </p><p> case 0xed: k=4;FLAG=0;break; </p><p&g
61、t; case 0xdd: k=5;FLAG=0;break; </p><p> case 0xbd: k=6;FLAG=0;break; </p><p> case 0xeb: k=7;FLAG=0;break; </p><p> case 0xdb: k=8;FLAG=0;break; </p><p> case 0xb
62、b: k=9;FLAG=0;break; </p><p> case 0xe7: k=10;FLAG=0;break; </p><p> case 0xd7: k=0;FLAG=0;break; </p><p> case 0xb7: k=11;FLAG=0;break;</p><p><b> } </b&
63、gt;</p><p> delay400ms(); //延時(shí)防止連擊!</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
64、; 24</b></p><p> void GetchIt(void)</p><p><b> {FLAG=1;</b></p><p> while(FLAG)</p><p><b> Getch();</b></p><p><b>
65、 }</b></p><p> //鍵盤(pán)數(shù)字轉(zhuǎn)速設(shè)定函數(shù)</p><p> void InputSet(void) //參數(shù)設(shè)定函數(shù)</p><p> { uchar n=0,i=8,m=0,j=8,p;</p><p> LCM_WriteCommand(0x02,1); //指令2:光標(biāo)返回00H</p&
66、gt;<p> for(p=0;p<8;p++) LCM_WriteCommand(0x14,1);// 右移動(dòng)光標(biāo) 指令5:置功能</p><p> LCM_WriteCommand(0x0e,1);// 顯示開(kāi)及光標(biāo)設(shè)置 指令4:置功能</p><p> GetchIt();</p><p> while((k!=11)&&a
67、mp;(n<4))</p><p><b> { </b></p><p><b> if(k<10)</b></p><p> {SSpeed[n]=k;</p><p> DisplayOneChar(i,0,Data[SSpeed[n]]);</p><
68、p><b> n++;</b></p><p><b> i++;</b></p><p> if(n==4) {LCM_WriteCommand(0x0c,1);// 顯示關(guān)及光標(biāo)設(shè)置 指令4:置功能</p><p> LCM_WriteCommand(0x10,1);// 左移動(dòng)光標(biāo) 指令5:置功能<
69、;/p><p> LCM_WriteCommand(0x0e,1);// 顯示開(kāi)光標(biāo)設(shè)置 指令4:置功能</p><p><b> }</b></p><p> GetchIt();</p><p><b> }</b></p><p><b> 25<
70、;/b></p><p> else if(k==10) </p><p> {if(i!=8)LCM_WriteCommand(0x10,1);// 左移動(dòng)光標(biāo) 指令5:置功能</p><p><b> i--;</b></p><p><b> n--;</b></p>
71、<p> GetchIt();</p><p><b> }</b></p><p><b> } </b></p><p> SetSpeed=1000*SSpeed[0]+100*SSpeed[1]+10*SSpeed[2]+SSpeed[3]; </p><p><
72、;b> }</b></p><p> /************************</p><p> AD采集和轉(zhuǎn)速數(shù)學(xué)模型函數(shù)</p><p> ************************/</p><p> //模擬轉(zhuǎn)速設(shè)定函數(shù)</p><p> uchar ad0831r
73、ead(void)//ad0831讀8位AD數(shù)據(jù)</p><p><b> {</b></p><p> uchar i,tmp=0;</p><p><b> SDA2=1;</b></p><p><b> CS=0;</b></p>
74、<p> delay200us();</p><p><b> SCL2=0;</b></p><p> delay200us();</p><p><b> SCL2=1;</b></p><p> delay200us();</p><p><b
75、> SCL2=0;</b></p><p> delay200us();</p><p> for(i=0;i<8;i++)</p><p><b> 26</b></p><p><b> {</b></p><p> if(SDA2)
76、 tmp++;</p><p><b> tmp<<=1;</b></p><p><b> SCL2=1;</b></p><p> delay200us();</p><p><b> SCL2=0;</b></p><p>
77、; delay200us();</p><p><b> }</b></p><p><b> CS=1;</b></p><p> return tmp;</p><p><b> }</b></p><p> //電位器電壓與轉(zhuǎn)速轉(zhuǎn)換數(shù)學(xué)
78、模型函數(shù)以及顯示函數(shù)</p><p> void Vvchange(void)</p><p> {uint ASpeed;</p><p> uchar i,k=8,tmp;</p><p> tmp=ad0831read();</p><p> ASpeed=10*tmp;</p><
79、p> SSpeed[0]=ASpeed/1000;</p><p> SSpeed[1]=ASpeed%1000/100;</p><p> SSpeed[2]=ASpeed%1000%100/10;</p><p> SSpeed[3]=ASpeed%1000%100%10;</p><p> for(i=0;i<4;
80、i++)</p><p> {DisplayOneChar(k,0,Data[SSpeed[i]]);</p><p><b> k++;</b></p><p><b> }</b></p><p> delay400ms();</p><p> SetSpee
81、d=ASpeed;</p><p><b> 27</b></p><p><b> }</b></p><p> //實(shí)際轉(zhuǎn)速顯示函數(shù)</p><p> void RSpeeddisplay(void)</p><p> {uchar l,u=8;</p&g
82、t;<p> RSpeed[0]=speed/1000;</p><p> RSpeed[1]=speed%1000/100;</p><p> RSpeed[2]=speed%1000%100/10;</p><p> RSpeed[3]=speed%1000%100%10;</p><p> for(l=0;l&l
83、t;4;l++)</p><p> {DisplayOneChar(u,1,Data[RSpeed[l]]);</p><p><b> u++;</b></p><p><b> }</b></p><p><b> }</b></p><p&g
84、t; /**************************</p><p> 以下是直流電機(jī)控制相關(guān)函數(shù)</p><p> ***************************/</p><p> // 利用定時(shí)器控制產(chǎn)生占空比可變的 PWM 波</p><p> void break_Init() //中斷初始化<
85、/p><p><b> { </b></p><p> IN1=1; IN2=1;</p><p> TMOD=0x21 ; //T0工作在16位,T1工作在自動(dòng)8位</p><p> TH0=0xff ; //256us延時(shí)常數(shù)</p><p> TL0=0x00
86、 ; //頻率調(diào)節(jié)</p><p> TH1=PWM ; //脈寬調(diào)節(jié)</p><p><b> TL1=0 ;</b></p><p> IT0=1; //中斷設(shè)置</p><p><b> EA=1;</b></p><p&
87、gt;<b> ET0=1;</b></p><p><b> 28</b></p><p><b> ET1=1; </b></p><p><b> EX0=1;</b></p><p><b> TR0=1;</b>
88、</p><p><b> }</b></p><p> //直流電機(jī)驅(qū)動(dòng)PWM函數(shù)</p><p> void motorPWM(void) </p><p> { uint cha;</p><p> if((speed>SetSpeed)&&(PWM&l
89、t;0xfe)) </p><p> {cha=speed-SetSpeed;</p><p> if(cha>1000) PWM=PWM+15;</p><p> else if(cha>500) PWM=PWM+10;</p><p> else if(cha>300) PWM=PWM+6;</p&
90、gt;<p> else if(cha>100) PWM=PWM+2;</p><p> else PWM++;</p><p><b> }</b></p><p> else if(speed<SetSpeed&&PWM>0x00) </p><p> {
91、cha=SetSpeed-speed;</p><p> if(cha>1000) PWM=PWM-15;</p><p> else if(cha>500) PWM=PWM-10;</p><p> else if(cha>300) PWM=PWM-6;</p><p> else if(cha>100)
92、 PWM=PWM-2;</p><p> else PWM--;</p><p><b> } </b></p><p><b> }</b></p><p> /*********************************************************/</
93、p><p> // 定時(shí)器0中斷服務(wù)程序 (頻率)</p><p> /*********************************************************/</p><p><b> 29</b></p><p> void timer0() interrupt 1 </p&g
94、t;<p><b> { </b></p><p><b> TR1=0 ;</b></p><p> TH0=0xff ;</p><p> TL0=0x00 ;</p><p><b> TH1=PWM ;</b></p><p
95、><b> TR1=1 ;</b></p><p><b> n++;</b></p><p> if(Stop!=0)</p><p><b> {</b></p><p> if(Run==0) {IN1=1;IN2=0;} //啟動(dòng)輸出<
96、;/p><p> else if(Fan==0) {IN1=0;IN2=1;}</p><p><b> }</b></p><p><b> else </b></p><p> {IN1=1;IN2=1;}</p><p><b> }</b>
97、;</p><p> /*********************************************************/</p><p> // 定時(shí)器1中斷服務(wù)程序 (脈寬)</p><p> /*********************************************************/</p>&l
98、t;p> void timer1() interrupt 3</p><p><b> { </b></p><p><b> TR1=0;</b></p><p><b> IN1=1;</b></p><p> IN2=1;//結(jié)束輸出</p>
99、<p><b> }</b></p><p> void INT_0() interrupt 0 </p><p><b> 30</b></p><p><b> {num++;</b></p><p><b> }</b><
100、;/p><p> /*****************************************</p><p> ** 1602A液晶屏驅(qū)動(dòng)程序</p><p> ** 晶 振 頻 率:12 Mhz</p><p> *****************************************/</p>
101、<p> /****************************1602A寫(xiě)數(shù)據(jù)函數(shù)**************************/</p><p> /*函數(shù)原型:void LCM_WriteData(uchar WDLCM)</p><p> /*函數(shù)功能:1602A寫(xiě)數(shù)據(jù)</p><p> /*輸入?yún)?shù):要寫(xiě)入的數(shù)據(jù)</p&g
102、t;<p><b> /*輸出參數(shù):無(wú)</b></p><p><b> /*調(diào)用模塊:</b></p><p> /**********************************************************************/</p><p> void LCM_Wr
103、iteData(uchar WDLCM)</p><p><b> {</b></p><p> LCM_ReadStatus();//檢測(cè)忙</p><p> LCM_Data = WDLCM;</p><p> LCM_RS = 1;</p><p> LCM_RW = 0;<
104、/p><p> LCM_E = 0;//若晶振速度太高可以在這后加小的延時(shí)</p><p> delay200us();</p><p> LCM_E = 1;</p><p><b> }</b></p><p> /****************************1602A寫(xiě)指令
105、函數(shù)**************************/</p><p><b> 31</b></p><p> /*函數(shù)原型:void LCM_WriteCommand(uchar WCLCM,BuysC)</p><p> /*函數(shù)功能:1602A寫(xiě)指令</p><p> /*輸入?yún)?shù):要寫(xiě)入的指令<
106、;/p><p><b> /*輸出參數(shù):無(wú)</b></p><p><b> /*調(diào)用模塊:</b></p><p> /**********************************************************************/</p><p> void L
107、CM_WriteCommand(uchar WCLCM,BuysC)//BuysC為0時(shí)忽略忙檢測(cè)</p><p><b> {</b></p><p> if (BuysC) LCM_ReadStatus();//根據(jù)需要檢測(cè)忙</p><p> LCM_Data = WCLCM;</p><p> LCM_R
108、S = 0;</p><p> LCM_RW = 0;</p><p> LCM_E = 0;</p><p> delay200us();</p><p> LCM_E = 1;</p><p><b> }</b></p><p> /***********
109、*****************1602A讀數(shù)據(jù)函數(shù)**************************/</p><p> /*函數(shù)原型:uchar LCM_ReadData(void)</p><p> /*函數(shù)功能:1602A讀數(shù)據(jù)</p><p><b> /*輸入?yún)?shù):無(wú)</b></p><p> /
110、*輸出參數(shù):1602A返回的數(shù)據(jù)</p><p><b> /*調(diào)用模塊:</b></p><p> /**********************************************************************/</p><p> uchar LCM_ReadData(void)</p>&
111、lt;p><b> {</b></p><p> LCM_Data=0xFF;</p><p><b> 32</b></p><p> LCM_RS = 1;</p><p> LCM_RW = 1;</p><p> LCM_E = 0;</p&g
112、t;<p> delay200us();</p><p> LCM_E = 1;</p><p> return(LCM_Data);</p><p><b> }</b></p><p> /****************************1602A讀狀態(tài)函數(shù)**************
113、************/</p><p> /*函數(shù)原型:uchar LCM_ReadData(void)</p><p> /*函數(shù)功能:1602A讀狀態(tài)</p><p><b> /*輸入?yún)?shù):無(wú)</b></p><p> /*輸出參數(shù):1602A返回的狀態(tài)</p><p><
114、b> /*調(diào)用模塊:</b></p><p> /**********************************************************************/</p><p> uchar LCM_ReadStatus(void)</p><p><b> {</b></p>
115、;<p> LCM_Data = 0xFF;</p><p> LCM_RS = 0;</p><p> LCM_RW = 1;</p><p> LCM_E = 0;</p><p> delay200us();</p><p> LCM_E = 1;</p><p>
116、; while (LCM_Data & 0x80);//檢測(cè)忙信號(hào)</p><p> return(LCM_Data);</p><p><b> }</b></p><p> /****************************1602A初始化函數(shù)**************************/</p>
117、<p><b> 33</b></p><p> /*函數(shù)原型:void LCM_Init(void)</p><p> /*函數(shù)功能:1602A初始化</p><p><b> /*輸入?yún)?shù):無(wú)</b></p><p><b> /*輸出參數(shù):無(wú)</b>
118、;</p><p><b> /*調(diào)用模塊:</b></p><p> /**********************************************************************/</p><p> void LCM_Init(void)</p><p><b> {
119、</b></p><p> LCM_Data = 0;</p><p> LCM_WriteCommand(0x38,0);//三次顯示模式設(shè)置,不檢測(cè)忙信號(hào),0x38:指令6置功能,2行,5*7字符</p><p> delay200us();</p><p> LCM_WriteCommand(0x38,0);<
120、/p><p> delay200us();</p><p> LCM_WriteCommand(0x38,0);</p><p> delay200us();</p><p> LCM_WriteCommand(0x38,1);//顯示模式設(shè)置,開(kāi)始要求每次檢測(cè)忙信號(hào)</p><p> LCM_WriteComm
121、and(0x08,1);//關(guān)閉顯示 指令4:</p><p> LCM_WriteCommand(0x01,1);//顯示清屏 指令1</p><p> LCM_WriteCommand(0x06,1);// 顯示光標(biāo)移動(dòng)設(shè)置 指令3:置輸入模式:地址增量,顯示屏不移動(dòng)</p><p> LCM_WriteCommand(0x0e,1);// 顯示開(kāi)及
122、光標(biāo)設(shè)置 </p><p><b> }</b></p><p> /******************1602A按指定位置顯示一個(gè)字符函數(shù)**********************/</p><p> /*函數(shù)原型:void DisplayOneChar(uchar X, uchar Y, uchar DData)</p&g
123、t;<p> /*函數(shù)功能:1602A按指定位置顯示一個(gè)字符</p><p><b> 34</b></p><p> /*輸入?yún)?shù):X坐標(biāo) Y坐標(biāo) 要顯示的字符</p><p><b> /*輸出參數(shù):無(wú)</b></p><p><b> /*調(diào)用模塊:</
124、b></p><p> /**********************************************************************/</p><p> void DisplayOneChar(uchar X, uchar Y, uchar DData)</p><p><b> {</b><
125、/p><p><b> Y &= 0x1;</b></p><p> X &= 0xF;//限制X不能大于15,Y不能大于1</p><p> if (Y) X |= 0x40;//當(dāng)要顯示第二行時(shí)地址碼+0x40;</p><p> X |= 0x80;// 算出指令碼</p><
126、;p> LCM_WriteCommand(X, 0);//這里不檢測(cè)忙信號(hào),發(fā)送地址碼</p><p> LCM_WriteData(DData);</p><p><b> }</b></p><p> /*******************1602A按指定位置顯示一串字符函數(shù)*********************/<
127、;/p><p> /*函數(shù)原型:void DisplayListChar(uchar X, uchar Y, uchar code *DData)</p><p> /*函數(shù)功能:1602A按指定位置顯示一個(gè)字符</p><p> /*輸入?yún)?shù):X坐標(biāo) Y坐標(biāo) 要顯示字符串的首地址</p><p><b> /*輸出參數(shù):無(wú)&l
128、t;/b></p><p><b> /*調(diào)用模塊:</b></p><p> /**********************************************************************/</p><p> void DisplayListChar(uchar X, uchar Y, uchar
129、code *DData)</p><p><b> {</b></p><p> uchar ListLength;</p><p> ListLength = 0;</p><p><b> Y &= 0x1;</b></p><p> X &=
130、0xF;//限制X不能大于15,Y不能大于1</p><p><b> 35</b></p><p> while (DData[ListLength]>0x20)//若到達(dá)字串尾則退出</p><p><b> {</b></p><p> if (X <= 0xF)//X坐標(biāo)
131、應(yīng)小于0xF</p><p><b> {</b></p><p> DisplayOneChar(X, Y, DData[ListLength]);//顯示單個(gè)字符</p><p> ListLength++;</p><p><b> X++;</b></p><p&
132、gt;<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /********************200us延時(shí)函數(shù)************************/</p><p> /*函數(shù)原型:v
133、oid delay200us(void)</p><p> /*函數(shù)功能:200us延時(shí)</p><p><b> /*輸入?yún)?shù):無(wú)</b></p><p><b> /*輸出參數(shù):無(wú)</b></p><p><b> /*調(diào)用模塊:</b></p>&l
134、t;p> /**********************************************************************/</p><p> void delay200us(void)</p><p><b> {</b></p><p> unsigned int TempCyc = 100;&l
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)---直流電機(jī)pwm調(diào)速系統(tǒng)
- 計(jì)算機(jī)控制課程設(shè)計(jì)——直流電機(jī)pwm調(diào)速系統(tǒng)的計(jì)算機(jī)控制
- 直流電機(jī)閉環(huán)調(diào)速課程設(shè)計(jì)
- 課程設(shè)計(jì)單閉環(huán)直流電機(jī)控制系統(tǒng)
- 計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)---數(shù)字雙閉環(huán)直流調(diào)速系統(tǒng)設(shè)計(jì)
- 計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)--數(shù)字雙閉環(huán)直流調(diào)速系統(tǒng)設(shè)計(jì)
- 直流電機(jī)轉(zhuǎn)速計(jì)算機(jī)控制系統(tǒng)設(shè)計(jì)
- 計(jì)算機(jī)控制實(shí)驗(yàn)課程設(shè)計(jì)報(bào)告-直流電機(jī)轉(zhuǎn)速pid控制
- 運(yùn)動(dòng)控制課程設(shè)計(jì)--單閉環(huán)直流電機(jī)控制系統(tǒng)
- 計(jì)算機(jī)課程設(shè)計(jì)---直流電機(jī)速度控制
- 運(yùn)動(dòng)控制系統(tǒng)課程設(shè)計(jì)--雙閉環(huán)直流電機(jī)調(diào)速系統(tǒng)設(shè)計(jì)
- 運(yùn)動(dòng)控制系統(tǒng)課程設(shè)計(jì)--雙閉環(huán)直流電機(jī)調(diào)速系統(tǒng)設(shè)計(jì)
- 直流電機(jī)調(diào)速課程設(shè)計(jì)
- 基于CPLD計(jì)算機(jī)控制直流電機(jī).pdf
- 直流電機(jī)閉環(huán)調(diào)速
- 運(yùn)動(dòng)控制系統(tǒng)課程設(shè)計(jì)雙閉環(huán)直流電機(jī)調(diào)速系統(tǒng)設(shè)計(jì)
- 雙閉環(huán)直流電機(jī)調(diào)速系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)--直流電機(jī)調(diào)速控制系統(tǒng)設(shè)計(jì)
- 直流電機(jī)雙閉環(huán)系統(tǒng)課程設(shè)計(jì)
- 電力電子課程設(shè)計(jì)--單閉環(huán)直流電機(jī)控制系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論