多单片机分布式控制的双路测时仪设计与实现*

2014-12-26 03:34倪晋平开百胜
西安工业大学学报 2014年12期
关键词:逻辑电路子程序计数器

吴 斌,田 会,倪晋平,开百胜

(1.西安工业大学 陕西省光电测试与仪器技术重点实验室,西安710021;2.黑龙江北方工具有限公司,牡丹江157000)

弹丸飞行速度是衡量武器系统性能的关键参数之一,在常规兵器靶场测试中常常测试弹丸的初速.常用的速度测量装置由网靶、天幕靶、光幕靶等区截装置与测时仪组成[1-3].区截装置摆放在弹丸预定弹道线上,当弹丸穿过传感器的探测区域时,产生微弱变化的信号,经放大整形之后输出一个方波脉冲信号,测时仪记录弹丸穿过两个区截装置产生的脉冲信号之间的时间间隔[2].现有的XG-2002-Ⅱ型电子测时仪采用一片CPLD计两路信号的时间间隔,测试范围短,无法满足长时间的弹丸飞行时间的测量[4-6];显示部分使用6个独立数码管,电路复杂,安装困难.为了满足上述上述设计需求,有研究者提出使用小频率晶振作为计时基准,此方法可以增加测时仪的计时范围,但无法满足精度要求.为了解决上述问题,文中提出了一种多单片机(Micro Control Unit,MCU)分布式控制的双路测时仪,采用两片CPLD[7]分别对每路信号进行计数,整体采用分布式控制,显示部分使用从单片机进行单独控制.并进行了硬件电路与软件的设计,以期达到靶场弹丸测时精度要求.

1 测时仪工作原理与总体设计

依据实际靶场测试需求,测时仪可实现两路独立测时.当起始通道接收到脉冲信号时,测时仪内部的计数器开始计数,当截止通道接收到脉冲信号时计数器停止计数,计数器的数据乘以晶振周期,即可计算出弹丸穿过区截装置的时间得到弹丸在起始靶和截止靶之间的飞行时间t,结合事先测量出的两靶靶距s,弹丸速度计算公式为

其中v为弹丸速度.只要精确测量到靶距s就可以计算得出速度v.

如图1所示,测时仪主要由四部分组成且采用分布式控制.信号输入部分采用光耦隔离,避免因长线传输引入的地线干扰;逻辑电路部分将两路输入信号分别传输给两片CPLD芯片,每片CPLD在主单片机控制下独立工作,对两路信号进行独立计时;参数设置部分用来设置测时仪的工作状态以及靶距数据;主单片机控制整个电路的工作过程,分别给不同外部设备分配不同地址,测时结束后在地址总线的控制下分别读取两片CPLD的测时数据、功能状态选择数据和靶距数据,并完成相应的数据计算,得到的结果通过串行总线发送给负责显示的从单片机进行显示;主单片机还可以与上位机进行通讯,将得到的时间数据通过串口总线发送给上位机,通过上位机计算得到速度;从单片机接收到主控单片机发来的时间数据将其转化之后可以通过P1口实现8位数码管动态显示.通过这种分布式控制的方法简化了显示板电路设计,有利于仪器显示的扩展.

测时仪中使用三个单片机,一个主单片机,两个从单片机,其中两个从单片机主要完成显示功能,在主单片机的控制下显示相应的数据;主单片机完成除显示外的其他功能.

图1 系统组成框图Fig.1 Block diagram of the system

为了在保证测时仪的测量精度的同时增大测量范围,用两片CPLD分别对两路信号测时,逻辑计数电路采用32位宏功能计数器,采用恒温1 MHz晶振作为计数基准,最长测量时间范围为146s.

2 电路设计

2.1 硬件电路设计

主单片机控制测时仪的整个工作过程,完成数据的读取、传输以及计算等,如图2所示.CPLD主要用来测量脉冲信号之间的时间间隔;从控单片机主要应用在显示板中,实现数码管的动态显示.

主单片机的P0口、WR、RD、ALE以及RST接入两片CPLD中,其中P0口为数据/地址总线.CPLD通过74LS373三态输出的透明锁存器在单片机的ALE(地址锁存允许)的控制下,将地址数据从P0口分离出来,之后经由译码器得到地址总线.总线在RD、WR的控制下完成读写操作.

