

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 編號: </p><p><b> 嵌入式系統(tǒng)設計</b></p><p><b> 實訓(論文)說明書</b></p><p> 題 目: 直流電機控制器 </p><p> 院 (系):
2、 </p><p> 專 業(yè): </p><p> 學生姓名: </p><p> 學 號: </p><p> 指導教師: </p><
3、p><b> 摘 要</b></p><p> 隨著信息技術和網(wǎng)絡技術的高速發(fā)展,嵌入式產品日益廣泛地滲透到日常生活、科學研究和軍事科技等領域,比如DVD、移動電話、MP3及掌上電腦等等。這些嵌入式設備多采用32位RISC嵌入式處理器作為核心部件。其中基于ARM核的嵌入式處理器獨占鰲頭,在32位RISC處理器中占據(jù)超過75%的市場份額。</p><p>
4、 本文介紹了利用Proteus ISIS仿真軟件與嵌入式系統(tǒng)RAM7(LPC2131)的硬件接口電路設計直流電機控制器。</p><p> 關鍵詞:LPC2131;直流電機;控制器</p><p><b> Abstract</b></p><p> As information technology and network techno
5、logy, the rapid development of embedded devices become more widely infiltrated into daily life, scientific research and military science and technology fields, such as DVD, mobile phones, MP3, and handheld computers. The
6、se embedded devices to use more 32-bit RISC embedded processor as the core component. One based on ARM-core embedded processor champion, in the 32-bit RISC processor accounts for more than 75% of the market share.</p&
7、gt;<p> This article describes the use of Proteus ISIS simulation software and embedded systems RAM7 (LPC2131) hardware interface circuit DC motor controller.</p><p> Key words:LPC2131;DC Motor;Cont
8、roller</p><p><b> 目 錄</b></p><p><b> 引言1</b></p><p> 1 嵌入式系統(tǒng)的介紹2</p><p> 1.1 嵌入式系統(tǒng)的概念2</p><p> 1.2 ARM微處理器系列2</p>
9、;<p> 1.3 嵌入式系統(tǒng)的硬件結構2</p><p> 1.4 嵌入式系統(tǒng)的軟件結構2</p><p> 1.5 LPC2131介紹4</p><p> 1.5.1 LPC2131概述4</p><p> 1.5.2 主要特性4</p><p> 1.5.3 LPC2131最小
10、系統(tǒng)5</p><p> 2 Proteus介紹6</p><p> 2.1 Proteus簡介6</p><p><b> 2.2 仿真6</b></p><p><b> 3 系統(tǒng)方案6</b></p><p> 3.1 主要電路設計與說明7<
11、;/p><p> 3.1.1振蕩電路7</p><p> 3.1.2復位電路7</p><p> 3.1.3直流電機驅動電路8</p><p> 3.1.4 4*4按鍵電路8</p><p> 3.1.5 1602液晶顯示電路8</p><p><b> 4 軟件設
12、計9</b></p><p><b> 總結10</b></p><p><b> 謝 辭10</b></p><p><b> 參考文獻11</b></p><p><b> 附 錄12</b></p>&
13、lt;p><b> 引言</b></p><p> 隨著信息技術和網(wǎng)絡技術的高速發(fā)展,嵌入式產品日益廣泛地滲透到日常生活、科學研究和軍事科技等領域,比如DVD、移動電話、MP3及掌上電腦等等。這些嵌入式設備多采用32位RISC嵌入式處理器作為核心部件。其中基于ARM核的嵌入式處理器獨占鰲頭,在32位RISC處理器中占據(jù)超過75%的市場份額。因而越來越多的電子愛好者都加入了學習ARM
14、的隊伍中。通過和一般單片機系統(tǒng)開發(fā)過程的比較不難發(fā)現(xiàn),嵌入式系統(tǒng)的設計包括硬件設計和軟件設計兩個方面,其調試過程包括軟件調試、硬件測試、系統(tǒng)調試3個過程。軟件調試一般比較容易進行,但是硬件測試和系統(tǒng)調試則比較麻煩,因為要進行這兩個過程必須在 PCB制作、元器件焊接完畢之后才能進行;而PCB的制作、元器件的焊接是非常費時費力的,如果能采用仿真工具Proteus VSM,則不用制作具體的電路板也能夠完成以上工作。毫無疑問,這樣可給廣大ARM
15、學習者帶來很大的方便。</p><p> 在當前數(shù)字信息技術和網(wǎng)絡技術高速發(fā)展的后PC(Post-PC)時代,嵌入式系統(tǒng)已經(jīng)廣泛地滲透到科學研究、工程設計、軍事技術、各類產業(yè)和商業(yè)文化藝術以及人們的日常生活等方方面面中。隨著國內外各種嵌入式產品的進一步開發(fā)和推廣,嵌入式技術越來越和人們的生活緊密結合。我國嵌入式系統(tǒng)發(fā)展的明顯特點是:嵌入式系統(tǒng)的發(fā)展正從嵌入式系統(tǒng)技術走向嵌入式產業(yè),“3C”融合和IT技術大融合加
16、速嵌入式系統(tǒng)產業(yè)化進程,嵌入式系統(tǒng)是中國廠商從“中國制造”向“中國創(chuàng)造”轉變的最佳契機。</p><p> 1 嵌入式系統(tǒng)的介紹</p><p> 1.1 嵌入式系統(tǒng)的概念</p><p> 嵌入式系統(tǒng)以應用為中心,以計算機技術為基礎,采用可裁減軟硬件,適用于對功能可靠性、成本、體積、功耗等嚴格要求的專用計算機系統(tǒng)。它一般由嵌入式微處理器、外圍硬件設備、嵌入
17、式操作系統(tǒng)以及用戶程序四部份組成,用于以實現(xiàn)對其他設備的控制、監(jiān)視或管理等功能。嵌入式最典型的特點是與人們的日常生活緊密相關,任何一個普通人都可以擁有各類運用了嵌入式技術的電子產品,小到MP3、PDA等微型數(shù)字化設備,大到信息家電、智能電器、車載GIS。</p><p> 1.2 ARM微處理器系列</p><p> ARM7系列(32位低功耗RISC處理器,采用ARMV4T[Newm
18、an]結構,三級流水線)</p><p> ARM9系列(采用ARMV4T[Harvard]結構,五級流水線)</p><p> ARM9E系列(可綜合處理器,支持DSP指令集)</p><p> ARM10E系列(高性能、低功耗微處理器,采用ARMVT5結構,6級流水線)</p><p> SecurCore系列</p>
19、<p><b> Xscale系列</b></p><p> 其中ARM7、ARM9、ARM9E和ARM10E為4個通用處理器系列。</p><p> 1.3 嵌入式系統(tǒng)的硬件結構</p><p> 為嵌入式系統(tǒng)硬件模型結構,此系統(tǒng)主要由微處理器MPU、外圍電路,以及外設組成,微處理器為ARM嵌入式處理芯片,如ARM7TM
20、DI系列及ARM9系列微處理器,MPU為整個嵌入式系統(tǒng)硬件的核心,決定了整個系統(tǒng)功能和應用領域。外圍電路根據(jù)微處理器不同而略有不同,主要由電源管理模型、時鐘模塊、閃存FIASH、隨機存儲器RAM,以及只讀存儲器ROM組成。這些設備是一個微處理器正常工作所必須的設備。外部設備將根據(jù)需要而各不相同,如通用通信接口USB、RS-232、RJ-45等,輸入輸出設備,如鍵盤、LCD等。外部設備將根據(jù)需要定制。嵌入式處理系統(tǒng)主要包括嵌入式微處理器、
21、存儲設備、模擬電路及電源電路、通信接口,以及外設電路。</p><p> 1.4 嵌入式系統(tǒng)的軟件結構</p><p> 嵌入式系統(tǒng)與傳統(tǒng)的單片機在軟件方面最大的不同就是可以移植操作系統(tǒng),從而使軟件設計層次化,傳統(tǒng)的單片機在軟件設計時將應用程序與系統(tǒng)、驅動等全部混在一起編譯,系統(tǒng)的可擴展性,可維護性不高,上升到操作系統(tǒng)后,這一切變得很簡單可行。嵌入式操作系統(tǒng)在軟件上呈現(xiàn)明顯的層次化,從
22、與硬件相關的BSP到實時操作系統(tǒng)內核RTOS,到上層文件系統(tǒng)、GUI界面,以及用戶層的應用軟件。當然,在某些時候這種劃分也不完全符合應用要求。需要程序設計人員根據(jù)特定的需要來設計自己的軟件。板級支持包(Board Support Packet)主要用來完成底層硬件相關的信息,如驅動程序,加載實時操作系統(tǒng)等功能。</p><p> 實時操作系統(tǒng)層主要就是常見的嵌入式操作系統(tǒng),設計者根據(jù)自己特定的需要來設計移植自己
23、的操作系統(tǒng),即添加刪除部分組件,添加相應的硬件驅動程序,為上層應用提供系統(tǒng)調用;主要是為了應用程序員開發(fā)應用程序提供更多更便捷更豐富API接口;應用軟件層即用戶設計的針對特定應用的應用軟件,在開發(fā)該應用軟件時,可以用到底層提供的大量函數(shù)。采用分層結構的軟件設計使系統(tǒng)清晰明了,各個部分設計工作分工明確,從而避免整個系統(tǒng)過分龐大。其嵌入式系統(tǒng)的軟件和硬件結構如下圖1-1所示:</p><p> 圖1-1 嵌入式系統(tǒng)
24、的軟件和硬件結構</p><p> 1.5 LPC2131介紹</p><p> 1.5.1 LPC2131概述</p><p> LPC2131微控制器是基于一個支持實時仿真和嵌入式跟蹤的16/32位,ARM7TDMI-S CPU,并帶有32kB、64kB、128kB、256kB 和512kB 嵌入的高速Flash 存儲器。128 位寬度的存儲器接口和獨特的
25、加速結構使32 位代碼能夠在最大時鐘速率下運行。對代碼規(guī)模有嚴格控制的應用可使用16 位Thumb 模式將代碼規(guī)模降低超過30%,而性能的損失卻很小。較小的封裝和很低的功耗使LPC2131特別適用于訪問控制和POS機等小型應用中;由于內置了寬范圍的串行通信接口和8/16/32kB的片內SRAM,它們也非常適合于通信網(wǎng)關、協(xié)議轉換器、軟件modem、語音識別、低端成像,為這些應用提供大規(guī)模的緩沖區(qū)和強大的處理功能。多個32位定時器、1個或
26、2個10位8路的ADC、10位DAC、PWM通道、47個GPIO以及多達9個邊沿或電平觸發(fā)的外部中斷使它們特別適用于工業(yè)控制應用以及醫(yī)療系統(tǒng)。</p><p> 1.5.2 主要特性</p><p> 16/32位ARM7TDMI-S 核,超小LQFP64 封裝;</p><p> 8/16/32kB的片內靜態(tài)RAM和32/64/128/256/512kB的片
27、內Flash程序存儲器。128位寬度接口/加速器可實現(xiàn)高達60MHz工作頻率;</p><p> 通過片內boot裝載程序實現(xiàn)在系統(tǒng)編程/在應用編程(ISP/IAP)。單個Flash 扇區(qū)或整片擦除時間為400ms。256 字節(jié)行編程時間為1ms;</p><p> EmbeddedICE RT 和嵌入式跟蹤接口通過片內RealMonitor 軟件對代碼進行實時調試和高速跟蹤;<
28、/p><p> 1個(LPC2131/32)或2個(LPC2134/36/38)8路10位的A/D轉換器,共提供16 路模擬輸入,每個通道的轉換時間低至2.44us;</p><p> 1個10位的D/A轉換器,可產生不同的模擬輸出;(LPC2132/34/36/38)</p><p> 2個32位定時器/外部事件計數(shù)器(帶4路捕獲和4路比較通道)、PWM單元(6
29、路輸出)和看門狗;</p><p> 低功耗實時時鐘具有獨立的電源和特定的32kHz時鐘輸入;</p><p> 多個串行接口,包括2個16C550工業(yè)標準UART、2個高速I2C總線(400 kbit/s)、SPI和具有緩沖作用和數(shù)據(jù)長度可變功能的SSP;</p><p> 向量中斷控制器。可配置優(yōu)先級和向量地址;</p><p>
30、 小型的LQFP64封裝上包含多達47個通用I/O口(可承受5V電壓);</p><p> 多達9個邊沿或電平觸發(fā)的外部中斷管腳;</p><p> 通過片內PLL(100us 的設置時間)可實現(xiàn)最大為60MHz的CPU操作頻率。片內集成振蕩器與外部晶體的操作頻率范圍為1~30MHz,與外部振蕩器的操作頻率范圍高達50MHz。</p><p> 低功耗模式:空
31、閑和掉電;</p><p> 可通過個別使能/禁止外部功能和外圍時鐘分頻來優(yōu)化功耗;</p><p> 通過外部中斷或BOD將處理器從掉電模式中喚醒;</p><p> 單電源,具有上電復位(POR)和掉電檢測(BOD)電路,CPU操作電壓范圍:3.0V~3.6V(3.3V±10﹪),I/O口可承受5V的電壓。</p><p>
32、; 1.5.3 LPC2131最小系統(tǒng)</p><p> LPC2131最小系統(tǒng)包括LPC2131芯片及其外圍的基本模塊,其中外圍的基本模塊有:晶振輸入模塊(OSC)、復位電路(RESET)等,如圖1-2所示:</p><p> 圖3.1 LPC2131最小系統(tǒng)</p><p> 圖1-2 LPC2131最小系統(tǒng)</p><p>
33、2 Proteus介紹</p><p> 2.1 Proteus簡介</p><p> Proteus 軟件是來自英國Labcenter electronics 公司的EDA 工具軟件,是一個電子設計的教學平臺、實驗平臺和創(chuàng)新平臺,涵蓋了電工電子實驗室、電子技術實驗室、單片機應用實驗室等的全部功能。它運行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路,
34、PROTEUS仿真軟件的特點:</p><p> 實現(xiàn)了單片機仿真和SPICE電路仿真相結合。具有模擬電路仿真、數(shù)字電路仿真、單片機及其外圍電路組成的系統(tǒng)的仿真、RS232動態(tài)仿真、I2C調試器、SPI調試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器等。</p><p> 支持主流單片機系統(tǒng)的仿真。目前支持的單片機類型有:68000系列、8051系列
35、、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及Phil-lips公司的ARM(LPC系列)等。</p><p> 提供軟件調試功能。在硬件仿真系統(tǒng)中具有全速、單步、設置斷點等調試功能,同時可以觀察各個變量、寄存器等的當前狀態(tài),因此在該軟件仿真系統(tǒng)中,也必須具有這些功能;同時支持第三方的軟件編譯和調試環(huán)境,如Keil、ADS等軟件。</p><p&g
36、t; 具有強大的原理圖繪制功能。能夠進行SCH(原理圖)和PCB(印刷板)電路的設計。</p><p><b> 2.2 仿真</b></p><p> 用Keil uVision3集成開發(fā)環(huán)境進行程序的編譯連接設置,Keil uVision3集成開發(fā)環(huán)境集成開發(fā)工具支持軟件調試,支持匯編、C程序,具有編譯效率高、系統(tǒng)庫功能強等特點。打開Keil uVision
37、3集成開發(fā)環(huán)境,使用事先加入的工程模板建立一個新的工程,把以上編好的代碼文件RTC.C添加進工程。進行相關設置后,選擇Project→New Project命令→Creat a new file并以.C保存→加載啟動代碼在Project Workspace工作區(qū)→Add file,編譯并連接工程,生成RTC.hex文件。</p><p> 在原理圖中雙擊微控制器LPC2131,出現(xiàn)一屬性設置窗口Edit Com
38、ponent,如圖2.2所示。在其中的ProgramFile中添加上面生成的RTC.hex文件的路徑,單擊OK完成設置。點擊原理圖左下角的運行按鈕即開始仿真運行。</p><p><b> 3 系統(tǒng)方案</b></p><p> 本方案采用RAM7(LPC2131)芯片來控制,使用Proteus ISIS仿真軟件設計直流電機控制器,使用4*4按鍵設置直流電機的開停
39、機、正反轉、加減速,1602進行顯示等功能。</p><p> 方案一:直流電機控制器的顯示用數(shù)碼管,速度設置使用獨立按鍵, 設置直流電機的開停機、正反轉、加減速,L298直流電機驅動電路。</p><p> 方案二:直流電機控制器的顯示用1602,速度設置使用4*4按鍵, 設置直流電機的開停機、正反轉、加減速,L298直流電機驅動電路。</p><p> 由
40、于速度設置使用獨立按鍵,占用的I/O口多,所以用4*4按鍵, 顯示要求要顯示速度和設置速度,經(jīng)過系統(tǒng)的設置要求決定使用方案二。</p><p> 3.1 主要電路設計與說明</p><p> 電路硬件的設計比較簡單,主要有LPC2131控制電路、1602液晶顯示電路、4*4按鍵電路電路、直流電機控制電路等模塊組成,下面具體分析電路模塊。</p><p><
41、b> 3.1.1振蕩電路</b></p><p> LPC2131振蕩器的兩個外接引腳為X1和X2,可以工作在兩種模式下:從屬模式和振蕩模式片內集成振蕩器支持的晶振范圍為 1MHz ~ 30MHz , 外部振蕩器頻率高50MHz 。 晶振輸出頻率稱為f OSC ,而 ARM 處理器時鐘頻率稱為 cclk 。 </p><p> 這里采用無源晶振連接法,在XTAL1和
42、XTAL2之間接入一個10MHz的石英晶體及兩個陶瓷電容,構成并聯(lián)諧振電路。如下圖3-1所示:</p><p><b> 圖3-1 振蕩電路</b></p><p><b> 3.1.2復位電路</b></p><p> LPC2131 有2個復位源:RESET 管腳和看門狗復位。RESET 管腳是一個施密特觸發(fā)輸入
43、管腳,帶有附加的干擾濾波器。任何復位源所導致的芯片復位都會啟動喚醒定時器(見下面描述的喚醒定時器),復位狀態(tài)將一直保持到外部復位撤除,振蕩器開始運行。振蕩器運行經(jīng)過固定數(shù)目的時鐘后 Flash 控制器完成其初始化。如下圖3-2所示:</p><p><b> 圖3-2 復位電路</b></p><p> 3.1.3直流電機驅動電路</p><p
44、> 該電路是通過L298來驅動直流電機正反轉,還可以通過ARM進行加減速度的控制,直流電機的開停運行,電路圖如圖3-3所示:</p><p> 圖3-3 直流電機驅動電路</p><p> 3.1.4 4*4按鍵電路</p><p> 4*4按鍵電路是用來設置直流電機的開停機、直流電機正反轉、加減速以及設置直流電機的轉速值,這些功能可以通過4*4按鍵來
45、實現(xiàn),如圖3-4所示:</p><p> 圖3-4 4*4按鍵電路</p><p> 3.1.5 1602液晶顯示電路</p><p> 1602液晶顯示電路顯示的是直流電機的開停機、直流電機正反轉、加減速以及設置直流電機的轉速值,這些功能可以通過1602液晶顯示電路來實現(xiàn),如圖3-5所示:</p><p> 圖3-5 1602液晶
46、顯示電路</p><p><b> 4 軟件設計</b></p><p> 本系統(tǒng)的軟件部分主要分為液晶顯示程序、按鍵掃描程序、直流電機PWM驅動程序、速度檢測程序等;整個軟件流程如圖4-1所示:</p><p> 圖4-1 軟件設計流程</p><p><b> 總結</b></
47、p><p><b> 謝 辭</b></p><p><b> 參考文獻</b></p><p> [1] 崔更申,孫安青編著.ARM 嵌入式系統(tǒng)開發(fā)與實踐.中國電力出版社,2008</p><p> [2] 周潤景,張麗娜,劉印群.Proteus 入門實用教程[M].機械工業(yè)出版社,20
48、07</p><p> [3] 三恒星科技.ARM7易學通.北京:人民郵電出版社,2006</p><p> [4] 馬忠梅,徐英慧.ARM□嵌入式處理器結構與應用基礎.北京:北京航空航天大學出版社,2007.3</p><p> [5] 范書瑞,趙燕飛,高鐵成.ARM處理器與C語言開發(fā)應用.北京:北京航空航天大學出版社,2008</p>
49、<p> [6] 侯冬晴,李建鋒,朱長城.ARM技術原理與應用.北京:清華大學出版社,2009</p><p> [7] 張綺文,解書鋼.ARM嵌入式常用模塊與綜合系統(tǒng)設計實例精講.北京:電子工業(yè)出版社,2007</p><p> [8] 周立功.ARM嵌入式系統(tǒng)實驗教程.北京:北京航空航天大學出版社,2004</p><p><b>
50、; 附 錄</b></p><p><b> 系統(tǒng)原理圖</b></p><p><b> 程序清單:</b></p><p> #include "config.h"</p><p> #define rs (1<<8)</p>
51、<p> #define rw (1<<9)</p><p> #define en (1<<10)</p><p> #define busy (1<<7)</p><p> #define MIN_PULSES 6</p><p> #define MAX_PULSES 17
52、85</p><p> #define MAX_PWM 16000</p><p> #define MIN_PWM 1</p><p> #define CKTIME 100 /*100ms*/ </p><p> #define P_ref 1</p><p&
53、gt; #define I_ref 2</p><p> int32 P_val=0;</p><p> int32 I_val=0;</p><p> int32 D_val=0;</p><p> int32 T_val=0;</p><p> int32 changeref=1;</p>
54、;<p> uint8 dir[4]={'+','\0','-','\0'};</p><p> uint8 rpm[]={"rpm"};</p><p> uint8 current[]={"Current:"};</p><p> uin
55、t8 seted[]={" Seted:"};</p><p> uint8 curse[4]={'>','\0',' ','\0'};</p><p> uint8 enternum[]={"Please set the rpm:"};</p><p&g
56、t; uint8 strcrt[5];</p><p> uint8 strset[5];</p><p> uint8 flag=1;</p><p> uint8 shutdown=0;</p><p> uint8 key=16;</p><p> uint8 keyhit=16;</p>
57、<p> uint8 dirhit=0;</p><p> uint8 keydown=0;</p><p> uint8 downindex=0;</p><p> uint8 dircrt=0;</p><p> int32 varcrt=0;</p><p> int32 varset=
58、(int32)0;</p><p> int32 keysum=(int32)0;</p><p> uint32 rtcounts=0;</p><p> int32 setcounts=0;</p><p> int32 deltacounts=0;</p><p> int32 pwmdata=0;&l
59、t;/p><p> /**************************************************************************/功能:延時</p><p> ***************************************************************************/</p><p&g
60、t; void delay(int ms) </p><p> { </p><p> int i;
61、 </p><p> while(ms--) </p><p> {
62、 </p><p> for(i = 0;i<250;i++){} </p><p> }
63、 </p><p><b> } </b></p><p> /****************************************************************************
64、 </p><p> * 名稱:WrOp()</p><p><b> * 功能:寫函數(shù)</b></p><p> ****************************************************************************/</p><p&g
65、t; void WrOp(uint8 dat)</p><p><b> {</b></p><p> IO0CLR=rs;//全部清零</p><p> IO0CLR=rw;</p><p> IO0CLR=0xff;//先清零</p><p> IO0SET=dat;/
66、/再送數(shù)</p><p> IO0SET=en;</p><p> IO0CLR=en;</p><p><b> }</b></p><p> /****************************************************************************</p&
67、gt;<p> * 名稱:WrDat()</p><p> * 功能:寫數(shù)據(jù)函數(shù)</p><p> ****************************************************************************/</p><p> void WrDat(uint8 dat)</p>&l
68、t;p><b> {</b></p><p> IO0SET=rs;</p><p> IO0CLR=rw;</p><p> IO0CLR=0xff;//先清零</p><p> IO0SET=dat;//再送數(shù)</p><p> IO0SET=en;</p>
69、;<p> IO0CLR=en;</p><p><b> }</b></p><p> /****************************************************************************</p><p> * 名稱:lcd_init()</p><
70、;p> * 功能:lcd初始化函數(shù)</p><p> ****************************************************************************/</p><p> void lcd_init(void)</p><p><b> {</b></p>&l
71、t;p> WrOp(0x38);//16*2顯示,5*7點陣,8位數(shù)據(jù) </p><p> WrOp(0x06);//光標加1</p><p> WrOp(0x0c);//開顯示,關光標</p><p> IO0DIR |=0x000007ff;//設置為輸出</p><p> IO0CLR
72、=0x7ff;</p><p><b> }</b></p><p> /****************************************************************************</p><p> * 名稱:DisText()</p><p> * 功能:顯示文本函
73、數(shù)</p><p> ****************************************************************************/</p><p> void DisText(uint8 addr,uint8 *p)</p><p><b> {</b></p><p>
74、; WrOp(addr);</p><p> while(*p !='\0')WrDat(*(p++));</p><p><b> }</b></p><p> /****************************************************************************&l
75、t;/p><p> * 功能:閃動的提示符,必須放入執(zhí)行循環(huán)中</p><p> ****************************************************************************/</p><p> void DisCurse(uint8 addr)</p><p><b>
76、 {</b></p><p> DisText(addr,curse);</p><p> DisText((addr+1),(curse+2));</p><p> DisText((addr+2),(curse+2));</p><p> delay(300);</p><p> DisTe
77、xt(addr,curse);</p><p> DisText((addr+1),curse);</p><p> DisText((addr+2),(curse+2));</p><p> delay(300);</p><p> DisText(addr,curse);</p><p> DisText
78、((addr+1),curse);</p><p> DisText((addr+2),curse);</p><p> delay(300);</p><p> DisText(addr,(curse+2));</p><p> DisText((addr+1),(curse+2));</p><p> D
79、isText((addr+2),(curse+2));</p><p> delay(200);</p><p><b> }</b></p><p> /****************************************************************************</p><
80、p> 功能:浮點數(shù)值轉換為字符串函數(shù),5.2格式</p><p> ****************************************************************************/</p><p> void Int2Str(unsigned char str[],int32 var)</p><p><b
81、> {</b></p><p> int32 t=(int32)(var*100);</p><p> int32 i,k;</p><p> for(i=5;i>=3;i--)</p><p><b> {</b></p><p> k=(int32)pow(
82、10,i);</p><p> str[5-i]=(unsigned char)((int32)((t/k)%10)+48);</p><p><b> t=(t%k);</b></p><p><b> }</b></p><p> str[3]=(unsigned char)((((in
83、t32)(var))%10)+48);</p><p> str[4]='\0';</p><p><b> }</b></p><p> /****************************************************************************</p><
84、;p> * 名稱:Key_Process()</p><p> ****************************************************************************/</p><p> void Key_Process(uint8 num)</p><p><b> {</b>&
85、lt;/p><p> switch(num)</p><p><b> {</b></p><p> case 0:keyhit=7;break;</p><p> case 1:keyhit=8;break;</p><p> case 2:keyhit=9;break;</p>
86、;<p> case 3:keyhit=10;dirhit=!dirhit;break;//轉向設置</p><p> case 4:keyhit=4;break;</p><p> case 5:keyhit=5;break;</p><p> case 6:keyhit=6;break;</p><p> case
87、 7:keyhit=11;if(!flag)varset=(int32)(varset+1);//在監(jiān)視狀態(tài)置直接微調整轉數(shù)</p><p> else keysum=(int32)(keysum+1);break;//在設置狀態(tài)調整keysum</p><p> case 8:keyhit=1;break;</p><p> case 9:keyhit=2;
88、break;</p><p> case 10:keyhit=3;break;</p><p> case 11:keyhit=12;if(!flag)varset=(int32)(varset-1);//在監(jiān)視狀態(tài)直接微調整轉數(shù)</p><p> else keysum=(int32)(keysum-1);break;//在設置狀態(tài)調整keysum</
89、p><p> case 12:keyhit=13;shutdown=!shutdown;</p><p> if(shutdown) {flag=0;varset=0;}</p><p> else {flag=1;keysum=(int32)0;downindex=0;WrOp(0x01);}</p><p> break;// 強制將
90、電機重啟為初始值</p><p> case 13:keyhit=0;break;</p><p> case 14:keyhit=14;flag=1;keysum=(int32)0;downindex=0;WrOp(0x01);break;// 進入設置模式</p><p> case 15:keyhit=15;flag=0; varset=keysum;
91、WrOp(0x01);break;//確定輸入,返回監(jiān)視模式</p><p> default:break;</p><p><b> }</b></p><p> if((keysum<0))keysum=0;</p><p> if((varset<0))varset=0;</p>
92、<p> if(varset>350)varset=350;// 最大轉數(shù)限制</p><p><b> }</b></p><p> void __irq catch_pulses(void)</p><p><b> {</b></p><p> rtcounts++;
93、</p><p> T0IR=0x20; //清除中斷標志,復位CR1中斷</p><p> VICVectAddr=0x00; //通知VIC中斷處理結束</p><p><b> }</b></p><p> void __irq
94、PI_porcess(void)// 每 CKTIME ms計算一次占空比 </p><p><b> {</b></p><p> deltacounts=(rtcounts*1000)/CKTIME;//對脈沖速率采樣</p><p> setcounts=varset*5;//把設定的轉速轉換為脈沖速率</p><
95、;p> P_val=setcounts*P_ref*changeref;</p><p> if((setcounts-deltacounts)>0)</p><p> if(I_val<MAX_PULSES)I_val++;</p><p> if((setcounts-deltacounts)<0)</p><
96、p> if(I_val>(-MAX_PULSES))I_val--;</p><p> T_val=(I_val*I_ref*changeref*1000)/CKTIME;//平均誤差的累積和</p><p> T_val=(int32)(T_val/10);//還原changeref的放大倍率</p><p> if(T_val<MIN_
97、PWM)T_val=MIN_PWM;</p><p> if(T_val>MAX_PWM)T_val=MAX_PWM;</p><p> pwmdata=(int32)T_val;</p><p> varcrt=deltacounts/5;//把采樣的脈沖速率轉換為轉速</p><p> pwmdata=(int32)(P_v
98、al/10);</p><p> rtcounts=0;</p><p> T1IR=0x01; //清除中斷標志,復位MR0中斷</p><p> VICVectAddr=0x00; //通知VIC中斷處理結束</p><p><b> }<
99、;/b></p><p> void capinit(void)</p><p><b> {</b></p><p> T0PR=5; //2個主頻后TC加1</p><p> T0CCR=(1<<3)|(1<<5);
100、 //設置CAP0.1上升沿捕獲,捕獲后將TC的值放入T0CR1,并產生中斷</p><p><b> T0TC=0;</b></p><p> T0TCR=0x01; //啟動定時器</p><p><b> }</b></p><p>
101、 void time1init(void)</p><p><b> {</b></p><p> T1PR=99; //設置定時器分頻為25分頻,得147450Hz</p><p> T1MCR=0x03; //匹配通道0匹配中斷并復位T1TC</p><p
102、> T1MR0=702; //比較值,分母為Fosc,分子/2為0.5秒以此類推,此處為0.01秒,27648/10</p><p> T1TCR=0x03; //啟動并復位T1TC </p><p> T1TCR=0x01;</p><p><b> }</b></p>&
103、lt;p> void pwminit(void)</p><p><b> {</b></p><p> PWMPR=0x00; //不分頻,計數(shù)頻率為Fpclk</p><p> PWMMCR=0x02; //設置PWMMR0匹配時復位PWMTC&
104、lt;/p><p> PWMMR0=MAX_PWM; //設置PWM周期</p><p> PWMMR5=1; //設置PWM占空比</p><p> PWMLER=0x21; //PWMMR0,PWMMR5鎖存</p><p> P
105、WMPCR=1<<13; //允許PWM5輸出,單邊PWM</p><p> PWMTCR=0x09; //啟動定時器,PWM使能</p><p><b> }</b></p><p> /*******************************
106、*********************************************</p><p> * 名稱:main()</p><p><b> * 功能:顯示文本</b></p><p> *******************************************************************
107、*********/</p><p> int main(void)</p><p><b> { </b></p><p> PINSEL1=0x00800400;//引腳功能選擇</p><p> IO0DIR =0x020007ff;//對GPIO的方向設置,0入1出</p><p
108、> changeref=(10*MAX_PWM )/ MAX_PULSES;//changeref被放大;</p><p> lcd_init();//LCD的初始化</p><p> Keyboard_Initialize();</p><p> pwminit(); //PWM初始化</p><p> capinit();
109、</p><p> time1init();</p><p> VICIntSelect=0x00; </p><p> VICVectCntl0=0x24;</p><p> VICVectAddr0=(uint32)catch_pulses; </p><p> VICVectCntl1=0x2
110、5; </p><p> VICVectAddr1=(uint32)PI_porcess; </p><p> VICIntEnable=0x00000030; </p><p> IO0CLR =(1<<25); //設置初始方向電位 </p><p> pwmdata=MIN_PWM;
111、</p><p><b> while(1)</b></p><p><b> {</b></p><p> key=Keyboard_Scan();</p><p> if((key!=255))keydown=1;//捕獲按鍵按下的響應</p><p> els
112、e keydown=0;</p><p> Key_Process(key);//鍵值對應的操作,修改flag,keysum,varset,dirhit,keyhit.</p><p> PWMMR0=MAX_PWM;</p><p> PWMMR5=pwmdata;</p><p> PWMLER=0x21;</p>
113、<p><b> if(!flag)</b></p><p><b> {</b></p><p> if(IO0PIN&(1<<23))dircrt=0;//轉向檢測</p><p> else dircrt=1;</p><p> if(dirhit)IO
114、0SET =(1<<25);//轉向開關</p><p> else IO0CLR =(1<<25); </p><p> DisText(0x80,current);</p><p> DisText(0x91,rpm);</p><p> DisText(0xc0,seted);</p>&l
115、t;p> DisText(0xd1,rpm);</p><p> if(dircrt)DisText(0x88,dir);//監(jiān)視的轉向顯示</p><p> else DisText(0x88,(dir+2));</p><p> if(dirhit)DisText(0xc8,dir);//設置的轉向顯示</p><p>
116、else DisText(0xc8,(dir+2));</p><p> Int2Str(strcrt,varcrt);//監(jiān)視的轉速顯示</p><p> Int2Str(strset,varset);//設置的轉速顯示</p><p> DisText(0x89,strcrt);</p><p> DisText(0xc9,str
117、set);</p><p> delay(100);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if((keydown)&&(key
118、hit<=9)&&(downindex<4))</p><p><b> {</b></p><p> keysum=(int32)(keysum*10+keyhit);//按鍵和值</p><p> downindex++;</p><p><b> }</b>
119、;</p><p> DisText(0x80,enternum);</p><p> DisCurse(0xc0);</p><p> Int2Str(strset,keysum);//用戶輸入的鍵值顯示</p><p> DisText(0xc6,strset);</p><p> if(dirhit)
120、DisText(0xc4,dir);//設置的的轉向顯示</p><p> else DisText(0xc4,(dir+2));</p><p> delay(100);</p><p><b> }</b></p><p><b> } </b></p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于arm7的直流電機控制器
- 基于ARM的直流電機伺服控制器的研制.pdf
- 基于ARM的直流電機可逆調速控制器的研制.pdf
- 基于ARM的數(shù)字式直流電機控制器的研究.pdf
- 基于arm的直流電機測速
- 基于模糊控制的直流電機控制器設計.pdf
- 直流電機轉速控制器設計開題報告
- 基于arm的直流電機轉速控制系統(tǒng)
- 基于dsp直流電機控制
- ARM在直流電機調速控制器中的應用研究.pdf
- 基于arm9直流電機調速
- 基于ARM Cortex-M3的無刷直流電機控制器設計.pdf
- 直流電機無線遙控控制器設計【文獻綜述】
- 直流電機控制器設計說明書
- 無刷直流電機控制器設計 【開題報告】
- 無刷直流電機控制器設計【文獻綜述】
- 無刷直流電機控制器設計【開題報告】
- 基于arm9直流電機調速
- 基于DSP無刷直流電機控制器的設計.pdf
- 基于NiosⅡ的無刷直流電機控制器設計.pdf
評論
0/150
提交評論