【装备理论与装备技术】
火炮身管的烧蚀磨损是危害身管服役年限的重要因素,身管的烧蚀磨损会带来很多不利的影响,诸如炮口射弹初速下降、射击距离缩短以及首发命中率和首群覆盖率降低等,严重影响了火炮的作战性能。在研究中发现,多数学者往往忽视软件模型与硬件系统的融合,因此,基于BP神经网络的火炮身管烧蚀磨损量监测系统的设计与研究,不仅在软件模型上实现对身管烧蚀磨损量的精准预测,同时也实现了算法模型与单片机等硬件的紧密结合,有着便于设计、易于操作等优点,同时,该监测系统的设计与研究也为下一步对初速减退量的修正奠定了基础。
由于受单片机性能局限,无法实现神经网络模型复杂性的影响,不能直接在单片机上直接训练和构造网络模型。因此,本文根据采集到的身管全寿命周期内各弹种射弹数目与烧蚀磨损量之间的数据,在PC机上应用Matlab软件环境下专门的BP神经网络工具箱学习训练得到火炮身管烧蚀磨损量预测模型。利用训练得到好的神经网络模型,采用C语言编程,嵌入到单片机系统中[1],实现了BP神经网络算法与单片机的有效融合,大大提高了系统的自动化水平和模型预测精度,实现了身管烧蚀磨损量的自动预测功能,这对于火炮身管寿命健康监测和提高火炮射击精度具有重要意义[2]。
图1为自主设计的基于BP神经网络的火炮身管烧蚀磨损量监测系统。根据已构建的BP神经网络预测模型原理,是以不同弹种的射弹数目作为网络的输入层。因此,监测系统的首要功能是完成对弹种和射弹数目的区分计数功能,然后将弹种射弹数目送入到单片机中已构建好的神经网络模型中,便可自动计算出当前时刻的身管烧蚀磨损量。该系统充分利用了单片机丰富的接口功能以及运算功能,实现了身管烧蚀磨损量的动态监测,磨损量由LCD显示电路显示,方便战车乘员及时掌握身管的健康状况。同时,与上位机进行通信,可进一步完成对身管烧蚀磨损量的再处理,为提高火炮射击精度奠定了基础[3]。
图1 监测系统设计框图
研究表明三层BP神经网络能够用相应的输入向量和输出向量逼近任何有理函数[4],故采用3层BP神经网络模型结构,层与层之间为全互连方式,同一层单元之间不存在相互连接[5]。通过对采集到的身管全寿命周期内的3个不同弹种射弹数目和烧蚀磨损量之间的数据进行训练,建立了预测模型,最终构建的BP神经网络模型拓扑结构如图2所示。网络拓扑结构为3-6-1,即输入层神经元个数为3个,分别为穿甲弹、破甲弹和榴弹的射弹数目,隐含层神经元个数为6个,输出层神经元为1个,代表身管的烧蚀磨损量。该网络模型经检验数据检验,预测精度的平均相对误差为1.358%,符合设计要求,可以用作身管烧蚀磨损量的预测。
图2 神经网络模型拓扑结构示意图
其中,X1、X2、X3是指坦克炮常用的3个弹种穿甲弹、破甲弹和榴弹的射弹数目。
确定BP神经网络结构后,BP神经网络训练过程曲线如图3所示。网络经过53次训练,收敛到要求精度0.000 1,此时,已获得训练成功的BP神经网络,表明该BP网络已具备预测能力。
图3 网络训练过程曲线
在系统的总体设计中,首先要完成火炮不同弹种射弹数目的区分计数功能,在深入分析坦克炮射击过程及火控系统工作原理的基础上,采用火控计算机中的选弹信号和射击电路中的射击信号完成对弹种数目的分类和计数功能,即以弹种选择信号作为第一个信号,用来区分射弹弹种。之后,检测有无射击信号产生,有射击信号,则该弹种计数器的值加1,并将坦克炮当前时刻“穿、破、榴”3个弹种的射弹数目输入到BP神经网络模型中,根据网络模型计算输出当前时刻的身管烧蚀磨损量。
在测量实验中发现,每发炮弹造成的身管烧蚀磨损量的变化很难测出,每发射一发炮弹就进行一次磨损量的计算意义不大。因此,根据身管烧蚀磨损量和总射弹数之间的数据变化曲线,系统设计每发射30发炮弹完成一次对身管烧蚀磨损量的计算,这样既可以减少单片机的运行次数,还可以延长系统的工作寿命。系统中还加入了声光报警模块,当身管的烧蚀磨损量大于规定值时,会造成严重的安全事故,此时,系统启动报警装置,及时提醒战车内乘员。图4为系统工作流程框图。
图4 系统工作流程框图
根据身管烧蚀磨损量监测系统的工作原理和性能的相关要求,详细设计了系统中的各个功能模块,硬件设计总体框图如图5。系统硬件主要包括控制核心STC89C52单片机、12864液晶显示模块、源蜂鸣器和LED小灯声光报警模块、键盘模块(人工输入不同弹种的射弹数目)、EEPROM存储模块以及MAX232芯片上位机通讯电路模块。
图5 系统总体框图
单片机由电源、晶振驱动和复位模块构成最小系统,是单片机系统必不可少的电路模块,晶振提供给单片机固定的时钟周期,复位模块可以保证在系统运行出错和进行死循环时完成重启系统。硬件设计中其他子模块主要包括以下5个。
1) 显示模块
显示模块是人机交互的重要组成,根据系统的设计要求,要在液晶屏上同时显示各弹种的射弹数目及身管烧蚀磨损量,其内容包括汉字、数字及字符且输出须为4行,而12864液晶屏可输出4×16大小个字符,内置8192个中文汉字,可满足系统性能要求,故采用12864液晶屏进行显示。
2) 声光报警电路
当嵌入单片机的BP神经网络模型计算出的身管烧蚀磨损量大于某一设定阈值时(根据当前坦克炮身管烧蚀磨损的相关规定和使用经验,当身管烧蚀磨损量大于3%时,即认为该身管报废),监测系统自动触发声光报警系统,报警系统由蜂鸣器及发光二极管组成,采用PNP型三极管S8550和两个电阻组成一个放大电路,对蜂鸣器进行驱动,当三极管发射集和基集之间的节电压正偏时,导通S8550,蜂鸣器发出声响,同时LED灯闪烁。
3) 键盘输入电路
采用4×4矩阵键盘,共有16个按键,本系统中共用到15个按键,分别表示数字0~9和功能键取消、确定以及选择弹种功能,采用矩阵按键这种设计,能够实现只用8个I/O口来实现16个按键,节省了单片机的硬件资源。
4) 上位机通讯电路
根据BP网络模型计算得到身管烧蚀磨损量之后,将烧蚀磨损量的有关数据送给上位机做下一步的分析和处理,就需要单片机与上位机之间进行通讯,但单片机的输入、输出电平是TTL电平,而PC机配置的是RS-232标准串行接口,两者的电气规范不一致。因此,必须对单片机输出的TTL电平进行电平转换才能实现信息传输,实现两者电平转换的传输纽带就是MAX232芯片。
5) 存储模块
为了保证射弹数目以及BP神经网络模型参数在下次开机上电后数据仍能保存在系统中,需要采用掉电后不丢失的存储器件,本系统采用24C系列的24C02 EEPROM对数据进行存储,其操作简单,容量中等,擦写次数在30万次到100万次不等,能够满足系统的设计要求[6]。
系统软件设计主要由主控程序,键盘扫描程序、12864液晶显示程序、I2C总线对24C02的存储和读写程序、声光报警程序以及上位机通讯6大模块组成,其中包括4个初始化子程序,9个功能子程序组成。4个初始化子程序分别是:单片机I/O端口初始化子程序、单片机定时器初始化子程序、单片机串口初始化子程序和显示模块初始化子程序。9个功能子程序分别是:BP神经网络计算子程序、报警子程序、键盘扫描子程序、延时子程序、12864液晶显示子程序、中断服务子程序、I2C总线操作子程序、EEPROM读写子程序和上位机通讯子程序。采用C语言编程,在Keil编译器中编译生成hex文件,通过串口将程序固化到单片机的EEPROM中[7],完成了对身管烧蚀磨损量监测系统的总体软件设计,图6所示为程序流程。
图6 主控程序流程框图
1) BP神经网络模型计算
在BP神经网络中一般包括5个主要因素分别为输入值、权值、阈值、传递函数以及输出,两个运算过程,分别为BP算法的前向计算和误差的反向推导。而在5个主要因素和两个运算过程中,传递函数的作用尤为重要,在算法中如果不加入传递函数,只是简单的对输入进行加权求和,那么得到的模型仅是一个线性模型,而线性模型的表示能力非常有限。因此采用加入传递函数的方法给模型引入非线性因素,以提高模型的表示能力,所以一般情况下采用非线性函数作为传递函数,本文所建立的BP神经网络模型采用的传递函数为Tan-Sigmoid函数。
根据在PC机上已构建好的BP神经网络模型,输入样本值即可求得模型的输出值。因此,将BP神经网络算法嵌入到单片机系统中的程序,只需要根据第一部分生成的网络参数复原网络模型即可,而不需要误差的反向传播推导过程,只需按照BP神经网络的前向运算过程[8],编写单片机程序即可。BP神经网络的前向计算过程为通过给定的权值对输入值进行加权求和后(默认加上各层阈值),再将得到的和作为参数输入到传递函数中,传递函数的输出值即为神经元的输出值。计算过程如式(1)、式(2)所示:
(1)
(2)
式中:u1为隐含层的输出, j为整数,取值范围为[1,6],x(i)为网络的输入值,i为整数,取值范围为[1,3],分别为穿、破、榴3个弹种的射弹数目,w1为输入层到隐含层的连接权值,b1为隐含层阈值,u2为输出层神经元的输出,输出层神经元个数为1,故只有一个输出,w2为隐含层到输出层的连接权值,b2为输出层阈值;函数f1和f2分别为隐含层传递函数tansig和输出层传递函数purelin,如式(3)、式(4)所示:
(3)
f2(x)=x
(4)
2) BP神经网络模型重构
根据PC机上训练好的网络模型参数和BP神经网络前向计算公式,编写C语言程序,将BP神经网络模型嵌入单片机当中,实现单片机技术和BP神经网络技术的紧密结合。采用Keil51编制的BP神经网络计算程序,将网络参数存储在单片机上,根据当前时刻各弹种射弹数目的输入值,送入BP神经网络计算子程序中,即可得到火炮身管的烧蚀磨损量[9]。
3) 模型传递函数优化
由于神经网络模型是一种较为复杂的运算,要在单片机中实现,需要进行浮点运算和计算复杂函数(tansig函数),这会给系统性能带来很大影响,对于浮点函数的计算是由单片机系统自身特点所决定的,不会有很大提高,但对于复杂函数的计算,可以采用分段多项式拟合的方法对tansig函数进行改进,提高运行速度[10]。如表1为列举的穿甲、破甲和榴弹射弹数目分别为117、84、92条件下网络模型的计算结果以及在保证模型精度的前提下,两种函数运算时间的对比,可以直观地看出,优化后的传递函数运算速度有了很大提高,表明了分段多项式拟合方法的正确性。
表1 网络模型输出对比
模型计算结果/mm单步运算时间/μs模型运算时间/μs双曲正切函数0.163 67 86684 481多项式拟合函数0.165 83 21243 686
对单片机其他模块的软件设计主要包括:按键电路的扫描检测、12864液晶模块的显示、I2C总线对EEPROM的读写以及上位机通讯。
1) 按键电路的检测
对于矩阵键盘的按键扫描原理是对矩阵行列的高低电平进行检测,从而判断该键是否被按下及其位置信息。利用两个for循环即可完成对按键状态的循环检测,同时,定义一个unsigned char全局静态变量,对每次的按键值进行备份,保存前一次的值。但对于矩阵按键这种机械按键,由于机械触点的弹性作用,会在按键闭合和断开的一瞬间伴随一连串的抖动,会影响按键结果,按键的消抖设计,可以采用延时程序实现,加入两个if语句对按键进行持续检测,延时5~10 ms,即可完成消抖。
但在一般的工程应用中,采用延时程序会浪费计算机资源,同时要尽量缩短程序的运行时间,故需采用更优异的方法处理键盘抖动问题。本系统中利用定时器中断,每1 ms进入一次中断,扫描一次按键状态并存储起来,连续扫描4次后,判断按键状态是否一致,若保持一致,则确定按键处于稳定阶段,而非抖动阶段,同时定义一个unsigned char型的全局静态变量,大小为4×4的矩阵,作为矩阵按键扫描的缓冲区,用于存储1ms中断内一次按键的4次采样值,定义初始值为0xFF,即按键初始为弹起状态,从而完成按键的消抖[11]。
2) 12864液晶显示
根据系统设计要求,对12864液晶芯片上电初始化,系统读取EEPROM中存储的弹种射弹数目和身管磨损量大小,并在液晶屏上进行显示。液晶显示的内容包括两部分,包括汉字显示内容和数字显示内容,对于固定汉字内容的显示采用编码方式,编写table编码表,利用while循环语句,12864液晶对表中的内容进行读取并显示,直到编码表table中的字符为空字符时停止,此时结束循环。对数字部分的显示,主要是射弹数目的显示,同样定义一个内容0~9的编码,当输入数据送来时,求取该数据的“个、十、百”三位,求得的三位与编码中数字的顺序一致,可以完成对三位射弹数目的显示功能。
根据12 864的汉字显示坐标,固定的汉字显示部分占有6个地址,故设置数字显示地址从每行的“86H、96H、8EH、9EH”开始,并在结尾添加字符串结束符‘\0’结束输入,保证输入的准确性,对身管烧蚀磨损量的显示与该方法类似。这种液晶显示模块的设计较为简单,易于实现,且可靠性较高。
3) I2C总线对EEPROM的读写
对I2C总线信号时序及基本操作时序进行分析,编写I2C的起始信号、应答信号、非应答信号、终止信号、发字节到I2C总线以及读字节到I2C总线程序,同时,分析I2C总线与器件AT24C02的读/写时序,并编写相应的字节写入程序和字节读取程序,实现从EEPROM中读/写单字节的功能,但由于24C02是每个存储地址只对应8个bit的存储空间,表示范围为0~255,而根据实际的射击经验,弹种射弹数目往往大于255,因此,系统采用两个存储单元来存储一个数据,分别存储高低两位,来达到对0~65536数据的存储功能。
4) 上位机通讯
与上位机的通信,主要是为完成对身管烧蚀磨损量的传输和再处理功能。在通讯之前,首先进行串口初始化设置,主要设置产生波特率的定时器、串行口控制和中断控制。设置TMOD寄存器值为0x20,确定定时器T1的工作方式为2,晶振频率为11.059 2 MHz,波特率为9 600 bit/s,SMOD为0,装入TH1、TL1的初值均为0xFD,设串行口工作方式为1,同时开总中断和串行口中断,完成了对串行口的初始化。在数据传输后,关掉串行口中断,保证中断函数不在接收下一帧数据,将编译好的程序代码下载到单片机当中,完成数据通信功能。
根据身管烧蚀磨损量动态监测装置的总体设计,设计总体试验方案。给身管烧蚀磨损量监测设备通电,直流稳压电源采用+220 V电源供电,同时为火控计算机和操纵台提供+26 V电源,火控计算机XS3电缆上的3个弹种的选弹信号和炮长操纵台的击发信号直接接入到监测设备中的固定接口(该固定接口与单片机引脚相连),负责传递选弹信号和击发信号,在检测信号时,直接检测单片机引脚上是否有电平变化,串口通信线连接监测装置和计算机,用于传输初速减退量给计算机,方便后续对数据结果的分析和处理工作。
通过在Keil软件上进行编译、调试之后,程序无错误,将程序下载到单片机内部中,观察程序运行结果和人机交互情况,检验系统的可靠性。验证实验设计如图7所示。
图7 实验设计示意图
对火炮初速减退量监测系统的实验过程和结果进行观察和检验,系统各部分功能运行正常,将表2中3个不同弹种的射弹数目依次通过键盘输入到单片机内,检验BP神经网络算法前向计算能力。
表2中数据采集于磨损程度不同的同型坦克炮,利用身管内膛直径测量仪器对身管内膛固定点处的直径进行测量,该固定点位于距定位板轴向865 mm处。由于现役火炮经过一定量的实弹射击后,火炮内膛已不再是标准的正圆形,而变成了椭圆,因此,在测试点上每隔30°测量一次身管内膛直径,取平均值作为该点处的磨损量值。
表2 原始磨损量数据
编号123456789101112穿甲弹/发176188208231252274292314336356378402破甲弹/发132142157172191204219232248271284301榴弹/发131141151175183207219236255263283297磨损量/mm0.220.520.931.211.411.611.922.142.412.662.933.17
经算法运算,得到的计算结果如图8所示,从图中可以看出,利用监测装置计算出的身管烧蚀磨损量与实际数据略有出入,但曲线变化总体趋势与原数据类似,系统计算的总体误差也在误差范围内,证明了系统设计的合理性和结果的可靠性,也表明了BP神经网络算法模型嵌入单片机系统中的可行性。
图8 烧蚀磨损量的原始数据和计算结果
基于BP神经网络预测模型的火炮身管烧蚀磨损量监测系统,以STC89C52单片机为控制核心,将预测模型嵌入到单片机系统中,由于在嵌入式系统中,单片机只需对BP网络进行前向运算,运算量小,瞬间即可完成,故实时性能良好,并且对于处理像身管烧蚀磨损量预测这种较复杂的非线性问题,能够有效提升系统运行时间。如对单片机系统和算法做进一步改良,系统性能还可进一步提升,可广泛应用于身管烧蚀磨损量变化的监测中,可为相关工业部门的设计生产提供参考。
[1]郭珊山,吴朝晖,汪庆,等.基于小波分析和神经网络的便携式哮喘病监测系统的校准研究[J].电子设计工程,2017,25(21):90-95.
[2]杨理践,刘金凤,高松巍.基于MSP430单片机和神经网络的原油三相计量装置[J].石油工业技术监督,2008(5):40-43.
[3]李锐,熊杰.基于BP神经网络的原油持水率检测仪[J].仪表技术与传感器,2017(10):29-32.
[4]张德丰.NATLAB R2017a人工智能算法[M].北京:电子工业出版社,2018:85.
[5]张建军,李颀,丁明东,等.基于MSP430单片机的高精度压力变送器[J].仪表技术与传感器,2010(1):32-35.
[6]王云.51单片机C语言程序设计教程[M].北京:人民邮电出版社,2016:169.
[7]李广义,张伟,李民强,等.基于MSP430单片机和神经网络的气体浓度检测仪[J].仪表技术与传感器,2006(2):19-20.
[8]倪天龙.人工神经网络在ARM平台上的应用[J].专题论述,2005(5):15-17.
[9]田志勇,谭继文.基于BP神经网络的钢丝绳断丝损伤定量检测系统的设计[J].工矿自动化,2010(9):26-29.
[10]求是科技.单片机典型模块设计实例导航[M].北京:人民邮电出版社,2008:301.
[11]宋雪松.手把手教你学51单片机[M].北京:清华大学出版社,2014:119.
Citation format:WANG Guohui, ZHANG Baodong, LI Xiangrong.Design of BodyTube Wear Monitoring System Based on BP Neural Network[J].Journal of Ordnance Equipment Engineering,2020,41(06):126-131.