2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘要</b></p><p>  隨著微電子和計算機技術的發(fā)展,步進電機的需求量與日俱增,它廣泛用于打印機、電動玩具等消費類產(chǎn)品以及數(shù)控機床、工業(yè)機器人、醫(yī)療器械等機電產(chǎn)品中,其在各個國民經(jīng)濟領域都有應用。研究步進電機的控制系統(tǒng),對提高控制精度和響應速度、節(jié)約能源等都具有重要意義。</p><p>  本控制系統(tǒng)的設計,由硬件設計和軟件設

2、計兩部分組成,完成二相步進電機的控制。其中,硬件設計主要包括單片機系統(tǒng)、按鍵控制模塊、步進電機驅動模塊、數(shù)碼顯示模塊等功能模塊的設計,以及硬件電路在PROTUS上的仿真。軟件設計包括主程序以及各個模塊的控制程序,最終實現(xiàn)對步進電機轉動方向及轉動模式(四拍,八拍)的控制,并且將步進電機的步進數(shù)動態(tài)顯示在LED數(shù)碼管上。本系統(tǒng)具有智能性、實用性及可靠性的特點。</p><p>  關鍵詞:二相步進電機 單片機 四

3、拍 八拍 LED顯示</p><p><b>  Abstract</b></p><p>  With the development of microelectronics and computer art, step-by-step electric motor need amounts increase with each passing day , it

4、 is used for the products consuming a kind such as printer , electricity-driven toy broadly and numerical control machine tool , electromechanical products such as industry robot , medical apparatus and instruments are h

5、it by, the person applies to each national economy field It both. Study step-by-step electric motor navar , having importance to improving under </p><p>  Keywords: Electric motor MCU Four shoots Eight sh

6、oots LEDdisplay</p><p><b>  目錄</b></p><p>  摘要.........................................................................I</p><p>  1總體分析與解決方案............................

7、.............................1</p><p>  1.1問題的提出與簡述......................................................1</p><p>  1.2設計目的級系統(tǒng)功能....................................................1</p>&

8、lt;p>  2 硬件電路設計模塊..........................................................2</p><p>  2.1單片機系統(tǒng)原理........................................................2</p><p>  2.2二相步進電機工作原理分析.............

9、.................................5</p><p>  2.3 L298驅動電路設計.....................................................7</p><p>  2.4 四位LED數(shù)碼管顯示設計...............................................7</p&g

10、t;<p>  2.5總體硬件仿真設計.....................................................10</p><p>  3軟件設計模塊..............................................................11</p><p>  3.1整體流程分析與設計..........

11、.........................................11</p><p>  3.2步進電機四拍,八拍流程分析與設計......................................11</p><p>  3.3顯示模塊流程分析與設計...............................................14</p>

12、;<p>  4 系統(tǒng)調試運行與仿真........................................................15</p><p>  5 小結與心得體會............................................................16</p><p>  參考文獻................

13、....................................................17</p><p>  附錄........................................................................18</p><p>  二相步進電機控制系統(tǒng)的設計</p><p>  1總體分析與解決

14、方案</p><p>  1.1問題的提出與簡述</p><p>  如今,電動機在工農(nóng)業(yè)生產(chǎn)、人們?nèi)粘I钪衅鹬种匾淖饔谩2竭M電機是最常見的一種控制電機,在各領域中得到廣泛應用。步進電機作為執(zhí)行元件,是機電一體化的關鍵產(chǎn)品之一, 廣泛應用在各種自動化控制系統(tǒng)中。</p><p>  隨著微電子和計算機技術的發(fā)展,步進電機的需求量與日俱增,在各個國民經(jīng)濟領域都

15、有應用。步進電機是一種將電脈沖轉化為角位移的執(zhí)行機構。當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(稱為“步距角”),它的旋轉是以固定的角度一步一步運行的。可以通過控制脈沖個數(shù)來控制角位移量,從而達到準確定位的目的;同時可以通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。步進電機可以作為一種控制用的特種電機,其優(yōu)點是結構簡單、運行可靠、控制方便。尤其是步距值不受電壓、溫度的變化的影響、

16、誤差不會長期積累的特點,給實際的應用帶來了很大的方便。它廣泛用于消費類產(chǎn)品(打印機、照相機)、工業(yè)控制(數(shù)控機床、工業(yè)機器人)、醫(yī)療器械等機電產(chǎn)品中。研究步進電機的控制和測量方法,對提高控制精度和響應速度、節(jié)約能源等都具有重要意義。為此,本文設計了一個步進電機控制系統(tǒng),可以實現(xiàn)對步進電機轉動方式和轉動方向的控制。</p><p>  1.2設計目的及系統(tǒng)功能</p><p>  本設計的目

17、的是以單片機為核心設計出一個二相步進電機控制系統(tǒng)。本系統(tǒng)采用ATmega128作為控制單元,通過按鍵實現(xiàn)對二相步進電機轉動方向及轉動模式的控制,并且將步進電機的步進步數(shù)動態(tài)顯示在LED數(shù)碼管上。</p><p>  通過本課題,查閱相關資料,由于本學期所學單片機課程型號為ATmega128,了解了ATmega128單片機控制的一些基本技術,掌握其控制系統(tǒng)的分析方法與實現(xiàn)方法,能對單片機外圍電路設計進行系統(tǒng)學習與掌