测时仪面板上6个8421码拨码盘输入#1路靶距(其中四位数据对应一个十进制数据),利用3片74LS244总线驱动器在地址总线的控制下依次将24位数据通过主单片机P0口数据总线读入,仪器的工作状态位(包括“靶距”、“测时”、“测速”和“微机”)也可通过74LS244上传到数据总线上.为了便于仪器的扩展,利用串行总线实现数据在不同单片机之间的传输,包括靶距数据、时间数据和速度数据.

由于测时范围的增大,测时仪原有的6位显示板无法满足需求,设计的显示板采用两组四位共阴数码管在从单片机控制下进行动态刷新显示.该显示板除单片机外只需一片CD4511用于译码驱动和一片74LS138用于片选即可,如图3所示.

图2 硬件电路设计框图Fig.2 The diagram of hardware circuit

图3 显示电路Fig.3 The diagram of display circuit

图3中U1为CD4511,U2为74LS138,其中U1四个数据输入端连接至接从单片机的P10~P13管脚,输出管脚连接至两组四位共阴数码管的段选信号端;U2的输入管脚连接至从单片机的P14~P16管脚,实现数码管的片选功能;从单片机P17通过一个三极管控制数码管小数点的亮灭.

2.2 逻辑电路设计

可编程逻辑器件选用Altera公司MAX700S系列的EPM7128SQC100处理器.在CPLD[8]逻辑电路部分主要包括译码逻辑电路、输入逻辑综合电路、32位计数器电路以及数据缓冲逻辑电路等.

译码电路将单片机P00~P05五位地址信号送入Decode宏模块,其中P04和P05用来区分两片CPLD的地址,即将P04或P05分别和单片机WR和RD信号进行逻辑“与”后分别输出至两片译码芯片的使能端口;P00~P03送给两片译码宏单元分别输出16个控制信号,其中WR控制的写地址命令wr[0~15],RD控制读地址命令rd[0~15].wr[0]为起始信号允许控制命令,wr[1]为软件复位命令;rd[0~3]可实现计数器32位数据的分时读取,rd[4]是测时仪工作状态读取信号,rd[5~7]靶距读取的地址信号,rd[8]用于读取起始信号与截止信号实时状态.

输入信号逻辑综合电路、计数逻辑电路和数据缓冲逻辑电路主要测量两个脉冲信号时间间隔如图4所示.输入逻辑综合电路在地址总线的控制下完成各个输入信号的时序处理,包括计时的开始、停止和清零等命令;计数逻辑电路在起始信号到来时开始计数,当截止信号到来时停止计数,并将输出数据锁存到数据缓冲逻辑电路中,采用分时传输的方式传输给单片机的数据总线.

Counter为32位宏功能计数器,其输入信号Start接到一个D触发器的Clk端,D端接VCC,Q端接计数器的使能端如图5所示.当Start信号上升沿来,计数机就开始计数.Stop信号通过一个反门接入D触发器的清零端,当Stop为高电平时,计数器就会停止计数.

图4 #1路计数逻辑电路示意图Fig.4 The block diagram of logic circuit for counting

测时仪进入测时准备状态时,通过wr[0]控制D触发器(U4)的Q端为高电平,开启与门(U6),可防止干扰信号提前触发计数器.P1为起始信号,连接到D触发器(U1)的D端,在Clk-in(时钟信号)的作用下进行时钟同步,防止竞争冒险.Start-in信号经过U3和U6后,Start信号由低电平翻转到高电平,其上升沿对应了P1信号的上升沿,控制计数器U7开始计数.U2,U5与U8的工作过程与前述逻辑基本一致,截止信号P2来时,计数器停止计数.

为了防止信号的串扰,以及一些噪声信号的干扰,由Start信号使能延时计数器U9,当U9计数到设定数值后,输出Stop-en由低电平变为高电平,这时P2信号才会有效发出Stop信号,停止计数器U7.U7将计数得到的数据data[31..0]通过U10在地址信号rd[0~3]的作用下分时从数据总线P0[7..0]读入到单片机当中去.

图5 计数逻辑电路Fig.5 Logic circuit for counting

