
开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
本项目是参加嘉立创的训练营复刻出来的简易示波器
嘉立创视频教程:手把手教你做数字示波器:免费训练营开营啦!_哔哩哔哩_bilibili
这个项目的代码烧写我是用DAPLink烧录的 可以一边串口调试 一边烧写 真的方便 绝绝子
这个示波器的精度测量是20Khz以内是没问题的
听我叨一叨:这个项目很简单,但是难度在软件代码那边,因为测量低频,硬件上来说就没有很复杂,已经很简单了,B站上也是有教程的 但是视频里的内容会带你写完每个底层驱动的配置 最后的综合示波器的每个功能组合起来是需要自己去写,这一步我觉得嘉立创做的很好,不希望大家全程一定要跟视频走,会缺少自己思考实战的能力,但是也怕大家真的没思路,也给了例程代码,可以从中学习到编写代码的思路与规范风格,但是视频里对于一些代码,是直接复制的大概会讲一下这句代码是什么意思(对于视频里的讲解人也表示理解 不这样干会拖进度,对于新手非常友好 可以直接上手) 我自己代码是都纯手敲 一步一步配置下来 有些一模一样的可以复制,碰到结构体的配置,一些函数不懂的,强烈建议大家一定要去查GD32的固件库函数使用手册,或者数据手册,会告诉你怎么配置结构和 函数里的参数 这样对于代码底层的理解会更深刻 好了 我的叨叨结束了 ,下面进入正片
电路分析
(1)模拟前端处理电路:负责将输入的检测模拟信号进行处理后给单片机进行识别,具体电路包括了交直流耦合选择电路、电压衰减电路、信号处理电路以及频率检测电路,是整个电路的核心。
(2)电源电路:负责给运放提供正负电源以及系统供电,是保障电路正常运行的基础;
(3)单片机电路:给系统提供控制核心,负责对输入信号的采集与处理输出工作;
(4)人机交互电路:用于控制示波器功能,包括按键、旋钮、LED灯、显示屏以及其它输入输出接口,为示波器功能的开发提供基础。
这里只讲一些重点的电路
图里的RF1我用的是BNC转鳄鱼夹线,不是那种专业示波器的探头,只对电路进行简单分析 通过SW2实现了两个通道 AC和DC 对于AC交流输入耦合电容的取值 C5容值是100nF 大电容通低频,小电容通高频 其自谐振频率为4Mhz,一般要求电容的截止频率fc=(1/5)*fo ,其中fo为电路中工作频率。由此可知在该项目中100nF是足够应用的,但如果输入信号频率更高,就应该选择更小的电容。
电压的衰减是用电阻串联分压完成的 1/50倍 计算公式:20K/(510K+470K+20)=1/50
当SW2开关2和3接到一起时,可以测量的输入信号幅值为-1.6V-5V
当SW2开关2和1接到一起时,可以测量的输入信号幅值为-80V-250V
手里只有有电源 采集ADC 输出5V但是实测如下:
当SW2开关2和3: 不能达到5V
我的手里电源最大只能输出32V 开启衰减实测如下:
当SW2开关2和1:代入公式 32/50=0.64V
后面的放大电路公式推导:
AGND和GND用了0欧姆电阻
如果不懂可以看看这个网址里的可以参考学习: 0 欧电阻为什么能把数字模拟混合电路中的地分开? - 知乎 (zhihu.com)
这是滞回比较器通过输入的ADC 输出频率 方便单片机采集频率
这一部分我认为其实没啥好讲 学过运放的同学们都知道(那万一有新手啥的 不知道的怎么办呢)
这里有个网址参考学习 : 模拟电路之迟滞比较器 - 知乎 (zhihu.com)
PCB设计说明
我这里电阻电容封装用的是贴片
电源线设置是20mil 信号线设置是15mil
软件说明
我也把简易示波器代码例程放在下面 有需要的可以自己参考学习
代码没啥好讲的 只能自己学习喽 给大家讲一个屏幕显示的问题 需要去改一下lcd驱动
1.8寸 TFT 大家应该都碰到了花屏 这种情况 我也碰到 我一开始以为是屏幕本身有问题 后面问了一些大佬,说是代码显示地址 或者原点什么的问题
我仔细去看了看LCD提供的例程初始化 发现了一个问题
有问题 修改前:
else if(USE_HORIZONTAL==2)
{
LCD_WriteCmd(0x2a);//列地址设置
LCD_WriteData16(x1+1);
LCD_WriteData16(x2+1);
LCD_WriteCmd(0x2b);//行地址设置
LCD_WriteData16(y1+2);
LCD_WriteData16(y2+2);
LCD_WriteCmd(0x2c);//储存器写
}
修改后:
else if(USE_HORIZONTAL==2)
{
LCD_WriteCmd(0x2a);//列地址设置
LCD_WriteData16(x1);
LCD_WriteData16(x2);
LCD_WriteCmd(0x2b);//行地址设置
LCD_WriteData16(y1);
LCD_WriteData16(y2);
LCD_WriteCmd(0x2c);//储存器写
}
改完之后屏幕就显示正常了
(吐槽 啊啊啊)没改之前显示的时候会出现各个问题 本来靠在最右边显示黄色的,结果左边会有一条黄色短线 或者 几个黄色的点
实物图片
使用PWM输出1Khz:
使用PWM输出4Khz:
设计图

BOM


评论