站内搜索
发作品签到
专业版

#训练营#基于GD32的简易示波器

工程标签

820
0
0
3

简介

基于GD32F103RB单片机设计,支持双通道示波器+双通道DAC+单通道PWM+锂电池供电+李萨茹图形

简介:基于GD32F103RB单片机设计,支持双通道示波器+双通道DAC+单通道PWM+锂电池供电+李萨茹图形
简易数字示波器训练营

开源协议

MIT License

(未经作者授权,禁止转载)
创建时间:2024-03-04 19:51:36更新时间:2024-04-07 14:47:32

描述

一、简介

基于GD32F103RB单片机,硬件支持双通道示波器、双通道DAC、单通道PWM、锂电池供电;支持李萨如图形显示。

代码比较仓促,肯定有一些bug的,后续有时间会改的,先开源;代码里面借鉴了一些RT-Thread的东西,RT-Thread的框架是真不错啊。

代码开源地址:https://gitee.com/orange_gg/dso_1-m.git

参数:

屏幕

240*240 1.3寸

单片机

GD32F103RBT6

采集、

显示

双通道

DAC

双通道DAC(T型电阻网络)

采样率(最大1MHz)

正弦波、三角波、锯齿波

交、直流耦合

1-25KHz

输入电压范围-2V~+6V

PWM

占空比可调1-99%

李萨茹图像(x-y模式)

1-100KHz

频率计

供电

5V-typec

电压峰峰值

锂电池

二、主要硬件分析

1.模拟前端分析:

  1. U9用于交直流耦合切换;
  2. R48、R49、R50电阻网络对输入增益为:;U4.1做跟随
  3. U4.2做反相比例放大,则
  4. 这里
  5. ,其中Rf可以通过U18选择不同增益。
  6. 到这里,就能根据输出电压范围(0-3.3V)反推输入电压范围为:-2.109V到+6.141V。

2. T型电阻网络DAC:

只使用单纯的电阻网络(T型网络)就能实现数字转模拟,其主要由T型电阻网络、运算放大器、基准电源和模拟开关组成。

这里设计时做了一定的阉割,只实现了0-3.3V的DAC输出(实际上是达不到3.3V,主要看运放性能和单片机GPIO驱动能力了)。这里基准电源是由单片机GPIO高电平提供。图中的U5.2只是用来跟随输出,增强输出的驱动能力。该DAC使用10个GPIO驱动,其分辨率为1024。本次设计中共设计两个DAC(DAC0、DAC1)占20个GPIO;

注意:同组DAC的驱动信号至少需要放在同组GPIO上才能使用DMA搬运数据来输出波形,例如ADC0_D0-ADC0_D9都放在GPIOB,可以不同顺序。使用同组GPIO这样DMA的外设地址就可以使用GPIOx_BOP。且GPIOx_BOP的CRy位配合BOPy位可以实现同组任意GPIO的置位、复位操作,而不影响同组其他GPIO。寄存器说明见下图。

3. 充放电:

锂电池充放电就比较简单了,具体可以看数据手册,充电电流根据R52调节 输入电流通过二极管防止倒灌,轻松实现电池VBAT或VCC_5V切换。如果使用mos管对电池能量利用会更好,推荐下图电路替代双二极管。

4. 踩坑:

①负电压输出:使用芯片为TP7660H,输出-3.3V,最终实际输出为-2V左右,由于该示波器为双通道,使用两个运放,电流较大,导致TP7660输出无法驱动。好在7660是电荷泵方案,可以无脑并联,并联两个TP7660后输出能到-2V,轻松秒杀。(原理图里面没改)

②TP4056使能不使能:破防了啊啊;调试发现电池不充电,看原理图使能引脚接地了。不想打板了,飞根线就这样吧。(原理图里面已经改了)

其他硬件就不介绍了,基本和训练营视频中讲的差不多。

三、展示

1.波形显示:

双通道波形显示、频率测量、峰峰值测量、交直流耦合方式选择,采样率最高1MHz(双通道),GD32F103RBT6有两个ADC,两个采样通道各分配一个ADC,配合定时器DMA可以实现双通道同步自动采样(1MHz并不是极限采样频率);如果使用ADC交替采样理论上可以单通道2MHz采样率,这里没有使用该方法。效果图如下。

交直流耦合输出选择,使用固态继电器程序控制交直流选择,下图A中CHB绿色波形为交流耦合波形,CHA蓝色波形为直流耦合波形;图B为方波波形,失真严重是因为耦合电容不合适,更换100nF的就好了,如图C所示。

图A

图B

图C

2.李萨如图形:

 

李萨如图形,也称为李萨茹曲线或鲍迪奇曲线,是两个沿着互相垂直方向的正弦振动的合成的轨迹。这种图形是通过将被测正弦信号和频率已知的标准信号分别加至示波器的Y轴输入端和x轴输入端而产生的。在示波器显示屏上,这两个信号的合成将呈现出一个独特的图形,即李萨如图形,如上图所示。

