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