关于stm32的示波器,网上以经有很多了。这里还是想把自己的设计思想发表出来。这个项目已经准备了很久。这里首先要感谢以前的团队,非常感觉陈师和覃总两位经验丰富的嵌入式工程师,获得了不少多方面的考虑。如果不是工作调整等原因,很有可能会出产品。但最后没有做完深感遗憾。这里发表下我的设计流程,希望能给做示波器的朋友有一定的帮助。也是让自己对此项目的一个总结。 本示波器有效测量频率0.1 ~ 100KHz 双通道 集成信号发生器 时间轴每格 1,2,5递增范围:2us ~ 1s 时间轴每屏12格 硬件结构:
双通道。 (设计扩展外部高速AD,上述原因没能得以完成)
整个的数据流程如下: 数据采样分为三个部分:
在这之间以20us为例: 20us每格 * 12格 = 240us每屏。 采样率为1m也就是1us只可以采样到1个数据,上面提到了屏是320宽。 所以在这种情况下,1个数据在显示屏会对应1个或几个点。 因此在2~20us之间都用最大采样率1MHz采样。 采用连续采样模式。 ) W3 ]( n" m3 c3 ` F6 f5 p, G
在这之间的时间段中,只要采样周期调整和所选时间轴相同,就可以采样点与屏上的点一一对应。 采用定时器触发采样模式。
参考了海太科等品牌的示波器,在这种低速情况下在屏上循环显示(显示屏收尾相接)。 同样采用定时器触发采样模式。 7 x9 m* q( ~+ C2 W# b# ~: ]* T 数据解析:
在获得采样数据后的数据参数的获得就比较简单了。 这里需要提的就是采样点与显示点的对应关系: % R/ }7 S$ G* [, d3 n* A在中速,低速采样: 采样点显示点一一对应。 在高速采样时: 不管时间轴为多少采样周期都是1us; 采样点与显示点的对应关系为 (320屏宽)/(时间轴 * 12格 / 1us) 6 N$ F2 N( c0 g+ U4 c
低速采样不进行触发,因为是循环显示。 在高速和中速采样 三倍屏幕的数据,与触发线比较获得匹配的一段数据进行显示。
; L3 d+ Z( A! g4 f5 N 信号发生器: 这部分就很简单了,先计算出一个周期的波形放在数组中,用DMA循环更新DA就可以了。 显示: 这部分就直接上图吧: & v# u# j, N% v- E. p) F 5 u/ W+ }, `# m @# g- s' k# ~ ) F% |: B5 ]) c g! Z2 r6 H) r |
STM32固件库分享,超全系列整理
STM32的CAN FD位定时设置注意事项
基于STM32将移植 SBSFU 到 STM32G070过程分享
基于STM32G030 RAM不够用经验分享
STM32G070在OLED上移植U8G2单色GUI
【经验分享】STM32 IAP+Ymodem功能实现(参考官方代码)
【经验分享】STM32的SPI问题
【经验分享】STM32 的加密实现
STM32G070—使用platformio+arduino
STM32G0-Platformio平台下使用libopencm3库