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