1.用LPC2000系列ARM芯片設(shè)計(jì)電子琴,用proteus軟件仿真。
2.按下不同的按鍵,揚(yáng)聲器能夠發(fā)出不同的音調(diào)。
3.用PWM控制揚(yáng)聲器可以實(shí)現(xiàn)音調(diào)的條件。
通過(guò)編程,利用按鍵去控制揚(yáng)聲器的發(fā)聲。 通過(guò)小組討論分析,結(jié)合設(shè)計(jì)電路性能指標(biāo)、器件的性?xún)r(jià)比,本設(shè)計(jì)電路選擇方案二。 嵌入式的定義: 從技術(shù)的角度定義:以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。 從系統(tǒng)的角度定義:嵌入式系統(tǒng)是設(shè)計(jì)完成復(fù)雜功能的硬件和軟件,并使其緊密耦合在一起的計(jì)算機(jī)系統(tǒng)。術(shù)語(yǔ)嵌入式反映了這些系統(tǒng)通常是更大系統(tǒng)中的一個(gè)完整的部分,稱(chēng)為嵌入的系統(tǒng)。嵌入的系統(tǒng)中可以共存多個(gè)嵌入式系統(tǒng)。 3.1 213X系列最小系統(tǒng)板介紹: LPC2131/2132/2138 是基于一個(gè)支持實(shí)時(shí)仿真和嵌入式跟蹤的32/16ARM7TDMI-STM CPU 的微控制器,并帶有32kB、64kB、512 kB 的嵌入的高速Flash 存儲(chǔ)器。128 位寬度的存儲(chǔ)器接口和獨(dú)特的加速結(jié)構(gòu)使32 位代碼能夠在最大時(shí)鐘速率下運(yùn)行。對(duì)代碼規(guī)模有嚴(yán)格控制的應(yīng)用可使用16 位Thumb模式將代碼規(guī)模降低超過(guò)30%,而性能的損失卻很小。 較小的封裝和極低的功耗使 LPC2131/2132/2138 可理想地用于小型系統(tǒng)中,如訪(fǎng)問(wèn)控制和POS 機(jī)。寬范圍的串行通信接口和片內(nèi)8/16/32kB的SRAM使LPC2131/2132/2138 非常適用于通信網(wǎng)關(guān)、協(xié)議轉(zhuǎn)換器、軟modem、聲音辨別和低端成像,為它們提供巨大的緩沖區(qū)空間和強(qiáng)大的處理功能。多個(gè)32位定時(shí)器、1個(gè)或2 個(gè)10 位8 路ADC、10 位DAC、PWM 通道和47個(gè)GPIO 以及多達(dá)9個(gè)邊沿或電平觸發(fā)的外部中斷使它們特別適用于工業(yè)控制和醫(yī)療系統(tǒng)。 主要特性如下: (1)16/32位ARM7TDMI-S核,超小LQFP64封裝。 ?? (2)8/16/32kB的片內(nèi)靜態(tài)RAM和32/64/128/256/512kB的片內(nèi)Flash程序存儲(chǔ)器。128位寬度接口/加速器可實(shí)現(xiàn)高達(dá)60MHz工作頻率。 ?? (3)通過(guò)片內(nèi)boot裝載程序?qū)崿F(xiàn)在系統(tǒng)編程/在應(yīng)用編程(ISP/IAP)。單個(gè)Flash扇區(qū)或整片擦除時(shí)間 為400ms。256字節(jié)行編程時(shí)間為1ms。 ?? (4)EmbeddedICE RT和嵌入式跟蹤接口通過(guò)片內(nèi)RealMonitor軟件對(duì)代碼進(jìn)行實(shí)時(shí)調(diào)試和高速跟蹤。 ?? (5)1個(gè)(LPC2131/32)或2個(gè)(LPC2134/36/38)8路10位的A/D轉(zhuǎn)換器,共提供16路模擬輸入,每個(gè)通道的轉(zhuǎn)換時(shí)間低至2.44us。 ?? (6)1個(gè)10位的D/A轉(zhuǎn)換器,可產(chǎn)生不同的模擬輸出。(LPC2132/34/36/38) ?? (7)2個(gè)32位定時(shí)器/外部事件計(jì)數(shù)器(帶4路捕獲和4路比較通道)、PWM單元(6路輸出)和看門(mén)狗。 ?? (8)低功耗實(shí)時(shí)時(shí)鐘具有獨(dú)立的電源和特定的32kHz時(shí)鐘輸入。 ?? (9)多個(gè)串行接口,包括2個(gè)16C550工業(yè)標(biāo)準(zhǔn)UART、2個(gè)高速I(mǎi)2C總線(xiàn)(400 kbit/s)、SPI和具有緩沖作用和數(shù)據(jù)長(zhǎng)度可變功能的SSP。 ?? (10)向量中斷控制器?膳渲脙(yōu)先級(jí)和向量地址。 ?? (11)小型的LQFP64封裝上包含多達(dá)47個(gè)通用I/O口(可承受5V電壓)。 ?? (12)多達(dá)9個(gè)邊沿或電平觸發(fā)的外部中斷管腳。 ?? (13)通過(guò)片內(nèi)PLL(100us的設(shè)置時(shí)間)可實(shí)現(xiàn)最大為60MHz的CPU操作頻率。 ?? (14)片內(nèi)集成振蕩器與外部晶體的操作頻率范圍為1~30 MHz,與外部振蕩器的操作頻率范圍高達(dá) 50MHz。 ?? (15)低功耗模式:空閑和掉電。 ?? (16)可通過(guò)個(gè)別使能/禁止外部功能和外圍時(shí)鐘分頻來(lái)優(yōu)化功耗。 ?? (17)通過(guò)外部中斷或BOD將處理器從掉電模式中喚醒。 ?? (18)單電源,具有上電復(fù)位(POR)和掉電檢測(cè)(BOD)電路。 ?? (19)CPU操作電壓范圍:3.0V~3.6 V (3.3 V± 10﹪),I/O口可承受5V的電壓。 3.2最小系統(tǒng)板結(jié)構(gòu) LPC2131/2132/2138 包含一個(gè)支持仿真的ARM7TDMI-S CPU、與片內(nèi)存儲(chǔ)器控制器接口的ARM7 局部總線(xiàn)、與中斷控制器接口的AMBA 高性能總線(xiàn)(AHB)和連接片內(nèi)外設(shè)功能的VLSI 外設(shè)總線(xiàn)(VPB,ARMAMBA 總線(xiàn)的兼容超集)。LPC2131/2132/2138 將ARM7TDMI-S 配置為小端(little-endian)字節(jié)順序。AHB 外設(shè)分配了2M 字節(jié)的地址范圍,它位于4G 字節(jié)ARM 存儲(chǔ)器空間的最頂端。每個(gè)AHB 外設(shè)都分配了16k 字節(jié)的地址空間。LPC2131/2132/2138 的外設(shè)功能(中斷控制器除外)都連接到VPB 總線(xiàn)。AHB到VPB 的橋?qū)PB 總線(xiàn)與AHB 總線(xiàn)相連。VPB 外設(shè)也分配了2M 字節(jié)的地址范圍,從3.5GB 地址點(diǎn)開(kāi)始。每個(gè)VPB 外設(shè)在VPB 地址空間內(nèi)都分配了16k 字節(jié)地址空間。 片內(nèi)外設(shè)與器件管腳的連接由管腳連接模塊控制。該模塊必須由軟件進(jìn)行控制以符合外設(shè)功能與管腳在特定應(yīng)用中的需求。 3.3 片內(nèi)FLASH程序儲(chǔ)存器LPC2131/2132/2138 分別含有32kB、64kB 和512kB 的FLASH 存儲(chǔ)器系統(tǒng)。該存儲(chǔ)器可用作代碼和數(shù)據(jù)的存儲(chǔ)。對(duì)FLASH 存儲(chǔ)器的編程可通過(guò)幾種方法來(lái)實(shí)現(xiàn):通過(guò)內(nèi)置的串行JTAG 接口,通過(guò)在系統(tǒng)編程(ISP)和UART0,或通過(guò)在應(yīng)用編程(IAP)。使用在應(yīng)用編程的應(yīng)用程序也可以在應(yīng)用程序運(yùn)行時(shí)對(duì)FLAH 進(jìn)行擦除和/或編程,這樣就為數(shù)據(jù)存儲(chǔ)和現(xiàn)場(chǎng)固件的升級(jí)都帶來(lái)了極大的靈活性。如果LPC2131/2132/2138 使用了片內(nèi)引導(dǎo)裝載程序(bootloader),32/64/512kB 的Flash 存儲(chǔ)器就可用來(lái)存放用戶(hù)代碼。 LPC2131/2132/2138 的Flash 存儲(chǔ)器至少可擦除/編程10,000 次,保存數(shù)據(jù)的時(shí)間長(zhǎng)達(dá)10 年。 3.4 片內(nèi)靜態(tài)RAM片內(nèi)靜態(tài)RAM(SRAM)可用作代碼和/或數(shù)據(jù)的存儲(chǔ),支持8 位、16 位和32 位的訪(fǎng)問(wèn)。LPC2131/2132/2138 含有8/16/32kB 的靜態(tài)RAM。 LPC2131/2132/2138 SRAM 是一個(gè)字節(jié)尋址的存儲(chǔ)器。對(duì)存儲(chǔ)器進(jìn)行字和半字訪(fǎng)問(wèn)時(shí)將忽略地址對(duì)準(zhǔn),訪(fǎng)問(wèn)被尋址的自然對(duì)準(zhǔn)值(因此,對(duì)存儲(chǔ)器進(jìn)行字訪(fǎng)問(wèn)時(shí)將忽略地址位0 和1,半字訪(fǎng)問(wèn)時(shí)將忽略地址位0)。 因此,有效的讀寫(xiě)操作要求半字?jǐn)?shù)據(jù)訪(fǎng)問(wèn)的地址線(xiàn)0 為0(地址以0、2、4、6、8、A、C 和E 結(jié)尾),字?jǐn)?shù)據(jù)訪(fǎng)問(wèn)的地址線(xiàn)0 和1 都為0(地址以0、4、8 和C 結(jié)尾)。該原則同樣用于片外和片內(nèi)存儲(chǔ)器。 SRAM 控制器包含一個(gè)回寫(xiě)緩沖區(qū),它用于防止CPU 在連續(xù)的寫(xiě)操作時(shí)停止運(yùn)行。回寫(xiě)緩沖區(qū)總是保存著軟件發(fā)送到SRAM 的最后一個(gè)字節(jié)。該數(shù)據(jù)只有在軟件請(qǐng)求下一次寫(xiě)操作時(shí)才寫(xiě)入SRAM(數(shù)據(jù)只有在軟件執(zhí)行另外一次寫(xiě)操作時(shí)被寫(xiě)入SRAM)。如果發(fā)生芯片復(fù)位,實(shí)際的SRAM 內(nèi)容將不會(huì)反映最近一次的寫(xiě)請(qǐng)求(即:在一次“熱”芯片復(fù)位后,SRAM 不會(huì)反映最后一次寫(xiě)入的內(nèi)容)。任何在復(fù)位后檢查SRAM 內(nèi)容的程序都必須注意這一點(diǎn)。通過(guò)對(duì)一個(gè)單元執(zhí)行兩次相同的寫(xiě)操作可保證復(fù)位后數(shù)據(jù)的寫(xiě)入。或者,也可通過(guò)在進(jìn)入空閑或掉電模式前執(zhí)行虛寫(xiě)(dummy write)操作來(lái)保證最后的數(shù)據(jù)在復(fù)位后被真正寫(xiě)入到SRAM。 3.5 存儲(chǔ)器映射概念和操作方式LPC2131/2132/2138 的基本的概念是:每個(gè)存儲(chǔ)器組在存儲(chǔ)器映射中都有一個(gè)“物理上的”位置。它是一個(gè)地址范圍,該范圍內(nèi)可寫(xiě)入程序代碼。每一個(gè)存儲(chǔ)器空間的容量都永久固定在同一個(gè)位置,這樣就不需要將代碼設(shè)計(jì)成在不同地址范圍內(nèi)運(yùn)行。 由于ARM7 處理器上的中斷向量位置(地址0x0000 0000~0x0000 001C,見(jiàn)表2),Boot Block 和SRAM空間的一小部分需要重新映射來(lái)實(shí)現(xiàn)在不同操作模式下對(duì)中斷的使用,見(jiàn)表1。中斷的重新映射通過(guò)存儲(chǔ)器映射控制特性來(lái)實(shí)現(xiàn),詳見(jiàn)系統(tǒng)控制模塊一節(jié)。 表1:LPC2131/2132/2138 存儲(chǔ)器映射模式 | | | | | 在任何復(fù)位后都會(huì)執(zhí)行 Boot 裝載程序。Boot Block 中斷向量映射到存儲(chǔ)器的底部以允許處理異常并在Boot 裝載過(guò)程中使用中斷。 | | | 當(dāng)在存儲(chǔ)器中識(shí)別了一個(gè)有效的用戶(hù)程序標(biāo)識(shí)并且Boot 裝載操作未被執(zhí)行時(shí),由Boot 裝載程序啟動(dòng)。中斷向量沒(méi)有重新映射,它位于Flash 存儲(chǔ)器的底部。 | | | 由用戶(hù)程序激活。中斷向量重新映射到靜態(tài) RAM 的底部。 | 3.6 系統(tǒng)控制模塊系統(tǒng)控制模塊功能匯總: 系統(tǒng)控制模塊包括幾個(gè)系統(tǒng)特性和控制寄存器,這些寄存器具有眾多與特定外設(shè)器件無(wú)關(guān)的功能。 1、晶體振蕩器 2、外部中斷輸入 3、存儲(chǔ)器映射控制 4、PLL 5、功率控制 6、復(fù)位 7、VPB 分頻器 8、喚醒定時(shí)器 每種類(lèi)型的功能都有其自身的寄存器,不需要的位則定義為保留位。為了滿(mǎn)足將來(lái)擴(kuò)展的需要,無(wú)關(guān)/的功能不共用相同的寄存器地址。 表2:系統(tǒng)控制模塊功能相關(guān)的管腳 | | | | | 晶振輸入--振蕩器和內(nèi)部時(shí)鐘發(fā)生器電路的輸入 | | | | | | 外部中斷輸入0--低有效的通用中斷輸入。該管腳可用于將處理器從空閑或掉電模式中喚醒。 P0.1和P0.16可用作EINT0 功能。 | | | 外部中斷輸入1--見(jiàn)上面的EINT0 描述。 P0.3 和P0.14可用作EINT1 功能。 復(fù)位后管腳 P0.14上立即出現(xiàn)的低電平被看作是一個(gè)啟動(dòng)ISP 命令處理器的外部硬件請(qǐng)求 | | | 外部中斷輸入2--見(jiàn)上面的EINT0 描述。 P0.7 和P0.15 可用作EINT2 功能。 | | | 外部中斷輸入3--見(jiàn)上面的EINT0 描述。 P0.9,P0.20和P0.30可用作EINT3 功能。 | | | 外部復(fù)位輸入--該管腳上的低電平將芯片復(fù)位,使I/O 口和外設(shè)恢復(fù)其默認(rèn)狀態(tài),并使處理器從地址0 開(kāi)始執(zhí)行程序。 |
圖3.1 LPC2138管腳排列圖 3.7 行列式鍵盤(pán)工作原理 ARM嵌入式系統(tǒng)使用常用的行列式鍵盤(pán)電路,此電路的優(yōu)點(diǎn)是比較節(jié)省I/0口線(xiàn),并且接口簡(jiǎn)單。它的工作模式如下圖所示。它的行線(xiàn)與按鍵的一個(gè)引腳相連,列線(xiàn)與按鍵的另一個(gè)引腳相連。平時(shí)列線(xiàn)被置成低電平,沒(méi)有按鍵被按下時(shí),行線(xiàn)保持高電平,而有按鍵被按下時(shí),行線(xiàn)被拉成低電平。如圖3.2。
圖3.2 鍵盤(pán)掃描模式 3.8 鍵盤(pán)識(shí)別原理 對(duì)于常規(guī)的按鍵識(shí)別過(guò)程一般分為以下幾步: (1)用IF語(yǔ)句判斷按鍵是否按下。 (2)調(diào)用延時(shí)函數(shù)延時(shí)去除按鍵抖動(dòng)。 (3)再用IF語(yǔ)句判斷是否真的按下。 (4)是真的按下,則執(zhí)行按鍵處理程序。 (5)用WHILE語(yǔ)句等待按鍵釋放。 為了考慮提高CPU的效率和充分利用CPU的資源等因素,可將第2步和第5步的延時(shí)和等待過(guò)程用其他方式代替。 3.9鍵盤(pán)電路介紹 為了實(shí)現(xiàn)電子琴的輸入,需要擴(kuò)展鍵盤(pán)以作為控制輸入。系統(tǒng)采用LPC2138的P0.8--P0.13端口引腳作為2X4矩陣鍵盤(pán)的擴(kuò)展接口,電路原理圖如圖3.3所示。  圖 3.3 鍵盤(pán)電路
在擴(kuò)展鍵盤(pán)時(shí)需要解決兩個(gè)問(wèn)題,一是鍵盤(pán)的抖動(dòng),二是多鍵同時(shí)按下。鍵盤(pán)的去抖動(dòng)可通過(guò)軟件的適當(dāng)延時(shí)實(shí)現(xiàn),即在讀入端口P0.8~P0.11后,適當(dāng)延時(shí)一段時(shí)間,再讀入端口P0.12~P0.13,兩次比較后確定按鍵是否真按得下。多鍵同時(shí)按下也可通過(guò)軟件設(shè)計(jì)屏蔽多按下的鍵,對(duì)于同一列的鍵同時(shí)按下,可以只取鍵值最小的鍵,屏蔽值大的鍵,或反之。對(duì)于不同列的鍵,可以將P0.12~P0.13設(shè)置優(yōu)先級(jí),如P0.12最高,P0.13最低,或反之。這樣,只取優(yōu)先級(jí)高的鍵,屏蔽優(yōu)先級(jí)低的鍵。 在ARM中,必須將管腳置為GPIO口后才能將管腳作為I/O口的功能來(lái)使用,由于在I/O的初始化中已經(jīng)將用到的管腳設(shè)置為GPIO口,固可以將管腳作為I/O口的功能來(lái)使用。具體方法如下: 先將P0.8-P0.11這4列端口設(shè)置為輸入管腳并且置為低電平,然后將P0.12-P0.13這2行端口設(shè)置為輸出管腳并且置為高電平,通過(guò)判斷是否有按鍵按下,如果有按鍵按下則可以首先確定2行端口的代碼,接著再將4列端口設(shè)置為輸出管腳并且置為高電平,將2行端口設(shè)置為輸入管腳并且置為低電平,以此來(lái)決定4列端口的代碼,然后再講4列端口代碼和2行端口代碼按照2行為高4位,4列為低4位的順序排成一個(gè)8位代碼。 3.10 蜂鳴器驅(qū)動(dòng)電路分析 蜂鳴器驅(qū)動(dòng)電路分析如下: 蜂鳴器:發(fā)聲元件,在其兩端施加直流電壓(有源蜂鳴器)或者方波(無(wú)源蜂鳴器)就可以發(fā)聲,其主要參數(shù)是外形尺寸、發(fā)聲方向、工作電壓、工作頻率、工作電流、驅(qū)動(dòng)方式(直流/方波)等。這些都可以根據(jù)需要來(lái)選擇。 續(xù)流二極管:蜂鳴器本質(zhì)上是一個(gè)感性元件,其電流不能瞬變,因此必須有一個(gè)續(xù)流二極管提供續(xù)流。否則,在蜂鳴器兩端會(huì)產(chǎn)生幾十伏的尖峰電壓,可能損壞驅(qū)動(dòng)三極管,并干擾整個(gè)電路系統(tǒng)的其它部分。 三極管驅(qū)動(dòng)蜂鳴器電路:三極管Q1起開(kāi)關(guān)作用,其基極的高電平使三極管飽和導(dǎo)通,使蜂鳴器發(fā)聲;而基極低電平則使三極管關(guān)閉,蜂鳴器停止發(fā)聲。如圖3.4。
圖3.4實(shí)際選用驅(qū)動(dòng)放大電路
3.11 整體電路圖 如圖3.5所示。 圖3.5 硬件設(shè)計(jì)電路整體圖 1.程序流程圖如圖4.1所示。 圖4.1程序流程圖 2.軟件設(shè)計(jì)程序代碼如下: 將編譯好的十六制文件下載到proteus中的ARM芯片中。 第一次用軟件調(diào)試時(shí),沒(méi)有任何現(xiàn)象,檢查了好久終于發(fā)現(xiàn)了原來(lái)是有一個(gè)電源沒(méi)有設(shè)置數(shù)值,也沒(méi)有標(biāo)明電源的極性,將其改為+3.3V時(shí)現(xiàn)象就出現(xiàn)了。 依次按下KEY1-KEY,依次發(fā)出不同音調(diào)的聲音,按下復(fù)位鍵系統(tǒng)回歸到初始狀態(tài)。 圖5.1 為硬件設(shè)計(jì)電路整體圖。
圖5.1 硬件設(shè)計(jì)電路整體圖 此次嵌入式設(shè)計(jì)的主要內(nèi)容:基于LPC2000系列的高級(jí)電子琴設(shè)計(jì)。它的主要功能是:實(shí)現(xiàn)不同頻率的音調(diào)輸出。因此要涉及到蜂鳴器的驅(qū)動(dòng)電路,按鍵的掃描程序,最小系統(tǒng)電路的設(shè)計(jì)。 剛開(kāi)始時(shí)拿到這個(gè)設(shè)計(jì)的題目是還有點(diǎn)不知所措,但通過(guò)上網(wǎng)查閱LPC213X系列最小系統(tǒng)板的相關(guān)資料,學(xué)會(huì)了用proteus進(jìn)行ARM仿真,查找了一些以應(yīng)用嵌入式ARM的仿真實(shí)例,分析各個(gè)實(shí)例的工作原理,將各個(gè)實(shí)例的有用模塊綜合運(yùn)用得到本實(shí)訓(xùn)基于嵌入式ARM的高級(jí)電子琴設(shè)計(jì)的原理圖,該圖主要包括三個(gè)模塊:2*4鍵盤(pán)、PWM脈沖輸出、功率放大電路。控制LPC213X系列最小系統(tǒng)板的P0.9口輸出PWM脈沖發(fā)出不同頻率使蜂鳴器發(fā)出不同的聲音,P0.9口外接功放電路連接蜂鳴器發(fā)聲。按鍵輸入功能有8個(gè)輸入故最終確定采用2*4的矩陣鍵盤(pán)作為電子密碼鎖的鍵盤(pán)控制。經(jīng)過(guò)網(wǎng)上收集資料與同學(xué)之間的討論,終于明白了鍵盤(pán)掃描的工作原理,和51單片機(jī)一樣都是利用動(dòng)態(tài)掃描原理最終實(shí)現(xiàn)了鍵盤(pán)輸入的功能。依靠程序完成大部分的功能,所以程序的調(diào)試是重中之重,當(dāng)然前提是能夠編寫(xiě)并會(huì)修改程序。 此次設(shè)計(jì)總的來(lái)說(shuō)進(jìn)行的還順利,這是小組成員團(tuán)結(jié)付出的結(jié)果,當(dāng)然,在此期間指導(dǎo)老師也為我們提供了巨大的幫助,在此表示深深的感謝!在此期間也學(xué)到了許多,特別是對(duì)軟件的應(yīng)用,如proteus,ADS1.2,AXD,加強(qiáng)了理論與實(shí)踐的聯(lián)系。
完整的Word格式文檔51黑下載地址:
|