为了让主单片机掌控计数器工作状态,输入的起始信号和截至信号分别经由一个D触发器输出给74LS244,主单片机通过读取74LS244就可以知道计数器是处于等待、计数还是计数结束状态,从而判断是否可以读取计数器中的数据.

3 测时软件设计

测时仪采用单片机作为主控制单元,程序采用单片机高级语言C51[5]编写.结合测时仪工作特点,主程序通过对功能选择部分数据的实时循环扫描读取,判断当前工作状态:即当处于“靶距”档时,程序进入靶距显示子程序;当处于“测时”档,程序进入测时子程序;当处于“测速”档,程序进入速度计算子程序;当处于“微机”档时则进入上位机通讯子程序;且测时仪各个档位之间可以任意切换,即当测试完成时,测时仪处于什么档位,显示部分就显示相应的数据.

3.1 显示模块子程序设计

显示模块采用从控单片机单独控制,利用RS232通讯方式与主单片机进行数据交换.当主单片机完成相应的计算将数据按照既定格式通过串口发送给对应的从控单片机,从控单片机接收到数据之后将其转化成可以直接用于显示的数据.

3.2 靶距显示子程序设计

靶距显示子程序如图6所示.当测时仪进入靶距显示子程序,首先判断测时仪两路通道是否处于工作状态,如果#1路处于工作状态,主单片机读取一路靶距,并与上一个#1路靶距数据进行比较,如果不一样则发送给#1路显示并进入#2路出路程序,否则直接进入#2路处理程序;#2路靶距处理完成之后程序退回到主程序,此时如果测时仪状态没有发生改变的话,程序还是进入靶距显示子程序再次执行,如此循环.

图6 靶距显示子程序流程图Fig.6 Subroutine of reading the distance between two targets

在靶距显示子程序中,靶距s的装入需进行转换.六位BCD码转化为十六进制公式为

式中:HH4、MH4、LH4为靶距数据的高低中八位的高四位;HL4、ML4、LL4为靶距数据的高低中八位的低四位.

通过式(2)得到十六进制靶距s之后再将其转化成十进制数.由于程序总体采用循环扫描的方式编写,如果测时仪状态没有改变程序会一直循环执行下去,因此在程序中加入靶距数据“改变否”这一判断,防止相同数据被循环发送显示.

3.3 测时子程序设计

测时子程序同样采用循环扫描的方式如图7所示,当#1路处于工作状态,首先判断其有没有起始信号,如果起始信号来,给显示板发送全1数据,显示全1;然后判断有没有截止信号,如果有截止信号,主单片机通过总线读取计数器数据,处理完之后通过串口总线发给显示板显示,随后程序进入#2路测时处理程序;如果没有起始信号或者截止信号,为了实现两路独立测时,程序不会在此等待,而是直接进入#2路测时程序;#2路测时处理完之后同样退出到主程序.

测时子程序中,时间t需要转换,公式为

式中:DHH、DH、DM、DL分别是计数器高、中高、中低、低32位数据的十进制转换;fsoc为CPLD时钟晶振频率.

图7 测时子程序流程图Fig.7 Subroutine of time measurement

3.4 速度计算子程序设计

速度计算子程序同样采用循环扫描的方式编写,且速度计算子程序将靶距、时间重新计算,如图8所示,采用这种方式克服传统测时仪一旦速度计算得出,无法修改的缺点即当速度得出并显示之后对靶距进行修改,速度也会随之改变.

图8 速度计算子程序流程图Fig.8 Subroutine of calculating speed

4 实验结果及分析

利用秒表验证测时仪的测量范围,结果表明测时仪最大测量时间约为146s;使用信号发生器,使其两个信号输出端(CH1、CH2)输出两个脉冲信号,通过设置可使CH2比CH1延迟0~20s的时间,将测时仪两路起始信号短接,两路截止信号短接,将CH1输入到测时仪的起始信号端,CH2输入到截止信号端,设置不同的延迟时间,每次试验10次,结果见表1.由表1数据可知,设计的测时仪测时范围有了较大的提高,且精度在20s内误差小于1×10-3‰,满足长时间测时的精度要求.

测速相对误差公式为

式中:v为弹丸速度;s为靶距;t为飞行时间.

