嘉立创产业服务站群
必应搜索
发作品签到
专业版

基于GD32的简易示波器项目

工程标签

1.4k
0
0
3

简介

基于GD32的简易示波器项目

简介:基于GD32的简易示波器项目
简易数字示波器训练营

开源协议

GPL 3.0

(未经作者授权,禁止转载)
创建时间:2024-03-04 12:28:42更新时间:2024-04-03 09:24:50

描述

本项目是参加嘉立创的训练营复刻出来的简易示波器

 

嘉立创视频教程:手把手教你做数字示波器:免费训练营开营啦!_哔哩哔哩_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 输出频率 方便单片机采集频率

当输出为高电平时,输出端上拉到高电平,算得Uth=U+=2.214V。当运放输出为低电平时,输出端接地,算得Utl=U-=2.172V。

这一部分我认为其实没啥好讲 学过运放的同学们都知道(那万一有新手啥的 不知道的怎么办呢)

这里有个网址参考学习 :   模拟电路之迟滞比较器 - 知乎 (zhihu.com)

 

 

 
使用了XD7660负压产生电路得到一个 负电压,该芯片外围电路简单,只需要两个电容和一个二极管即可工作,理论上输入电压为+5V,也可以输出一个-5V的电压,由于芯片内部存在一定压降及转换效率,实际测量负电压为-4.3V左右,也能满足运算放大器的要求。(贴片的XD7660 D1二极管是不需要加的,我这里使用的是直插)

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

暂无BOM

附件

序号文件名称下载次数
1
video_20240402_115726.mp4
142
2
简易示波器案例.zip
110
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航