這是南信大馬尚清同學的作品
因為本人也沒學幾天,學識淺薄,有錯誤問題難以避免。
已經實現的功能
Ain通道示波功能(量程為0-3.3V)
示波器相關數據顯示功能(通過二級菜單顯示)
波形自動量程功能
仍需完善的功能
波形頻率測量(軟件測量波形周期代碼編寫過于簡單,測試對于規則的上下對稱的波形還可以測量,而對于其他的則測量偏差太大,仍需完善)
未能實現的功能
采樣速度的調節功能(對于采樣率,時鐘之間聯系的理解不夠,如果簡單的改變采樣間距會導致波形變形,造成偏差)
快速傅里葉變換(不太能理解快速傅里葉變換是如何實現的,直接帶入網上代碼也會導致占用空間過大)
上位機通訊功能(對于DMA理解不夠,不知道應該如何將DMA中讀取到ADC的數據上傳到上位機中)
采集板上的音頻信號(采集信號波形與實際情況不合,故在設置中將MIC對應的PA1管腳關閉,后續可以繼續優化)
實現過程
這個項目是我第一次接觸stm32系列的項目,也是第一次用HAL庫來開發項目(雖然建議使用LL庫來減少空間的占用,但是對于LL庫,本人有點更難理解,所以就沒有采用)。所以在實現的過程中,遇到了很多的困難,加上HAL庫的教程也比較少,并且G031系列單片機也是比較新的產品線,所以沒有多少能夠借鑒的例子,所以一些看似很簡單的功能,在實現他們時反倒難住了我,包括OLED屏幕點亮,ADC采樣,波形顯示等等問題。
示波器實現過程的原理其實并不困難:由ADC采樣到數據,將數據乘以330 除以4096,從而得到實時電壓值,在把數據進行量化之后,儲存進數組(數組內成員個數需要大于波形顯示區域的橫向像素點),通過數組的比較函數,得到數組內的最大電壓以及最小電壓(由于數組的最大值與最小值受到之前測量數值的影響,于是我采用每隔一段時間就復位一次來達到最大值和最小值能夠隨著測量進行不斷更新而不會卡死在某一數值)。
之后進行需要將電壓值轉換成應在應該顯示在屏幕上的坐標(其中我將128*64的OLED顯示屏的取107*47作為波形顯示部分,因此右側和下側顯示區域只留有不到16像素點,而正常的OLED顯示程序里面字體是遠大于此,所以我們需要使用0806字體,否則會造成字體顯示錯位),如果是固定量程則是由測量值與量程之間的比值得到示波器縱向坐標的比值,從而達到計算出點坐標。如果是動態范圍則是測量值與數組范圍內最大值與最小值的差之間的比值得到,此外還需要根據最大值和最小值更新網格線旁邊的數值,這里就使用sprintf函數來達到不斷更新字符串的目的,在通過OLED的字符串顯示函數顯示到OLED屏幕的指定位置上。之后波形的繪制則是通過ADC不斷的采樣,寫入數組,讀取數組,進行畫點,更新數組,從而達到連續不斷的顯示輸入波形的效果。
而按鍵功能的實現可以通過按鍵中斷回調函數(本人使用過程中會出現中斷不了的現象,可能是中斷優先級配置的問題)或者自行編寫按鍵判斷函數,放入while函數中不斷循環運行從而達到不斷掃描按鍵的效果。按鍵觸發的邏輯也需要自己仔細的考慮,否則會造成連擊,無法觸發,循環觸發等出乎意料的現象。此外而按鍵功能的設計一定要有嚴密的執行邏輯,否則容易造成按鍵沖突,或者程序卡死。此外需要設立按鍵標志位,來判斷按鍵觸發的次數,從而達到按鍵多用的功能。
項目的一些細節部分:
波形的顯示函數中加入插值函數,這樣才能使得示波器有能夠輕易看出的連續波形,而不是一個個離散的點。
按鍵的讀取需要進行延時消顫處理,并加上觸發判斷,不然按鍵會多次激發,或者不激發,影響操作。
按鍵多次觸發功能是通過按鍵中斷中簡單的計數函數來判斷按鍵被按下幾次,判斷按鍵是否進行長按與短按則是通過延時判斷來的。
波形顯示時,需要將超出量程的值限制為最大值,否則會導致顯示在其他區域。
自動量程,通過測量值與最小值的差與數組內最大值與最小值差的比來算得測量值應該在OLED屏幕上的坐標,并且將示波器旁的數值改變為最大值與最小值,從而達到動態量程的效果。
示波器的背景網格線最好不要使用圖片顯示,而使用間隔畫點功能,從而達到繪制背景網格線的效果。否則容易造成OLED顯示錯亂和頻閃等情況。
在進行單片機數值計算時候,一定要注意運算完成后,數據類型已經精度問題,否則容易造成數據不準確,甚至錯誤數據的出現。
實現功能注意事項:
注意OLED屏幕顯示函數的位置坐標,有的代碼是以默認的OLED最下方一排為0,有的進行了反相。
OLED Clear()函數不能夠完全清屏,會有殘留。
使用OLED直接操縱點顯示的函數時,一定要注意運行頻率,否則會造成閃屏。
實現項目的感觸
通過這次寒假在家練項目,收獲頗豐。通過自己親自參與到項目的實現過程來,才能夠發現問題,分析問題,尋找解決思路,從而解決問題。作為剛剛接觸到STM32的萌新,這項項目讓我能夠快速學習。之前學習他人教程,覺得思路很清晰,實現起來很簡單。但是當自己真正的接觸到一項陌生的項目,沒有現成的答案和結果等著自己的時候,才發現自己原來很多都不知道。正是由于項目中一個個出乎意料的問題的出現,才能逼迫著自己去查找資料,學習大神們寫的代碼,并嘗試自己去解決。
未來完善功能
能夠兼容所有波形的頻率測算功能
學習快速傅里葉算法,簡化FFT函數,使其能夠在單片機剩余空間內實現
波形發生器以及其他附加功能的開發
原文標題:具有自動量程功能的簡易示波器
文章出處:【微信公眾號:FPGA入門到精通】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
示波器
+關注
關注
113文章
6268瀏覽量
185389 -
電壓
+關注
關注
45文章
5618瀏覽量
115972
原文標題:具有自動量程功能的簡易示波器
文章出處:【微信號:xiaojiaoyafpga,微信公眾號:電子森林】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論