18、握;另一方面,通過設計步進電機控制系統(tǒng)的硬件電路,控制程序和相應的電路圖,以此培養(yǎng)自己的自學和動手能力,從而為今后參加工作或進一步深造打下良好的基礎。設計的步進電機控制系統(tǒng)有以下功能:</p><p>  1. 二相步進電機采用雙極性(H橋)控制</p><p>  2.用K0-K1作為通電方式選擇鍵,K0為四拍,K1為八拍</p><p>  3. 用K2作為啟動

19、/停止控制鍵</p><p>  4. 用K3作為方向控制</p><p>  5. 用4位LED數(shù)碼管顯示工作步數(shù)</p><p>  6. 用3個發(fā)光二極管顯示狀態(tài):正轉時紅燈亮,反轉時黃燈亮,不轉時綠燈亮</p><p>  考慮到二相步進電機需采用雙極性控制,故電機的驅動模塊使用芯片L298實現(xiàn),接線簡潔,穩(wěn)定性好。選定好設計方案后,

20、可以由分析得到系統(tǒng)的總體原理框圖如下所示:</p><p>  圖1系統(tǒng)總體原理框圖</p><p><b>  2硬件電路設計模塊</b></p><p>  2.1 單片機系統(tǒng)原理</p><p>  本次課題采用的單片機型號是ATmega128,ATmega128為基于AVR RISC結構的8位低功耗CMOS微處理

21、器。由于其先進的指令集以及單周期指令執(zhí)行時,ATmega128 的數(shù)據(jù)吞吐率高達1 MIPS/MHz,從而可以緩減系統(tǒng)在功耗和處理速度之間的矛盾。AVR 內(nèi)核具有豐富的指令集和32個通用工作寄存器。所有的寄存器都直接與算邏單元(ALU) 相連接,使得一條指令可以在一個時鐘周期內(nèi)同時訪問兩個獨立的寄存器。這種結構大大提高了代碼效率,并且具有比普通的復雜指令集微處理器高10 倍的數(shù)據(jù)吞吐率。ATmega128 具有如下特點:128K 字節(jié)的