李萨如图形的形状会随两个输入信号的频率、相位和幅度的不同而发生变化。例如,当两个信号的相位差为90°时,合成图形呈现为正椭圆;若此时两个信号的振幅相同,则合成图形为圆。而当两个信号的相位差为0°时,合成图形为直线;若此时两个信号的振幅相同,则这条直线与x轴成45°角,如下图所示。

 

同相位同频率两正弦波的李萨如图形,感觉不太对,查找原因发现是程序中图像绘制原点是右下角,左右镜像一下就对了。

 

频率比1:2的李萨如图形。

3.DAC输出波形:

原理:预先存储好各个波形采样点对应值,通过定时器控制DMA传输频率,DMA由内存(预先存储的采样点)搬运到GPIO端口,完全不需要CPU干预,只有在调整波形或频率时才会由CPU出手配置一次,因此每配置一次波形两通道输出波形的相位就会有所差异;相位同步也很简单,将两通道同时或者说在极短时间内同时配置一次即可解决。

可以借助python输出正弦波对应的GPIO端口数据:

 

# python,正弦波转换

import math

period = 2*math.pi

point = 128

amp = 418

tup_sin = {i: None for i in range(64)}

print(f"const uint16_t sin_buf[{point}]=")

print("{")

for i in range(point):

if i%10==0:

print()

angle = i*period/point

value = math.sin(angle)

value = int(value*amp)

value = value+amp

tup_sin[i] = int(value)

print("//输出正弦波")

print(f"const uint32_t sin_buf[{point}]=")

print("{")

for i in range(point):

if i%10==0:

print()

data = tup_sin[i]&0x3FF | ((~tup_sin[i]&0x3FF)<<16) #低10bit用作DAC驱动信号

print(f"0x{data:<8x}", end=", ")

print("};")

print("//输出正弦波结束")

对应输出结果如下

const uint32_t sin_buf[128]=

{//输出正弦波

0x25d01a2 , 0x24901b6 , 0x23501ca , 0x22001df , 0x20c01f3 , 0x1f80207 , 0x1e4021b , 0x1d1022e , 0x1be0241 , 0x1ab0254 ,

0x1980267 , 0x1870278 , 0x175028a , 0x164029b , 0x15402ab , 0x14502ba , 0x13602c9 , 0x12802d7 , 0x11a02e5 , 0x10e02f1 ,

0x10202fd , 0xf70308 , 0xed0312 , 0xe4031b , 0xdb0324 , 0xd4032b , 0xcd0332 , 0xc80337 , 0xc4033b , 0xc0033f ,

0xbe0341 , 0xbc0343 , 0xbb0344 , 0xbc0343 , 0xbe0341 , 0xc0033f , 0xc4033b , 0xc80337 , 0xcd0332 , 0xd4032b ,

0xdb0324 , 0xe4031b , 0xed0312 , 0xf70308 , 0x10202fd , 0x10e02f1 , 0x11a02e5 , 0x12802d7 , 0x13602c9 , 0x14502ba ,

0x15402ab , 0x164029b , 0x175028a , 0x1870278 , 0x1980267 , 0x1ab0254 , 0x1be0241 , 0x1d1022e , 0x1e4021b , 0x1f80207 ,

0x20c01f3 , 0x22001df , 0x23501ca , 0x24901b6 , 0x25d01a2 , 0x271018e , 0x285017a , 0x29a0165 , 0x2ae0151 , 0x2c2013d ,

0x2d60129 , 0x2e90116 , 0x2fc0103 , 0x30f00f0 , 0x32200dd , 0x33300cc , 0x34500ba , 0x35600a9 , 0x3660099 , 0x375008a ,

0x384007b , 0x392006d , 0x3a0005f , 0x3ac0053 , 0x3b80047 , 0x3c3003c , 0x3cd0032 , 0x3d60029 , 0x3df0020 , 0x3e60019 ,

0x3ed0012 , 0x3f2000d , 0x3f60009 , 0x3fa0005 , 0x3fc0003 , 0x3fe0001 , 0x3ff0000 , 0x3fe0001 , 0x3fc0003 , 0x3fa0005 ,

0x3f60009 , 0x3f2000d , 0x3ed0012 , 0x3e60019 , 0x3df0020 , 0x3d60029 , 0x3cd0032 , 0x3c3003c , 0x3b80047 , 0x3ac0053 ,

0x3a0005f , 0x392006d , 0x384007b , 0x375008a , 0x3660099 , 0x35600a9 , 0x34500ba , 0x33300cc , 0x32200dd , 0x30f00f0 ,

0x2fc0103 , 0x2e90116 , 0x2d60129 , 0x2c2013d , 0x2ae0151 , 0x29a0165 , 0x285017a , 0x271018e , };

 

4.PWM输出:

 

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
VID_20240404_154022_1.mp4
15
2
vid.mp4
7
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

评论

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

底部导航