之前有小夥伴提到需要虛擬示波器的資料,有些庫還有檔案丟失了,直接給的工程跑不起來,這裡我把關鍵的地方講解一下,大家可以自行開發。其實開發不難,只是有些點會耗點時間。虛擬示波器,顧名思義就是非實物的示波器,但也還是硬體(便攜的採集裝置)和軟體(在電腦上顯示和操作)的結合,和數位示波器相比,本質上區別不大,現在貴一些的數位示波器從功能上看,也很像一臺計算機了)。今天要講的只是低配的,簡易版的虛擬示波器(在下當年的畢業設計)。下位機是基於STM32的ADC採集實現的訊號抓取,然後通過串列埠傳到上位機中顯示。微控制器的ADC和串列埠傳輸,註定了這虛擬示波器採集的波形頻率不會太高,之前能在上位機上還原得比較好的波形頻率是25Khz以下,如果大家有其他更快的採集(DSP,FPGA,NI採集卡)和資料上傳的方式(USB等),可以嘗試一下,也期待你們的分享。下面大體對硬體(外圍電路),微控制器程式(STM32),和上位機程式(labview)三部分進行講解。
1、硬體
硬體很簡單,就是將輸入到微控制器的波形訊號進行處理。因為我用的STM32的微控制器,能檢測到的電壓值是0~3.3V,所以硬體部分就是把輸入的交流訊號先控制在-1.65V~1.65V之間,最後再通過電路將訊號往上偏置1.65V就可以給微控制器採集了。至於如何將訊號放大放小,控制到可採集的電壓範圍呢,可以通過上位機傳送串列埠資料給微控制器,讓微控制器控制繼電器(或者其他開關方式)切換運放端的電阻,達到更改運放倍數的方式,最後上位機呈現波形的時候加上放大縮小的倍數,就可以在上位機介面上還原波形訊號了。我這裡先採用了LM358的雙電源運放晶片(交流訊號,需要雙電源運放晶片),後面因為LM358在高頻輸入的時候,運放輸出的訊號在零點處會失真,換了一款高頻的運放晶片UA741,問題解決。雙電源裡面的負電壓是通過LCL7660輸出的。至於偏置電壓,是我在multisim上面模擬出來的,實際測試後確實可以偏置,大家可以嘗試使用1比1的運放後加偏置電壓,也可以參考我的設計電路。附上完整電路圖。
1-1:運放電路
這是直接用了畢業設計裡面的圖片,之前的檔案不見了。應該能看懂吧 。運放採用的是最簡單的負反饋放大電路。放大倍數Vout/Vin=R1/R2。
1-2:負電壓電路
由於運放晶片想運放負極電壓訊號,需要採用雙電源模式,必須為運放晶片提供負電壓。所以本設計採用低功率,額定電壓為5V的電源極性轉換器ICL7660。ICL7660輸入5V正電壓,輸出-5V電壓。為LM358提供雙電源。本設計採用ICL7660的基本負電壓轉換模式。
1-3:1.65V偏置電路(自己模擬實現的,實測可用)
2、微控制器軟體
這個直接用STM32的微控制器ADC採集和串列埠例程,將資料分高4位元和低8位元的方式(微控制器串列埠只能上傳8位元的資料),將12位元的ADC資料通過串列埠分別傳輸給上位機,ADC取樣率調到最高,串列埠通過DMA的方式,這樣可以達到最高的採集速度。最後分別用兩個for迴圈,迴圈往串列埠傳送1000個低8位元和1000個高4位元資料。每次傳送兩組1000個資料的間隔你們可以自己定,我記得我應該間隔是100ms左右重新整理一次資料,上位機整合兩組資料後,一次顯示1000個資料點。ADC和串列埠傳輸資料的可以在STM32的例程中找到,具體邏輯這裡不再累述。不過還是附上當年寫的幾條程式吧。
1、連續讀取1000個ADC資料;
2、拆分低8位元和高4位元;
3、向串列埠上傳低8位元資料;
4、向串列埠上傳高4位元資料;
3、上位機
上位機在整合兩次接收的資料,直接呼叫Labview提供的訊號分析函數,如單頻測量函數,頻譜測量函數以及幅值和電平測量函數。
3-1:讀取串列埠資料
3-2:整合高4位元,低8位元位資料。右側輸出直接給到波形顯示控制元件
3-3:波形控制元件
前面板->控制元件->新式->圖形->波形圖。
4、最終整合後的虛擬示波器效果
採集的訊號範圍為5HZ~25KHZ(STM32F1系列取樣率最高為0.5MS/s),0.1V~16.5V的模擬訊號;幅值誤差低於5%,頻率誤差低於2%,能滿足日常中大多訊號/電壓的訊號採集與分析。希望對大家有所作用,也希望國內開源資源能越來越豐富吧。雖然一般技術不能給我們工程師帶來多大的財富,但至少在某個年齡段,在追求一種引以為傲的技能的時候,能讓我們感到充實,自豪,也是一種不錯的人生體驗呢!
原創不易,一鍵三連拉!