翁蕓,李偉
(寧波職業技術學院,浙江寧波,315800)
在儀器儀表中,經常需要測量信號的頻率、幅值、失真度、占空比等參數,并根據這些參數來分辨信號的種類,測量的精度和識別的準確率是衡量儀器儀表性能高低的重要指標。
用單片機作為測量核心是目前的主流,其存在設計簡單、成本低廉等優點,但因受單片機硬件資源的限制,產品的性能很難提升,也不利于升級換代。而隨著芯片制造工藝的不斷發展及市場需求量不斷增加,FPGA 芯片的性能得到飛速的提升,價格也趨于穩定。FPGA 芯片由于其具有高度靈活、可擴展的特點,能夠以更低的成本實現產品性能的提升和升級,受到市場的青睞。本文以FPGA 和STM32F4單片機為核心,設計一款波形識別及參數測量裝置,測試該裝置的性能并驗證方案的可行性,為以后的類似產品研發打下基礎。
本裝置主要組成為直流供電模塊、信號調理電路、A/D 轉換模塊、過零比較電路、FPGA 信號采樣及處理模塊、STM32 主控模塊、顯示電路,各部分連接關系如圖1 所示。

圖1 系統結構框圖
信號調理電路采用集成程控放大器,具備放大和衰減的功能,無須多路模擬開關,系統根據預測交流信號的幅值大小設定放大倍數,被測信號經過兩級程控放大和一級同相放大后,波形已達到最佳測量幅值范圍,再送至A/D 模塊進行模數轉換,可提高測量精度。
高速A/D 轉換模塊則將調理好后的交流信號轉變成數字信號送至FPGA,為有效消除共模干擾信號,本設計采用差模轉換方式。
FPGA 模塊采用cyclone IV 系列EP4CE10F17C8 芯片,控制高速ADC 模塊進行數據采集,通過高速并行口,配合FPGA內部的高速RAM,可輕松實現大于20MHz的采樣速率,該模塊除高速采集A/D 信號外,還要精確測量被測信號的頻率,測量信號是通過過零比較電路得到。FPGA 將采集到的A/D 值和頻率值通過FMC 接口傳送給STM32 單片機。
STM32 主控模塊采用STM32F429 單片機,根據按鍵值發送頻率測量和數據采樣啟停控制信號,并利用自身強大的計算能力對采樣到的數據進行RMS、FFT 等多種運算,得到被測信號的峰峰值、有效值、占空比、失真度等參數,并根據以上參數判斷出波形類別,最終將波形及參數顯示在液晶顯示屏上。
顯示模塊選用電容串口液晶顯示屏,串口的液晶顯示屏功耗比較低,節能環保,只需要觸摸,而不需要壓力來產生信號,使用方法靈活、使用壽命長、顯示高彩色保真、高亮、高對比度,其適用范圍廣,與傳統顯示屏相比,畫面效果更佳。
為滿足50mV ≤VPP ≤10V 寬幅值信號采樣需求,信號放大部分采用AD603 集成程控放大器。程控放大電路主要由三個部分構成,分別是第一級調偏電路及AD603 程控放大電路、第二級調偏電路及AD603 程控放大電路、末級放大電路。為了使通帶內輸出平坦,在第一級和第二級之間加入低通濾波。圖2 為AD603 程控放大電路原理圖。

圖2 AD603程控放大電路原理圖
兩級AD603 的增益控制引腳直接短接,實現增益的同步設置;末級運放可以根據實際需要來設計放大電路增益,放大電路類型是同相輸入比例放大,由R6 和R5 的比值來確定增益值,本模塊默認放大2 倍。電路增益通過STM32 內部D/A 控制,其輸出電壓經電平平移后生成VG信號,輸出增益與VG 的關系為G(db)=80VG+20,VG 取值±500mV。
A/D 轉換模塊包括信號調理與A/D 轉換電路兩個部分,A/D 轉換采用TI 公司的高速12bit、最大采樣速率65MSPS的芯片AD9226。其硬件結構框圖如圖3 所示,包括信號輸入接口、衰減電路、信號調理電路和高速A/D 芯片等。

圖3 A/D 轉換模塊結構框圖
信號輸入電壓范圍為-5V~+5V,即峰峰值≤10Vpp。電壓調理電路轉換公式為:VAD=-(1/5)VIN+2。當輸入信號VIN=+5V的時候,輸入到A/D 的信號VAD=1V;當輸入信號VIN=0V的時候,輸入到A/D 的信號VAD=2V;當輸入信號VIN=-5V的時候,輸入到A/D的信號VAD=3V;模塊轉換后的數字量D 和輸入VIN之間的關系為:D=2048 -(1/5)VIN× 2048。A/D轉換模塊原理圖如圖4所示。

圖4 A/D 轉換模塊原理圖
FPGA 模塊是本項目的核心,需要完成頻率測量和波形采樣兩大任務,其頂層設計如圖5 所示,共有5個模塊組成,分別是PLL 模塊、頻率測量模塊、ADC 時鐘控制模塊、AD9226控制模塊和FMC 控制模塊。

