版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《基于ARM的步進(jìn)電機(jī)控制》課程設(shè)計報告</p><p> 專 業(yè): 電子信息工程 </p><p> 班 級: 一班 </p><p> 姓 名: </p><p> 學(xué) 號:
2、 </p><p> 指導(dǎo)教師: </p><p><b> 目 錄</b></p><p> 1.設(shè)計目的與要求 …………………………………………………………2</p><p> 1.1設(shè)計目的 …………………………………………………………2 </p>
3、<p> 1.2設(shè)計要求 ……………………………………………………………2 </p><p> 2.方案設(shè)計與論證 ……………………………………………………………2 </p><p> 2.1設(shè)計分析 …………………………………………………………………2</p><p> 2.2方案論證…………………………………………………………………
4、…2</p><p> 2.3方案選擇……………………………………………………………………2</p><p> 硬件電路 ………………………………………………………………2</p><p> 3.1硬件結(jié)構(gòu)………………………………………………………………………3</p><p> 3.2器件連接說明 …………………………………
5、………………………………4</p><p> 4.軟件設(shè)計………………………………………………………………………5</p><p> 5調(diào)試 ……………………………………………………………………………7</p><p> 6.結(jié)論與心得……………………………………………………………………7</p><p> 7.參考文獻(xiàn)…………………
6、……………………………………………………7</p><p> 附錄 程序 …………………………………………………………………8</p><p> 1、設(shè)計的目的與要求</p><p><b> 1.1 設(shè)計目的</b></p><p> ?。?)本次課程設(shè)計是在學(xué)習(xí)了《深入淺出ARM7——LPC213X/
7、214X》課程之后綜合利用所學(xué)知識完成一個計算機(jī)應(yīng)用系統(tǒng)設(shè)計并在實(shí)驗(yàn)室實(shí)現(xiàn)。</p><p> (2)通過課程設(shè)計,鞏固和加深了對“微機(jī)原理與接口技術(shù)”課程中所學(xué)的理論知識和實(shí)驗(yàn)?zāi)芰Γ菊莆沼嬎銠C(jī)接口應(yīng)用電路的一般設(shè)計方法,提高電子電路的設(shè)計和實(shí)驗(yàn)?zāi)芰Α?lt;/p><p> ?。?)加深對計算機(jī)軟硬知識的理解,獲得初步的應(yīng)用經(jīng)驗(yàn),為以后從事生產(chǎn)和科研工作打下一定的基礎(chǔ)。</p>
8、;<p><b> 1.2 設(shè)計要求</b></p><p> (1)設(shè)計一個步進(jìn)電機(jī)的控制系統(tǒng)。</p><p> (2)可通過鍵盤設(shè)定轉(zhuǎn)速和方向。</p><p> (3)能夠顯示當(dāng)前的轉(zhuǎn)速。</p><p> 2、方案的設(shè)計與論證</p><p><b>
9、 設(shè)計分析</b></p><p> 步進(jìn)電機(jī)是將電脈沖信號轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元件。電機(jī)的轉(zhuǎn)速、停止的位置只取決于脈沖信號的頻率和脈沖數(shù),而不受負(fù)載變化的影響,即給電機(jī)加一個脈沖信號,電機(jī)則轉(zhuǎn)過一個步距角。本次課程設(shè)計所設(shè)計的步進(jìn)電機(jī)的控制系統(tǒng)可通過鍵盤設(shè)定轉(zhuǎn)速和方向,并能顯示轉(zhuǎn)速。</p><p><b> 方案論證</b></p
10、><p> 方案一:采用ARM7的脈寬調(diào)制器PWM產(chǎn)生脈沖對步進(jìn)電機(jī)進(jìn)行控制。</p><p> 方案二:利用定時器定時中斷進(jìn)行步進(jìn)電機(jī)的控制。</p><p><b> 方案選擇</b></p><p> 第一種方案中PWM技術(shù)是采用脈寬調(diào)制技術(shù),即占空比不同的方波電壓產(chǎn)生不同的平均電流使步進(jìn)電機(jī)轉(zhuǎn)動,通過調(diào)節(jié)占空
11、比即可調(diào)節(jié)電機(jī)轉(zhuǎn)速。雖然很精確,但設(shè)置較繁瑣。</p><p> 第二種方案中采用定時器定時中斷的方式,只需要幾條簡單的指令就可以產(chǎn)生具有一定</p><p> 頻率和數(shù)目的脈沖信號,而且在整個脈沖產(chǎn)生過程中,CPU 可用來處理其他工作,大大</p><p> 提高了系統(tǒng)的實(shí)時處理能力。</p><p> 考慮到系統(tǒng)的實(shí)時性及程序的繁
12、簡程度我選擇了第二種方案。</p><p><b> 3、硬件電路</b></p><p><b> 硬件結(jié)構(gòu)</b></p><p> ?。?)EasyARM2138開發(fā)板是廣州周立功公司設(shè)計的EasyARM系列開發(fā)套件之一,采用了PHILIPS公司基于ARM7TDMI-S 核、單電源供電、LQFP64封裝的LPC2
13、138,具有JTAG</p><p> 仿真調(diào)試、ISP編程等功能。</p><p> 開發(fā)板上提供了一些鍵盤、LED、蜂鳴器等常用功能部件,還具有RS232接口電路、I2C</p><p> 存儲器電路。另外,用戶也可以更換兼容的CPU進(jìn)行仿真調(diào)試,如LPC2132、LPC2138、</p><p> LPC2142等。靈活的跳線組
14、合(開發(fā)板內(nèi)使用的所有I/O均可斷開連接),還有用戶I/O接</p><p> 口,極大地方便了用戶進(jìn)行32位ARM嵌入式系統(tǒng)的開發(fā)實(shí)驗(yàn)。</p><p><b> ?。?) 定時器</b></p><p><b> ?。?)中斷</b></p><p> LPC2138 通過向量中斷控制器(V
15、IC )管理中斷。外設(shè)中斷信號需要經(jīng)過2 個開關(guān)才能 </p><p> 到達(dá)ARM 內(nèi)核,真正產(chǎn)生異常,邏輯示意圖如下圖所示。如果在VIC中使能了相應(yīng)外 </p><p> 設(shè)的中斷,外設(shè)中斷才能到達(dá)VIC并向內(nèi)核發(fā)送中斷請求;只有使能了內(nèi)核中斷IRQ或者 </p><p> FIQ,內(nèi)核才能真正產(chǎn)生異常。硬件圖如下</p><p>
16、 中斷的過程示意圖如下:</p><p><b> (4)按鍵的連接圖</b></p><p> 不按下時為高電平,按下時變?yōu)榈碗娖健?lt;/p><p><b> UART0 </b></p><p><b> 特性:</b></p><p>&
17、lt;b> 管腳描述:</b></p><p><b> 步進(jìn)電機(jī)接口</b></p><p> 由于LPC2138的GPIO驅(qū)動能力有限,必須通過ULN2003達(dá)林頓集成驅(qū)動芯片驅(qū)動步進(jìn)電機(jī),在步進(jìn)電機(jī)和驅(qū)動電路間連接了電阻,防止控制紊亂而造成的電機(jī)損壞。</p><p> 3.2 器件連接說明</p>
18、;<p> ?。?)在EasyARM2138開發(fā)板上,當(dāng)跳線JP6分別選擇TXD0和RXD0端時方可進(jìn)行UART0通信實(shí)驗(yàn)。</p><p> ?。?)KEY1連接P0.16;KEY2連接P0.17;KEY3連接P0.18, KEY4連接P0.19, KEY5連接P0.20,KEY6連接P0.21。</p><p> ?。?)步進(jìn)電機(jī)的四個輸入端口分別接EasyARM2138
19、開發(fā)板上P2.2~P2.5四個端口。</p><p><b> 4、軟件設(shè)計</b></p><p> 系統(tǒng)軟件采用C語言編程,程序詳情請參見附錄。</p><p><b> 程序的流程圖如下:</b></p><p><b> 否</b></p><
20、;p><b> 是</b></p><p><b> 是</b></p><p><b> 否</b></p><p><b> 是</b></p><p><b> 否 </b></p>
21、<p><b> 是</b></p><p><b> 否</b></p><p><b> 是</b></p><p><b> 否</b></p><p><b> 是</b></p><p
22、><b> 否</b></p><p><b> 是</b></p><p><b> 4、調(diào)試</b></p><p> 按照器件連接說明連接好EasyARM2131開發(fā)板上的跳線,然后將步進(jìn)電機(jī)與EasyARM2131開發(fā)板連接上。運(yùn)行程序,開始調(diào)試。在一開始的時候,由于用定時器設(shè)置
23、的中斷時間太長導(dǎo)致看不見電機(jī)有明顯的轉(zhuǎn)動。通過修改定時時間,漸漸地電機(jī)轉(zhuǎn)動變得明顯了。然后測試按鍵功能時發(fā)現(xiàn),案件的檢測不夠靈敏,有時候需要按幾下才能檢測到,后來經(jīng)過修改延時消抖的時間,將其變短且在每次按下按鍵時不急于松開而保持一會兒,這樣按鍵檢測變得較為靈敏了。在調(diào)試中發(fā)現(xiàn):單雙八拍和雙四拍要比單四拍的轉(zhuǎn)動更加有效。單四拍模式的時候電機(jī)只是震動并沒有轉(zhuǎn)動,用肉眼觀察不到轉(zhuǎn)速的快慢,故最后舍棄了這種模式。</p><
24、p> 調(diào)試的最終結(jié)果是:程序開始時電機(jī)進(jìn)入模式0,如果沒有按鍵按下則一直保持模式0。當(dāng)有按鍵按下時,且按鍵為KEY1~KEY4則電機(jī)根據(jù)不同按鍵的按下進(jìn)入不同的轉(zhuǎn)動模式(KEY1對應(yīng)模式0:八拍正轉(zhuǎn),KEY2對應(yīng)模式1:八拍反轉(zhuǎn),KEY3對應(yīng)模式2:雙四拍正轉(zhuǎn),KEY4對應(yīng)模式3:雙四拍反轉(zhuǎn))。當(dāng)按鍵KEY5按下時,電機(jī)轉(zhuǎn)速變慢,且隨著KEY5按下次數(shù)的增多電機(jī)逐漸變慢直至停止;當(dāng)按鍵KEY6按下時,電機(jī)轉(zhuǎn)速變快,且隨著KEY5
25、按下次數(shù)的增多電機(jī)逐漸變快。同時在上位機(jī)上可以看見當(dāng)前的轉(zhuǎn)速。</p><p><b> 5、課程設(shè)計體會</b></p><p> 一方面,通過這一周的課程設(shè)計,我對課本上關(guān)于LPC2138的硬件結(jié)構(gòu)的知識有了更加深刻的理解,而且對其用法掌握得更加熟練。在課程設(shè)計過程中,能夠不斷地發(fā)現(xiàn)問題,并想辦法解決,如此提高了我自己解決問題的能力。在編寫程序方面,我對ARM
26、7編程結(jié)構(gòu)和技巧也有了深刻的理解和領(lǐng)會。此次課程設(shè)計還讓我知道什么是實(shí)時系統(tǒng)以及如何構(gòu)建一個簡單的實(shí)時系統(tǒng)?,F(xiàn)在我已經(jīng)基本掌握了構(gòu)建實(shí)時系統(tǒng)的方法。還有我明白了流程圖的重要性,以前在編程的時候,我從不寫流程圖,直接開始寫程序,這樣出現(xiàn)了不該出現(xiàn)的問題。但這次課程設(shè)計時,我試著先寫出流程圖然后按照流程圖編寫程序,結(jié)果錯誤少了很多,即使有錯誤只要根據(jù)流程圖一查就知道錯在哪里,這讓我節(jié)省了大量的時間和精力。所以我認(rèn)識到,以后要編寫程序時,先寫
27、流程圖是很有必要的。</p><p> 另一方面,我感覺這一周的課程設(shè)計我自己的效率太低。有時候被一些問題困惑了很久,但經(jīng)過老師的指點(diǎn),我才恍然大悟,原來只要換個方式思考問題就能想到很好的方法。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 周立功.《深入淺出ARM7——LPC213X/214X(上冊)》[M].北
28、京:北京航空航天大學(xué)出版社,2008:146-175,226-240,275-286.</p><p> [2] 周立功.《ARM嵌入式系統(tǒng)實(shí)驗(yàn)教程(三)》[M].北京:北京航空航天大學(xué)出版社,</p><p> 2005:134-140.</p><p> [3] 冷洪濱,鄔義杰.基于計數(shù)器/定時器的步進(jìn)電機(jī)可編程控制接口電路設(shè)計[J]北京:組合機(jī)床與自動化
29、加工技術(shù),2004.</p><p> [4 ] 周明德.微型計算機(jī)硬件軟件及其應(yīng)用.北京:清華大學(xué)出版社 ,1993.</p><p><b> 附錄:</b></p><p><b> 實(shí)訓(xùn)程序</b></p><p> #include "config.h"<
30、/p><p> #define HC595_CS (1 << 29) // P0.29口為74HC595的片選</p><p> #define LED1 1<<18 //P1.18</p><p> #define LED2 1<<19 //P1.19</p><p&g
31、t; #define LED3 1<<20 //P1.20</p><p> #define LED4 1<<21 //P1.21</p><p> #define bj_qd 0x0f << 22 //步進(jìn)電機(jī)驅(qū)動腳p1.22~p1.25</p><p> uint32 bj[8]={1<<
32、 22,3<< 22,1<< 23,3<< 23,1<< 24,3<< 24,1<< 25,9<< 22};</p><p> //0A, 1AB 2B3BC4C 5CD 6D7DA</p><p> const uint32 KEY1 = 1 << 16;
33、// P0.16連接KEY1</p><p> const uint32 KEY2 = 1 << 17;// P0.17連接KEY1</p><p> const uint32 KEY3 = 1 << 18;// P0.18連接KEY1</p><p> const uint32 KEY4 = 1 << 19;
34、// P0.19連接KEY1</p><p> const uint32 KEY5 = 1 << 20;// P0.20連接KEY1</p><p> const uint32 KEY6 = 1 << 21;// P0.21連接KEY1</p><p> uint8 i, n=0,t=0,m=20,cnt=0;</p&
35、gt;<p> uint8 bj_mod=0;//0-八拍zh正轉(zhuǎn),1-八拍反轉(zhuǎn),2-雙四拍正轉(zhuǎn),3-雙四拍反轉(zhuǎn)/********************************************************************</p><p> ** 函數(shù)名稱:DelayNS()</p><p> ** 函數(shù)功能:長軟件延時</p>
36、<p> ** 入口參數(shù):dly延時參數(shù),值越大,延時越久</p><p><b> ** 出口參數(shù):無</b></p><p> ********************************************************************/</p><p> void DelayNS(ui
37、nt32 dly)</p><p><b> { </b></p><p> uint32 i;</p><p> for(; dly>0; dly--) </p><p> for(i=0; i<50000; i++);</p><p><b> }<
38、/b></p><p> #defineUART_BPS115200// 通訊波特率115200</p><p> /********************************************************************</p><p> ** 函數(shù)名稱 :UART0_Init()</p><p
39、> ** 函數(shù)功能 :初始化串口0:波特率115200,8位數(shù)據(jù)位,1位停止位,無奇偶校驗(yàn)。</p><p> ** 入口參數(shù) :無</p><p> ** 出口參數(shù) :無</p><p> *******************************************************************/</p>&
40、lt;p> void UART0_Init (void)</p><p><b> {</b></p><p> uint16 Fdiv;</p><p> U0LCR = 0x83; // DLAB = 1</p><p> Fdiv = (Fpclk / 16) / UART
41、_BPS;</p><p> U0DLM = Fdiv / 256;</p><p> U0DLL = Fdiv % 256;</p><p> U0LCR = 0x03;</p><p><b> }</b></p><p> /****************************
42、****************************************</p><p> ** 函數(shù)名稱 :UART0_SendByte()</p><p> ** 函數(shù)功能 :向串口發(fā)送字節(jié)數(shù)據(jù),并等待數(shù)據(jù)發(fā)送完畢。</p><p> ** 入口參數(shù) :data要發(fā)送的數(shù)據(jù)</p><p> ** 出口參數(shù) :無<
43、;/p><p> *******************************************************************/</p><p> void UART0_SendByte (uint8 data)</p><p><b> {</b></p><p> U0THR = dat
44、a;</p><p> while ((U0LSR & 0x40) == 0);// 等待數(shù)據(jù)發(fā)送完畢</p><p><b> }</b></p><p> /********************************************************************</p><
45、p> ** 函數(shù)名稱 :PC_DispChar()</p><p> ** 函數(shù)功能 :向PC機(jī)發(fā)送顯示字符。</p><p> ** 入口參數(shù) :x顯示字符的橫坐標(biāo)</p><p> ** y顯示字符的縱坐標(biāo)</p><p> ** chr顯示的字符,不能為ff</p><p&g
46、t; ** color顯示的狀態(tài),包括前景色、背景色、閃爍位。與DOS字符顯示一樣:0~3,前景色,4~6,背景色,7,閃爍位。</p><p> ** 出口參數(shù) :無</p><p> ********************************************************************/</p><p> v
47、oid PC_DispChar (uint8 x, uint8 y, uint8 chr, uint8 color)</p><p><b> {</b></p><p> UART0_SendByte(0xff);// 起始字符</p><p> UART0_SendByte(x);</p><p> UAR
48、T0_SendByte(y);</p><p> UART0_SendByte(chr);</p><p> UART0_SendByte(color);</p><p><b> }</b></p><p> /**************************************************
49、******************</p><p> ** 函數(shù)名稱 :ISendStr()</p><p> ** 函數(shù)功能 :向上位機(jī)發(fā)送字符串。</p><p> ** 入口參數(shù) :x顯示字符的橫坐標(biāo)</p><p> ** y顯示字符的縱坐標(biāo)</p><p> ** colo
50、r顯示的狀態(tài),包括前景色、背景色、閃爍位。</p><p> **與DOS字符顯示一樣:0~3,前景色,4~6,背景色,7,閃爍位。</p><p> ** str要發(fā)送的字符串,以'\0'結(jié)束</p><p> ** 出口參數(shù) :無</p><p> *********************
51、***********************************************/</p><p> void ISendStr (uint8 x, uint8 y, uint8 color, char *str)</p><p><b> {</b></p><p><b> while (1)</b>
52、;</p><p><b> {</b></p><p> if (*str == '\0')break;// 結(jié)束字符</p><p> PC_DispChar(x++, y, *str++, color);</p><p> if (x >= 80)</p><p
53、><b> {</b></p><p><b> x = 0;</b></p><p><b> y++;</b></p><p><b> }</b></p><p><b> }</b></p>&l
54、t;p><b> }</b></p><p> /********************************************************************** 函數(shù)名稱:MSPI_Init()</p><p> ** 函數(shù)功能:初始化SPI接口,設(shè)置為主機(jī)。</p><p><b> **
55、 入口參數(shù):無</b></p><p><b> ** 出口參數(shù):無</b></p><p> ********************************************************************/</p><p> void MSPI_Init(void)</p><
56、p><b> { </b></p><p> PINSEL0 = (PINSEL0 & (~(0xFF << 8))) | (0x55 << 8) ;</p><p> SPCCR = 0x52; // 設(shè)置SPI時鐘分頻</p><p> SPCR = (0 <
57、< 3) |// CPHA = 0, 數(shù)據(jù)在SCK 的第一個時鐘沿采樣</p><p> (1 << 4) |// CPOL = 1, SCK 為低有效</p><p> (1 << 5) |// MSTR = 1, SPI 處于主模式</p><p> (0 << 6) |// LSBF
58、 = 0, SPI 數(shù)據(jù)傳輸MSB (位7)在先</p><p> (0 << 7);// SPIE = 0, SPI 中斷被禁止</p><p><b> }</b></p><p> /*****************************************************************
59、**</p><p> ** 函數(shù)名稱:MSPI_SendData()</p><p> ** 函數(shù)功能:向SPI總線發(fā)送數(shù)據(jù)</p><p> ** 入口參數(shù):data待發(fā)送的數(shù)據(jù)</p><p> ** 出口參數(shù):返回值為讀取的數(shù)據(jù)</p><p> **************************
60、*****************************************/</p><p> uint8 MSPI_SendData(uint8 data)</p><p><b> { </b></p><p> IOCLR = HC595_CS; // 片選74HC595</p><
61、;p> SPI_SPDR = data;</p><p> while( 0 == (SPI_SPSR & 0x80));// 等待SPIF置位,即等待數(shù)據(jù)發(fā)送完畢</p><p> IOSET = HC595_CS;</p><p> return(SPI_SPDR);}</p><p> /* 此表為LED0~F
62、以及L、P的字模 */</p><p> uint8 const DISP_TAB[10] = {</p><p> // 0 1 2 3 4 5 6 7 8 9 </p><p> 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90 };&l
63、t;/p><p> /*******************************************************************</p><p> ** 函數(shù)名稱:qudong()</p><p> ** 函數(shù)功能:驅(qū)動步進(jìn)電機(jī)轉(zhuǎn)動</p><p><b> ** 入口參數(shù):無</b>&l
64、t;/p><p><b> ** 出口參數(shù):無</b></p><p> ********************************************************************/</p><p> void qudong()</p><p><b> {</b>
65、</p><p> IO1SET=0x0f<<22;//不輸出</p><p> switch ( bj_mod)</p><p><b> {</b></p><p> case 0: //八拍正轉(zhuǎn)</p><p> IO1CLR=bj[c
66、nt%8];</p><p><b> break;</b></p><p> case 1://八拍反轉(zhuǎn)</p><p> IO1CLR=bj[7-(cnt%8)];</p><p><b> break;</b></p><p> case 2://雙四拍正
67、轉(zhuǎn)</p><p> IO1CLR=bj[(cnt%4)*2+1];</p><p><b> break;</b></p><p> case 3://雙四拍反轉(zhuǎn)</p><p> IO1CLR=bj[7-(cnt%4)*2];</p><p><b> break;<
68、;/b></p><p> default:break;</p><p><b> }</b></p><p> T0IR = 0x01;/* 清除中斷標(biāo)志*/</p><p> VICVectAddr = 0x00;/* 通知VIC中斷處理結(jié)束*/</p><p
69、><b> }</b></p><p> /********************************************************************</p><p> ** 函數(shù)名稱 :IRQ_Timer0()</p><p> ** 函數(shù)功能 :定時器0中斷服務(wù)程序,定時調(diào)用qudong()程序,
70、使步進(jìn)電機(jī)按節(jié)拍轉(zhuǎn)動。</p><p> ** 入口參數(shù) :無</p><p> ** 出口參數(shù) :無</p><p> ********************************************************************/</p><p> void __irq IRQ_Timer0 (void)
71、</p><p><b> {</b></p><p><b> t++;</b></p><p><b> cnt++;</b></p><p><b> qudong();</b></p><p> MSPI_Send
72、Data(DISP_TAB[i]);// 發(fā)送顯示</p><p> T0IR = 0x01;/* 清除中斷標(biāo)志*/</p><p> VICVectAddr = 0x00;/* 通知VIC中斷處理結(jié)束*/</p><p><b> }</b></p><p> /***********
73、*********************************************************</p><p> ** 函數(shù)名稱 :main()</p><p> ** 函數(shù)功能 :程序初始化,AD采樣和按鍵調(diào)節(jié)電機(jī)轉(zhuǎn)速,通過串口向上位機(jī)發(fā)送顯示數(shù)據(jù)。</p><p> ** 調(diào)試說明 :需要將跳線JP6分別選擇TXD0和RXD0端<
74、/p><p> ** KEY1~KEY6連接P0.16~P0.21,步進(jìn)電機(jī)四個輸入端分別接P1.22~P1.25。</p><p> ********************************************************************/</p><p> uint8 rcv_data; </p&g
75、t;<p> int main (void)</p><p><b> {</b></p><p> uint32 ADC_Data,temp,zhuansu=100,zhuansu1=100,zhuansu2=200;</p><p> uint32 bapaizhengzhuan,bapaifanzhuan,shsip
76、aizhengzhuan,shsipaifanzhuan;</p><p> char str[20];</p><p> PINSEL0 = 0x00005505; // 設(shè)置SPI管腳連接</p><p> PINSEL1 = 0x10000000;</p><p> //PINSEL1 = 1 << 28;
77、// P0.30連接到AD0.3</p><p> IODIR = HC595_CS;</p><p> PINSEL2 = PINSEL2 & (~0x08);// P1[25:16]連接GPIO</p><p> IO1DIR =bj_qd;// 設(shè)置bjdj_qd控制口為輸出</p><p> UART0_In
78、it();</p><p> MSPI_Init();// 初始化SPI</p><p> IRQEnable();/* IRQ中斷使能*/</p><p> /* 定時器0初始化 */</p><p> T0TC = 0;/* 定時器設(shè)置為0*/</p><p> T0
79、PR = 0;/* 時鐘不分頻*/</p><p> T0MCR = 0x03; /* 設(shè)置T0MR0匹配后復(fù)位T0TC,并產(chǎn)生中斷標(biāo)志*/</p><p> T0MR0 = Fpclk /zhuansu;/* 0.5秒鐘定時*/</p><p> T0TCR = 0x01;/* 啟動定時器*/</p>&
80、lt;p> /* 設(shè)置定時器0中斷IRQ */</p><p> VICIntSelect = 0x00;/* 所有中斷通道設(shè)置為IRQ中斷*/</p><p> VICVectCntl0 = 0x20 | 0x04;/* 設(shè)置定時器0中斷通道分配最高優(yōu)先級*/</p><p> VICVectAddr0 = (uint32)IRQ_Ti
81、mer0;/* 設(shè)置中斷服務(wù)程序地址*/</p><p> VICIntEnable = 1 << 0x04;/* 使能定時器0中斷*/</p><p><b> while (1)</b></p><p><b> { </b></p><p> if
82、((IO0PIN & KEY1) == 0) //KEY1 MIDE0</p><p><b> { </b></p><p> DelayNS(10);</p><p> if((IO0PIN & KEY1) == 0)</p><p><b> { <
83、/b></p><p><b> bj_mod=0;</b></p><p><b> i=0;</b></p><p> MSPI_SendData(DISP_TAB[0]);// 發(fā)送到數(shù)碼管顯示</p><p> bapaizhengzhuan = 3*zhuansu/20;&
84、lt;/p><p> sprintf(str, "bapaizhengzhuan:%4d",bapaizhengzhuan);// 發(fā)送到上位機(jī)顯示</p><p> ISendStr(0,4,0x30,str);</p><p> while((IO0PIN & KEY1) == 0); </p><p&g
85、t;<b> }</b></p><p><b> }</b></p><p> if((IO0PIN & KEY2) == 0) //KEY2 MODE1</p><p><b> { </b></p><p> DelayNS(10);<
86、/p><p> if((IO0PIN & KEY2) == 0)</p><p><b> {</b></p><p><b> bj_mod=1;</b></p><p><b> i=2;</b></p><p> MSPI_SendD
87、ata(DISP_TAB[i]);// 發(fā)送到數(shù)碼管顯示</p><p> bapaifanzhuan=3*zhuansu/20;</p><p> sprintf(str, "bapaifanzhuan:%4d",bapaifanzhuan);// 發(fā)送到上位機(jī)顯示</p><p> ISendStr(0,6,0x30,str);<
88、;/p><p> while((IO0PIN & KEY2) == 0); </p><p><b> } </b></p><p><b> }</b></p><p> if((IO0PIN & KEY3) == 0) //KEY3 MODE2<
89、;/p><p><b> { </b></p><p> DelayNS(10);</p><p> if((IO0PIN & KEY3) == 0)</p><p><b> {</b></p><p><b> bj_mod=2;</b>
90、;</p><p><b> i=3;</b></p><p> MSPI_SendData(DISP_TAB[i]);// 發(fā)送到數(shù)碼管顯示</p><p> shsipaizhengzhuan=3*zhuansu/10;</p><p> sprintf(str, "shsipaizhengzhu
91、an:%4d",shsipaizhengzhuan);// 發(fā)送到上位機(jī)顯示</p><p> ISendStr(0,8,0x30,str);</p><p> while((IO0PIN & KEY3) == 0); </p><p><b> } </b></p><p&g
92、t;<b> }</b></p><p> if((IO0PIN & KEY4) == 0) //KEY3 MODE3</p><p><b> { </b></p><p> DelayNS(10); </p><p> if((IO0PIN
93、 & KEY4) == 0)</p><p><b> {</b></p><p><b> bj_mod=3;</b></p><p> i=4; </p><p> MSPI_SendData(DISP_TAB[i]);// 發(fā)送到數(shù)碼管顯示</p>&
94、lt;p> shsipaifanzhuan=3*zhuansu/10;</p><p> sprintf(str, "shsipaifanzhuan:%4d",shsipaifanzhuan);// 發(fā)送到上位機(jī)顯示</p><p> ISendStr(0,10,0x30,str);</p><p> while((IO0PIN &
95、amp; KEY4) == 0); </p><p><b> } </b></p><p><b> }</b></p><p> if((IO0PIN & KEY5) == 0)</p><p><b> { </b></p>&l
96、t;p> DelayNS(10);</p><p> if((IO0PIN & KEY5) == 0)</p><p><b> {</b></p><p><b> i=5;</b></p><p> zhuansu2+=20;zhuansu1=zhuansu; //
97、按鍵KEY5減速</p><p> MSPI_SendData(DISP_TAB[i]);// 發(fā)送到數(shù)碼管顯示</p><p> if(zhuansu2!=zhuansu1)zhuansu=zhuansu2; // 發(fā)送到上位機(jī)顯示</p><p> while((IO0PIN & KEY5) == 0); <
98、/p><p><b> } </b></p><p><b> }</b></p><p> if((IO0PIN & KEY6) == 0)</p><p><b> { </b></p><p> DelayNS(10);</
99、p><p> if((IO0PIN & KEY6) == 0)</p><p><b> {</b></p><p><b> i=6;</b></p><p> zhuansu2-=20; // 按鍵KEY6加速</p><p>
100、; zhuansu1=zhuansu;</p><p> MSPI_SendData(DISP_TAB[i]);// 發(fā)送到數(shù)碼管顯示</p><p> if(zhuansu2!=zhuansu1)zhuansu=zhuansu2; // 發(fā)送到上位機(jī)顯示</p><p> while((IO0PIN & KEY6) == 0);&
101、lt;/p><p><b> } </b></p><p><b> }</b></p><p> sprintf(str, "ADC_Data:%4d",ADC_Data);</p><p> ISendStr(0,0,0x30,str);</p>
102、<p> sprintf(str, "zhuansu:%4d",zhuansu); // 發(fā)送到上位機(jī)顯示</p><p> ISendStr(0,2,0x30,str);</p><p><b> }</b></p><p><b> return 0;</b></p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于arm的步進(jìn)電機(jī)控制課程設(shè)計
- 基于arm的步進(jìn)電機(jī)控制課程設(shè)計
- 基于8086的步進(jìn)電機(jī)控制課程設(shè)計
- 基于plc的步進(jìn)電機(jī)控制課程設(shè)計
- 課程設(shè)計-步進(jìn)電機(jī)控制步進(jìn)電機(jī)轉(zhuǎn)速實(shí)時控制
- 步進(jìn)電機(jī)課程設(shè)計--- 步進(jìn)電機(jī)控制系統(tǒng)
- 課程設(shè)計---步進(jìn)電機(jī)控制
- 步進(jìn)電機(jī)課程設(shè)計--步進(jìn)電機(jī)控制系統(tǒng)
- 基于plc的步進(jìn)電機(jī)控制課程設(shè)計
- 步進(jìn)電機(jī)課程設(shè)計---步進(jìn)電機(jī)控制系統(tǒng)的設(shè)計
- 步進(jìn)電機(jī)課程設(shè)計報告---步進(jìn)電機(jī)控制系統(tǒng)
- 課程設(shè)計---基于步進(jìn)電機(jī)轉(zhuǎn)速實(shí)時控制
- 步進(jìn)電機(jī)的控制課程設(shè)計報告
- 步進(jìn)電機(jī)控制a課程設(shè)計報告
- 步進(jìn)電機(jī)課程設(shè)計報告--步進(jìn)電機(jī)控制系統(tǒng)設(shè)計
- 步進(jìn)電機(jī)的設(shè)計與控制課程設(shè)計
- 基于arm的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計
- 步進(jìn)電機(jī)控制課程設(shè)計--步進(jìn)電機(jī)脈沖分配電路的設(shè)計
- 步進(jìn)電機(jī)轉(zhuǎn)速實(shí)時控制課程設(shè)計
- 基于arm步進(jìn)電機(jī)細(xì)分驅(qū)動控制設(shè)計
評論
0/150
提交評論