版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 編號(hào): </p><p><b> 嵌入式系統(tǒng)設(shè)計(jì)</b></p><p><b> 實(shí)訓(xùn)(論文)說(shuō)明書(shū)</b></p><p> 題 目: 直流電機(jī)控制器 </p><p> 院 (系):
2、 </p><p> 專 業(yè): </p><p> 學(xué)生姓名: </p><p> 學(xué) 號(hào): </p><p> 指導(dǎo)教師: </p><
3、p><b> 摘 要</b></p><p> 隨著信息技術(shù)和網(wǎng)絡(luò)技術(shù)的高速發(fā)展,嵌入式產(chǎn)品日益廣泛地滲透到日常生活、科學(xué)研究和軍事科技等領(lǐng)域,比如DVD、移動(dòng)電話、MP3及掌上電腦等等。這些嵌入式設(shè)備多采用32位RISC嵌入式處理器作為核心部件。其中基于ARM核的嵌入式處理器獨(dú)占鰲頭,在32位RISC處理器中占據(jù)超過(guò)75%的市場(chǎng)份額。</p><p>
4、 本文介紹了利用Proteus ISIS仿真軟件與嵌入式系統(tǒng)RAM7(LPC2131)的硬件接口電路設(shè)計(jì)直流電機(jī)控制器。</p><p> 關(guān)鍵詞:LPC2131;直流電機(jī);控制器</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)的硬件結(jié)構(gòu)2</p><p> 1.4 嵌入式系統(tǒng)的軟件結(jié)構(gòu)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簡(jiǎn)介6</p><p><b> 2.2 仿真6</b></p><p><b> 3 系統(tǒng)方案6</b></p><p> 3.1 主要電路設(shè)計(jì)與說(shuō)明7<
11、;/p><p> 3.1.1振蕩電路7</p><p> 3.1.2復(fù)位電路7</p><p> 3.1.3直流電機(jī)驅(qū)動(dòng)電路8</p><p> 3.1.4 4*4按鍵電路8</p><p> 3.1.5 1602液晶顯示電路8</p><p><b> 4 軟件設(shè)
12、計(jì)9</b></p><p><b> 總結(jié)10</b></p><p><b> 謝 辭10</b></p><p><b> 參考文獻(xiàn)11</b></p><p><b> 附 錄12</b></p>&
13、lt;p><b> 引言</b></p><p> 隨著信息技術(shù)和網(wǎng)絡(luò)技術(shù)的高速發(fā)展,嵌入式產(chǎn)品日益廣泛地滲透到日常生活、科學(xué)研究和軍事科技等領(lǐng)域,比如DVD、移動(dòng)電話、MP3及掌上電腦等等。這些嵌入式設(shè)備多采用32位RISC嵌入式處理器作為核心部件。其中基于ARM核的嵌入式處理器獨(dú)占鰲頭,在32位RISC處理器中占據(jù)超過(guò)75%的市場(chǎng)份額。因而越來(lái)越多的電子愛(ài)好者都加入了學(xué)習(xí)ARM
14、的隊(duì)伍中。通過(guò)和一般單片機(jī)系統(tǒng)開(kāi)發(fā)過(guò)程的比較不難發(fā)現(xiàn),嵌入式系統(tǒng)的設(shè)計(jì)包括硬件設(shè)計(jì)和軟件設(shè)計(jì)兩個(gè)方面,其調(diào)試過(guò)程包括軟件調(diào)試、硬件測(cè)試、系統(tǒng)調(diào)試3個(gè)過(guò)程。軟件調(diào)試一般比較容易進(jìn)行,但是硬件測(cè)試和系統(tǒng)調(diào)試則比較麻煩,因?yàn)橐M(jìn)行這兩個(gè)過(guò)程必須在 PCB制作、元器件焊接完畢之后才能進(jìn)行;而PCB的制作、元器件的焊接是非常費(fèi)時(shí)費(fèi)力的,如果能采用仿真工具Proteus VSM,則不用制作具體的電路板也能夠完成以上工作。毫無(wú)疑問(wèn),這樣可給廣大ARM
15、學(xué)習(xí)者帶來(lái)很大的方便。</p><p> 在當(dāng)前數(shù)字信息技術(shù)和網(wǎng)絡(luò)技術(shù)高速發(fā)展的后PC(Post-PC)時(shí)代,嵌入式系統(tǒng)已經(jīng)廣泛地滲透到科學(xué)研究、工程設(shè)計(jì)、軍事技術(shù)、各類產(chǎn)業(yè)和商業(yè)文化藝術(shù)以及人們的日常生活等方方面面中。隨著國(guó)內(nèi)外各種嵌入式產(chǎn)品的進(jìn)一步開(kāi)發(fā)和推廣,嵌入式技術(shù)越來(lái)越和人們的生活緊密結(jié)合。我國(guó)嵌入式系統(tǒng)發(fā)展的明顯特點(diǎn)是:嵌入式系統(tǒng)的發(fā)展正從嵌入式系統(tǒng)技術(shù)走向嵌入式產(chǎn)業(yè),“3C”融合和IT技術(shù)大融合加
16、速嵌入式系統(tǒng)產(chǎn)業(yè)化進(jìn)程,嵌入式系統(tǒng)是中國(guó)廠商從“中國(guó)制造”向“中國(guó)創(chuàng)造”轉(zhuǎn)變的最佳契機(jī)。</p><p> 1 嵌入式系統(tǒng)的介紹</p><p> 1.1 嵌入式系統(tǒng)的概念</p><p> 嵌入式系統(tǒng)以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),采用可裁減軟硬件,適用于對(duì)功能可靠性、成本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。它一般由嵌入式微處理器、外圍硬件設(shè)備、嵌入
17、式操作系統(tǒng)以及用戶程序四部份組成,用于以實(shí)現(xiàn)對(duì)其他設(shè)備的控制、監(jiān)視或管理等功能。嵌入式最典型的特點(diǎn)是與人們的日常生活緊密相關(guān),任何一個(gè)普通人都可以擁有各類運(yùn)用了嵌入式技術(shù)的電子產(chǎn)品,小到MP3、PDA等微型數(shù)字化設(shè)備,大到信息家電、智能電器、車載GIS。</p><p> 1.2 ARM微處理器系列</p><p> ARM7系列(32位低功耗RISC處理器,采用ARMV4T[Newm
18、an]結(jié)構(gòu),三級(jí)流水線)</p><p> ARM9系列(采用ARMV4T[Harvard]結(jié)構(gòu),五級(jí)流水線)</p><p> ARM9E系列(可綜合處理器,支持DSP指令集)</p><p> ARM10E系列(高性能、低功耗微處理器,采用ARMVT5結(jié)構(gòu),6級(jí)流水線)</p><p> SecurCore系列</p>
19、<p><b> Xscale系列</b></p><p> 其中ARM7、ARM9、ARM9E和ARM10E為4個(gè)通用處理器系列。</p><p> 1.3 嵌入式系統(tǒng)的硬件結(jié)構(gòu)</p><p> 為嵌入式系統(tǒng)硬件模型結(jié)構(gòu),此系統(tǒng)主要由微處理器MPU、外圍電路,以及外設(shè)組成,微處理器為ARM嵌入式處理芯片,如ARM7TM
20、DI系列及ARM9系列微處理器,MPU為整個(gè)嵌入式系統(tǒng)硬件的核心,決定了整個(gè)系統(tǒng)功能和應(yīng)用領(lǐng)域。外圍電路根據(jù)微處理器不同而略有不同,主要由電源管理模型、時(shí)鐘模塊、閃存FIASH、隨機(jī)存儲(chǔ)器RAM,以及只讀存儲(chǔ)器ROM組成。這些設(shè)備是一個(gè)微處理器正常工作所必須的設(shè)備。外部設(shè)備將根據(jù)需要而各不相同,如通用通信接口USB、RS-232、RJ-45等,輸入輸出設(shè)備,如鍵盤、LCD等。外部設(shè)備將根據(jù)需要定制。嵌入式處理系統(tǒng)主要包括嵌入式微處理器、
21、存儲(chǔ)設(shè)備、模擬電路及電源電路、通信接口,以及外設(shè)電路。</p><p> 1.4 嵌入式系統(tǒng)的軟件結(jié)構(gòu)</p><p> 嵌入式系統(tǒng)與傳統(tǒng)的單片機(jī)在軟件方面最大的不同就是可以移植操作系統(tǒng),從而使軟件設(shè)計(jì)層次化,傳統(tǒng)的單片機(jī)在軟件設(shè)計(jì)時(shí)將應(yīng)用程序與系統(tǒng)、驅(qū)動(dòng)等全部混在一起編譯,系統(tǒng)的可擴(kuò)展性,可維護(hù)性不高,上升到操作系統(tǒng)后,這一切變得很簡(jiǎn)單可行。嵌入式操作系統(tǒng)在軟件上呈現(xiàn)明顯的層次化,從
22、與硬件相關(guān)的BSP到實(shí)時(shí)操作系統(tǒng)內(nèi)核RTOS,到上層文件系統(tǒng)、GUI界面,以及用戶層的應(yīng)用軟件。當(dāng)然,在某些時(shí)候這種劃分也不完全符合應(yīng)用要求。需要程序設(shè)計(jì)人員根據(jù)特定的需要來(lái)設(shè)計(jì)自己的軟件。板級(jí)支持包(Board Support Packet)主要用來(lái)完成底層硬件相關(guān)的信息,如驅(qū)動(dòng)程序,加載實(shí)時(shí)操作系統(tǒng)等功能。</p><p> 實(shí)時(shí)操作系統(tǒng)層主要就是常見(jiàn)的嵌入式操作系統(tǒng),設(shè)計(jì)者根據(jù)自己特定的需要來(lái)設(shè)計(jì)移植自己
23、的操作系統(tǒng),即添加刪除部分組件,添加相應(yīng)的硬件驅(qū)動(dòng)程序,為上層應(yīng)用提供系統(tǒng)調(diào)用;主要是為了應(yīng)用程序員開(kāi)發(fā)應(yīng)用程序提供更多更便捷更豐富API接口;應(yīng)用軟件層即用戶設(shè)計(jì)的針對(duì)特定應(yīng)用的應(yīng)用軟件,在開(kāi)發(fā)該應(yīng)用軟件時(shí),可以用到底層提供的大量函數(shù)。采用分層結(jié)構(gòu)的軟件設(shè)計(jì)使系統(tǒng)清晰明了,各個(gè)部分設(shè)計(jì)工作分工明確,從而避免整個(gè)系統(tǒng)過(guò)分龐大。其嵌入式系統(tǒng)的軟件和硬件結(jié)構(gòu)如下圖1-1所示:</p><p> 圖1-1 嵌入式系統(tǒng)
24、的軟件和硬件結(jié)構(gòu)</p><p> 1.5 LPC2131介紹</p><p> 1.5.1 LPC2131概述</p><p> LPC2131微控制器是基于一個(gè)支持實(shí)時(shí)仿真和嵌入式跟蹤的16/32位,ARM7TDMI-S CPU,并帶有32kB、64kB、128kB、256kB 和512kB 嵌入的高速Flash 存儲(chǔ)器。128 位寬度的存儲(chǔ)器接口和獨(dú)特的
25、加速結(jié)構(gòu)使32 位代碼能夠在最大時(shí)鐘速率下運(yùn)行。對(duì)代碼規(guī)模有嚴(yán)格控制的應(yīng)用可使用16 位Thumb 模式將代碼規(guī)模降低超過(guò)30%,而性能的損失卻很小。較小的封裝和很低的功耗使LPC2131特別適用于訪問(wèn)控制和POS機(jī)等小型應(yīng)用中;由于內(nèi)置了寬范圍的串行通信接口和8/16/32kB的片內(nèi)SRAM,它們也非常適合于通信網(wǎng)關(guān)、協(xié)議轉(zhuǎn)換器、軟件modem、語(yǔ)音識(shí)別、低端成像,為這些應(yīng)用提供大規(guī)模的緩沖區(qū)和強(qiáng)大的處理功能。多個(gè)32位定時(shí)器、1個(gè)或
26、2個(gè)10位8路的ADC、10位DAC、PWM通道、47個(gè)GPIO以及多達(dá)9個(gè)邊沿或電平觸發(fā)的外部中斷使它們特別適用于工業(yè)控制應(yīng)用以及醫(yī)療系統(tǒng)。</p><p> 1.5.2 主要特性</p><p> 16/32位ARM7TDMI-S 核,超小LQFP64 封裝;</p><p> 8/16/32kB的片內(nèi)靜態(tài)RAM和32/64/128/256/512kB的片
27、內(nèi)Flash程序存儲(chǔ)器。128位寬度接口/加速器可實(shí)現(xiàn)高達(dá)60MHz工作頻率;</p><p> 通過(guò)片內(nèi)boot裝載程序?qū)崿F(xiàn)在系統(tǒng)編程/在應(yīng)用編程(ISP/IAP)。單個(gè)Flash 扇區(qū)或整片擦除時(shí)間為400ms。256 字節(jié)行編程時(shí)間為1ms;</p><p> EmbeddedICE RT 和嵌入式跟蹤接口通過(guò)片內(nèi)RealMonitor 軟件對(duì)代碼進(jìn)行實(shí)時(shí)調(diào)試和高速跟蹤;<
28、/p><p> 1個(gè)(LPC2131/32)或2個(gè)(LPC2134/36/38)8路10位的A/D轉(zhuǎn)換器,共提供16 路模擬輸入,每個(gè)通道的轉(zhuǎn)換時(shí)間低至2.44us;</p><p> 1個(gè)10位的D/A轉(zhuǎn)換器,可產(chǎn)生不同的模擬輸出;(LPC2132/34/36/38)</p><p> 2個(gè)32位定時(shí)器/外部事件計(jì)數(shù)器(帶4路捕獲和4路比較通道)、PWM單元(6
29、路輸出)和看門狗;</p><p> 低功耗實(shí)時(shí)時(shí)鐘具有獨(dú)立的電源和特定的32kHz時(shí)鐘輸入;</p><p> 多個(gè)串行接口,包括2個(gè)16C550工業(yè)標(biāo)準(zhǔn)UART、2個(gè)高速I2C總線(400 kbit/s)、SPI和具有緩沖作用和數(shù)據(jù)長(zhǎng)度可變功能的SSP;</p><p> 向量中斷控制器??膳渲脙?yōu)先級(jí)和向量地址;</p><p>
30、 小型的LQFP64封裝上包含多達(dá)47個(gè)通用I/O口(可承受5V電壓);</p><p> 多達(dá)9個(gè)邊沿或電平觸發(fā)的外部中斷管腳;</p><p> 通過(guò)片內(nèi)PLL(100us 的設(shè)置時(shí)間)可實(shí)現(xiàn)最大為60MHz的CPU操作頻率。片內(nèi)集成振蕩器與外部晶體的操作頻率范圍為1~30MHz,與外部振蕩器的操作頻率范圍高達(dá)50MHz。</p><p> 低功耗模式:空
31、閑和掉電;</p><p> 可通過(guò)個(gè)別使能/禁止外部功能和外圍時(shí)鐘分頻來(lái)優(yōu)化功耗;</p><p> 通過(guò)外部中斷或BOD將處理器從掉電模式中喚醒;</p><p> 單電源,具有上電復(fù)位(POR)和掉電檢測(cè)(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)、復(fù)位電路(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簡(jiǎn)介</p><p> Proteus 軟件是來(lái)自英國(guó)Labcenter electronics 公司的EDA 工具軟件,是一個(gè)電子設(shè)計(jì)的教學(xué)平臺(tái)、實(shí)驗(yàn)平臺(tái)和創(chuàng)新平臺(tái),涵蓋了電工電子實(shí)驗(yàn)室、電子技術(shù)實(shí)驗(yàn)室、單片機(jī)應(yīng)用實(shí)驗(yàn)室等的全部功能。它運(yùn)行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路,
34、PROTEUS仿真軟件的特點(diǎn):</p><p> 實(shí)現(xiàn)了單片機(jī)仿真和SPICE電路仿真相結(jié)合。具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS232動(dòng)態(tài)仿真、I2C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。</p><p> 支持主流單片機(jī)系統(tǒng)的仿真。目前支持的單片機(jī)類型有:68000系列、8051系列
35、、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及Phil-lips公司的ARM(LPC系列)等。</p><p> 提供軟件調(diào)試功能。在硬件仿真系統(tǒng)中具有全速、單步、設(shè)置斷點(diǎn)等調(diào)試功能,同時(shí)可以觀察各個(gè)變量、寄存器等的當(dāng)前狀態(tài),因此在該軟件仿真系統(tǒng)中,也必須具有這些功能;同時(shí)支持第三方的軟件編譯和調(diào)試環(huán)境,如Keil、ADS等軟件。</p><p&g
36、t; 具有強(qiáng)大的原理圖繪制功能。能夠進(jìn)行SCH(原理圖)和PCB(印刷板)電路的設(shè)計(jì)。</p><p><b> 2.2 仿真</b></p><p> 用Keil uVision3集成開(kāi)發(fā)環(huán)境進(jìn)行程序的編譯連接設(shè)置,Keil uVision3集成開(kāi)發(fā)環(huán)境集成開(kāi)發(fā)工具支持軟件調(diào)試,支持匯編、C程序,具有編譯效率高、系統(tǒng)庫(kù)功能強(qiáng)等特點(diǎn)。打開(kāi)Keil uVision
37、3集成開(kāi)發(fā)環(huán)境,使用事先加入的工程模板建立一個(gè)新的工程,把以上編好的代碼文件RTC.C添加進(jìn)工程。進(jìn)行相關(guān)設(shè)置后,選擇Project→New Project命令→Creat a new file并以.C保存→加載啟動(dòng)代碼在Project Workspace工作區(qū)→Add file,編譯并連接工程,生成RTC.hex文件。</p><p> 在原理圖中雙擊微控制器LPC2131,出現(xiàn)一屬性設(shè)置窗口Edit Com
38、ponent,如圖2.2所示。在其中的ProgramFile中添加上面生成的RTC.hex文件的路徑,單擊OK完成設(shè)置。點(diǎn)擊原理圖左下角的運(yùn)行按鈕即開(kāi)始仿真運(yùn)行。</p><p><b> 3 系統(tǒng)方案</b></p><p> 本方案采用RAM7(LPC2131)芯片來(lái)控制,使用Proteus ISIS仿真軟件設(shè)計(jì)直流電機(jī)控制器,使用4*4按鍵設(shè)置直流電機(jī)的開(kāi)停
39、機(jī)、正反轉(zhuǎn)、加減速,1602進(jìn)行顯示等功能。</p><p> 方案一:直流電機(jī)控制器的顯示用數(shù)碼管,速度設(shè)置使用獨(dú)立按鍵, 設(shè)置直流電機(jī)的開(kāi)停機(jī)、正反轉(zhuǎn)、加減速,L298直流電機(jī)驅(qū)動(dòng)電路。</p><p> 方案二:直流電機(jī)控制器的顯示用1602,速度設(shè)置使用4*4按鍵, 設(shè)置直流電機(jī)的開(kāi)停機(jī)、正反轉(zhuǎn)、加減速,L298直流電機(jī)驅(qū)動(dòng)電路。</p><p> 由
40、于速度設(shè)置使用獨(dú)立按鍵,占用的I/O口多,所以用4*4按鍵, 顯示要求要顯示速度和設(shè)置速度,經(jīng)過(guò)系統(tǒng)的設(shè)置要求決定使用方案二。</p><p> 3.1 主要電路設(shè)計(jì)與說(shuō)明</p><p> 電路硬件的設(shè)計(jì)比較簡(jiǎn)單,主要有LPC2131控制電路、1602液晶顯示電路、4*4按鍵電路電路、直流電機(jī)控制電路等模塊組成,下面具體分析電路模塊。</p><p><
41、b> 3.1.1振蕩電路</b></p><p> LPC2131振蕩器的兩個(gè)外接引腳為X1和X2,可以工作在兩種模式下:從屬模式和振蕩模式片內(nèi)集成振蕩器支持的晶振范圍為 1MHz ~ 30MHz , 外部振蕩器頻率高50MHz 。 晶振輸出頻率稱為f OSC ,而 ARM 處理器時(shí)鐘頻率稱為 cclk 。 </p><p> 這里采用無(wú)源晶振連接法,在XTAL1和
42、XTAL2之間接入一個(gè)10MHz的石英晶體及兩個(gè)陶瓷電容,構(gòu)成并聯(lián)諧振電路。如下圖3-1所示:</p><p><b> 圖3-1 振蕩電路</b></p><p><b> 3.1.2復(fù)位電路</b></p><p> LPC2131 有2個(gè)復(fù)位源:RESET 管腳和看門狗復(fù)位。RESET 管腳是一個(gè)施密特觸發(fā)輸入
43、管腳,帶有附加的干擾濾波器。任何復(fù)位源所導(dǎo)致的芯片復(fù)位都會(huì)啟動(dòng)喚醒定時(shí)器(見(jiàn)下面描述的喚醒定時(shí)器),復(fù)位狀態(tài)將一直保持到外部復(fù)位撤除,振蕩器開(kāi)始運(yùn)行。振蕩器運(yùn)行經(jīng)過(guò)固定數(shù)目的時(shí)鐘后 Flash 控制器完成其初始化。如下圖3-2所示:</p><p><b> 圖3-2 復(fù)位電路</b></p><p> 3.1.3直流電機(jī)驅(qū)動(dòng)電路</p><p
44、> 該電路是通過(guò)L298來(lái)驅(qū)動(dòng)直流電機(jī)正反轉(zhuǎn),還可以通過(guò)ARM進(jìn)行加減速度的控制,直流電機(jī)的開(kāi)停運(yùn)行,電路圖如圖3-3所示:</p><p> 圖3-3 直流電機(jī)驅(qū)動(dòng)電路</p><p> 3.1.4 4*4按鍵電路</p><p> 4*4按鍵電路是用來(lái)設(shè)置直流電機(jī)的開(kāi)停機(jī)、直流電機(jī)正反轉(zhuǎn)、加減速以及設(shè)置直流電機(jī)的轉(zhuǎn)速值,這些功能可以通過(guò)4*4按鍵來(lái)
45、實(shí)現(xiàn),如圖3-4所示:</p><p> 圖3-4 4*4按鍵電路</p><p> 3.1.5 1602液晶顯示電路</p><p> 1602液晶顯示電路顯示的是直流電機(jī)的開(kāi)停機(jī)、直流電機(jī)正反轉(zhuǎn)、加減速以及設(shè)置直流電機(jī)的轉(zhuǎn)速值,這些功能可以通過(guò)1602液晶顯示電路來(lái)實(shí)現(xiàn),如圖3-5所示:</p><p> 圖3-5 1602液晶
46、顯示電路</p><p><b> 4 軟件設(shè)計(jì)</b></p><p> 本系統(tǒng)的軟件部分主要分為液晶顯示程序、按鍵掃描程序、直流電機(jī)PWM驅(qū)動(dòng)程序、速度檢測(cè)程序等;整個(gè)軟件流程如圖4-1所示:</p><p> 圖4-1 軟件設(shè)計(jì)流程</p><p><b> 總結(jié)</b></
47、p><p><b> 謝 辭</b></p><p><b> 參考文獻(xiàn)</b></p><p> [1] 崔更申,孫安青編著.ARM 嵌入式系統(tǒng)開(kāi)發(fā)與實(shí)踐.中國(guó)電力出版社,2008</p><p> [2] 周潤(rùn)景,張麗娜,劉印群.Proteus 入門實(shí)用教程[M].機(jī)械工業(yè)出版社,20
48、07</p><p> [3] 三恒星科技.ARM7易學(xué)通.北京:人民郵電出版社,2006</p><p> [4] 馬忠梅,徐英慧.ARM□嵌入式處理器結(jié)構(gòu)與應(yīng)用基礎(chǔ).北京:北京航空航天大學(xué)出版社,2007.3</p><p> [5] 范書(shū)瑞,趙燕飛,高鐵成.ARM處理器與C語(yǔ)言開(kāi)發(fā)應(yīng)用.北京:北京航空航天大學(xué)出版社,2008</p>
49、<p> [6] 侯冬晴,李建鋒,朱長(zhǎng)城.ARM技術(shù)原理與應(yīng)用.北京:清華大學(xué)出版社,2009</p><p> [7] 張綺文,解書(shū)鋼.ARM嵌入式常用模塊與綜合系統(tǒng)設(shè)計(jì)實(shí)例精講.北京:電子工業(yè)出版社,2007</p><p> [8] 周立功.ARM嵌入式系統(tǒng)實(shí)驗(yàn)教程.北京:北京航空航天大學(xué)出版社,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> /**************************************************************************/功能:延時(shí)</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> * 功能:寫(xiě)函數(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> * 功能:寫(xiě)數(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點(diǎn)陣,8位數(shù)據(jù) </p><p> WrOp(0x06);//光標(biāo)加1</p><p> WrOp(0x0c);//開(kāi)顯示,關(guān)光標(biāo)</p><p> IO0DIR |=0x000007ff;//設(shè)置為輸出</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> * 功能:閃動(dòng)的提示符,必須放入執(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> 功能:浮點(diǎn)數(shù)值轉(zhuǎn)換為字符串函數(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;//轉(zhuǎn)向設(shè)置</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)置直接微調(diào)整轉(zhuǎn)數(shù)</p><p> else keysum=(int32)(keysum+1);break;//在設(shè)置狀態(tài)調(diào)整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)直接微調(diào)整轉(zhuǎn)數(shù)</p><p> else keysum=(int32)(keysum-1);break;//在設(shè)置狀態(tài)調(diào)整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;// 強(qiáng)制將
90、電機(jī)重啟為初始值</p><p> case 13:keyhit=0;break;</p><p> case 14:keyhit=14;flag=1;keysum=(int32)0;downindex=0;WrOp(0x01);break;// 進(jìn)入設(shè)置模式</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;// 最大轉(zhuǎn)數(shù)限制</p><p><b> }</b></p><p> void __irq catch_pulses(void)</p><p><b> {</b></p><p> rtcounts++;
93、</p><p> T0IR=0x20; //清除中斷標(biāo)志,復(fù)位CR1中斷</p><p> VICVectAddr=0x00; //通知VIC中斷處理結(jié)束</p><p><b> }</b></p><p> void __irq
94、PI_porcess(void)// 每 CKTIME ms計(jì)算一次占空比 </p><p><b> {</b></p><p> deltacounts=(rtcounts*1000)/CKTIME;//對(duì)脈沖速率采樣</p><p> setcounts=varset*5;//把設(shè)定的轉(zhuǎn)速轉(zhuǎn)換為脈沖速率</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;//把采樣的脈沖速率轉(zhuǎn)換為轉(zhuǎn)速</p><p> pwmdata=(int32)(P_v
98、al/10);</p><p> rtcounts=0;</p><p> T1IR=0x01; //清除中斷標(biāo)志,復(fù)位MR0中斷</p><p> VICVectAddr=0x00; //通知VIC中斷處理結(jié)束</p><p><b> }<
99、;/b></p><p> void capinit(void)</p><p><b> {</b></p><p> T0PR=5; //2個(gè)主頻后TC加1</p><p> T0CCR=(1<<3)|(1<<5);
100、 //設(shè)置CAP0.1上升沿捕獲,捕獲后將TC的值放入T0CR1,并產(chǎn)生中斷</p><p><b> T0TC=0;</b></p><p> T0TCR=0x01; //啟動(dòng)定時(shí)器</p><p><b> }</b></p><p>
101、 void time1init(void)</p><p><b> {</b></p><p> T1PR=99; //設(shè)置定時(shí)器分頻為25分頻,得147450Hz</p><p> T1MCR=0x03; //匹配通道0匹配中斷并復(fù)位T1TC</p><p
102、> T1MR0=702; //比較值,分母為Fosc,分子/2為0.5秒以此類推,此處為0.01秒,27648/10</p><p> T1TCR=0x03; //啟動(dòng)并復(fù)位T1TC </p><p> T1TCR=0x01;</p><p><b> }</b></p>&
103、lt;p> void pwminit(void)</p><p><b> {</b></p><p> PWMPR=0x00; //不分頻,計(jì)數(shù)頻率為Fpclk</p><p> PWMMCR=0x02; //設(shè)置PWMMR0匹配時(shí)復(fù)位PWMTC&
104、lt;/p><p> PWMMR0=MAX_PWM; //設(shè)置PWM周期</p><p> PWMMR5=1; //設(shè)置PWM占空比</p><p> PWMLER=0x21; //PWMMR0,PWMMR5鎖存</p><p> P
105、WMPCR=1<<13; //允許PWM5輸出,單邊PWM</p><p> PWMTCR=0x09; //啟動(dòng)定時(shí)器,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;//對(duì)GPIO的方向設(shè)置,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); //設(shè)置初始方向電位 </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;//捕獲按鍵按下的響應(yīng)</p><p> els
112、e keydown=0;</p><p> Key_Process(key);//鍵值對(duì)應(yīng)的操作,修改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;//轉(zhuǎn)向檢測(cè)</p><p> else dircrt=1;</p><p> if(dirhit)IO
114、0SET =(1<<25);//轉(zhuǎn)向開(kāi)關(guān)</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)視的轉(zhuǎn)向顯示</p><p> else DisText(0x88,(dir+2));</p><p> if(dirhit)DisText(0xc8,dir);//設(shè)置的轉(zhuǎn)向顯示</p><p>
116、else DisText(0xc8,(dir+2));</p><p> Int2Str(strcrt,varcrt);//監(jiān)視的轉(zhuǎn)速顯示</p><p> Int2Str(strset,varset);//設(shè)置的轉(zhuǎn)速顯示</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);//設(shè)置的的轉(zhuǎn)向顯示</p><p> else DisText(0xc4,(dir+2));</p><p> delay(100);</p><p><b> }</b></p><p><b> } </b></p><p>
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于arm7的直流電機(jī)控制器
- 基于ARM的直流電機(jī)伺服控制器的研制.pdf
- 基于ARM的直流電機(jī)可逆調(diào)速控制器的研制.pdf
- 基于ARM的數(shù)字式直流電機(jī)控制器的研究.pdf
- 基于arm的直流電機(jī)測(cè)速
- 基于模糊控制的直流電機(jī)控制器設(shè)計(jì).pdf
- 直流電機(jī)轉(zhuǎn)速控制器設(shè)計(jì)開(kāi)題報(bào)告
- 基于arm的直流電機(jī)轉(zhuǎn)速控制系統(tǒng)
- 基于dsp直流電機(jī)控制
- ARM在直流電機(jī)調(diào)速控制器中的應(yīng)用研究.pdf
- 基于arm9直流電機(jī)調(diào)速
- 基于ARM Cortex-M3的無(wú)刷直流電機(jī)控制器設(shè)計(jì).pdf
- 直流電機(jī)無(wú)線遙控控制器設(shè)計(jì)【文獻(xiàn)綜述】
- 直流電機(jī)控制器設(shè)計(jì)說(shuō)明書(shū)
- 無(wú)刷直流電機(jī)控制器設(shè)計(jì) 【開(kāi)題報(bào)告】
- 無(wú)刷直流電機(jī)控制器設(shè)計(jì)【文獻(xiàn)綜述】
- 無(wú)刷直流電機(jī)控制器設(shè)計(jì)【開(kāi)題報(bào)告】
- 基于arm9直流電機(jī)調(diào)速
- 基于DSP無(wú)刷直流電機(jī)控制器的設(shè)計(jì).pdf
- 基于NiosⅡ的無(wú)刷直流電機(jī)控制器設(shè)計(jì).pdf
評(píng)論
0/150
提交評(píng)論