22、系統(tǒng)內(nèi)可編程Flash( 具有在寫的過程中還可以讀的能力,即RWW)、4K字節(jié)的EEPROM,4K字節(jié)的SRAM、53個通用I/O 口線、32個通用工作寄存器、實時時鐘RTC、4個靈活的具有比較模式和PWM 功能的定時器/ 計數(shù)器(T/C)、兩個USART、面向字節(jié)的兩線接口TWI、8通道10位ADC( 具有可選的可編程增益)、具有片內(nèi)振蕩器的可編程看門狗定時器、SPI串行端口、與IEEE 1149.1 規(guī)范兼容的JTAG測試接口( 此

23、接口</p><p>  ATmega128 AVR有整套的開發(fā)工具,包括C編譯器,宏匯編,程序調試器/ 仿真器和評估板。芯片引腳圖如下所示:</p><p>  圖2 ATmega128的引腳圖</p><p>  本次課設所使用的單片機功能主要有單片機的I/O口以及定時器/計數(shù)器功能。作為通用數(shù)字I/O 使用時,所有AVR I/O 端口都具有真正的讀- 修改-

24、寫功能。這意味著用SBI 或CBI 指令改變某些管腳的方向( 或者是端口電平、禁止/ 使能上拉電阻) 時不會無意地改變其他管腳的方向( 或者是端口電平、禁止/ 使能上拉電阻)。輸出緩沖器具有對稱的驅動能力,可以輸出或吸收大電流,直接驅動LED。所有的端口引腳都具有與電壓無關的上拉電阻,并有保護二極管與VCC 和地相連。每個端口都有三個I/O 存儲器地址:數(shù)據(jù)寄存器 – PORTx、 數(shù)據(jù)方向寄存器 – DDRx 和端口輸入引腳– PIN

25、x。數(shù)據(jù)寄存器和數(shù)據(jù)方向寄存器為讀/ 寫寄存器,而端口輸入引腳為只讀寄存器。當寄存器SFIOR 的上拉禁止位PUD 置位時所有端口的全部引腳的上拉電阻都被禁止。DDxn 位于DDRx 寄存器, PORTxn 位于PORTx 寄存器, PINxn 位于PINx 寄存器。DDxn 以來選擇引腳的方向。當DDxn 為"1“ 時, Pxn 配置為輸出;否則為輸入。當引腳配置為輸入時,若PORTxn 為"1“,上拉電</

26、p><p>  圖3 ATmega128的仿真圖</p><p>  本次課設采用單片機的定時器/計數(shù)器功能的CTC模式, T/C(TCNT0)和輸出比較寄存器(OCR0)為8位寄存器。中斷請求信號位于定時器中斷標志寄存器TIFR。與定時器相關的所有中斷都可以通過定時器中斷屏蔽寄存器TIMSK 單獨進行屏蔽。在CTC 模式(WGM01:0 = 2) 里OCR0 寄存器用于調節(jié)計數(shù)器的分辨率。當

27、計數(shù)器的數(shù)值TCNT0 等于OCR0 時計數(shù)器清零。OCR0 定義了計數(shù)器的top 值,亦即計數(shù)器的分辨率。這個模式可以在極大程度上控制比較匹配輸出的頻率,也簡化了外部事件計數(shù)的操作。CTC模式的時序圖如下所示。計數(shù)器數(shù)值TCNT0一直增加直到TCNT0與OCR0匹配,然后TCNT0 清零。</p><p>  圖4 CTC模式的時序圖</p><p>  2.2 二相步進電機工作原理分析

28、</p><p>  步進電機一般分為永磁式(PM)、反應式(VR)和混合式(HB)3種類型。目前,二相混合式步進電機的應用最為廣泛。圖5為二相六線式步進電機的工作原示意圖。由圖可知,它有2個繞組,且每個繞組都有一個中間抽頭。因此,二相步進電機也就有了6根引線。當電機中的繞組通電后,其定子磁極產(chǎn)生磁場,將轉子吸合到相應的磁極處。若繞組在控制脈沖的作用下,通電方向使定子在順時針方向輪流產(chǎn)生磁場,則電機可順時針轉動;

29、通電方向使定子在逆時針方向輪流產(chǎn)生磁場,則電機可逆時針轉動。控制脈沖每作用一次,通電方向就變化一次,使電機轉動一步,即一個步距角。脈沖頻率越高,電機轉動也就越快。</p><p>  本次課設所使用的二相步進電機需要采用雙極性的接法。雙極性則是指步進電機線圈中電流的流動方向不是單向的,即繞組線圈中的電流有時沿某一方向流動,有時按相反方向流動。步進電機的雙極性驅動電路如圖2-5所示它使用8個晶體管來驅動2組相位。雙

30、極性驅動電路可以同時驅動四線式或六線式的二相步進電機。對于二相六線式步進電機而言, 2個繞組的中間抽頭Vdd1和Vdd2都懸空。根據(jù)步進電機的工作原理,當控制器給驅動器發(fā)出脈沖信號時,驅動器經(jīng)過環(huán)形分配器和功率放大后,電機繞組通電的順序為,其4個狀態(tài)按順序周而復始進行變化,電機轉動; 若通電時序就變?yōu)闀r,電機就逆向轉動。步進電機運轉時,當達林頓管Q1和Q4導通時,線圈中電流方向為A→;當林頓管Q2和Q3導通時,線圈中電流方向為→A??梢?/p>

31、,步進電機線圈中的電流方向在運轉過程中是不斷改變的。</p><p>  圖5 二相步進電機原理圖</p><p>  圖6 雙極性驅動電路</p><p>  任務要求需要對二相步進電機進行四拍,八拍的控制。其兩者的區(qū)別在于通電時序的不一樣,四拍的通電方式為:,而八拍需要在此基礎上進行細分,在中間插入,其通電方式為: </p><p>  

32、。由對應的通電方式,在結合圖6,便可以得到對應的單片機管腳P1.0,P1.1,P1.2,P1.3的電平變化情況,繪制出步進電機的四拍,八拍控制方式表格。如下所示:</p><p>  表1 步進電機四拍控制通電方式</p><p>  表2 步進電機八拍控制通電方式</p><p>  由上述所得表格,便可以通過控制單片機I/O口輸出高低電平變化來實現(xiàn)步進電機的四拍

33、,八拍運轉。在編寫程序時,設置好控制字,在I/O口做循環(huán)輸出,便實現(xiàn)了單片機對步進電機的控制。由于單片機單獨代負載能力較差,步進電機與單片機之間需要接入步進電機的驅動電路。</p><p>  2.3 L298驅動電路設計</p><p>  由課題任務要求可知,二相步進電機需采用雙極性(H橋)控制,故考慮使用芯片L298來驅動步進電機。L298N 為雙全橋步進電機專用驅動芯片,內(nèi)部包含4

34、信道邏輯驅動電路,是一種二相和四相步進電機的專用驅動器,可同時驅動2個二相或1個四相步進電機,內(nèi)含二個H-Bridge 的高電壓、大電流雙全橋式驅動器,接收標準TTL邏輯準位信號,可驅動46V、2A以下的步進電機,且可以直接透過電源來調節(jié)輸出電壓;此芯片可直接由單片機的IO端口來提供模擬時序信號。在接入步進電機時,OUTl,OUT2 ,OUT3,OUT4接二相步進電機的,,,,二相步進電機的對應管腳以圖6為準,input1~input4

