本文作者:立创开源硬件平台 OSHWHub 用户@Eltecz,禁止商用,未经许可禁止转载,点击查看原文章
1、工程描述
使用了STM32G030F6P6单片机,支持双通道的可调频率、可调占空比、PWM输出,以及ADC双通输入。且将单片机超频到了100M的主频,板子也可集成到其他模块上进行采集。
2、目前功能
- AD输入电压0-3.3V;
- 12bits @ 5Mhz;
- 1-2-5时基步进从200ns到500us;
- 垂直放大1-2-5-10倍;
- 三种触发方式,0-90%的10种触发电平。
3、波形测量功能
- 1-2-5时基切换PWM输出频率从10MHz到200Hz;
- 10%步进切换PWM输出占空比从0%到100%;
- 3个独立按键多层次菜单切换;
- 1个可编程LED灯;
- 预留USB串口通信,但是我搞不出来。
若运行过程中出现bug,请及时在原工程评论区滴滴。
3、原理与制作讲解
原理其实不难。
使用DMA+ADC+TIM循环采样,随后将数据搬运到内核处理即可。
实际操作
ADC的时钟可以超频,只需要保证AXI总线时钟对齐即可。因此将其超频到100M的ADC时钟,并适当增加采样延时。使得ADC采样速率达到恐怖的5M(TSMC yyds)。
定时器
定时器采用了TIM1的TRGO,连接到ADC作为时钟触发源,随后DMA一直搬运数据到内存中方便后续处理。此处可见安富莱的相关教程,了解原理。
PWM输出
这玩意的原理非常简单,可以参考安富莱的教程来了解原理。总的来说G0相较其他系列,这方面调节方式较为简单。
其他外设
之前的项目使用的是0.96寸的屏幕。虽然能用但是显示的东西不多,因此此处换了个1.14寸的屏幕。原来的按钮手感太$了,因此这里换了个波轮开关,手感确实好了不少。串口坏掉了,感觉是芯片问题,等着修复吧。
软件部分
软件部分和先前两个示波器没多大区别,基本都是把所有东西丢进while(1)里面处理。
①页面显示部分
经典画点函数,触发点部分为了节约代码大小,使用了三目运算符来判断。
②页面切换部分
使用了switch语句,配合键值来进行对选项的切换等。本项目代码和思路大致如此。
4、设计图
更多详情及附件,可从原工程查看。
本文作者:立创开源硬件平台 OSHWHub 用户@Eltecz,禁止商用,未经许可禁止转载。