2021-08-23 23:51:05 索煒達電子 1400
項目編號:E533
文件大小:25M
源碼說明:帶中文注釋
開發(fā)環(huán)境:C編譯器
簡要概述
示波器Pro版本,在原版的基礎上,擴展了測量負電壓的功能,更新了UI設計,屏幕升級為1.3寸OLED屏。你可以在doc文件夾,獲取設計報告和相關的芯片數(shù)據(jù)手冊。
3D仿真效果圖:
2D仿真效果圖:
實物效果圖:
系統(tǒng)架構
Mini示波器采用了一套成本低廉但高效的硬件,配合層次化的軟件框架,實現(xiàn)對常規(guī)低頻信號波形的采集、分析、顯示。
硬件部分的主要工作有:電源管理(5V、2.5V、-5V);對信號的衰減、限幅、偏置。最后將處理好的電壓信號送入MCU的ADC外設,進行數(shù)據(jù)采集。由于ADC外設只能采集正電壓,因此我們通過增加偏置電壓的方式,將負電壓抬高來采集。
軟件部分的主要工作有:底層驅(qū)動SDK框架、ADC濾波算法、波形數(shù)據(jù)處理、人機交互界面。SDK提供基本的模塊和外設驅(qū)動支持,濾波算法去除噪聲和毛刺,波形處理計算電壓值和頻率,并為波形顯示做準備;人機交互界面提供屏幕顯示(OLED屏)和操作方式(旋鈕和按鍵)。
與原版對比
這一版本的Mini示波器-Pro,相比于原版對硬件部分做了很大擴展,使其可以測到負電壓。軟件部分修改了有30%,主要是在數(shù)據(jù)處理和UI顯示部分。
調(diào)參教程
示波器采樣的原理與原版一致,但是由于硬件上加了許多電路,導致信號呈非線性變化,因此需要對系統(tǒng)計算的結果進行處理。
這里提供兩種辦法:
1. 對原采樣方法進行改進
原版的采樣模式,是利用了芯片自帶的12位ADC進行采樣,所以可以對ADC的采樣函數(shù)進行優(yōu)化。原版使用了查詢法,通過循環(huán)等待采樣完成標志位,獲取采樣結果。
頻率的計算,是根據(jù)不同的采樣時間(delay延時等待法),來分段計算頻率值。這里可以通過定時器來控制采樣時間,提高精確度。
2. 對原采樣結果上進行擬合
直接在原版的采樣結果上進行數(shù)據(jù)擬合,這樣做比較快捷,也是我用的方法(主要是趕時間)。但是誤差較大,且需要測算的數(shù)據(jù)量有一點多。
具體的方法是,首先記錄原采樣的結果,電壓幅度的刻度為0.5V,范圍是從0V到20V。 頻率的刻度為1KHz,范圍是從0KHZ到20KHz。將測算的結果與輸入的信號,一一對應擬合出計算公式,我采用的Excel來操作,選擇的是對數(shù)函數(shù)來擬合,數(shù)據(jù)有誤差。
具體需要擬合的函數(shù)在chart.c文件中,函數(shù)名稱如下:
/* 需要擬合數(shù)據(jù)的函數(shù)如下:*/
void getWaveFreq(void);
void AnalyseData(void);
/* 擬合數(shù)據(jù)的結果存放在如下變量:*/
VMax_m /* 存放電壓最大值 */
VMin_m /* 存放電壓最小值 */
Mvoltage /* 存放電壓平均值 */
WaveFreq /* 存放頻率值 */
開發(fā)者在調(diào)參的時候,可以屏蔽我的擬合代碼,進行原方法采樣結果的記錄,然后進行數(shù)據(jù)擬合。我會在代碼中進行標注,方便開發(fā)者查找和修改。
需要改進的地方
1.硬件的性能還沒有全部發(fā)揮出來,測量幅度還可以更高。 2.MCU的性能還沒有榨干,比如沒有用上硬件SPI,提高屏幕刷新率。
開發(fā)后記
1.最一開始設想的方案,我是想用上我寫的AntOS操作系統(tǒng)的,但是初版操作系統(tǒng),為合作式調(diào)度,實際使用的過程中,并沒有達到我的預期效果,所以選擇在老劉示波器的基礎工程上修改和優(yōu)化。
2.硬件設計主要參考了B站唐老師講電賽大佬提供的方案,實際使用的過程中,我又微調(diào)了一部分,建議大家可以去閱讀一下硬件電路中使用的幾種芯片數(shù)據(jù)手冊,這樣心里更有底,不然遇到問題不好排查。
3.大多數(shù)元器件,我用的都是0603的封裝,這樣可以讓PCB板設計的更小巧更緊湊,但是不好焊接。
4.下一版本,我將使用STC8AxD4作為主控(因為有DMA),軟件上使用我現(xiàn)在編寫AntOS(已支持搶占式調(diào)度),進一步提高示波器的性能。
目錄│文件列表:
└ mini-dso-pro
├ doc
│ ├ datasheet
│ │ └ STC8A-STC8F-20210308.pdf
│ ├ image
│ │ │ 2D反面.png
│ │ │ 2D正面.png
│ │ │ 3D正面.png
│ │ │ 實物圖正面.png
│ │ └ 系統(tǒng)原理圖.png
│ └ report
│ └ MinDSO-Pro設計報告.doc
├ pcb
│ │ BOM.xlsx
│ │ Mini示波器-Pro-sch.pdf
│ └ Mini示波器-Pro-pcb
│ │ Gerber_BoardOutline.GKO
│ │ Gerber_BottomLayer.GBL
│ │ Gerber_BottomSilkLayer.GBO
│ │ Gerber_BottomSolderMaskLayer.GBS
│ │ Gerber_Drill_NPTH.DRL
│ │ Gerber_Drill_PTH.DRL
│ │ Gerber_TopLayer.GTL
│ │ Gerber_TopPasteMaskLayer.GTP
│ │ Gerber_TopSilkLayer.GTO
│ │ Gerber_TopSolderMaskLayer.GTS
│ └ PCB下單必讀.txt
├ project
│ └ MiniDSO-Pro v1.0
│ │ adc_stc8.c
│ │ adc_stc8.h
│ │ bmp.h
│ │ chart.c
│ │ chart.h
│ │ Clear.bat
│ │ config_stc.h
│ │ delay.c
│ │ delay.h
│ │ EEPROM.bin
│ │ eeprom.c
│ │ eeprom.h
│ │ global.c
│ │ global.h
│ │ main.c
│ │ Mini DSO.uvgui.Administrator
│ │ Mini DSO.uvopt
│ │ Mini DSO.uvproj
│ │ settings.c
│ │ settings.h
│ │ ssd1306.c
│ │ ssd1306.h
│ │ ssd1306font.h
│ │ STARTUP.A51
│ ├ .vscode
│ │ │ c_cpp_properties.json
│ │ │ keil-assistant.log
│ │ │ uv4.log
│ │ └ uv4.log.lock
│ ├ Objects
│ │ │ Mini_DSO
│ │ └ Mini_DSO.hex
│ └ uart
│ │ drv_uart.c
│ └ drv_uart.h
└ tools
└ tl431計算器.zip