35、接單片機的I/O口,用來控制單片機的正反轉以及四拍,八拍通電方式。芯片的內(nèi)部結構如下圖所示:</p><p>  圖7 L298內(nèi)部結構圖</p><p>  由圖6與圖7比較可以看出,L298內(nèi)部集成有2個H橋路,對應的輸入接口為:IN1位P1.1,IN2為P1.0,IN3為P1.2,IN4為P1.3。對應的輸出接口為:OUT1接,OUT2接,OUT3接,OUT4接。PROTUS仿真圖為

36、:</p><p>  圖8 驅動電路PROTUS仿真圖</p><p>  2.4 四位LED數(shù)碼管顯示設計</p><p>  任務要求需采用4位LED數(shù)碼管顯示工作步數(shù),通過查閱相關資料,在仿真時采用型號7SEG-MPX4-CC共陰極數(shù)碼管顯示。其PROTUS仿真圖如下所示:</p><p>  圖9 數(shù)碼管顯示仿真圖</p>

37、;<p>  單片機的PD口接數(shù)碼管輸入管腳ABCDEFG以及DP(可以不用),PE口接4位數(shù)碼管的片選端口1234,7段數(shù)碼管對應的顯示數(shù)值與輸入信號的關系可以由下表得到。</p><p>  表3 七段數(shù)碼管顯示功能表</p><p>  由上表可以得到顯示數(shù)字與單片機管腳輸入信號的對應關系。只需要控制單片機的PD口輸出信號即可顯示數(shù)字,在程序設計中,定義7段顯示數(shù)組為s

38、even_seg[10]= {0X3f, 0X06, 0X5b, 0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f}即可使數(shù)碼管顯示數(shù)字。</p><p>  2.5 總體硬件仿真設計</p><p>  由前面各硬件部分的設計分析,以及控制系統(tǒng)的總體原理框圖可以得到系統(tǒng)的硬件PROTUS仿真圖為:</p><p>  圖10 系統(tǒng)仿真原理圖&l

39、t;/p><p>  通過硬件仿真圖可以看到,以單片機ATmega128為核心的控制系統(tǒng),由PA口與PB口進行開關按鍵的設置,具體為:PB1接K2啟動/停止開關,高電平為停止狀態(tài),低電平為啟動狀態(tài);PA7接K3正/反轉開關,高電平為正轉,低電平為反轉;PA0接K0四拍通電方式,按一次即可使電機進行四拍運轉;PA2接K1八拍通電方式,按一次使電機進行八拍運轉。</p><p>  PE口與PD口

40、外接4位LED數(shù)碼管,顯示步進步數(shù),具體接線方式已在前面敘述,通過控制PE口的電平信號,達到片選的目的,進而實現(xiàn)4位數(shù)值的顯示。PF口作為輸出口外接負載,具體由PF7接綠色發(fā)光二極管,使其在電機停轉時亮;PF5接紅色放光二極管,使其在電機正轉時亮;PF4接黃色發(fā)光二極管,使其在電機發(fā)轉時亮。PF0-PF3外接驅動電路L298的4個輸入端,具體為PF0接IN2,PF1接IN1,PF2接IN3,PF3接IN4;即對應圖2-5的P1.0-P1

41、.3,L298再外接二相步進電機,這樣即可通過控制單片機的PF口輸出電平來實現(xiàn)二相步進電機的啟動,停止,正反轉以及四拍,八拍運轉。具體工作過程需通過對單片機編程來實現(xiàn)。</p><p><b>  3軟件設計模塊</b></p><p>  3.1總體流程分析與設計</p><p>  軟件模塊的分析需要根據(jù)硬件電路的設計來進行,基于上述硬件電

42、路的分析設計,對整個程序流程需要有個整體的思考與判斷。由硬件電路的設計可以看出,程序需要實現(xiàn)以下幾個功能:通過開關按鍵實現(xiàn)電機的啟用與停止,正轉與反轉,以及四拍,八拍的運行方式;由4位LED數(shù)碼管實現(xiàn)步進步數(shù)的顯示;3個發(fā)光二極管顯示電機的狀態(tài)。程序設計的總體思想是單片機通過判斷按鍵輸入電平變化從而選擇正反轉以及四八拍的工作方式。通過單片機的定時器/計數(shù)器2實現(xiàn)步數(shù)計數(shù)的功能;由定時器/計數(shù)器0實現(xiàn)單片機PF口輸出正反轉信號以及四拍,八

43、拍控制字,同時發(fā)光二極管顯示狀態(tài),主程序流程圖如圖3-1所示。程序設計主要采用主程序調用子程序的模式來進行,定義子程序display()在主程序中循環(huán)實現(xiàn)單片機的持續(xù)運行。</p><p>  在display()中,調用子程序saomiao()實現(xiàn)對按鍵的掃描以達到選定電機運行狀態(tài)的目的,由if判斷語句設計,先判斷啟動/停止按鍵接口PB1,接著判斷正/反轉按鍵接口PA7,設定變量flag(正轉位0,反轉為2),

