从STC8A到STM32G030:老刘示波器的移植、优化和踩坑

本文记录了我将经典的老刘示波器方案从STC8A单片机移植到STM32G030的过程,实现了包括±25V电压采样、锂电池供电管理、片内Flash存储参数等多项优化。文中分享了硬件设计、ADC采样(TIM+ADC+DMA)的代码与踩坑经验,适合对嵌入式仪表DIY感兴趣的开发者参考。

很久之前我就想自己做个示波器,也了解了一些方案。有的用STM32,有的用51,有的用STM32+FPGA,还有的用纯FPGA(内部搭软核),直到看到了老刘示波器的方案。

其实几年前就看到了,他竟然在0.96寸的OLED上搞了这么多元素,真是有点东西。源码我基本也看了一遍,框架差不多都搞懂了。

刚好最近不太忙,于是利用业余时间准备复刻+改进一下。

为什么不选个功能强大的?屏幕大的?

理由很简单,我只想做个玩具,不想太复杂,不想给自己添麻烦。

MCU我计划换成STM32G030F6,TSSOP-20封装,毕竟我还是比较喜欢小巧的东西。而且,STM32的AD采样支持定时器触发+DMA存取,简直不要太方便。

原理图如下:

PCB部分如下:

3D效果图如下:

原版方案操作部分如下(我懒得写了):

我做了一些改动:

1、板上增加了一个充电芯片IP5306,通过type-c实现锂电池充电,还能给电路输出5V供电。但是有个问题,板子耗电量不到50ma,所以IP5306供电30秒就断电了。下一版,我想想加点什么负载吧………

2、增加电荷泵芯片ICL7660,生成-5V负压,再加上运放,实现了负电压采样。支持采集的电压范围是±25V。

3、去掉了片外的24C02,使用STM32片内的flash存储相关参数。为了避免flash寿命掉的太快,还考虑了磨损的算法。

4、前面说的,ADC采样那里,使用了TIM+ADC+DMA的方式,真的不要太爽。我之前也写过这方面的笔记,可以看:STM32G0多通道ADC采样定时器触发DMA传输。老刘的版本里面,横轴时间区间最低做到了100us,使用TIM+ADC+DMA的方式,可以做的更低,但是我还没来得及改………..

还有些布线错误,飞线解决了,果然第一版必然出问题….

串口通过CH340和TPYE-C可以接到电脑上,还预留了一个PWM输出引脚,可以做一个简单的PWM信号发生器。总之,大部分引脚基本都用上了。

引脚分配大致如下:

移植调试的过程还是很开心的,毕竟是给自己做玩具。实际的显示效果如下:

原理图和程序源码我上传到了公众号后台,有兴趣的同学微信公众号后台回复关键词:031或者“老刘示波器”,即可获取下载链接。

我是单片机爱好者-MCU起航,打完收工!

发表评论

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理