低门槛DIY示波器,CH32示波器,完全兼容STM32,ADC+DMA+TIM+USB,仅需一块最小系统板

Posted 简单|纯粹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了低门槛DIY示波器,CH32示波器,完全兼容STM32,ADC+DMA+TIM+USB,仅需一块最小系统板相关的知识,希望对你有一定的参考价值。


前言

玩电子不能没有示波器,毕业后也无法再白嫖学校示波器。俗话说:没有条件创造条件。那没有示波器,就创造一个示波器。听起来高大上,其实并不难,网上也有许多开源示波器,最具代表性的是老刘示波器。虽然电路简单,功能强大,懒得动手党来说也有很大的门槛,不想焊接,不想画PCB,更不想挑各种元器件,就想要一个简单实用、成本低廉、快速实现、方便拓展的示波器,懒得找了,还是自己造轮子吧。


提示:本项目仅使用某宝成品CH32F103C8T6开发板,硬件简单,可自行根据需要自行添加软硬件功能。

一、先看成果



说明:A1管脚为信号输入管脚,A0输出1KHz方波信号进行校正,具有以下功能和特点:

  1. A0口有3.3V 1KHz基础方波输出,用于校准。
  2. A1信号输入口信号测量范围0~3.3V。
  3. 32单片机最高支持1M采样率,但系统时钟为72M时最高支持857.1k采样率(跟ADC时钟分频系数有关)。符合奈奎斯特采样定律,采样精度12位。
  4. 上位机采用Python开发,兼容Linux、Windows系统,通过32单片机的USB虚拟串口通信。
  5. USB虚拟串口通信数据包缓存最大1200字节,故程序中限制单次采样点数为512个(一个采样点占两个字节)。
  6. 具有基础测量功能:测量频率,脉宽,占空比(自己读数)。
  7. 仅有自动上升沿触发功能。
  8. 添加贝塞尔插值功能
  9. 项目开源https://github.com/ClassmateXie/32Oscilloscopes

二、使用步骤

1 运行软件

1.1 Windows用户直接运行打包好的软件

CH32示波器.exe

1.2 安装Python环境运行源代码(入坑)

进入CH32示波器.py文件所在目录,右键打开终端

输入命令行

python .\\CH32示波器.py

若报错需根据提示自行安装对应的python库,例如:

pip install pyqtgraph
pip install numpy
pip install pyserial
pip install PyQt5
pip install scipy

2 选择端口

初始界面如下:

修改虚拟串口为对应的端口(设备管理器中查看,默认COM7),通信波特率默认1000000

三、源码分析

项目开发过程的大部分时间都在巩固基础知识,虽然项目整体难度不大,但是在开发过程中对32单片机的ADC、DMA、TIM、NVIC以及USB等功能有了更加深刻的理解,特此记录开发过程。

1 程序总体流程图

1.1 USB串口中断服务函数

USB接收中断
状态机解析数据
重新配置TIM4和DMA
启动TIM4和DMA

1.2 ADC采样过程

触发
请求
产生
TIM4_CH4
ADC采样
DMA搬运
DMA完成中断

1.3 DMA传输过程

搬运到
DMA传输完成中断
ADC->DR数据寄存器
ADC_Buf数组
USB发送所有缓存
清空缓存并关闭TIM4和DMA

2 下位机源代码

2.1 TIM配置函数

配置TIM4通道4产生PWM的频率,作为ADC规则组触发源

以上是关于低门槛DIY示波器,CH32示波器,完全兼容STM32,ADC+DMA+TIM+USB,仅需一块最小系统板的主要内容,如果未能解决你的问题,请参考以下文章

获取STM32代码运行时间的技巧

sipex3232上电发送输入端拉低问题

基于STM32的示波器信号发生器设计-pcb-程序-上位机-原理图

STM32H7的DSP教程第45章 STM32H7的IIR高通滤波器实现(支持逐个数据的实时滤波)

STM32H7的DSP教程第38章 STM32H7的FIR高通滤波器实现(支持逐个数据的实时滤波)

STM32H7的DSP教程第45章 STM32H7的IIR高通滤波器实现(支持逐个数据的实时滤波)