1、简单易用,可快速上手
2、流畅支持300个器件或1000个焊盘以下的设计规模
3、支持简单的电路仿真
4、面向学生、老师、创客
1、全新的交互和界面
2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计
3、更严谨的设计约束,更规范的流程
4、面向企业、更专业的用户
专业版 #训练营#基于GD32的简易示波器
简介:基于GD32F103RB单片机设计,支持双通道示波器+双通道DAC+单通道PWM+锂电池供电+李萨茹图形
开源协议: MIT License
(未经作者授权,禁止转载)
已参加:简易数字示波器训练营
基于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 |
|
电压峰峰值 |
锂电池 |
只使用单纯的电阻网络(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。寄存器说明见下图。
锂电池充放电就比较简单了,具体可以看数据手册,充电电流根据R52调节 输入电流通过二极管防止倒灌,轻松实现电池VBAT或VCC_5V切换。如果使用mos管对电池能量利用会更好,推荐下图电路替代双二极管。
①负电压输出:使用芯片为TP7660H,输出-3.3V,最终实际输出为-2V左右,由于该示波器为双通道,使用两个运放,电流较大,导致TP7660输出无法驱动。好在7660是电荷泵方案,可以无脑并联,并联两个TP7660后输出能到-2V,轻松秒杀。(原理图里面没改)
②TP4056使能不使能:破防了啊啊;调试发现电池不充电,看原理图使能引脚接地了。不想打板了,飞根线就这样吧。(原理图里面已经改了)
其他硬件就不介绍了,基本和训练营视频中讲的差不多。
双通道波形显示、频率测量、峰峰值测量、交直流耦合方式选择,采样率最高1MHz(双通道),GD32F103RBT6有两个ADC,两个采样通道各分配一个ADC,配合定时器DMA可以实现双通道同步自动采样(1MHz并不是极限采样频率);如果使用ADC交替采样理论上可以单通道2MHz采样率,这里没有使用该方法。效果图如下。
交直流耦合输出选择,使用固态继电器程序控制交直流选择,下图A中CHB绿色波形为交流耦合波形,CHA蓝色波形为直流耦合波形;图B为方波波形,失真严重是因为耦合电容不合适,更换100nF的就好了,如图C所示。
图A
图B
图C
李萨如图形,也称为李萨茹曲线或鲍迪奇曲线,是两个沿着互相垂直方向的正弦振动的合成的轨迹。这种图形是通过将被测正弦信号和频率已知的标准信号分别加至示波器的Y轴输入端和x轴输入端而产生的。在示波器显示屏上,这两个信号的合成将呈现出一个独特的图形,即李萨如图形,如上图所示。
李萨如图形的形状会随两个输入信号的频率、相位和幅度的不同而发生变化。例如,当两个信号的相位差为90°时,合成图形呈现为正椭圆;若此时两个信号的振幅相同,则合成图形为圆。而当两个信号的相位差为0°时,合成图形为直线;若此时两个信号的振幅相同,则这条直线与x轴成45°角,如下图所示。
同相位同频率两正弦波的李萨如图形,感觉不太对,查找原因发现是程序中图像绘制原点是右下角,左右镜像一下就对了。
频率比1:2的李萨如图形。
原理:预先存储好各个波形采样点对应值,通过定时器控制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 , };
加载中...
是否需要添加此工程到专辑?