一体式倾角数显仪的设计与实现*
2021-11-29苏蓓蓓
苏蓓蓓,杜 亮,钱 颖
(无锡科技职业学院物联网技术学院,江苏 无锡 214028)
倾角检测类传感器是一种用于测量物体在水平面与初始状态下所成倾斜角度的测量工具,因其结构简单,可靠性高,被广泛应用于桥梁检测、农用机械、航空航天、机械工程等领域[1-2]。在系统工程中,倾角类传感器多用于水平测量,从工作原理上可以分为“气体摆”式、“固体摆”式以及“液体摆”式3种倾角传感器[3]。STM32系列单片机由于其低功耗,性能可靠等特点具有广泛的社会应用前景和推广价值,文献[4]为了能够精确估算锂电池储电状态,设计了一种基于STM32F103RCT6的电池管理系统(Battery Management System,BMS),测试结果表明设计的估算系统具有良好的估算能力。李彩琦等[5]为设计多圈转角智能传感器,利用STM32F 103C8T6微控制器对应的电路作为数据处理模块,设计的该传感器精度高。目前常用的卡尔曼滤波算法[6]、互补滤波[7]、小波变换法[8-9]等方法对惯性测量器件的输出进行姿态角解算。文献[10]针对单一传感器在汽车电子驻车制动系统倾角测量中存在误差和噪声干扰等问题,采用卡尔曼滤波法对两种信号进行融合并滤除干扰,设计了一种MEMS器件的汽车倾角传感器。实验结果表明,设计方案的测量误差低于0.5°,该倾角传感器具有精度高、体积小和抗干扰等优点。王中立等[11]针对目前足式机器人腿部倾角传感器测量时易受到温度、噪声干扰等不足,利用卡尔曼滤波对倾角传感器的输出信号进行处理,然后采用径向基函数(Radial Basis Function,RBF)神经网络模型对滤波信号进行温度补偿,仿真结果表明提出的算法对倾角传感器信号的噪声能够很好地滤除,测量误差控制在0.8%以下。文献[12]对传感器测量信号建立双积分模型,利用离散卡尔曼滤波方法对测量信号进行滤波,通过仿真结果表明该方法能够有效滤除测量中的噪声信号,可提高系统控制精度和抗干扰能力。
本文将数显仪表和倾角传感器相结合,设计了一种一体式倾角数显仪。将输出电压变化值进行模拟/数字(A/D)转换,得到倾斜角度值。基于卡尔曼滤波算法对输出数据量进行滤波处理,极大提高了测量精度。与传统的分立式倾角数显仪相比,该一体式倾角数显仪具有占用空间较小,操作简单和工作效率高等优点。
1 总体设计思路
设计的一体式倾角数显仪的系统结构见图1。
图1 系统结构图
开机后,锂电池负责给整个系统供电,检测部分的核心是加速度计,角度发生偏转时,竖直方向的加速度分量随之改变,单片机采集到变化的原始值后,进行运算得出角度值,在显示电路显示,同时数据通过通信电路,由串口发送出去,可接入电脑上位机,或者与其他串口设备如触摸屏、联网宝通信相连接。除此之外,该设计还可通过按键实现数据锁存、相对零点/绝对零点切换等内容。
2 硬件电路设计
硬件电路部分采用模块式设计,其整体结构见图2,主要包括开关机电路、锂电池及充放电管理电路、单片机主控电路、传感器电路、通信电路和显示电路。
图2 硬件电路结构图
核心部分是单片机主控电路,负责维持整个系统的运行,单片机选用STM32F103RCT6,该芯片是一款基于ARMCortex-M内核STM32系列的32位微控制器,内置256 KB的FLASH,功能强大。单片机外接8 MHz晶振,经倍频后以72 MHz频率高速运行。
2.1 锂电池及锂电池的充放电管理电路
锂电池的充放电管理电路见图3。
图3 锂电池的充放电管理电路图
为了便于充电,采用安卓手机通用的USB Type-C接口,可直接用手机充电器充电,电池采用543450-3.7型锂电池。MCP73831T为锂电池充电管理芯片[4],VUSB为电源的输入端,VBAT-IN为锂电池的输出端。当电源输入端有电源接入,VUSB带电5.0 V,VUSB经隔离电容接MCP73831T的4脚,此时1脚输出低电平,D2点亮,D2用作充电指示灯,一般用红色发光二极管(Light-Emitting Diode,LED)灯。电池充满电时,VBAT-IN电压为4.2V,芯片3引脚检测到后,判定充电过程完成,控制1引脚输出高电平,D2熄灭,D3点亮,表示充电结束,D3一般用绿色LED灯。电阻R7和R9对锂电池实现分压,对单片机的引脚起限压保护作用。单片机通过采集PA0引脚电压的变化可实现对锂电池电量的动态监测。如监测到电池电压值低于设定的阈值时,通过控制开关机电路中的PA5引脚进行断电操作,确保不会因为锂电池过放而导致损坏。
2.2 开关机电路
开关机电路见图4。
图4 开关机电路图
锂电池输出端VBAT_IN接入开机电路部分,Q2为P型金属-氧化物半导体场效应晶体管(Metal-Oxide-Semiconductor Field-Effect Transistor,MOSFET,简称MOS管),实现电子开关功能,VBAT_OUT为整个系统电源的输入端。开机时,长按按键S1,使得MOS管Q2导通,VBAT_OUT将为系统提供电源,单片机带电后,PA5引脚输出高电平使Q4工作,Q2维持在导通状态,系统持续稳定工作。关机时,长按按键S1,Q3导通,单片机检测到PA4引脚为低电平状态,控制PA5引脚输出低电平,Q4处于截止状态,在按下松手之前,由于Q3右侧二极管导通,系统一直工作,松手时关闭Q2,实现断电关机。
2.3 传感器电路
传感器电路采用ADI的ADXL327B加速度计芯片作为倾角传感器检测芯片,该芯片测量范围在±2g之间,三轴检测,LFCSP封装,功耗低至350μA。当芯片所处位置发生变化时,芯片三轴加速度计中检测到的加速度分量发生变化,对应引脚的输出电压发生变化,单片机采集到电压变化,经过换算得出偏转角度值。
2.4 其他部分电路
除此之外,硬件电路中还有调压电路,负责将供电电压VBAT-OUT调整到VCCD3.3 V,输出3.3 V,给额定电压为3.3 V的器件供电。通信电路的核心芯片是CH340G,2引脚TXD端接PA10,3引脚RXD端接PA9引脚,实现串口通信。显示电路核心部件是GG1N4835型薄膜晶体管 (Thin Film Transistor,TFT)彩屏,通过单片机的12个输入/输出(I/O)引脚驱动。这些部分属于常规电路设计,篇幅所限,不做详述。
SL-N系列电子天平:上海民桥精密科学仪器有限公司;DGX-4243BC-1型电热恒温鼓风干燥箱:上海福玛实验设备有限公司;高速万能粉碎机:天津市泰斯特仪器有限公司;SM-5L型新麦打蛋器:新麦机械(无锡)有限公司;SM-603S型新麦电烤炉:新麦机械(无锡)有限公司。
3 PCB设计制作
原理图部分完成后,设计PCB图,根据外壳形状要求,印制电路板(Printed Circuit Board,PCB)的尺寸为710 mm×410 mm,元器件主要集中在正面,背面放置TFT屏。尺寸所限,PCB图较密集,布线时TFT的总线线宽设为0.4 mm以减低总线干扰;锂电池充电部分做整体敷铜散热处理;电源线做加宽处理,保证供电电压稳定、各器件稳定运行。
4 软件程序与算法
4.1 主程序流程图
主控芯片采用STM32F103RCT6,程序开发环境采用KeiluVision5,采用模块化程序设计,主程序流程见图5。
图5 主程序流程图
启动上电后,先将各模块初始化,数显仪进入开机动画,动画内容为制造厂商的logo图标,主控芯片读取传感器数据,将数据进行数字/模拟(D/A)转换,再将数字量数据进行卡尔曼滤波处理,处理后的数据送TFT屏进行显示。考虑到用户需求,如果需要将数据发送至电脑上位机(或者其他设备),通过串口进行数据发送。为了对串口数据发送和接收进行按序排列,确保数据的完整性,程序中引入了“先入先出队列”(First Input First Output,FIFO)功能,这样每一组角度数据都能完整传输。角度数据检测和显示过程中,如果按下“锁存”“相对/绝对零点切换”按键,单片机执行相应的操作。
4.2 各函数模块设计
流程图完成后,根据流程图写程序,为便于移植和提高效率,采用库函数方式编程,除系统提供的子函数外,还包括“main.c”“gui.c”“lcd.c”“fifo.c”“funcitonality.c”“key.c”“usart.c”等函数模块。
4.2.1 主函数“main.c”
“main.c”中主要包括看门狗初始化程序,各引脚初始化程序,合理设置时钟和中断优先级等,“void CmdResponse(enum Command Cmd)”子函数接收其他设备上(电脑上位机或功能按键)通过串口向传感器发送的指令,传感器做出对应的反馈,例如其他设备向传感器发送查询指令,传感器返回角度值,发送锁存指令,传感器进行数据锁存操作等。在“main()”函数中,设置每10 ms对传感器芯片进行一次检测。
4.2.2 TFT彩屏的驱动子函数“gui.c”和“lcd.c”
4.2.3 串口通信保障子函数“fifo.c”
“fifo.c”是非常重要的一个程序模块,在工业产品开发中涉及串口通信方面时,必须引入FIFO功能,即“先入先出队列”。本设计的串口通信中,有角度问询指令、角度回复指令,相对(或绝对)零点设置指令、相对(或绝对)零点设置回复指令等,多种指令可同时进行。如果没有FIFO功能,数据有可能会被打断导致发送错误。引入FIFO功能后,串口需传输多种数据时,单片机命令串口,根据时间顺序,完整地完成一帧数据传输后,再进行下一帧数据传输,这样既可以保证不会漏掉,又不会出错。
4.2.4 数据处理及转换功能子函数“funcitonality.c”
主函数中将ADXL327B加速度计采集到的模拟量值转化为数字量,然后在“funcitonality.c”进行卡尔曼滤波处理,再将数据转换为BCD码供屏幕显示和串口输出。
4.2.5 按键子函数“key.c”
“key.c”是针对两个功能按键的程序,主要实现3个按键的检测和控制功能。数显仪一共有3个按键,“ON/OFF”是开关机按键,长按3 s开机或关机。“HOLD”按键是锁存按键,按下后屏幕保持显示数据,再次按下后,恢复到测量状态。“ZERO”按键可以实现“相对零点”和“绝对零点”的切换。程序中主要包括“void KEY_Init(void)”,对按键涉及到的引脚进行了初始化,“u8 KEY_Scan(u8 mode)”,不同按键按下,返回不同值,单片机根据返回值做出对应的反应。4.2.6 串口通信子函数“usart.c”
串口通信硬件上用到PA9和PA10引脚,在主函数中通过void GPIO_Configuration()子函数对PA9和PA10引脚进行正确配置。“usart.c”中,通过void USARTInit子函数进行波特率、数据位、校验位、停止位的配置,再通过void USARTSend-String子函数进行传输内容的处理。
4.3 卡尔曼滤波算法及对比测试
为了让角度数据更准确、更稳定,采用了卡尔曼滤波算法[6-7],该算法是有效去除信号噪声,还原准确数据的一种数据处理算法。在加速度计测量过程中,由于电源稳定性、外部自然环境变化等因素,原始测量数据中有噪声信号,直接影响测量的准确性。卡尔曼滤波在测量方差已知的情况下能够从一系列的测量数据中,准确判断出噪声信号并删除,从而得到相对准确率大幅提高的有效数据。
运用MATLAB软件进行仿真测试,通过MATLAB中的Figure创建一个图形窗口,定义加速计值为CON=0.5(以0.5g为例),采样次数N=140,见图6。
图6中纵坐标为某一时刻加速计的原始值,横坐标为采样时间,通过图中的曲线可以看到经过卡尔曼滤波处理后,对比图6-a中的“测量误差”和“卡尔曼滤波后误差”,可以看出误差值明显减小。同时从图6-b中可以看出,滤波后的数据曲线更加平滑,数据准确性更高。
6-a 测量误差与卡尔曼滤波后误差的对比
6-b 卡尔曼滤波仿真图6 M A T L A B中的仿真测试
5 实验与结果分析
经过PCB图制版、焊接、程序下载后,设计初步完成,测试传感器各项功能,包括充电测试、开关机测试、锁存按键测试、相对/绝对零点切换按键测试,与电脑进行串口通信测试。在测试过程中需要根据出现的问题,进行硬件电路的优化和程序的调整,直到完全正常工作。
调试完成后,进行精度标定。运用芳嘉天蝶TE-170P分度头转台(该转台精度为0.5‰)测量16次(X轴、Y轴各测8次),相关数据见表1。
表1 精度标定数据表
转台值表示标准值,测量值表示数显仪测量值,误差值是转台值与测量值的差值,均方根误差值是将16次的误差值取均方根运算,代表数显仪精度值[10-11]。最终结果表明,在±90°测量范围内,数显仪精度为0.081°,在0.1°范围以内,处于0.1°精度标准,达到设计要求。
影响传感器精度的因素是多方面的,包括元器件的选型、PCB设计、算法、校准等。在实际生产过程中,校准的影响最大,要求选用标准校准台进行操作,工作人员需按标准流程严谨操作。
6 结束语
以上为精度0.1°的一体式倾角数显仪的开发过程,包括方案设计、原理图设计、PCB图设计、程序编写、调试标定后制作完成,经测试,各项指标达到了设计要求。该产品具有便携、精度高、功能全面等优点,使用者反馈良好。同时该产品还进行了开放式设计,预留了多个I/O口和备用串口,可进行开关量输出、无线通信等相关开发,可为客户进行功能定制。