44、然后判斷四八拍方式選擇按鍵,此時開啟定時器/計數(shù)器0和定時器/計數(shù)器2,以及確定循環(huán)變量tt(四拍為4,八拍為8),由于定時器/計數(shù)器的啟動,使得單片機的PF口輸出對應方式的控制字,讓電機開始運轉;計數(shù)功能啟用,實現(xiàn)步進數(shù)的計數(shù),最后通過片選數(shù)組scan[k]選定數(shù)碼管的位數(shù),并由七段數(shù)組seven_seg[],顯示對應的數(shù)值。最后重新判斷PB口數(shù)值,若啟動/停止按鍵為停止,則關閉定時器/計數(shù)器0和定時器/計數(shù)器2,系統(tǒng)停止,具體完整程

45、序參見附錄。</p><p>  3.2步進電機四拍,八拍流程分析與設計</p><p>  程序設計需要對步進電機進行四拍控制與八拍控制,有前面所述可知,兩者的區(qū)別在于對電機的通電時序不一樣。由表2-1與表2-2可以得到電機的控制字,在程序設計時,首先定義電機的控制字數(shù)組,由于存在正反轉兩種情況,所以定義一個2維數(shù)組為d4[][8]= {{0x22,0x28,0x21,0x24},{0x

46、22,0x2a,0x28,02</p><p>  9,0x21,0x25,0x24,0x26},{0x14,0x11,0x18,0x12},{0x14,0x15,0x11, 0x19, 0x18, 0x1a,0x12,0x16}};分別為電機正轉4拍,正轉8拍,反轉4拍,反轉8拍的控制字;通過給單片機PF口賦予上述數(shù)值即可實現(xiàn)步進電機的不同方式運轉,同時由發(fā)光二極管顯示電機的工作狀態(tài)。</p>&

47、lt;p>  圖11 主程序流程圖</p><p>  在程序設計時,需要使用單片機的定時器/計數(shù)器0功能實現(xiàn)四拍,八拍運轉。在程序中,首先有saomiao()程序判斷所選功能按鍵,同時開啟定時器/計數(shù)器0,在其初始化程序里,設定寄存器的值為TCNT0 = 0x64,OCR0 = 0x9C,當TCNT0的計數(shù)值與OCR0相等時,觸發(fā)中斷子程序timer0_comp_isr(),在中斷子程序里,先重新賦予寄

48、存器數(shù)值TCNT0 = 0x64,OCR0 = 0x9C,以便下次觸發(fā)中斷程序,然后將設定的計數(shù)變量timer0加1,判斷timer0是否為50,當累加到50后,將timer0清零,變量i加1,將對應的控制字d4[flag+pai][i%tt]賦給PF口,使電機轉動,讓循環(huán)重復上述過程。flag+pai確定了電機的正反轉以及四拍,八拍方式;當為四拍時,tt=4,為八拍時,tt=8;這樣即可使控制字循環(huán)輸出給PF口,從而實現(xiàn)了步進電機的

49、四拍,八拍運轉。其程序流程圖如下所示:</p><p>  圖12 步進電機四拍,八拍流程圖</p><p>  程序通過控制寄存器值TCCR0來控制定時器/計數(shù)器0的啟動與停止,當TCCR0=0x0E時,定時器/計數(shù)器0啟動,TCNT0累加,當TCNTO=OCR0時,觸發(fā)相應的中斷子程序,設定當timer0=50時,將控制字輸出到PF口,實現(xiàn)了一定的延時,可以調整這個數(shù)值以達到滿意的延時

50、效果,將TCCR0設置為0x00來屏蔽定時器/計數(shù)器0功能。</p><p>  3.3顯示模塊流程分析與設計</p><p>  硬件設計得到了4位LED數(shù)碼管的顯示電路,由單片機的PD口輸出顯示數(shù)字,有PE口用來輸出片選信號。由前所述表3可知,ABCDEFG管腳對應的數(shù)字顯示,得到了10個對應的十六進制數(shù),在程序設計中,先定義了7段數(shù)碼管顯示數(shù)組seven_seg[10]={0X3f,

51、0X06,0X5b,0X4f,0X66, 0X6d, 0X7d, 0X07, 0X7f, 0X6f},以及片選數(shù)組scan[4]={0Xf7,0Xfb,0Xfd,0Xfe};使用定時器/計數(shù)器2來實現(xiàn)計數(shù)的功能,其工作方式與定時器/計數(shù)器0一樣,在時序上與定時器/計數(shù)器0保持一致,以達到步進與計數(shù)同步的效果,其設定的TCNT2與OCR2值與前面一致。其程序流程圖如下所示:</p><p>  圖13 中斷計數(shù)程序

52、流程圖</p><p>  通過定時器/計數(shù)器2實現(xiàn)計數(shù)的功能,要顯示出計數(shù)結果,需要給單片機PE口對應的片選信號來實現(xiàn)每位數(shù)值的顯示。其對應的程序代碼如下:</p><p>  PORTE =scan[k];//對應的片選信號 </p><p>  switch(k)//顯示每位數(shù)值</p><p>  {case 0 : PORTD=

