本次電賽做的是A題-THD值檢測裝置。
電賽方案:
單片機:MSP432E401Y
ADC支持高頻率2MHZ
外圍硬件方案:前端放大器采用增益可調的放大器,通過調節放大器增益使輸入信號控制在1-2v之間。
底層外設配置方案:使用PWM+TIM作為adc觸發源,使用dma進行數據傳輸。使采集數據可以達到2MHZ。在 使用定時器作為觸發源的時候,因為該單片機的最高定時器觸發時間支持到1.25MHZ,所以在1.25mhz采樣率一下的使用使用定時器觸發。在1.25mhz--2mhz的時候使用pwm觸發。(在這里做區分的原因是,tim定時器作為觸發源,進行觸發adc的時候,出發周期比較穩定。而使用pwm作為觸發源的話,出發周期,并不能嚴格控制在2mhz,設置完周期之后,會有一定的周期偏移。)(在增益控制上,直接檢查采集到的信號值的最大值,使最大值控制在一定范圍內)
關于信號采集速率的設計:根據奈奎斯特定理,采集100khz的5次諧波需要1mhz以上的采樣率,但是實際測試過程中1mhz的采樣率,在采集信號的時候,信號采集出來的數據會有偏移,信號能量較弱,所以最終使用的是2mhz的采樣率的方案,即基頻*20.
fft處理的方案:在一開始的時候想了2種方案,一種是直接fft之后進行計算,另一種是在fft之前進行一次加窗(即進行一次fir濾波)。經過matlab仿真之后,發現,對于采集到的數據,進行加窗之進行fft與未加窗進行fft結果沒有區別,最后未使用加窗的方案。fft算法使用的是arm官方的arm_math.h數學庫。
基頻計算方案:本次測試信號范圍在1khz-100khz,采用的方案是,將采集的信號僅從一次fft,之后進行范圍的區分,計算出是基頻頻率。
關于thd值的計算:計算出基頻之后,針對基頻設置相應的采樣率進行數據采集,之后將采集到的數據進行fft運算,然后在特定的數據段查找最大值,實現每個諧波的最大值查找。查找完成之后,調用相關的運算公式計算結果。
在顯示方面:屏幕采用串口屏幕,單獨編程,之后單片機通過串口與屏幕進行通信。波形顯示方面,將每個周期采集的時候,通過使用前面特定的數據,進行顯示,同時發送給屏幕的時候,也會發送給手機app端。
問題:1、單片機的adc采集速率在高于600ksps的時候,一次dma數據傳輸完成之后,會導致之后讀取的數據不能正常讀取,讀取的值都是錯誤的。
解決方案:在超過600ksps的時候,每讀取完成一次之后,會進行一次系統重啟。
問題2:某些頻段使用計算出來的基頻進行,采集的數據進行fft之后,會產生較大的誤差,但是自己設置頻率,采集之后,有一部分變好了,還有一部分未變好。
解決方案:未解決。
原因分析:可能是硬件電路的問題,在單片機的輸入引腳有電阻電容配置不對。同時基頻計算算法存在問題。