數(shù)字示波器中的波形存儲(chǔ)、錄制與回放
摘要:波形存儲(chǔ)、錄制與田放是數(shù)字示波器的重要功能。在此采用閃速存儲(chǔ)器(FLASH Memory)存儲(chǔ)重要的波形數(shù)據(jù),方便用戶(hù)事后調(diào)出觀察、分析和對(duì)比。每段波形存儲(chǔ)的長(zhǎng)度固定,根據(jù)存儲(chǔ)波形的序號(hào)、大小、起始地址等建立波形存儲(chǔ)索引表,通過(guò)查詢(xún)波形索引表可選擇要回放的波形。還可以通過(guò)波影錄制功能把信號(hào)波影錄制到靜態(tài)數(shù)據(jù)存儲(chǔ)器(SDRAM)中,然后回放波形,尋找并觀察自己需要的波形。通過(guò)直接存儲(chǔ)(DMA)方式實(shí)現(xiàn)將顯示緩沖區(qū)存儲(chǔ)的波形搬移到波形錄制的緩存中去,實(shí)現(xiàn)了數(shù)據(jù)的高速存儲(chǔ)。在手持式示波表的研制過(guò)程中實(shí)現(xiàn)了此波錄制和回放方法達(dá)到了預(yù)期的效果。
關(guān)鍵詞:數(shù)字示波器;波形存儲(chǔ);波形錄制;波形回放
0 引言
自然界的信號(hào)大多都是瞬時(shí)變化的一過(guò)性信號(hào),采用示波器的觸發(fā)功能可以捕獲符合觸發(fā)條件的信號(hào),一些重要的信號(hào)需要存儲(chǔ)并做進(jìn)一步的觀察和分析。早期的模擬示波器無(wú)法完成對(duì)波形的存儲(chǔ)和回放,而現(xiàn)在的數(shù)字存儲(chǔ)示波器都具有波形存儲(chǔ)和回放功能。波形存儲(chǔ)是將波形數(shù)據(jù)存儲(chǔ)在閃速存儲(chǔ)器(FLASHMemory)中,可以長(zhǎng)時(shí)間保存數(shù)據(jù),掉電之后數(shù)據(jù)不會(huì)丟失,方便用戶(hù)存儲(chǔ)一些重要的波形以便后期觀察或?qū)Ρ?。在觀察一些瞬態(tài)信號(hào)時(shí),用戶(hù)來(lái)不及捕捉這樣的信號(hào),可以通過(guò)波形錄制功能將信號(hào)存儲(chǔ)在靜態(tài)數(shù)據(jù)存儲(chǔ)器(SDRAM)中,然后可回放信號(hào)波形,再仔細(xì)觀察信號(hào)的特征。波形錄制是一種連續(xù)存儲(chǔ)波形的功能,即存儲(chǔ)從開(kāi)始錄制波形的時(shí)刻起到結(jié)束時(shí)刻的每幅波形。利用波形錄制與回放功能可以檢測(cè)那些不易確定觸發(fā)條件的瞬態(tài)信號(hào)。
根據(jù)波形存儲(chǔ)的長(zhǎng)度是否可變將波形存儲(chǔ)分為固定波形數(shù)據(jù)長(zhǎng)度存儲(chǔ)方法和可變波形數(shù)據(jù)長(zhǎng)度存儲(chǔ)方法。固定波形數(shù)據(jù)長(zhǎng)度存儲(chǔ)方法比較簡(jiǎn)單,而且回放方便。示波器在使用過(guò)程中,正常觸發(fā)模式和掃描模式所要存儲(chǔ)的波形點(diǎn)數(shù)是不一樣的。需要用可變存儲(chǔ)長(zhǎng)度方式存儲(chǔ)波形數(shù)據(jù)。
本文只考慮存儲(chǔ)示波器2個(gè)通道的各一組數(shù)據(jù),給每個(gè)通道的正常觸發(fā)模式和掃描模式各分出一個(gè)存儲(chǔ)區(qū)。正常觸發(fā)模式的數(shù)據(jù)長(zhǎng)度與掃描模式的數(shù)據(jù)長(zhǎng)度不同。根據(jù)存儲(chǔ)波形的關(guān)鍵信息建立波形存儲(chǔ)索引表,通過(guò)查詢(xún)波形索引表選擇要回放的波形。波形存儲(chǔ)索引表存儲(chǔ)在鐵電存儲(chǔ)器(FM24CL04)中,對(duì)鐵電存儲(chǔ)器可以進(jìn)行快速讀寫(xiě),掉電之后數(shù)據(jù)可以保存10年。所述波形存儲(chǔ)、錄制和回放方法已經(jīng)用于所研制的手持式示波表中,可方便地對(duì)所觀察的信號(hào)進(jìn)行記錄和分析。達(dá)到了預(yù)期的效果。
1 方案設(shè)計(jì)
固定大小存儲(chǔ)方法是一種簡(jiǎn)單的波形存儲(chǔ)方法,可以完成波形和設(shè)置的基本存儲(chǔ)要求,雖然正常觸發(fā)和掃描模式下的波形點(diǎn)數(shù)不一樣,但是每種模式下的波形點(diǎn)數(shù)是固定的,可以把2種模式下的波形分開(kāi)存儲(chǔ)。根據(jù)存儲(chǔ)波形的序號(hào)、大小、起始地址等在鐵電存儲(chǔ)器(FM24CL04)中建立波形存儲(chǔ)索引表,通過(guò)查詢(xún)波形索引表可選擇要回放的波形。由波形存儲(chǔ)在鐵電存儲(chǔ)器中的邏輯位置計(jì)算出實(shí)際存儲(chǔ)地址。比如存儲(chǔ)10幅波形,F(xiàn)LASH就分出10個(gè)區(qū)(A,B,…,J),每個(gè)區(qū)的起始地址是一定的。而鐵電存儲(chǔ)器也分出10個(gè)位置(100,101,…,109)分別對(duì)應(yīng)于FLASH的10個(gè)區(qū),假設(shè)位置101存儲(chǔ)B區(qū)的邏輯位置N,每一組波形的大小是固定的,設(shè)為M個(gè)字節(jié),則當(dāng)前的波形(起始位置設(shè)為ADDR_STAR)位置就是ADDR_STAR+M*(N-1)。
波形錄制是把波形數(shù)據(jù)存儲(chǔ)在SDRAM中,本設(shè)計(jì)中應(yīng)用ADSP的DMA方式不通過(guò)CPU直接實(shí)現(xiàn)波形數(shù)據(jù)的高速傳輸,這樣可以很大程度地節(jié)省CPU的資源,實(shí)現(xiàn)更加方便。
2 方案實(shí)現(xiàn)
2.1 波形FLASH存儲(chǔ)與回放
采用固定大小存儲(chǔ)方案實(shí)現(xiàn)波形FLASH存儲(chǔ)與回放,通過(guò)單通道的波形存儲(chǔ)來(lái)討論。FLASH分出個(gè)區(qū)A1,A2分別給通道1的正常觸發(fā)模式和掃描模式,鐵電儲(chǔ)存器一時(shí)也分出2個(gè)位置X1,X2與A,B2個(gè)區(qū)一一對(duì)應(yīng)。邏輯位置N1表示第N1個(gè)波形的位置,波形大小即波形點(diǎn)數(shù)為K1或K2,起始地址AD-DR1,ADDR2表示A,B兩個(gè)區(qū)的起始地址,波形地址就是本幅波形存儲(chǔ)位置的首地址。波形存儲(chǔ)地址示意表如表1所示。
對(duì)FLASH的操作主要有復(fù)位、寫(xiě)、讀和擦除操作。其中寫(xiě)操作只能將FLASH的數(shù)據(jù)由1寫(xiě)為0,如果試圖將0寫(xiě)為1就會(huì)出錯(cuò)。如果該區(qū)域已經(jīng)寫(xiě)過(guò)就只能先擦除,而FLASH的擦除只能以塊為單位,如果對(duì)FLASH頻繁擦除會(huì)減少壽命,因此給A1,A2;2個(gè)區(qū)各分2個(gè)塊。假設(shè)每1塊可以存儲(chǔ)10幅波形。當(dāng)?shù)?塊存滿(mǎn)10幅波形數(shù)據(jù)后,下一幅波形存儲(chǔ)在第2塊中,同時(shí)擦除第1塊,注意必須是在開(kāi)始寫(xiě)第2塊之后才能擦除第1塊,這樣可以避免有效數(shù)據(jù)被擦除。當(dāng)?shù)?塊數(shù)據(jù)寫(xiě)滿(mǎn)之后重新寫(xiě)第1塊,并擦除第2塊,這樣整體看來(lái),存儲(chǔ)20幅波形才會(huì)對(duì)一個(gè)塊進(jìn)行擦除,避免了頻繁擦除FLASH的某些位置。波形存儲(chǔ)流程示意圖如圖1所示。
存儲(chǔ)1幅波形(例如通道1的正常觸發(fā)時(shí)候的波形)的具體過(guò)程如下:
(1)A1區(qū)中包含2個(gè)塊(a、b)可以存儲(chǔ)該波形。確定每一個(gè)塊最多可以存儲(chǔ)波形數(shù)量(count),a塊的起始地址ADDR_START;b塊起始地址就是ADDR_START+0x08000,定義一個(gè)實(shí)際的存儲(chǔ)地址FLASH_addr。
(2)從FM24LC02中讀取該區(qū)中已存波形的邏輯位置N1,N1+1就是現(xiàn)在要存波形的邏輯位置。
如果N1≤count,數(shù)據(jù)存儲(chǔ)在a中,地址是FLASH_addr=ADDR_START+(N1-1)K1。
如果N1=count+1,數(shù)據(jù)存儲(chǔ)在b中,地址是FLASH_addr=ADDR_START+0x08000+(N1-count-1)K1,數(shù)據(jù)存儲(chǔ)之后擦除a中的數(shù)據(jù)。
如果count+1<N1<2count,數(shù)據(jù)存儲(chǔ)在b中,地址是FLASH_addr=ADDR_START+0x08000+(N1-count-1)K1。
如果N1=2count,數(shù)據(jù)存儲(chǔ)在b中,地址是FLASH_addr=ADDR_START+0x08000+(N1-count-1)K1,存儲(chǔ)之后,N1=0。下一幅波形存儲(chǔ)在a中,然后擦除b中的數(shù)據(jù)。
(3)將邏輯位置N1存儲(chǔ)在FM24CL04的X1的位置。
注意,DSP接收到采樣數(shù)據(jù)后,需要根據(jù)時(shí)基通過(guò)軟件再次抽點(diǎn)后的數(shù)據(jù)才是需要顯示的波形數(shù)據(jù)。FLASH中存儲(chǔ)的波形數(shù)據(jù)是軟件抽點(diǎn)以前的數(shù)據(jù),這樣在調(diào)出波形數(shù)據(jù)以后可以根據(jù)用戶(hù)的要求做相應(yīng)處理。
調(diào)出FLASH中的波形只需要計(jì)算出該波形在FLASH中的位置就可以。根據(jù)觸發(fā)模式從鐵電存儲(chǔ)器中的對(duì)應(yīng)位置讀出對(duì)應(yīng)波形的邏輯位置N,根據(jù)N來(lái)計(jì)算數(shù)據(jù)的起始地址。如果N≤count,F(xiàn)LASH_addr=ADDR_START+(N-1)K,如果N>count,F(xiàn)LASH_addr=ADDR_START+(N-count-1)K,根據(jù)計(jì)算出的地址按照對(duì)應(yīng)波形數(shù)據(jù)的大小讀取數(shù)據(jù)。
存儲(chǔ)與回放過(guò)程的重點(diǎn)在于對(duì)FLASH進(jìn)行操作的程序,主要是對(duì)FLASH內(nèi)部的命令寄存器按照一定的時(shí)序?qū)懭朊睢?br />
2.2 波形錄制與回放
用戶(hù)在使用示波器時(shí),常常遇到一些瞬態(tài)信號(hào),在還沒(méi)有來(lái)得及捕捉之前信號(hào)已經(jīng)消失,這樣就需要波形錄制與回放功能,將波形錄制下來(lái),事后再慢慢尋找并觀察。波形錄制是將波形數(shù)據(jù)存儲(chǔ)在SDRAM中。本設(shè)計(jì)中最多可以錄制100幅波形,并且是最近的100幅,如果已經(jīng)錄制滿(mǎn)之后就會(huì)替換最先錄制的波形數(shù)據(jù),而每副波形數(shù)據(jù)大小為400個(gè)點(diǎn),這樣就需要分配出400×100大小的空間。本設(shè)計(jì)中使用ADSP BF531
的DMA方式,把顯示緩存中的波形數(shù)據(jù)直接傳送給波形錄制的緩存,這樣可以不經(jīng)過(guò)CPU就實(shí)現(xiàn)了數(shù)據(jù)的高速存儲(chǔ),本設(shè)計(jì)中采用的是Memory到Memory之間的DMA方式。BF531中的具體配置如下:
以上是目的地址的DMA設(shè)置。注意數(shù)據(jù)源的DMA必須在目的地址的DMA使能之前使能。
每次波形顯示之后啟動(dòng)DMA方式把波形數(shù)據(jù)存儲(chǔ)到錄制緩存中。錄制滿(mǎn)100幅波形之后就必須剔除最先錄制的波形,定義一個(gè)波形數(shù)目wave_data,一個(gè)波形覆蓋數(shù)目cover_data,cover_data在0~99之間循環(huán)變化。錄制緩存的首地址為L(zhǎng)uzhi_addr,每存儲(chǔ)一幅波形wave_data加1。
如果wave_data<100,波形錄制的地址為L(zhǎng)uzhi_addr+400*wave_data。
如果wave_data=100,wave_data保持100不變,cover_data加1,波形錄制的地址為L(zhǎng)uzhi_addr+400*(cover_data-1)。cover_data在0~100之間循環(huán)。
波形錄制流程圖如圖2所示。
波形回放與錄制相反,從錄制緩存中調(diào)出波形數(shù)據(jù)放到顯示緩存中顯示波形。回放狀態(tài)下不需要采集數(shù)據(jù),直接將錄制緩存中的波形顯示出來(lái)。波形回放時(shí),是從最先存進(jìn)來(lái)的波形開(kāi)始顯示的,如果cover_data!=0,表明已經(jīng)錄制滿(mǎn)100幅波形,并且有cover_data個(gè)波形被新的波形覆蓋,所以回放的時(shí)候應(yīng)該從luzhi_addr+400*cover_data的地址開(kāi)始調(diào)出波形進(jìn)行顯示,依次往后調(diào)出數(shù)據(jù)進(jìn)行顯示,100幅波形循環(huán)調(diào)出。如果cover_data=0,表明沒(méi)有波形被覆蓋,從Luzhi_data的起始地址開(kāi)始調(diào)出波形進(jìn)行顯示,wave_data個(gè)幅波形循環(huán)顯示?;胤诺臅r(shí)候還要向用戶(hù)顯示波形的序號(hào),注意,波形回放支持暫停。波形回放的流程圖如圖3所示。
3 結(jié)語(yǔ)
數(shù)字示波器中的波形存儲(chǔ)、錄制與回放為用戶(hù)提供了多種回顧性操作方法,更好地滿(mǎn)足了測(cè)量需要。本文采用FLASH存儲(chǔ)正常觸發(fā)模式和掃描模式的波形數(shù)據(jù),在鐵電存儲(chǔ)器中存儲(chǔ)波形的索引信息,方案設(shè)計(jì)保證了對(duì)FLASH存儲(chǔ)器按塊進(jìn)行擦除。采用SDRAM錄制難以捕獲信號(hào)特征的瞬態(tài)信號(hào)。用戶(hù)可以通過(guò)對(duì)波形的回放、拉伸和壓縮,觀察和尋找所關(guān)心的信號(hào)波形。本文所述的波形存儲(chǔ)、錄制與回放方法已經(jīng)在項(xiàng)目手持示波表中得到了應(yīng)用,到達(dá)了用戶(hù)對(duì)數(shù)字式示波器波形存儲(chǔ)功能的基本要求。