53、seven_seg[now.geshi%10]; break;//顯示個位</p><p>  case 1 : PORTD=seven_seg[now.geshi/10];break;//顯示十位</p><p>  case 2 : PORTD=seven_seg[now.baiqian%10];break;//顯示百位 case 3 : PORTD=seven_seg[now

54、.baiqian/10];break;//顯示千位</p><p><b>  } </b></p><p>  k++; </p><p>  if(k==4) k=0;//4位循環(huán)顯示,清零</p><p>  對上述程序代碼循環(huán)運行,即可實現(xiàn)4位LED數(shù)碼管的顯示功能。</p><p

55、>  4系統(tǒng)調試運行與仿真</p><p>  硬件設計模塊完成了對系統(tǒng)電路圖的設計,軟件模塊由程序實現(xiàn)了各項功能;接下來需要將軟件與硬件結合起來才能真正完成整個設計工作。我們采用的是PROTUS仿真軟件得到了系統(tǒng)的硬件圖,參見圖10;使用ICC AVR軟件的集成環(huán)境調試程序,程序代碼請參見附錄,在該集成環(huán)境下,創(chuàng)建一工程,將程序裝入該工程下,調試運行無誤后,該工程會自動生成.hex文件,在PROTUS仿真

56、環(huán)境里,在單片機中載入該文件,這樣便實現(xiàn)了單片機程序的載入。在系統(tǒng)完成后測試系統(tǒng),檢查硬件和軟件是否能夠協(xié)調運行,并對系統(tǒng)出現(xiàn)的情況進行分析,看是否能夠達到系統(tǒng)創(chuàng)作之初所設想的效果,如達不到則重新修改系統(tǒng)的硬件結構或者修改軟件的程序部分,直到達到設計需要為止。本系統(tǒng)的設計思路為:首先從整體上劃分出各功能模塊,然后硬件和軟件同時進行依次完成各個功能模塊,最后將各個模塊聯(lián)系起來完成整個系統(tǒng)。</p><p>  在硬

57、件調試的過程中,遇到了很多問題。主要有: 按鍵設計完成后,在多次運行過程中發(fā)現(xiàn)按鍵是否按下難以直觀準確判斷,在此處進行改進設計,為每一個按鍵接上一個發(fā)光二極管,當有鍵按下時,相對應的發(fā)光二極管變亮,使得按鍵動作形象直觀。在步進電機與驅動電路的連接中,需要準確的接好各個管腳,因為程序里的控制字對應著這些管腳電平的變化,不能隨便接,單片機的輸出口與驅動電路的輸出口也需要一一對應,否則電機無法按正常的設計運轉。</p><

58、p>  軟件測試的時候也有些問題,主要有:控制步進電機轉動的程序段完成后,調試發(fā)現(xiàn)對步進電機的轉速過小,查閱資料后發(fā)現(xiàn)設計思路不太合理,原先的設計思路是用主程序控制步進電機轉動,采用延時方式控制步進電機速度,由定時器處理按鍵鍵值;隨即改進程序,主程序用來處理按鍵,由定時器控制步進電機轉動,步進電機轉動速度由定時器定時時間決定,可調范圍較廣。問題得到解決,不僅擴大了步進電機轉速的控制范圍,也使得單片機對步進電機轉速的控制更加精確。&

59、lt;/p><p><b>  5小結與心得體會</b></p><p>  經(jīng)過與同小組同學的共同努力,近一個多星期的學習,本次課程設計課題二相步進電機控制系統(tǒng)告一段落。二相步進電機控制系統(tǒng)的設計主要分為硬件設計和軟件設計兩個部分:</p><p>  硬件設計主要是把單片機系統(tǒng)(ATmega128)、按鍵控制模塊、步進電機驅動模塊(L298)、

60、數(shù)碼顯示模塊等各個硬件功能模塊及其它元件合理搭配并連接起來使其能夠為軟件運行提供一個硬件平臺。</p><p>  軟件設計主要是通過編寫程序代碼,實現(xiàn)對整個系統(tǒng)的控制。在系統(tǒng)上電復位后程序自動運行,通過接受外部的鍵盤操作修改系統(tǒng)參數(shù)值,控制步進電機的啟停,以及四拍,八拍通電方式和轉動方向的改變;定時器T0根據(jù)系統(tǒng)參數(shù)控制步進電機的轉動;定時器T2實現(xiàn)步進電機步進步數(shù)的動態(tài)顯示。</p><p

61、>  本系統(tǒng)具有一定的實用功能,能基本符合實際應用需求,本次設計由于設計時間較短,個人能力以及精力等因素的限制,加之設計經(jīng)驗的不足,該系統(tǒng)還有許多不盡如人意的地方。該系統(tǒng)具有一定的缺陷,并不完美,但仿真成功的那一刻的感覺是很美妙的,努力有了收獲,學的很充實。通過這次課程設計,使我從一開始對系統(tǒng)的不太熟悉,到能開發(fā)一個簡單的系統(tǒng),在這整個過程中我學到了很多東西,掌握了一些常用的開發(fā)技能,也發(fā)現(xiàn)了大量的問題,有些在設計過程中已經(jīng)解決,

