沈陽(yáng)航空航天大學(xué)電子信息工程學(xué)院 張維通 王潤(rùn)潔 康迂勇 石劍民
數(shù)字示波器是數(shù)據(jù)采集、顯示與微處理器相結(jié)合的產(chǎn)物。因其串行處理體系結(jié)構(gòu)而具備優(yōu)異的捕獲和顯示能力,已經(jīng)基本取代傳統(tǒng)模擬示波器成為通用測(cè)試領(lǐng)域使用最為廣泛的儀器。數(shù)字示波器對(duì)信號(hào)的采集、處理和顯示有較高要求,故目前通用的數(shù)字示波器多采用DSP、內(nèi)嵌微處理器型FPGA或DSP+FPGA結(jié)構(gòu)。雖然這樣做可以得到性能優(yōu)異的數(shù)字示波器,但缺點(diǎn)是價(jià)格相對(duì)較高。為了更加經(jīng)濟(jì)地滿足測(cè)量信號(hào)帶寬不高,儀器數(shù)量需求較大的場(chǎng)合,這里給出了一種極低成本的解決方案。本方案采用恩智浦的K60嵌入式芯片為核心處理器來(lái)完成低成本示波器的設(shè)計(jì)。K60具有兩個(gè)高速ADC模塊和一個(gè)可編程精準(zhǔn)延時(shí)模塊,結(jié)合PIT可以精準(zhǔn)控制觸發(fā)雙通道并行采集,使得整體采樣率翻倍,滿足本設(shè)計(jì)要求。K60芯片基于ARM Cortex-M4內(nèi)核,其專門的DSP指令集配合其硬件浮點(diǎn)運(yùn)算單元可以滿足本設(shè)計(jì)的數(shù)字處理要求。EMWIN作為一款優(yōu)異的嵌入式GUI可以方便地加入到K60中運(yùn)行,足以勝任數(shù)字示波器的復(fù)雜顯示工作。K60具有CAN總線和ENET等系統(tǒng)通信和網(wǎng)絡(luò)支持模塊,可以為以后數(shù)字示波器的聯(lián)網(wǎng)操作和功能升級(jí)維護(hù)提供硬件支持?;贙60優(yōu)異的性能,本設(shè)計(jì)極大地簡(jiǎn)化了硬件電路,容易制作,成品體積較小,人機(jī)交互體驗(yàn)良好。既滿足了本設(shè)計(jì)要求,提高了系統(tǒng)的整體性能和可靠性,又大大降低了成本,拓展了數(shù)字示波器的功能。
本次硬件設(shè)計(jì)部分主要有前置信號(hào)放大器、無(wú)源濾波電路、K60芯片外圍電路、外置SRAM電路、按鍵、LCD顯示電路??傮w方框圖如圖1所示,旨在保障K60芯片能夠穩(wěn)定高效地進(jìn)行數(shù)據(jù)采集、儲(chǔ)存、處理和顯示,充分發(fā)揮其性能。
圖1 系統(tǒng)總體框圖
前置信號(hào)放大器的作用是對(duì)要采樣的信號(hào)進(jìn)行放大調(diào)理,使輸出信號(hào)電壓在AD轉(zhuǎn)換器輸入電壓要求范圍內(nèi)。濾波電路保證有效的信號(hào)頻率能通過而無(wú)效的信號(hào)頻率得到抑制。無(wú)源濾波器結(jié)構(gòu)簡(jiǎn)單、成本低廉、運(yùn)行可靠性較高,將其配合運(yùn)算放大器和K60本身的ADC可編程增益放大器可以得到較好的采樣信號(hào)。
由于K60本身的運(yùn)行內(nèi)存有限,而圖形庫(kù)的加載將占用很大一部分的內(nèi)存,這就造成了不能存儲(chǔ)足夠的采樣數(shù)據(jù)。為了解決這個(gè)問題,特在芯片外圍安置一塊SDRAM。設(shè)計(jì)采用一塊內(nèi)存為262Kbyte的高速靜態(tài)RAM IS61LV12816作為圖形庫(kù)的運(yùn)行內(nèi)存,把K60本身128Kbyte的運(yùn)行內(nèi)存作為采樣數(shù)據(jù)和其它系統(tǒng)變量的內(nèi)存。
系統(tǒng)硬件工作時(shí),采樣信號(hào)經(jīng)過放大濾波后被K60的ADC模塊采集,然后經(jīng)過運(yùn)算處理,借助外部SDRAM將結(jié)果通過LCD顯示出來(lái)。在進(jìn)行人機(jī)互動(dòng)時(shí),使用者通過按鍵作用于K60,處理結(jié)果同樣借助外部SDRAM在LCD顯示出來(lái)。
在進(jìn)行嵌入式系統(tǒng)軟件設(shè)計(jì)中充分利用相應(yīng)芯片已經(jīng)開發(fā)成熟的固件庫(kù)無(wú)疑將極大地減少編程工作量、便于維護(hù),得到較高的系統(tǒng)穩(wěn)定性。
本次軟件部分就是利用拉普蘭德OSKinetis K60固件庫(kù)V3豐富的底層模塊配置函數(shù)進(jìn)行編寫的。此固件庫(kù)基于飛思卡爾的K60固件庫(kù),包括大部分常用的固件,并配有豐富的示范例程和相關(guān)注釋,足以滿足數(shù)字示波器軟件系統(tǒng)的設(shè)計(jì)要求。主要用到庫(kù)文件如下:HW_MCG、LPLD_SDRAM、HW_PDB、HW_ADC、HW_DMA、HW_PIT、HW_GPIO、HW_NVIC、arm_math(DSP庫(kù))。
HW_MCG:K60各個(gè)時(shí)鐘的配置模塊。此處配置系統(tǒng)時(shí)鐘SystemCoreClock為96Mhz,總線時(shí)鐘bus_clock為48Mhz。
LPLD_SDRAM:利用里面的LPLD_SDRAM_Init()函數(shù)將外置的容量為262K bit的SDRAM(IS61LV12816)初始化,方便將其進(jìn)一步配置成EMWIN的運(yùn)行內(nèi)存。
HW_PDB:可編程延時(shí)模塊,此處用于ADC硬件觸發(fā)配置。在PIT2中斷中設(shè)置該模塊先觸發(fā)ADC0采集,配置PDB底層函數(shù)使精確延時(shí)1us后觸發(fā)ADC1采集,整體上相當(dāng)于每1us便完成一次采樣,實(shí)現(xiàn)了雙通道快速并行采樣。PIT2中斷周期為2us,低于此處ADC轉(zhuǎn)換時(shí)間,故每個(gè)ADC單次有2us來(lái)轉(zhuǎn)換,時(shí)間充足,同時(shí)也可以看出本設(shè)計(jì)中的ADC采樣率實(shí)際為PDB和PIT2綜合作用的結(jié)果。這樣配置的好處是不僅使得整體ADC采樣率達(dá)到1Msps超過了單個(gè)ADC的最高采樣率818.330Ksps,還減少了ADC因軟件觸發(fā)給CPU帶來(lái)的負(fù)擔(dān)。
HW_ADC:ADC配置模塊。此處配置2個(gè)ADC模塊的輸入時(shí)鐘總線時(shí)鐘(48Mhz)、單端12位精度、長(zhǎng)時(shí)間采樣、硬件觸發(fā)、DMA使能等。通過手冊(cè)公式conversionTime=SFCAdder+Ave rageNum*(BCT+LSTAdder+HSCAdder)計(jì)算得到ADC轉(zhuǎn)換時(shí)間約為0.73us,由技術(shù)手冊(cè)中K60的電氣特性知其最快轉(zhuǎn)換時(shí)間約為1.2us,此處實(shí)際上只要低于2us就保證了PIT2開啟PDB觸發(fā)新的采樣時(shí)上次已轉(zhuǎn)化完畢。
HW_DMA:增強(qiáng)型直接存儲(chǔ)訪問模塊。主要利用此模塊將ADC采樣轉(zhuǎn)換后的數(shù)據(jù)轉(zhuǎn)移到RAM中保存。每轉(zhuǎn)移5Kbyte數(shù)據(jù)產(chǎn)生一次DMA中斷,當(dāng)傳輸?shù)目倲?shù)據(jù)量達(dá)到40Kbyte時(shí),在DMA中斷里進(jìn)行數(shù)據(jù)處理,比如:FFT、最大值、最小值、峰峰值、頻率等計(jì)算,同時(shí)關(guān)閉PIT2中斷,即停止PDB觸發(fā)ADC繼續(xù)采樣。利用DMA轉(zhuǎn)移數(shù)據(jù)配合PDB觸發(fā),在很大程度上減少了CPU的負(fù)擔(dān)。
HW_PIT:周期中斷定時(shí)器模塊。此處PIT有3個(gè)作用:一是用PIT0每1ms產(chǎn)生一次中斷用來(lái)給EMWIN計(jì)數(shù),否則EMWIN無(wú)法運(yùn)行;二是用PIT1定時(shí)中斷來(lái)開啟PIT2中斷使PDB觸發(fā)ADC以刷新采樣數(shù)據(jù),根據(jù)DMA每轉(zhuǎn)移40Kbtye就進(jìn)行數(shù)據(jù)處理來(lái)計(jì)算,設(shè)置每50ms重新開啟一次PDB,也就是每秒刷新20次;三是用PIT2每2us開啟一次PDB,使其控制觸發(fā)ADC0和ADC1單次采樣。
HW_GPIO:主要用來(lái)配置按鍵以及其他必要的IO口,以實(shí)現(xiàn)人機(jī)交互。
HW_NVIC:中斷優(yōu)先級(jí)配置模塊。首先在系統(tǒng)初始化時(shí),應(yīng)將優(yōu)先級(jí)分組為16個(gè)搶斷優(yōu)先級(jí),無(wú)響應(yīng)優(yōu)先級(jí)。然后根據(jù)系統(tǒng)各個(gè)功能的重要程度,設(shè)置優(yōu)先級(jí)。由于EMWIN的運(yùn)行不能停止,故PIT0中斷的優(yōu)先級(jí)最高;緊接著最重要的是數(shù)據(jù)處理,故DMA中斷的優(yōu)先級(jí)第2;然后是PIT2的采樣中斷第3;其次采樣數(shù)據(jù)刷新和按鍵誰(shuí)先后都行,故PIT1中斷和GPIO中斷分別第4、第5;最后由于EMWIN運(yùn)行時(shí)非常占用系統(tǒng)資源,故不設(shè)優(yōu)先級(jí),將其放在空閑時(shí)間運(yùn)行,任何中斷都可以打斷它。
arm_math(DSP庫(kù)):CMSIS為用戶提供的DSP(數(shù)字信號(hào)處理)庫(kù)。為了高效地進(jìn)行數(shù)字信號(hào)處理,CMSIS DSP庫(kù)提供了超過60多種功能的DSP算法庫(kù),并且把這些庫(kù)函數(shù)設(shè)計(jì)成使用ARM匯編指令來(lái)快速地處理多種復(fù)雜的DSP函數(shù)。由于K60的內(nèi)核為ARM Cortex-M4,故可將CMSIS DSP庫(kù)添加到拉普蘭德的固件庫(kù)里,同時(shí)開啟K60的硬件浮點(diǎn)運(yùn)算單元,使得數(shù)字信號(hào)處理的速度提高5到10倍。
EMWIN是一款能解決在ROM和RAM消耗相對(duì)來(lái)說(shuō)并不高的情況下進(jìn)行的人機(jī)交互應(yīng)用設(shè)計(jì)難題的嵌入式GUI。它與裸機(jī)和多任務(wù)環(huán)境、專用操作系統(tǒng)或具任何商業(yè)RTOS兼容。
圖2 EMWIN軟件應(yīng)用架構(gòu)框圖
本次使用的恩智浦官方EMWIN5.38版本相比以前版本進(jìn)行了很大的更新,不但性能大大改善,而且實(shí)現(xiàn)了很多原來(lái)不能實(shí)現(xiàn)的功能。它的軟件應(yīng)用架構(gòu)如圖2所示。硬件操作層指的就是K60固件庫(kù),EMWIN通過液晶驅(qū)動(dòng)與硬件操作層連接,用戶只需配置自己的LCD顯示器的驅(qū)動(dòng)部分到EMWIN預(yù)留的接口里,即可在自己的硬件上運(yùn)行EMWIN的GUI應(yīng)用API函數(shù),實(shí)現(xiàn)設(shè)計(jì)效果。
拉普蘭德庫(kù)里自帶了分辨率為320*240的ILI9320 LCD驅(qū)動(dòng),故在加入EMWIN庫(kù)及配套文件到工程中后只需按如下步驟配置即可:
①在GUIConf.c中配置EMWIN的運(yùn)行內(nèi)存為外部SDRAM
GUI_NUMBYTES (1024*256) //256Kbyte運(yùn)行內(nèi)存
#def i ne SDRAM_ADDRESS (0x70000000)//K60的SDRAM總線基地址
#def i ne SDRAM_APP_BUF SDRAM_ADDRESS
aMemory = (U32 *)SDRAM_APP_BUF;
/* Assign memory to emWin */
GUI_ALLOC_AssignMemory(aMemory,GUI_NUMBYTES);
②在GUIConf.h中設(shè)置圖層數(shù)為1
#def i ne GUI_NUM_LAYERS 1
③在LCDConf.c中配置自己的LCD參數(shù)到EMWIN中
// LCD分辨率
#def i ne XSIZE_PHYS 320
#def i ne YSIZE_PHYS 240
// 顏色格式
#def i ne COLOR_CONVERSION GUICC_M565
// 設(shè)置LCD驅(qū)動(dòng)類型為自定義驅(qū)動(dòng)
#def i ne DISPLAY_DRIVER GUIDRV_TEMPLATE
//設(shè)置LCD驅(qū)動(dòng)類型和顏色格式到EMWIN中
GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER,COLOR_CONVER
SION,0,0);
在LCD_X_DisplayDriver()中的case LCD_X_INITCONTROLLER下添加自己
的LCD初始化函數(shù)LPLD_LCD_Init()。
④在GUIDRV_Template.c中將自己的LCD驅(qū)動(dòng)函數(shù)對(duì)應(yīng)放入到
EMWIN的LCD驅(qū)動(dòng)函數(shù)中,使EMWIN能夠使用它們來(lái)操作LCD。
//向指定位置的像素寫入指定顏色
LPLD_LCD_SetPoint()放入_SetPixelIndex()
//讀出指定位置的像素顏色
LPLD_LCD_GetPoint()放入_GetPixelIndex()
//繪制一條指定位置和顏色的垂直直線
LPLD_LCD_DrawVLine()放入_DrawVLine()
//繪制一條指定位置和顏色的水平直線
LPLD_LCD_DrawHLine()放入_DrawHLine()
//填充形成指定位置、大小和顏色的矩形
LPLD_LCD_DrawRectangle()放入_FillRect()
⑤在GUI_X.c中設(shè)置全局變量EMWIN_RunTime為emWin提供
時(shí)鐘
extern__IO int32_t EMWIN_RunTime;
其中EMWIN_RunTime在PIT0中斷中每1ms增加一次。
在拉普蘭德的按鍵示例工程中按照上述步驟添加并完成EMWIN的配置,再按照上面固件庫(kù)部分的描述初始化相關(guān)的硬件配置。系統(tǒng)的軟件運(yùn)行流程圖如圖3所示。為進(jìn)一步增加數(shù)字示波器的功能和良好的人機(jī)交互,一是可利用GUIBuilder5.32在PC端對(duì)界面進(jìn)行快速高效地仿真設(shè)計(jì),使之充分清楚地顯示數(shù)據(jù)處理的結(jié)果,呈現(xiàn)更人性化的界面;二是充分利用按鍵中斷,不僅可以在其中設(shè)置EMWIN的鍵盤API函數(shù),以實(shí)現(xiàn)通過按鍵控制虛擬按鈕的選中、轉(zhuǎn)移等操作,還可以設(shè)置采樣率、觸發(fā)方式、ADC的采集和停止等,以配合界面更好地實(shí)現(xiàn)人機(jī)交互。三是在EMWIN的配置中加入LCD觸摸驅(qū)動(dòng)源文件,調(diào)用拉普蘭德K60固件庫(kù)里的嵌入式操作系統(tǒng)UCOS_II來(lái)管理,再加入聯(lián)網(wǎng)功能,以實(shí)現(xiàn)更優(yōu)的實(shí)時(shí)性處理和人機(jī)交互體驗(yàn)。
圖3 系統(tǒng)軟件運(yùn)行流程圖
本次設(shè)計(jì)的數(shù)字示波器采用的是實(shí)時(shí)采樣方式,通過K60的PIT和PDB實(shí)現(xiàn)ADC雙通道交替并行采集,使得采樣率加倍,最高采樣速率為1Msps,故帶寬為200Khz;為提高波形捕獲質(zhì)量,其連續(xù)采樣數(shù)據(jù)最高達(dá)到40Kbyte才進(jìn)行數(shù)據(jù)處理,有利于增加異常事件的捕獲概率,此時(shí)每秒鐘可以刷新20次采樣數(shù)據(jù);若設(shè)置單端采集,采樣信號(hào)電壓范圍為0-3.3V。整體上本系統(tǒng)具有良好的人機(jī)交互界面,功能豐富、操作方便、成本較低且容易制作,可滿足一般的波形檢測(cè)要求。
本次設(shè)計(jì)的數(shù)字示波器基于EMWIN和ARM Cortex-M4內(nèi)核,既充分發(fā)揮了EMWIN作為當(dāng)前主流嵌入式GUI在界面設(shè)計(jì)方面所獨(dú)有的優(yōu)異性能,使得數(shù)字示波器的界面更具人機(jī)交互體驗(yàn),又很好地利用了ARM Cortex-M4的DSP(數(shù)字信號(hào)處理)庫(kù),配合K60的FPU(硬件浮點(diǎn)運(yùn)算單元),讓數(shù)字示波器在處理大量數(shù)據(jù)時(shí)更加迅速。K60豐富的資源也為后續(xù)數(shù)字示波器的聯(lián)網(wǎng)通信等功能拓展提供強(qiáng)力的支持。但由于時(shí)間、能力等原因,本設(shè)計(jì)仍然存在不足之處,例如本次設(shè)計(jì)未用到操作系統(tǒng),各個(gè)模塊的實(shí)時(shí)性有待提高、未充分利用K60豐富的硬件資源、ADC轉(zhuǎn)換速度相對(duì)還較慢等。
[1]徐寶國(guó),宋愛國(guó).基于UCOS和UCGUI的嵌入式數(shù)字示波器[J].測(cè)控技術(shù),2007,26(7):7-8.
[2]程言奎.基于ARM9的數(shù)字存儲(chǔ)示波器數(shù)據(jù)處理和GUI的設(shè)計(jì)與實(shí)現(xiàn)[D].無(wú)錫:江南大學(xué),2008.
[3]楊東選,王嵩.ARM Cortex-M4自學(xué)筆記——基于Kinetis K60[M].北京:北京航空航天大學(xué)出版社,2013:89-168.
[4]Joseph Yiu.The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors(Third Edition)[M].吳常玉,曹夢(mèng)娟,王麗紅,譯.北京:清華大學(xué)出版社,2015:157-177.
[5]李蘇揚(yáng).數(shù)字示波器設(shè)計(jì)[J].設(shè)計(jì)研究,2010(36):127-129.
[6]emWin用戶手冊(cè)[M].Germany:SEGGER Microcontroller GmbH & Co.KG,2017.