基于STM32 的电路测量系统
2020-08-12占志龙卢昌佐
张 嵘 占志龙 卢昌佐
(湖南科技大学,湖南 湘潭411100)
1 概述
随着电子信息产业的飞速发展,电子设计开发者数量也在飞速增长,其中大部分设计者为学生以及个人开发者,而电子开发设计需要各种开发工具,以万用表及示波器为最主要的开发工具。但是一个好的万用表价格昂贵,示波器多在万元及以上,这对学生以及个人开发来说是难以承受的价格。目前市面上的一些基于单片机定制的单片机多有结构简单、自动化程度低、功能单一、稳定性差的缺点,难以满足开发者的需求。
为方便开发者的需求,通过前期查找资料并通过测试,系统已达到设计目标,满足用户使用需求。本文结合已开发实物设计了一个能同实现功能需求的电路测量系统。该测量系统可同时测量电压、电阻、波形并显示在显示器中。电源开关开启时,测量系统开始工作,显示器进入主菜单,用户通过按键选择进入测量电压、电阻、或者波形的功能。功能进行时显示器显示测量得到的数据以及系统的运行状态。测量电压、电阻时系统根据被测目标的数值自动切换到最适量程,也可自行设置测量时手动切换量程。测量波形时与传统示波器主要功能方式保持一致,可以调节相应按键来设置测量规则。本系统采用低功耗设计,具有体积小、功能丰富、自动切换等优点,给学生及个人开发者带来了极大的便利。
2 系统总体设计
2.1 系统功能
2.1.1 能测量电压、电阻并能自动切换量程。
2.1.2 能测量信号的波形。
2.1.3 能将测量的数据显示在显示器上。
2.2 系统运作流程
电源开关开启时,测量系统工作,主控芯片初始化外设,显示器开始工作,系统进入主页面。用户通过按下菜单键选择需要进行的功能,若选中某功能,则系统执行该功能并将系统测量到的结果及系统运行状态显示在显示器中,在执行某功能时若按下菜单键,则暂存测量的部分数据及当前系统运行的状态后执行菜单键选中的功能。若在一定时间回到该功能时则恢复该功能的现场数据,更新显示界面。系统处于运行状态直到电源断开。
3 系统硬件设计
系统硬件设计方面,充分考虑电路测量系统具有低功耗、频率高、体积小、自动切换量程等特点,该电路测量系统主要有以下几个部分:单片机、显示器模块、开关芯片、按键模块、基准电阻、电源模块、时钟电路、复位电路以及滤波电路。
系统采用ST 公司的STM32F103RBT6 系列MCU,该单片机外设资源丰富,引脚多(64 个),256K 片内FLASH,48K 片内RAM,72MHz 主频,性能较强,符合设计要求;显示模块采用0.96 英寸的OLED 显示屏,该显示屏由SSD1306 芯片作为驱动芯片,通信方式为I2C。分辨率为128x64,选用此型号的原因是:价格低、分辨率高、功耗低、刷新速度快,符合系统的设计要求;开关芯片采用的的是CD5001 模拟开关芯片,在电压、电流、电阻的测量中,一个合适的量程决定测量数据的精度、速度。通过模拟开关自动切换量程保证测量时能最快的切换量程,该开关具有3 输入8 输出及片选引脚,能同时满足测量电压、电阻、电流量程的切换;电源模块采用AMS1117-3 线性稳压芯片,该模块将输入电压转化输出3.3V 电压给系统所有模块供电;时钟模块采用8MHz 的陶瓷警惕振荡器,保证系统时钟稳定、高精度运行;复位电路采用上电复位与按键复位两种方式;略波电路采用RC 低通滤波电路,电阻采用高阻抗电阻,保证芯片能捕获到相对稳定的电压。
STM32 单片机在系统中的作用是将采集到的模拟信号进行分析运算生成人类能看懂得文字信息并控制显示器显示内容,在测量电压与电阻时,分析采集到得数据并于设定得测量范围规则进行对比,控制开关芯片选中最适挡位保证得到得数据最为稳定、精确,STM32 单片机通过检测菜单按键是否按下来决定系统需要执行的功能。显示器显示系统运行状态和采集到的数据。开关芯片负责在测量电压或电阻时通过被STM32 单片机控制选通特定通道,不同得通道连接不同阻值得基准电阻,不同的电阻决定测量时得范围及精确度。按键模块组成系统的菜单键组合,菜单键控制系统选择功能。时钟电路是单片机运行的基础。滤波电路中的略波电容采用100nf 的瓷片电容,电阻采用100K 高精度金属膜电阻,信号能很好的通过此电路,而参杂信号却很难通过此电路,从而单片机的ADC 输入端能得到很干净的信号,保证采集到的数据误差最小,同时该电路会滤除部分震荡信号,从而单片机会得到稳定的信号。
4 系统软件设计
4.1 软件总体设计
软件启动时,初始化需要使用的外设,静等0.1S 确保系统稳定。屏幕显示主菜单,等待用户选择功能,若用户选择特定功能,则系统进入特定功能执行特定操作并将内容显示在屏幕上面,在进行功能时若摁下返回按键,系统保存目前的状态信息返回到上一级菜单。系统保持唤醒状态直到电源断开。系统运行流程图如下:
图1 系统运行流程图
4.2 软件模块设计
4.2.1 电压
电压测量范围为0~330V 直流电压,通过开关芯片CD5001切换量程。程序控制测量开始状态为最大量程,保护电路。当被测目标电压低于1/10 目前量程时,切换低一档量程,保证测量目标值在当前量程的1/10~9/10 范围内,保证数据的精度。测量输出的内容为换算后的电压值,用浮点数表示。计算公式为(ADC 读取寄存器值/4096)*3.3(4096 为测量芯片的精度12位,3.3 为测量芯片的参考电压3.3V)。测量时采用多次测量与低通滤波保证测量到的电压值稳定可靠。
4.2.2 电阻
电阻的测量范围为0~10 兆欧姆,通过开关芯片CD5001 切换量程。开始测量时程序控制CD5001 导通所有的电阻,使处于最大量程,与测量电压类似,当被测电阻阻值位于1/10~9/10 量程时选中此量程,当阻值不在此范围内则控制CD5001 电路高档位电阻切换到第一档量程,以此重复直到在量程1/10~9/10范围内。测量输出的电阻值为换算后的电阻值,用32 位整型数表示。电阻计算公式为R0/(R0+Rx)=V/VREF(Rx 为被测电阻阻值,R0 为分压电阻阻值,V 为测量到的分压电阻,VREF 为芯片ADC 转换器的参考电压)。与测量电压同理,测量时采用多次测量与低通滤波保证测量到的电阻值稳定可靠。
4.2.3 波形
该功能与传统示波器类似,具有示波器的大部分功能,双通道同步采样。示波器模式下屏幕上显示的内容有:波形、时间刻度线、电压值、波形周期、水平位置线、竖直位置线。通过以设定测量时间间隔为基准连续测量100 次被测目标的电压值依次存入缓存区,通过与系统设置的对比频率对比,将采集到的点以电压的高低在屏幕上从左至右分别打点显示,以100 次为周期开始下一次的采集并显示,当显示数据量超过屏幕宽度时则重新从左开始至右显示,依此直到系统结束或功能切换。ADC 测量的最大频率为12MHz,在最大频率下采样周期为1/12000000s=83ns,综和系统其它程序占用时间测量频率最大能达到6MHz。程序读取频率设置按钮将数据以不同的频率显示。波形周期为上一次波形结束时到本次波形结束的时候的时间,时间通过芯片的外设定时器来获得。竖直位置线所在的位置为该时刻的电压值,显示在电压值显示栏里面,程序识别竖直位置线调节按钮的电压值来设定竖直线所在的位置显示所在位置的电压值。设置通道选择按键切换显示特定通道的波形,可同时显示两个通道的波形,方便进行波形的对比。
4.2.4 系统菜单
系统菜单提供系统的显示,系统所有的显示部分通过带有SSD1306 驱动器的OLED 显示。系统启动时,显示主菜单供用户选择需要进行的功能,默认选择是只测量电压,方便快速测量电压。菜单内容采用系统化设计。每一个内容都是一个对象,子对象位于父对象里面,子对象可以继承父对象的特性,位于父对象的内部但不允许超过父对象的显示范围,最高一级的父对象为屏幕,所有的对象都存在于屏幕之内。内容的创建引入消息机制,所有的对象创建都经过消息管理系统。程序为显示系统在运行初划分好存储区域,每个对象创建时都会分配属于自己的管理信息、存储空间,删除时也会释放自己所在的内存空间。系统启动时,主菜单显示一级菜单:①功能选择;②默认选择;③系统介绍。功能选择里面有子对象:①测量电压;②测量电阻;③测量波形。默认选择为直接测量电压。功能介绍里面有介绍关于系统的使用方法、系统参数等内容。系统内容的切换与选择通过板载的个菜单选择。采用系统化的设计方法便于显示界面的开发、之后的更新,在节省开发时间的同时也提高了开发的可操控性。
5 结论
基于STM32 的电路测量系统采用了开关芯片通过程序控制来自动切换测量的量程,在保证了测量时的稳定度、精度的同时也保护了系统电路。波形显示功能使其可以充当示波器,做一些基本的波形测量。所有的模块集成在同一块PCB 电路板中,体积小,方便携带。目前市面上的万用表功能单一且价格昂贵,示波器的价格更是普通学生或个人开发者所不能承受的。基于STM32 的电路测量系统在功能上大致能满足日常开发使用,且制造成本约30 人民币左右,基本所有的开发者或学习者都能拥有。该系统经过不断的调试与完善,有功能多、精度高、稳定度好、价格便宜、方便携带的特点,具备实际推广应用价值。