62、有些還有待今后慢慢學習。</p><p>  近十天的課程設計,使我受益匪淺。我不僅了解了把理論設計轉換成現(xiàn)實實物的整個過程。如:查閱資料,方案選定,電路設計,仿真電路圖,檢查調試,軟件流程控制,編寫調試軟件到整個軟硬件系統(tǒng)的調試,最后直到系統(tǒng)完成。為我以后的設計打下了一個好的基礎。而且使我更加熟悉了整個設計的過程和一些軟件及硬件設備的使用。對我以后面對這方面的工作有了很大的幫助,鍛煉了自己解決實際問題的能力,也

63、培養(yǎng)了我們求真務實的態(tài)度。</p><p><b>  參考文獻</b></p><p>  [1] 于海生,《計算機控制技術》[M],北京:機械工業(yè)出版社,2007年</p><p>  [2] 張毅剛,《新編MCS-51單片機應用設計》[M],哈爾濱:哈爾濱工業(yè)大學出版社,2006年</p><p>  [3] 陳冬

64、云,《ATmega128 單片機原理與開發(fā)指導》[M],北京:機械工業(yè)出版社,2005年</p><p>  [4] 王彥平,《RPOTEL 99 電路設計指南》[M],北京:清華大學出版社,2000年</p><p>  [5] 沈美明,《IBM-PC匯編語言程序設計》[M], 北京:清華大學出版社,2001年</p><p>  [6] 沈精虎,《Protel9

65、9 入門與提高》[M], 北京:人民郵電出版社,2007年</p><p>  [7] 吳金戌,《8051 單片機時間與應用》[M], 北京:清華大學出版社,2003年</p><p>  [8] 胡輝,《單片機原理及應用設計》[M], 北京:中國水利水電出版社,2007年</p><p><b>  附錄:</b></p>&l

66、t;p><b>  程序代碼:</b></p><p>  //ICC-AVR application builder : 2009/6/30 14:09:19</p><p>  // Target : M128</p><p>  // Crystal: 4.0000Mhz</p><p>  #include

67、 <iom128v.h></p><p>  #include <macros.h></p><p>  unsigned char d4[][8]={{0x22,0x28,0x21,0x24},{0x22,0x2a,0x28,0x29,0x21,0x25,0x24,0x26},</p><p>  {0x14,0x11,0x18,0x12}

68、,{0x14,0x15,0x11,0x19,0x18,0x1a,0x12,0x16}};//定義電機四八拍正反轉控制字</p><p>  unsigned char scan[4]={0Xf7,0Xfb,0Xfd,0Xfe};/*選擇掃描顯示數(shù)碼管,送PE口選數(shù)碼管*/</p><p>  unsigned char seven_seg[10]={0X3f,0X06,0X5b,0X4f

69、,0X66,0X6d,0X7d,0X07,0X7f,0X6f};/*0-9的字符表,送PF口顯示*/</p><p>  unsigned char flag,pai,tt,i,key,k=0;//定義正反轉,模式,拍數(shù),按鍵值,數(shù)碼管選位</p><p>  typedef struct{ </p><p>  char baiqian;</p>

70、<p>  char geshi;</p><p>  }conut; //定義計數(shù)變量</p><p>  conut now;</p><p>  void port_init(void)//端口初始化程序</p><p><b>  {</b></p><p>  PORTA =

71、 0xFF;</p><p>  DDRA = 0x00;</p><p>  PORTB = 0xFF;</p><p>  DDRB = 0x00;</p><p>  PORTC = 0x00; //m103 output only</p><p>  DDRC = 0x00;</p><

72、;p>  PORTD = 0x00;</p><p>  DDRD = 0xFF;</p><p>  PORTE = 0x00;</p><p>  DDRE = 0xFF;</p><p>  PORTF = 0x00;</p><p>  DDRF = 0xFF;</p><p&g

73、t;  PORTG = 0x00;</p><p>  DDRG = 0x00;</p><p><b>  }</b></p><p>  //TIMER0 initialize - prescale:256</p><p>  // WGM: CTC</p><p>  // desired

74、 value: 100Hz</p><p>  // actual value: 99.522Hz (-0.5%)</p><p>  void timer0_init(void)//定時器0初始化</p><p><b>  {</b></p><p>  TCCR0 = 0x00; //stop</p>

75、<p>  ASSR = 0x00; //set async mode</p><p>  TCNT0 = 0x64; //set count</p><p>  OCR0 = 0x9C;</p><p>  //start timer</p><p><b>  }</b></p><

76、;p>  unsigned char timer0=0;</p><p>  #pragma interrupt_handler timer0_comp_isr:16</p><p>  void timer0_comp_isr(void)</p><p><b>  {</b></p><p>  //compa