圖5 FPGA 頂層設計圖
PLL 鎖相環模塊用于生成高頻時鐘信號,通過調用IP核完成,輸入時鐘50M,輸出時鐘信號為150M,供其他模塊電路使用。
頻率測量模塊(clock_test)采用等精度頻率測量法,該模塊受STM32 控制,當clk_test_sig 為高電平時開始測量,測得的值通過FMC 模塊傳送至單片機,為保證A/D 采樣時序與被測信號同步,該模塊還為ADC 時鐘控制模塊提供被測信號的同步時鐘信號(clk_edge_out)。
ADC 時鐘控制模塊(adc_clock_con)用于產生被測信號的128 倍頻時鐘信號,該時鐘信號需與被測信號的過零點同步,以確保每次采樣信號的初始相位一致,便于后期數據處理及計算,頻率控制值是STM32 通過FMC 接口傳送給FPGA。倍頻后的時鐘信號(adc_clk)直接送至A/D 轉換電路,作為該模塊的驅動時鐘信號。
AD9226 控制模塊(HI_Speed_AD9226)用于將采集到的A/D 值保存到FPGA 內部高速RAM 中,需根據ADC 時鐘控制模塊提供的信號(adc_test_flag)同步采集,一次測量數據采集結束后,生成數據有效信號,通知STM32 讀取數據。
FMC(fmc_control)控制模塊用 于FPGA 和STM32 的高速通信,內部設有5 個數據讀寫通道和一個1024*16 高速RAM,5 個數據讀寫通道可以雙向傳遞控制命令和數據,而RAM 只用于單向數據傳送,FPGA 負責寫入,STM32 只能將數據讀出。
2.3.1 頻率測量模塊設計
頻率測量常用的方法有直接測頻法、直接測周法和等精度測量法。因被測信號的頻率范圍較寬(1Hz~50kHz),為保證測量精度,本設計采用等精度測量法,原理框圖如圖6 所示。

圖6 等精度測頻原理圖
頻率測量主要由FPGA 完成,測量啟動信號即預置門控信號由STM32 發送給FPGA,只需發送一個短脈沖即可,FPGA 收到信號后首先檢測被測信號的上升沿,檢測到以后立刻開啟門控定時器,生成0.5 秒實際門控信號,并同時開啟SCNT 和XCNT 兩個計數器,分別對標準信號fs 和被測信號fx 進行計數,當0.5 秒門控時間到了以后,FPGA 再次檢測被測信號的上升沿,檢測到以后立刻停止SCNT 和XCNT 兩個計數器并將數據鎖存在Ns 和Nx 寄存器中,同時生成頻率測量數據有效信號,通知STM32 讀取數據并進行計算,被測頻率計算公式為:fx=(Nx/Ns)×fs。
2.3.2 信號采集模塊設計
AD9226 單路高速A/D 模塊是在芯片時鐘的上升沿進行數據的采集,根據設計要求,對于不同頻率的被測信號,都要采集128 個點,所以采樣頻率始終是被測頻率的128 倍,這個頻率控制值由STM32 根據被測信號的頻率計算獲得,通過FMC 接口傳送給FPGA,然后下達采樣開始命令。
FPGA 檢測到采樣開始命令后,把過零比較電路生成的方波信號的上升沿作為同步信號,控制A/D 轉換模塊按照被測信號頻率的128 倍頻速率連續采樣128 個點(為消除倍頻系數誤差產生的影響,實際采樣192 個點),并把采樣數據按順序存儲到FPGA 內部RAM 中。采樣結束后,FPGA 通過FMC 雙向通道通知STM32 讀取數據,STM32檢測到信號后,按順序讀取FPGA 內部RAM 中的數據并存放至自己的內存中,以供后面的參數計算使用。FPGA 信號采集時序圖如圖7 所示。

圖7 FPGA 信號采集時序圖
STM32 單片機主要完成按鍵檢測、測量命令發送、數據計算、波形識別及LCD 屏顯示等功能,其流程圖如圖8 所示。

圖8 STM32 主流程圖
波形識別最常用方法為波峰系數識別法(峰值與有效值的比值),可以分辨出矩形波、正弦波和三角波,但光靠波峰系數一個參數還是無法分辨更多的波形,比例鋸齒波、階梯波等,本設計采用波峰系數、失真度、電壓跳變次數三個參數綜合分析法,可以有效分辨以上所有波形。
波形識別前先要對采樣數據進行必要的處理和計算,根據上面同步信號可知,過零信號為采樣起始點,所以兩個相鄰上穿(或下穿)零軸之間的數據即為一個完整周期數據,把這些數據提取出來用于各參數計算。需要注意的是,正常的話一個完整周期應該是128 個點,如果不是,說明倍頻值計算存在誤差,需要對系統主時鐘或采樣點數進行調整,不然計算參數時會產生較大誤差。另外,之所以取128 個點,一是為了提高測量精度,二是為滿足STM32 單片機FFT 運算要求。如果要測量更高的頻率信號,可以適當降低采樣點數,但必須是2 的n 次方。
所有參數的計算都由STM32 單片機完成,F4 系列單片機具有基于ARM Cortex M4 的高性能32 位微控制器,并且采用DSP 和FPU 指令,可以高效完成有效值和FFT 運算,計算速度和精度都達到設計要求,根據實際測試,各參數值與理論值非常接近,完全達到精確辨別波形要求。各波形波峰系數、失真度和電壓跳變次數的理論參數值與實測參數值如表1 所示。

表1 各波形參數理論值與實測值
本裝置按照先波峰系數、再失真度、后電壓跳變次數識別順序,只要各參數的比較閾值選擇合理,識別成功率達到100%。
最后經多次實測,頻率、峰峰值及波形識別的測試結果如表2 所示。
本設計充分發揮FPGA 高速并行性能和STM32 單片機強大計算能力,通過兩者的協同工作,能精確測量周期性信號的幅值、頻率、失真度等參數,誤差遠小于1%,并能根據測得的數據判斷不同波形,正確率達100%,完全達到設計預期效果,本設計對于未來開發高性能的電子測量設備具有一定的借鑒意義。