Part 0:背景介绍

示波器是什么

示波器是一种电子测量仪器,可以在无干扰的情况下监控输入信号,随后以图形方式采用简明的电压与时间格式显示这些信号。

现代常用的数字示波器(Digital Oscilloscope)与传统示波器相比,数字示波器使用采样率高的ADCAnalog-to-Digital Converter)和存储容量大存储器件进行波形采样及存贮,并可以借助FPGADSP芯片和DSP算法等现代数字数字信号处理技术对信号进行数字化处理,从而提供更加全面、精确的信号测量和分析。

总的来说,示波器是一种功能强大、准确度高的电子测量仪器,被广泛应用于电子行业、通信行业、汽车行业、航空航天行业等领域。

我们做了什么

笔者在曾与@茉莉Mori合作开发了一款基于STM32的微型示波器,其具有波形测量、FFT分析、XY图(李萨如图)、波形发生器、任意波形播放器等诸多功能,最新版本固件采样率最高可达1MHz单通道采样。

目前其具有一个MFC上位机用于实现波形播放,具体功能如下列视频所示:

基础功能演示(波形测量、MFC上位机):https://www.bilibili.com/video/BV1gV41117Bu

FFT功能演示:https://www.bilibili.com/video/BV1ip4y1r7B7

双通道XY输入输出模式:https://www.bilibili.com/video/BV1Vs4y1e7WN

由于MFC程序只适用于Windows平台,不能直接移植到嵌入式Linux运行,故我们拟采用Qt编写一个轻量化上位机,使用旭日X3派和小型HDMI显示屏,结合STM32微型示波器,实现一个大屏触控示波器。以下是MFC平台开发的示波器界面,我们将以此为蓝本设计Qt界面:

Part 1:STM32示波器简介

本项目中使用的STM32示波器主要硬件框图如下图所示:

示波器IO主要使用PA6-7作为ADC输入引脚,通过内置ADC1ADC2采样,由定时器4通道4PWM输出模式实现定时采样触发。

采样完成后由ADC触发DMA完成ADC数据传输,不同模式下目标存储位置不同。

在单通道示波器模式下,主要采用ADC1buffer进行单通道存储与数据处理,具体分为波形显示模式和FFT模式。

在波形显示模式下,主要是对采样得到的信号进行触发检测,之后将波形节选出一部分显示在OLED上,效果如下图所示:

FFT模式下,主要是对采样得到的信号进行快速傅里叶变换(FFT),之后将频域数据显示在OLED上,效果如下图所示:

在此种模式下,串口会以115200波特率自动输出数据,数据格式如下,具体数据格式会在编程时详细说明。

|包头|数据载荷|包尾|

Part 2:开发环境搭建

在旭日X3派上安装Qt组件与电脑端Qt安装略有不同,电脑端Qt一般是使用“Qt Maintenance Tool”进行Qt包管理,可以图形化安装Qt及其相关组件;旭日X3派上安装Qt则需要用到apt命令进行安装,使用时可以通过下列命令搜索当前apt源中可用的Qt资源,搜索结果如图所示。

sudo apt search qt5

本项目中为了搭建上位机,我们需要用到的Qt开发环境,具体来说有Qt本体、QtSerial组件、QtCharts组件等,可以通过下列指令安装。

sudo apt update
sudo apt install qt5-default
sudo apt install qtcreator
sudo apt install libqt5serialport5-dev
sudo apt install qtmultimedia5-dev
sudo apt install libqt5charts5-dev

逐条输入上述命令,并回车执行后,系统会自动安装Qt环境及相关组件,此过程可能耗时较长,请准备稳定电源。

安装完成后,旭日X3派左上角的开始菜单的“Development”选项中会出现一系列Qt图标,一般选择“Qt Creator”即可启动Qt开发界面。

Qt Creator打开后界面如下图所示,可以从右侧“Project”子项中选择最近的项目,也可以新建项目或打开已有项目。

Part 3:实验验证

在实际编写程序之前,用户可以先下载下列验证代码,实现一个简单的串口调试助手:https://pan.baidu.com/s/1gnx4uoykPRyGuGax1dBclg?pwd=Yuki

此代码出自kontornlQt串口上位机,具体开发流程可参见:

Qt 实现串口调试实用程序(上)https://guyueju.oss-cn-beijing.aliyuncs.com42983

Qt 实现串口调试实用程序(下)https://guyueju.oss-cn-beijing.aliyuncs.com42985

将代码下载到电脑后,可以通过第二章中的几种文件传输方式,将代码复制到旭日X3派上。

代码传输教程:https://guyueju.oss-cn-beijing.aliyuncs.com42841

下载到旭日X3派后,可以通过启动界面的“Open”按钮,或者菜单栏中的“File->Open File or Project”,即可打开文件选择窗口。

Qt的默认工程文件以“.pro”作为后缀名,请确认选择正确的Qt工程文件。

打开后可能会出现如下的环境配置界面,使用默认配置即可。

配置完成后会出现如下工程界面,各部分功能如下图所示:

图中SerialTool.pro为工程文件,打开后可以看到Qt所添加的依赖库和.c/.h文件等

mainwindow.uiQt的界面设计文件,双击后默认进入“Design”图形设计模式,可以点击左侧“Edit”进入代码编辑模式(一般不通过此种模式修改界面)。

测试程序提供的代码已经经过测试,点击界面左下角的绿色三角,即可以直接编译运行。运行结果如下图所示:

如果将示波器硬件连接至旭日X3派硬件,其连接如下图所示:

点击界面上的“扫描串口”按钮,便可在串口选择下拉框中找到新添加的示波器串口,点击“开启串口”按钮并勾选“以16进制显示”,便可以看到示波器返回的数据结果,如下图所示:

具体数据格式将在Chapter4中详细阐述,图片末尾的十六进制“53 59 4E 43 00 FF 00 FF”为面向示波器数据载荷设定的包尾,避免数据分割错误。