基于STM32 的简易数字示波器设计*
2023-12-19庞成康黎海明舒向航李德明
庞成康,黎海明,舒向航,李 慧,李德明
(广西师范大学物理科学与技术学院,广西 桂林 541004)
0 引言
示波器是一种用途广泛、易于使用且功能强大的电子测量仪器,用于观测、分析和记录各种电信号的变化。示波器通过把被测电压随时间的变化关系转换为可视的波形图像,提供直观的研究各种电信号变化的波形。按照信号处理方式不同分类,示波器可分为模拟示波器和数字示波器两大类,该课题研究的数字示波器是通过模数转换器(ADC)把被测模拟信号转换为数字信号,再以数字信号处理的方式将信号随时间的变化波形绘制在显示设备上。该数字示波器的测量带宽为0 到20KHz,带宽决定了示波器所能检测到的信号频率范围,最高带宽越高,能够检测的最高信号频率越高。而实时采样率与带宽密切相关,其决定了示波器ADC在单位时间间隔内可采集的样本点数,直接影响信号波形的还原程度,实时采样率越高,采样速度越快,波形失真越小[2,9]。本课题研究基于STM32 单片机设计的便携式简易数字示波器,实现数据采集、储存和显示,实现示波器的所具有的基本功能,具有体积小、便于携带和性价比高等特点[3]。
1 系统设计原理
该设计以STM32 单片机为核心,加上其他外围模块一起组成示波器的硬件系统。主控制器采用STM32单片机,其主要作用是对采集的数据进行处理,并控制其他模块的运行。系统设计总体框图如图1 所示。
图1 系统设计总体框图
输入部分由四部分组成,第一部分是对采样的模拟信号进行前级处理,扩大测量范围并避免输入电压过大造成芯片损坏;第二部分是AD 转换部分,将采集的模拟信号通过ADC 转换为数字量,再通过单片机处理数据;第三部分是人机交互部分,通过独立按键对LCD 上的图像进行放大和缩小,便于观察;第四部分是供电电路,给整个系统进行供电。输出部分即显示部分,包含液晶屏显示模块,主要用于显示当前波形。
2 硬件电路设计分析
以STM32F103RCT6 为主控芯片通过单片机驱动16 位8080 时序TFT 显示屏;输入信号经过前级调理电路后实现信号衰减和叠加直流电压,把输入信号调理为0~ 3.0 V 电压范围,通过单片机自带的ADC 将输入的信号转化为数字量,经过单片机处理后在TFT 液晶模块显示出波形,用独立按键调整波形显示模式,使其便于观察。
2.1 STM32F103RCT6 最小系统
该系统以STM32F103RCT6 作为主控芯片,STM32F103 为通用增强型32 位微控制器,主时钟频率可达72 MHz,工作速度快。另外其内部资源丰富,有256 KB 的Flash、48 KB 的SRAM、8 个定时器、2 个DMA和3 个12 位的ADC,且所有的IO 口都可以配置为外部中断源[4-7]。最小系统电路如图2 所示。
图2 STM32F103RCT6 最小系统电路
2.2 液晶显示电路
该系统将液晶LCD_RST 复位与单片机复位引脚相连,上电时与单片机一起复位;LCD_BL 为背光控制引脚,内部通过一个8050 三极管实现开关控制,LCD_BL 引脚通过1K 电阻与基极相连接,基极拉高时三极管导通,背光灯点亮,反之截止,其原理图如图3 所示。T_MISO,T_MOSI,T_PEN,T_CS,T_CLK 为通过XPT2046 驱动的电阻触摸屏接口,方便以后扩展。
图3 TFT 原理图
2.3 供电电路
该系统所需的供电电压为5V、-5V、3.3V、1.5V。其中5V 通过USB Type-C 6Pin 接口供给,并以5V 电源为基础转换其他电源电压,原理图如图4 所示。本设计用到了3.3V 和1.5V 给单片机供电,鉴于该系统工作特性,对电源精度要求比较高,且为非功率电路,电流相对较小,因此选择LDO (Low Dropout Regulator)低压差线性稳压芯片。-5V 电压通过一个高效率电源极性反转器ICL7660 电荷泵产生,原理图如图5 所示。
图4 5V 供电电路
图5 LDO 稳压电路
2.4 前级处理与运放偏置电路
该设计使用单片机自带的ADC 进行采样处理,因为其输入电压范围为0-3.3V,因此在A/D 采样前加上处理电路显得很有必要。信号输入后经过阻容式分压电路进行降压处理,如图6 所示,C27,C28 为补偿电容,防止分布电容对高频信号造成衰减,R11,R14 为分压电阻,将信号缩减为原来的1/4 倍。然后通过4 个1N4148 高速开关二极管两两方向相同并联反向接地,二极管导通压降0.7V 左右,因此通过4 个二极管将电压钳位在±1.4V,防止输入IO 口的电压过大,保护单片机。经过前级处理后的信号还包含负电压,ADC 仍然不能采样,因此设计了TL074 运算放大器加法电路将负电压抬升,原理图如图6 所示。
图6 前级处理与运放偏置电路图
2.5 按键电路
按键电路是人机交互的核心,系统一共需要四个按键,按键一端连接单片机输入端口,另外一端接地,当按键被按下闭合时输入口与地连通,通过判断输入口为低电平证明有按键按下,因此将按键连接的端口配置为上拉输入模式,检测端口为为低电平时系统做出相应操作[5]。其电路如图7 所示。
图7 按键电路图
3 系统的软件设计
系统在硬件设计完成后,接下来对STM32 进行编程,控制其相应外设,使系统按照设计功能运行。软件设计内容主要分为AD 采样、DMA 调用、液晶屏显示、按键处理和程序算法几个方面。ADC 采集信号和液晶屏显示程序相对复杂,故采用模块化编程的方式,方便查看和修改。因为单片机外设众多,为了降低功耗,需要使能相应的时钟才能工作,因此配置外设的基本步骤为初始化,使能时钟,配置相应外设。软件设计系统主流程图如图8 所示。
图8 软件系统主流程图
3.1 按键程序设计分析
根据按键电路图特点,将单片机的GPIO 配置为上拉输入口,在按键没有按下时输入口保持高电平,有按键按下时接地从而电平被拉低,程序可以识别电平值判断按键按下[6]。在按键按下时由于机械振荡出现电平不稳定的抖动现象,因此还需要软件消抖处理,方法是判断按键按下后延时20 毫秒,再次判断按键电平状态,如果还是低电平,则认为按键按下稳定,可执行按键控制的相关语句。
3.2 液晶显示程序设计分析
系统采用320*240 分辨率的彩色液晶屏,显示屏采用8080 读写时序,其时序图如图9 所示,在RD 或WR 的上升沿读取或写入数据到驱动芯片上[6]。程序设计主要通过调用屏幕配套的库函数开发,包括调用画线函数、画点函数、字符串显示函数和数字显示函数。
图9 8080 时序图
显示函数配置只需要在主函数调用相应的函数和配置好变量就能按照要求显示数字和字符串,画点函数的2 个变量为该点的横纵坐标;画线函数的4 个变量分别为起止点的横纵坐标,通过两点即可确定一条直线;数字显示函数的5 个变量分别为起点坐标、显示的数值、数字位数和大小;字符串显示函数的6 个变量分别为起点坐标、显示区域的宽高、字体大小和显示的字符串。上电时先显示3 秒的启动界面。通过画线函数绘制主界面的框架,其次通过字符串显示函数将固定值显示出来形成主界面的基本框架。ADC 采样一次,会得到1024 个数据,将其存到数组中,通过处理将其表示为液晶屏的纵坐标数值,横坐标数值为特定时间自加 1,将分别将前后的点连起来就即可显示波形。
3.3 模数转换程序设计分析
该设计采用单片机片内自带的ADC 模数转换器,每个ADC 有18 个通道,内部通过模拟开关选择通道,同一时刻一个ADC 只能选择一个通道,其分配如图10 所示,因为ADC2 不能调用DMA,因此本设计选择ADC1 的通道2 即对应引脚PA2[8]。
图10 STM32F103RCxxADC 分配图
ADC 的配置需要将其配置为模拟输入,先使能ADC 的时钟,时钟频率越大,采样速度越快,但是对于STM32F1 单片机的ADC 的时钟分频不能超过14 MHz,对系统时钟进行6 分频得到ADC 工作时钟,即72/6=12 MHz。ADC 配置部分选择直接操作寄存器的方式。模数转换器为12 位逐次逼近型ADC,其内部Vref+与VDDA 接3.3V 电压,Vref-与VSSA 接GND,因此ADC 的转换精度为:
根据A/D 采样转换的数字量,可以计算出对应的电压值,计算公式如下:
公式(2)是信号直接输入单片机 ADC 转换的计算公式,该设计需要将信号经过前级分压处理,因此需要结合硬件电路进行计算,得出其公式为:
公式(3)中V 为调理电路的输入电压,Vin 为ADC 采集转换得到的电压。
数据经过AD 转换后变为数据量存储在内部,通过计算将其表示为液晶屏坐标轴上的纵坐标值,在其存入缓存的同时,定义一个最大值,将其命名为adcmax,若后续存入的值比它大,则将其赋值为adcmax。同理计算出最小值adcmin,计算最大值与最小值的差即为峰峰值Vpp。
波形的频率主要由幅值最大的频率成分求得,根据采样率变化的变量计算,同一采样率下幅值最大的频率成分除以采样点数再乘上相应采样率的比值即为频率。
3.4 快速傅里叶变换程序设计分析
信号经过傅里叶变换后变为频域,这里主要通过分析波形频域的基波分量和谐波分量来判断波形,主要识别正弦波,方波和三角波。由傅里叶变换可知,所有波形都由正弦波组合得到,因此正弦波只有基波分量;方波的三次谐波分量为基波分量的三分之一;三角波的三次谐波分量为基波分量的九分之一,采用FFT 函数库对数据进行处理,通过波形自身的规律,将各次频率和对应的幅值提取,从大到小求其幅值,求出来之后和两侧的值比较,从而判断出波形类别。
4 系统测试
焊接好示波器电路板实物如图11 所示,利用相关测试仪器确保器件焊接可靠,通电后用万用表测量确保电源供电正常,同时确认单片机程序能正常下载,单片机能正常运行。然后下一步就可以进行编程设计和功能调试,并根据设计指标进行测试。
图11 示波器电路板实物图
基本功能测试:示波器的基本功能是测量显示信号波形,测试时采用信号源产生标准波形,并用“RIGOL DS1104Z”示波器的测量结果与本设计的测量结果比较,记录测试数据并计算误差,主要测试了正弦波、方波和三角波,信号频率为10 Hz、1 KHz 和20 KHz,幅度分别为500 mV、2000 mV、4000 mV、6000 mV 和7000 mV。测试图片如图12 所示。
图12 波形采集测试图
从上图的照片可知,该示波器能较好的还原出各种波形,测量频率的误差较小,但是随着测量的幅度值的增大,测量的峰峰值的误差逐渐增大,如下表1、2、3 所示分别为该简易示波器与DS1104Z 示波器测试数据对比和误差分析。
表1 正弦波测试数据表
表2 方波测试数据表
表3 三角波测试数据表
由上表的数据可知该简易示波器系统能够较为准确的测量各种波形的频率和幅值,由于线材的差异和信号发生器的输出误差,这里采用了成品示波器的测量结果为基准,用本设计与其对比求误差。但由于带宽的限制,随着频率的升高,所测量的电压幅度误差逐渐增大。
5 结语
该系统最初的设计指标是实现简易数字示波器功能,能够采集周期信号和非周期信号并实时显示,并且做到便携和低成本。最终完成设计测试证明该示波器可以测量±6V 范围内的输入信号,具有100 KHz 的测量带宽,可以用移动电源供电做到便携式使用,已基本满足了设计要求。该系统对数字示波器进行初步设计研究,尚有一些设计可以进一步改善:一是可以采用锂电池供电,设计充放电管理和升压电路得到5V 电压,摆脱外接电源的限制;二是信号调理电路中加上程控放大电路,使毫伏级的小信号也能较好采集显示。