關於stm32的示波器,網上以經有很多了。這里還是想把自己的設計思想發表出來。這個項目已經准備了很久。這里首先要感謝以前的團隊,非常感覺陳師和覃總兩位經驗豐富的嵌入式工程師,獲得了不少多方面的考慮。如果不是工作調整等原因,很有可能會出產品。但最后沒有做完深感遺憾。這里發表下我的設計流程,希望能給做示波器的朋友有一定的幫助。也是讓自己對此項目的一個總結。
本示波器有效測量頻率0.1 ~ 100KHz
雙通道
集成信號發生器
時間軸每格 1,2,5遞增范圍:2us ~ 1s
時間軸每屏12格
硬件結構:
- 主芯 stm32zet6
- 觸摸屏 SSD1289 320*240 RGB565
- AD: STM32內部ADC 1MHz采樣率
雙通道。
(設計擴展外部高速AD,上述原因沒能得以完成)
- DA:內部DAC 20K以內正弦波,鋸齒波和方波。
- 平台:uCOSIII,
- 圖形:uCGUI
軟件設計:
設計思想
整個的數據流程如下:
數據采樣分為三個部分:
- 高速采樣(2us ~ 20us 包括20us);
在這之間以20us為例:
20us每格 * 12格 = 240us每屏。
采樣率為1m也就是1us只可以采樣到1個數據,上面提到了屏是320寬。
所以在這種情況下,1個數據在顯示屏會對應1個或幾個點。
因此在2~20us之間都用最大采樣率1MHz采樣。
采用連續采樣模式。
- 中速采樣(50us ~ 20ms 包括20ms);
在這之間的時間段中,只要采樣周期調整和所選時間軸相同,就可以采樣點與屏上的點一一對應。
采用定時器觸發采樣模式。
- 低速采樣(大於等於50ms時)。
參考了海太科等品牌的示波器,在這種低速情況下在屏上循環顯示(顯示屏收尾相接)。
同樣采用定時器觸發采樣模式。
數據解析:
- 波形參數:周期,占空比,最大值,最小值等等。
在獲得采樣數據后的數據參數的獲得就比較簡單了。
這里需要提的就是采樣點與顯示點的對應關系:
在中速,低速采樣:
采樣點顯示點一一對應。
在高速采樣時:
不管時間軸為多少采樣周期都是1us;
采樣點與顯示點的對應關系為 (320屏寬)/(時間軸 * 12格 / 1us)
- 尋找觸發點:
低速采樣不進行觸發,因為是循環顯示。
在高速和中速采樣 三倍屏幕的數據,與觸發線比較獲得匹配的一段數據進行顯示。
信號發生器:
這部分就很簡單了,先計算出一個周期的波形放在數組中,用DMA循環更新DA就可以了。
顯示:
這部分就直接上圖吧:
這里兩段視屏: