特点介绍
-
双通道,可同时采样
-
采用2颗独立的ADCS7476AIMF/NOPB ADC芯片,最高采样率1Msps
-
ESP32s2为主控
-
搭载板载天线,后续可增加PC通过WIFI充当上位机的功能
-
板载3.7v锂电池充电、供电模块,通过TypeC口进行充电,可独立通过电池供电
-
板载CH340X串口芯片,可通过TypeC口直接烧录程序
-
输出口: PWM*1、I2C*1、或者GPIO*3, 可供后期扩展使用
-
电子开关切换AC/DC耦合和1x/5x切换
-
拥有4x轻触开关,2x旋钮编码器开关,目前用于调正PWM输出占空比和频率,以及耦合方式、量程切换,后期可更新更多功能
实现原理
使用电子开关替代训练营案例中的物理拨码开关
耦合方式和量程切换的开关,训练营采用了物理拨码开关。物理开关整体并不够优雅,而且由于开关必须靠近示波器探针接口,会大幅限制开关摆放的位置,不利于外壳设计,因此替换成了电子开关。
示波器探头的电压不固定,且可能产生负压的情况,因此只能使用信号继电器作为电子开关,并采用一个nmos管对继电器进行开关
使用1条SPI总线实现2颗独立ADC芯片的同时采样
可以直接使用SPI的2线数据模式(DIO),将MISO和MOSI都用于读取,2条数据线分别对应一颗ADC芯片,进行同时读取。但是按照此设置进行读取,收到的数据会是a、b两颗芯片逐比特交替的情况:
收到的是: abababababababababab 这样的32比特数据,但是需要拆成aaaaaaaa bbbbbbbb,这样的2个16bit数据
为了避免使用for循环逐比特处理(感觉太慢了),因此采用了2个lut查询表直接查询得到(具体请看源码)
使用方法和源码编译方法
示波器使用
右侧的2个编码开关,上方的一个为PWM输出占空比调节,下方为PWM输出调节频率
上方4个轻触开关,从左往右前两个分别为耦合方式切换和1x/5x切换,剩余的按钮目前未使用,预留给后期升级
源码编译
本示波器项目软件使用ESP32 IDF框架编写,直接使用IDF进行编译和烧录即可,界面部分使用LVGL绘制
制作过程中遇到的问题
通过PC烧录程序后运行正常,但是拔掉USB线重启机器后无法运行程序
这个的原因主要是因为对CH340X芯片的不熟悉,其中控制下载模式和普通模式切换的#DTR信号,跟芯片数据手册中的示例不一样,示例为STM32的,BOOT引脚极性跟ESP32相反,导致启动默认进入烧录模式,无法正常启动
该问题已在最新版工程中修复
ADC芯片工作异常
该问题是掉入了该芯片的数据手册的坑里了,数据手册中提到SPI发送协议为按照LSB的顺序逐比特发送,但是按照此顺序解析出来的电压由于比特顺序颠倒,导致采样数据完全随机,一度以为芯片故障。
最后反复排除快要放弃之前想到是否有可能是比特顺序的原因,重新按照MSB顺序重新读取和解码一切恢复正常。
电源开关开关时会产生频繁闪屏开关机
电源开关采用了自锁开关,开关过程中信号会多次在开启和关断之间切换,该开关通过一个pmos管控制电池的输出。该PMOS栅极直接连接自锁开关,忘记添加电容导致开关切换时供电不稳定
该问题新版本已修复