【立创*梁山派】便携式多功能示波器/仪表
简介
参加立创示波器训练进阶营,使用立创开发板梁山派以及配套的4.3寸触摸屏设计的便携式多功能仪表,具有示波器、信号发生器、串口数据查看器等功能。
简介:参加立创示波器训练进阶营,使用立创开发板梁山派以及配套的4.3寸触摸屏设计的便携式多功能仪表,具有示波器、信号发生器、串口数据查看器等功能。开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
项目介绍
本项目是基于立创开发板梁山派以及配套的98元4.3寸RGB触摸屏设计的便携式多功能仪表,具有双通道示波器、信号发生器、串口数据查看器等功能。148元的那款后续程序适配好后也一并开源。
具体的使用视频已发布在B站上,欢迎大家观看:【点我跳转B站实物演示视频!】
1、系统整体框图如下:
本项目的某些内容参考了梁山派示波器官方案例【示波器拓展板】,并对其多个方面进行补充及完善,实现可充电的便携性、双通道信号采集、4.3寸大屏幕、全触摸人机交互、串口信号查看(支持汉字)等功能。
2、性能参数如下:
(1)示波器
①支持双通道最大±10V峰峰值的信号输入,采样率为2MSPS,测量波形能稳定显示。
②支持一键Auto功能,自动将波形调节到适宜条件下显示。
③具有触发功能,可实现波形垂直偏移量、水平偏移量、触发阈值等调节。
(2)信号发生器
①支持正弦波、方波、三角波、正锯齿波、反锯齿波五种波形的输出。
②输出频率支持1KHZ-50KHZ每1KHZ连续调节。
③输出峰峰值支持0.5V-2.5V每0.1V连续调节。
(3)串口数据查看器
①支持多种波特率的调节。
②支持文本显示、HEX数据显示、波形解析显示功能。
③支持接收任意中文汉字显示。
硬件电路设计
1、信号耦合电路
单片机控制对应的GPIO高低电平进而控制固态继电器实现输入信号的AC/DC耦合。
2、模拟前端电路
模拟前端电路借鉴梁山派示波器拓展板官方案例,具体可参考:【示波器拓展板】
信号衰减电路:
信号增益处理与垂直平移电路:
信号发生器电路:
3、电源电路
使用SGM3204电荷泵产生-5V电压,提供给运放的双电源供电使用。
使用CJ431产生2.5V电压,作为单片机ADC基准源电压。此时应注意,梁山派的ADC基准源电压默认是3.3V,因此务必务必要拆除梁山派上对应的A3.3V AGND的0欧跳线电阻,不然最后测量得到的数据会出错,甚至会烧坏电路。
使用ME2159AM6G对锂电池电压升压到5V
锂电池的充电管理使用的是LP4056HSPF,当进行充电时,LED会点亮,提示用户正在充电,充电完成,LED熄灭。
锂电池选择
由于空间限制,故本项目使用一块3mm厚,50mm*60mm的1200mah锂电池为整个系统供电,使用热熔胶将其安装在PCB与RGB屏幕之间。
参考淘宝购物车链接:
77₤WEYTWPyGCsC₤ https://m.tb.cn/h.5uFXj1X CZ3460 我分享给你了一个超赞的内容,快来看看吧
4、RGB屏幕
本项目使用立创开发板配套的4.3寸RGB屏幕,800*480的屏幕像素,显示内容细腻,由于梁山派上自带RGB接口,所以硬件电路不必再单独设计。
购买链接:https://item.szlcsc.com/8351841.html?t=1708862395529&s=1708862395529
5、PCB绘制说明
因为4.3寸RGB屏幕宽度超过了10cm,所以在画板框时将宽度缩短到10cm以内,保证能够免费打样。
本项目PCB采用双层PCB布线,使用了AGND和GND两个地层,两者通过0欧电阻跨接。
LED4为充电指示灯,靠近板框边沿放置,当插入充电时,LED点亮,充电完成后LED熄灭,同时板子通电时,可以在屏幕顶端的电池图标查看充电详情。
PCB实物图及各接口功能说明如下
在另一个PCB文件中提供了底板尺寸图,可定制亚克力底板,再使用铜柱固定在背面,起到一定的保护作用。
功能使用说明
1、示波器功能说明
整体的UI界面如图所示,所有的人机交互均采用触屏的方式,使得操作更加方便。注意看此图中显示正弦波的噪声程度还是挺大的,这是因为当时整个系统的供电用的是电脑USB的,可能是USB电源的纹波较大,导致ADC转换出来的数据有些抖动,但是换成锂电池供电,这个现象就好很多了!
观察UI界面,最左上角的是电池电量显示;其次是AUTO按钮,当波形显示密度过密或过疏时,可按下AUTO按钮,可自动调整ADC采样率以及垂直电压增益,将波形调节到适宜状态显示;MEASURE按钮可以将两个通道的信号采集通过一个小窗口显示出来;RUN按钮可以开始或暂停采样;FFT按钮可以显示当前通道下的快速傅里叶变换的频谱图(幅度谱);UART按钮可以切换串口数据查看器界面;按下OUT按键会显示信号发生器的窗口,可调节输出信号类型、频率以及峰峰值;屏幕右侧部分是示波器信号采集参数的调节按钮;左右两个滑块可分别调节波形的垂直偏移与触发阈值;最后是左下角的旋转按钮,按下此按钮可以旋转屏幕。
2、串口数据查看器功能说明
我将电脑上的串口助手的功能集成到了此仪表上,可调节波特率与不同的数据解析显示模式,让串口助手实现便携性。在字符模式下,在接收ASCII字符的基础上,还实现了任意中文字符的接收显示;HEX模式可将接收的数据以十六进制的格式显示;波形模式下,发送端发送"x,x,x,x\r\n"的帧格式,此仪表可将其解析为波形显示,最多可支持六路浮点数的波形解析(理论上十路也是可以的,不过可能最后的效果会有bug,因为十路数据的话,一条串口数据就挺长了)。
在附件中有一个python产生六路正弦波的字符串发送到串口的程序,大家可以将其作为串口数据查看器波形模式的测试。
软件代码说明
1、工程结构
其中App文件夹分别存放示波器功能代码文件、串口数据查看器功能代码文件和信号发生器功能代码文件。Hardware文件夹存放各种驱动文件。
2、参数
在OSC.h和Wave_out.h文件下定义了相关的结构体,将示波器的几乎所有可修改的参数囊括在其中。
使用Init_Oscilloscope函数就可以将例如采样通道波形颜色,初始采样率、初始信号增益、AC_DC等参数进行初始化配置,十分的方便。
3、屏幕触控
本项目使用的4.3寸屏幕最高可支持5点同时触控,但为了控制简便,本项目只适配了单点触控。如下图程序所示,touch_judge这个变量等于1时表明屏幕已经被按下,然后对touch_x和touch_y进行区域判断,最后确定是哪个位置被按下,然后运行对应的功能函数。根据各个按钮触摸优先级的不同,对触控位置的判断分别放在了定时器中断服务函数里和相对应的功能函数中。由于学艺不精,我感觉这种方式还是有点呆的(或者得上LVGL?),欢迎大佬们不吝赐教,分享分享更简洁方便的编写方式。
4、串口数据查看器实现接收中文数据显示的方法
因更加符合语言习惯,我们有时会使用中文进行串口数据的调试,所以,本项目将字库信息保存到梁山派板载的SPI_Flash中,增加了接收并显示中文串口数据的功能,其具有波特率调节、数据解析模式调节、开始/停止监测数据、清空窗口等功能。中文显示如下图所示。
将字库刷写进SPI_Flash中的步骤很简单,只需准备一张16G或32G的TF卡(别的容量的没试过,不知道行不行),插入读卡器与电脑连接,在TF卡的根目录下创建一个名为FONT的文件夹,将字库文件(在附件中提供)解压好存放在里面,接着将TF卡插入到梁山派的TF卡槽中,烧写附件里的中文字库刷写程序,复位。接着使用电脑上的串口助手监控字库刷写实时状态,整个过程大约一两分钟,当最后接收到FLASH font_init success!时,字库刷写完成,这样串口数据查看器就可以接收并显示中文数据了!
5、屏幕刷新
本项目使用EXMC的方式去刷新屏幕数据,初始化好屏幕显示的参数之后,只要修改存放在外部SDRAM的屏幕缓存数据,屏幕的数据就会自动刷新,用户无需手动刷新,十分方便,而且显示的帧率也非常高,梁山派自带RGB的fpc接口,可使用排线将其和屏幕的RGB接口相连,也十分方便。
由于波形及一些组件要叠加在栅格中,因此如果每次改变屏幕显示的内容都立刻去调用屏幕显示函数的话,就会导致波形会一闪一闪的。这是为什么呢?假如你先将波形网格(栅格)先刷新到屏幕中,接着又将波形刷新到屏幕,那么在栅格刷新的过程中,原来显示的波形会被覆盖,会导致有片刻屏幕上是没有波形的,此时,波形又被你刷新到屏幕上,屏幕上又出现了波形,所以波形一段时间消失,一段时间显示,就产生了一闪一闪的现象。为了应对这种现象,这里采用了双缓存的方式,缓存1用于屏幕的刷新显示,缓存2用于屏幕暂时的像素数据修改,当需要更新显示时,,将缓存2搬运到缓存1中,不过这里比较粗暴,直接用复制的方式,这样的缺点也很明显,会阻塞CPU的运行(800*480的屏幕像素),降低效率,所以,欢迎各位大佬不吝赐教,分享更高效的显示方式(比如两个缓存轮流切换到屏幕显示,我尝试了,但不成功,哭晕~||~)。
结尾
在此,十分感谢嘉立创为我们提供了这么好的一个平台,在很大程度上降低了大众电子设计的门槛,让更多人的奇思妙想能够变成一个实物展现在我们面前。不以卖板赚钱,以培养中国工程师为己任,是立创开发板的口号,立创在说着,也一直在践行着!同时也十分感谢莫工、吴工、陈工、橘姐以及小许等人,他们都为我耐心地解答了许多的问题。
评论