以7.62mm步枪弹测速为例,靶距为4m,预定飞行速度为740m·s-1,其中靶距测量误差为2 mm,因此当时间测量相对误差不大于0.05%时,即可满足天幕靶的测速精度不大于0.1%的技术指标要求,因此20s内误差小于1×10-3‰满足天幕靶测速精度要求.

误差主要来源:晶振本身具有的误差;输入触发信号在线路传输和电路中产生的延时;触发信号在电路中产生的延时;触发信号上升沿的不一致性产生延迟带来的影响等.

表1 测时仪实验数据Tab.1 The test data of chronometer

5 结 论

1)文中设计的双路测时仪采用多单片机分布式控制的设计思想,简化了电路设计难度,在保证精度的同时提高了仪器测量范围,使用1MHz晶振,测量范围可以达到0~146s.

2)在1MHz晶振时,在20s范围内相对误差小于1×10-3‰.

3)采用模块化设计,具有体积小、便于维护、使用灵活等优点,可进行电路升级和功能扩展.

[1] 田会,倪晋平.一种天幕靶用弹丸信号自动识别电路[J].西安工业学院学报,2005,25(6):526.TIAN Hui,NI Jin-ping.A Circuit to Automatically Recognize Projectile Signal on Sky Screen[J].Journal of Xi’an Institute of Technology,2005,25(6):526.(in Chinese)

[2] 马时亮,倪晋平,颜家林.基于C51语言智能测时仪的设计与实现[J].西安工业大学学报,2005,25(4):327.MA Shi-liang,NI Jin-ping,YAN Jia-lin.The Design of Intelligent Electrical Chronometer Based on C51 Language[J].Journal of Xi’an Institute of Technology,2005,25(4):327.(in Chinese)

[3] 倪晋平,李晋惠,王铁岭,等.智能化多功能测时仪研制[J].西安工业大学学报,2000,20(3):182.NI Jin-ping,LI Jin-hui,WANG Tie-ling,et al.The Design of Intelligent Multi-Functional Chronometer[J].Journal of Xi’an Institute of Technology,2000,20(3):182.(in Chinese)

[4] 田会,倪晋平,蔡荣立.用于弹道测量的实时测速同步触发仪设计[J].光学技术,2011,37(3):327.TIAN Hui,NI Jin-ping,CAI Rong-li.A Synchronous Trigger System Capable of Getting the Velocity of Current Firing Used in Ballistic Trajectory Measurement[J].Optical Technique,2011,37(3):327.(in Chinese)

[5] 倪晋平,刘璐,赵静远.高分辨率大范围时间间隔测量仪的设计与实现[J].西安工业大学学报,2013,33(2):98.NI Jin-ping,LIU Lu,ZHAO Jing-yuan.The Design and Realization of High Resolution and Large Range of Time Interval Measurement[J].Journal of Xi’an Technological University,2013,33(2):98.(in Chinese)

[6] 马忠梅,籍顺心,张凯,等.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,2001.MA Zhong-mei,JI Shun-xin,ZHANG Kai,et al.C Language Application Program Designing of Single Chip Microcomputer[M].Beijing:Beijing University of Aeronautics and Astronautics Press,2001.(in Chinese)

[7] 郑应民.CPLD在电子测时仪的应用[J].现代电子技术,2005(23):82.ZHENG Ying-min.Application of CPLD in the Time Measure Instruments[J].Modern Electronics Technology,2005(23):82.(in Chinese)

[8] 王春侠.CPLD应用中计数器竞争-冒险现象的一种消除方法[J].陕西工学院学报,2003,19(2):35.WANG Chun-xia.An Elimination Method of Competition-Hazard of the Counters in CPLD Application[J].Journal of Shaanxi Institute of Technology,2003,19(2):35.(in Chinese)

猜你喜欢
逻辑电路子程序计数器
采用虚拟计数器的电子式膜式燃气表
关于74LS90计数器的Multisim仿真分析
数字电子时钟逻辑电路的教学设计与仿真
SR620型与53230A型计数器的性能测试
基于软件技术的组合逻辑电路模型分析与实现研究
短区间自动闭塞车站接近区段逻辑电路设计
算盘是个“小气鬼”
浅谈子程序在数控车编程中的应用
子程序在数控车加工槽中的应用探索
西门子840D系统JOG模式下PLC调用并执行NC程序