本項目為南京工程學院劉昕禹同學完成并分享的作品
“簡易示波器DIY套件V2.0 - 基于STM32G031最小系統(tǒng)模塊”
因為本人也沒學幾天,如有錯誤,歡迎指正。
已經(jīng)實現(xiàn)功能:
ADC模擬示波器,可以實現(xiàn)調(diào)節(jié)頻率,單位電壓,顯示電壓范圍和選擇頻道(麥克風和Ain管腳)。
模擬函數(shù)發(fā)生,在Aux管腳可以實現(xiàn)正弦波、方波,并且可以調(diào)節(jié)頻率。(今年大二,還沒有學到模電,不知道怎么算三角波的占空比來實現(xiàn)信號的轉(zhuǎn)換,理論上添加占空比數(shù)組后可以實現(xiàn)方波)。
可以實現(xiàn)同時輸出波形(Aux)和接受波形的輸入(Ain)。
未實現(xiàn)功能:
快速傅里葉變換(額,這個真不會,從網(wǎng)上復制來的FFT代碼運行不起來,調(diào)用Cortex-M0的CMSIS DSP結果空間不足,使用之前Jack的FFT相關代碼,也出現(xiàn)空間不足的情況。應該是使用了HAL庫導致占用空間過大所導致的。寫了兩天代碼,不想通過寄存器來實現(xiàn),就算了吧,能退就退吧,我已經(jīng)不想搞了)。
實現(xiàn)功能注意事項:
在這里就說說我遇到的坑吧。
空間不足,這類MPU的RAM的全局變量別開太大。(如果不添加FFT代碼,目前代碼可以實現(xiàn)局部刷新,提高顯示速度)。
如果追求高刷新速度,建議使用局部刷新,經(jīng)測試,局部刷新相對于全局刷新速度更快。
中斷的合理安排。這類程序的設計需要添加多級中斷,注意中斷的優(yōu)先級和中斷內(nèi)的代碼的安排。
對于如果想要調(diào)用CMSIS來實現(xiàn)FFT的同學,希望注意空間的合理安排,或者自己來搞這里頭的代碼(我是真不想弄了,這兩天讓我心力憔悴)。
幾個對開發(fā)板的建議吧:
開發(fā)板總體質(zhì)量不錯也挺小巧。
MPU的SPI總線和OLED的SPI總線對接(額,活動內(nèi)頁面說已經(jīng)是對接的了,但是實際原理圖和引腳測試結果都表明沒有對接,望修改)。
能不能換用空間更大的MPU,就像我我添加HAL_UART的庫后,代碼一下子大了一半。
通過上位機來實現(xiàn)MPU進入下載模式,我看該該CH340那RTS,CTS沒有接入開發(fā)板,通過置位這兩個腳來實現(xiàn)開發(fā)板的上電和Boot0的拉低。
Reset按下后能夠使得OLED(或整個開發(fā)板)的斷電,有些時候因為傳輸給OLED的信號存在問題,重新初始化OLED是無效的,需要重新上電。
實現(xiàn)的思路:
先說簡單的吧,信號發(fā)生,因為該模塊在Aux上級加了濾波,所以可以調(diào)節(jié)信號的占空比來生成正弦波,我是通過調(diào)節(jié)預分頻器來實現(xiàn)波形頻率的變化(額,這個說實話我也不太懂,我也是看了網(wǎng)上的內(nèi)容才知道的,就不多說了,以免誤導。同時因為放假前嫌示波器太重了,帶起來不方便,就沒帶回家了,我現(xiàn)在還不太清楚預分頻數(shù)值和頻率的關系,所以代碼上就寫了預分頻的數(shù)值,希望知道的人能告訴我一下,謝謝)。
示波器,通過ADC中斷來實現(xiàn)對數(shù)值的寫入,寫入后對屏幕進行滾動輸出。
這段代碼中存在一個問題,就是由于中斷的性質(zhì),我們在上一屏和下一屏之間是不太推薦去采樣的,所以會導致在快速刷新的時候,上一屏和下一屏畫面不太連續(xù)(說實話也看不太出來,但是理論上是這樣子的)。
由于屏幕分辨率的原因,對于方波這類上升沿和下降沿變化很快的信號他的上升沿和下降沿顯示就不太夠,就會出現(xiàn)上升沿和下降沿是一個點來表示的情況,但是可以通過算法來調(diào)節(jié)[1]。
達到的性能:
實現(xiàn)10us、20us、50us、0.1ms、0.5ms、2.5ms的采樣速度,并且支持僅調(diào)節(jié)源代碼里頭的數(shù)組不改變函數(shù)內(nèi)容來實現(xiàn)更多的采樣率。
實現(xiàn)1.0v、0.8v、0.4v、0.1v的電壓間隔,可以調(diào)節(jié)0-5v內(nèi)電壓顯示范圍,并且支持僅調(diào)節(jié)源代碼里頭的數(shù)組不改變函數(shù)內(nèi)容來實現(xiàn)更多的電壓間隔。
在較高電壓時以x.x來顯示,在低電壓時以.xx來顯示,同時改變電壓間隔該功能仍能復現(xiàn)。
支持局部刷新,來實現(xiàn)更高的顯示速率。
函數(shù)發(fā)生,目前因為按鍵的限制,預分頻在0-999內(nèi)調(diào)節(jié),但是可以調(diào)節(jié)源代碼里頭的變量大小的限制變量來實現(xiàn)更多的預分頻即頻率。
函數(shù)發(fā)生,支持添加占空比表來實現(xiàn)更多不同的函數(shù)發(fā)生。
源代碼和以編譯文件:
注意事項:
請勿修改CubeMX的時鐘,這會導致與實際標稱值對應不上。
已禁用UART端口,如有需要望啟用。
KEIL MDK版本,請對應版本打開。
補充:
經(jīng)過測試,HAL庫在不添加管腳、中斷,在僅有初始化的時候,添加cortex-m0 dsp庫,空間不夠,添加zerofft也存在空間不夠的情況。不排除是本人配置存在的問題,希望了解的大佬,不吝賜教,謝謝。
看了Jack大佬直播的視頻,找到了有關[1]問題的解決方法,可以通過插值來實現(xiàn)波形的連續(xù)。但是,在下文提交的代碼中,若采用插值的方法,面對Aux輸出正弦波,Ain輸入的情況,由于分辨率的原因,會出現(xiàn)一團糊的情況。不排除本人代碼水平問題,希望了解的大佬,不吝賜教,謝謝。
波形的生成,經(jīng)測試,調(diào)節(jié)預分頻的大小同時保持占空比的不變可以調(diào)節(jié)波形的頻率,但是,由于占空比的計算要使用專門的算法,不同的幅值對應某一時刻的占空比是不同的,故需要保存多個碼表來實現(xiàn)不同的幅值。[提交版已實現(xiàn)]
由于fft代碼占用空間太大,同時由于水平有限,無法實現(xiàn),提交版已經(jīng)注釋有關fft代碼(引用后可能會導致堆棧的問題,導致屏幕花屏),但是仍保留代碼在里面同時fft界面也已預留,水平較強的同學可以試一試。
去除掉fft代碼后,空間剩余好多,就添加幾組幅值不同的正弦波函數(shù)占空比表以及重新啟用了局部刷新的功能(經(jīng)測試,局部刷新相對于全局刷新有肉眼上速度的提升)。
追加:Total RO Size (Code + RO Data) 21856 ( 21.34kB)
Total RW Size (RW Data + ZI Data) 6960 ( 6.80kB)
Total ROM Size (Code + RO Data + RW Data) 21924 ( 21.41kB) 可以看到,RAM空間快不足了,可能提交的這份代碼有點難以實現(xiàn),如果要用的話可以手動關閉局部刷新,可以省出來1k的RAM。
貼幾張圖吧:
update:添加波形幅值調(diào)節(jié)
編輯:jq
-
示波器
+關注
關注
113文章
6579瀏覽量
188335 -
OLED
+關注
關注
119文章
6273瀏覽量
227270 -
adc
+關注
關注
99文章
6649瀏覽量
548376
原文標題:簡易示波器和信號發(fā)生器的實現(xiàn)
文章出處:【微信號:xiaojiaoyafpga,微信公眾號:電子森林】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
用CYC8038搭建簡易函數(shù)發(fā)生器


開機報錯失鎖?怎么回事?今天就帶大家沉浸式體驗N5171B信號發(fā)生器維修過程 #信號發(fā)生器維修 #電工維修
信號發(fā)生器PM調(diào)制信號設置

信號發(fā)生器的組成元件

DDS信號發(fā)生器支持單通道50個正弦載波!#信號發(fā)生器 #AWG #DDS
信號發(fā)生器的發(fā)展、分類及關鍵技術


DDS信號發(fā)生器在量子研究中的應用——控制聲光偏轉(zhuǎn)器/調(diào)制器 #DDS #信號發(fā)生器 #量子 #聲光偏轉(zhuǎn)器
泰克信號發(fā)生器的半導體測試應用

如何根據(jù)信號的頻率特性選擇合適的示波器帶寬?

新手入門教程|信號發(fā)生器也能輸出高壓大電流信號!#信號發(fā)生器 #信號源 #高壓信號 #電子工程師 #電子基礎

信號發(fā)生器如何進行通訊設置#信號發(fā)生器#通訊設置#示波器#網(wǎng)絡分析儀#示波器維修

評論