77、re occured TCNT0=OCR0</p><p>  TCNT0 = 0x64;</p><p>  OCR0 = 0x9C;</p><p><b>  timer0++;</b></p><p>  if(timer0==50)</p><p><b>  {</b

78、></p><p><b>  timer0=0;</b></p><p><b>  i++;</b></p><p>  PORTF=d4[flag+pai][i%tt];</p><p>  if(i==100)</p><p><b>  i=0;&l

79、t;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //TIMER2 initialize - prescale:256</p><p>  // WGM: Normal</p><p>  // desire

80、d value: 100Hz</p><p>  // actual value: 100.160Hz (0.2%)</p><p>  void timer2_init(void)//定時器2初始化</p><p><b>  {</b></p><p>  TCCR2 = 0x00; //stop</p>

81、<p>  TCNT2 = 0x64; //setup</p><p>  OCR2 = 0x9C;</p><p><b>  //start</b></p><p><b>  }</b></p><p>  unsigned char timer2=0;</p>

82、<p>  #pragma interrupt_handler timer2_comp_isr:10</p><p>  void timer2_comp_isr(void)//實現(xiàn)4位數(shù)碼管的計數(shù)功能</p><p><b>  {</b></p><p>  //compare occured TCNT2=OCR2</p&g

83、t;<p>  TCNT2 = 0x64; //setup</p><p>  OCR2 = 0x9C;</p><p><b>  timer2++;</b></p><p>  if(timer2==50)</p><p>  { timer2=0;</p><p>  now

84、.geshi++;</p><p>  if(now.geshi==99)</p><p>  {now.geshi=0;</p><p>  now.baiqian++;</p><p>  if(now.baiqian==99)</p><p>  now.baiqian=0;}</p><p&

85、gt;<b>  }</b></p><p><b>  }</b></p><p>  //call this routine to initialize all peripherals</p><p>  void init_devices(void)//單片機初始化</p><p><b

86、>  {</b></p><p>  //stop errant interrupts until set up</p><p>  CLI(); //disable all interrupts</p><p>  XDIV = 0x00; //xtal divider</p><p>  XMCRA = 0x00; /

87、/external memory</p><p>  port_init();</p><p>  timer0_init();</p><p>  timer2_init();</p><p>  MCUCR = 0x00;</p><p>  EICRA = 0x00; //extended ext ints<

88、;/p><p>  EICRB = 0x00; //extended ext ints</p><p>  EIMSK = 0x00;</p><p>  TIMSK = 0x82; //timer interrupt sources</p><p>  ETIMSK = 0x00; //extended timer interrupt sour

89、ces</p><p>  SEI(); //re-enable interrupts</p><p>  //all peripherals are now initialized</p><p><b>  }</b></p><p>  void display(void)//實現(xiàn)數(shù)碼管數(shù)值的顯示</p>

90、;<p><b>  {</b></p><p>  saomiao();</p><p>  PORTE=scan[k];</p><p><b>  switch(k)</b></p><p><b>  {</b></p><p> 

91、 case 0 : PORTD=seven_seg[now.geshi%10];</p><p><b>  break;</b></p><p>  case 1 : PORTD=seven_seg[now.geshi/10];</p><p><b>  break;</b></p><p> 

92、 case 2 : PORTD=seven_seg[now.baiqian%10];</p><p>  break; </p><p>  case 3 : PORTD=seven_seg[now.baiqian/10];</p><p><b>  break;</b></p><p><b>

93、;  } </b></p><p><b>  k++;</b></p><p>  if(k==4) k=0;</p><p>  delay(20000,20000);</p><p><b>  key=PINB;</b></p><p>  if(key

94、==0xFF) TCCR2 = 0x00;</p><p><b>  }</b></p><p>  void delay(int d1,int d2)/*延時子函數(shù)*/ </p><p><b>  {</b></p><p>  unsigned char i,j;</p

95、><p><b>  i=d1;</b></p><p>  while(i--)</p><p><b>  {</b></p><p><b>  j=d2;</b></p><p>  while(j--);</p><p>&

96、lt;b>  } </b></p><p><b>  }</b></p><p>  unsigned char j;</p><p>  saomiao()//讀取按鍵值選擇相應的操作</p><p><b>  {</b></p><p><b&

97、gt;  key=PINB;</b></p><p>  if(key==0xFD)</p><p><b>  {j=PINA;</b></p><p>  if(j==0x7F)</p><p><b>  {flag=0;</b></p><p><b

98、>  }</b></p><p>  else if(j==0xFF) </p><p>  { flag=2;}</p><p><b>  { </b><

99、/p><p>  if(j==0xFE| j==0x7E)</p><p>  {TCCR0 = 0x0E;pai=0;tt=4;TCCR2 = 0x04;now.geshi=00,now.baiqian=00;}</p><p>  else if(j==0xFB | j==0x7B)</p><p>  {TCCR0 = 0x0E;pai=1

100、;tt=8;TCCR2 = 0x04;now.geshi=00,now.baiqian=00;}</p><p><b>  }</b></p><p><b>  }</b></p><p>  else PORTF=0x80; </p><p><b>  }</b><

101、;/p><p>  void main(void)</p><p><b>  {</b></p><p>  now.geshi=00,now.baiqian=00;</p><p>  init_devices();</p><p><b>  while(1)</b><

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論