当前位置:首页 > 单片机 > 单片机
[导读]1、概述模拟训练器激光靶是接收射击训练手枪发出的激光束,训练枪由真实手枪改造而成,子弹为空爆弹,即没有子弹头。射击过程膛内有压力,手枪有后坐力,因此和实弹射击没有不同的感觉,能够达到预期的训练效果。手枪

1、概述

模拟训练激光靶是接收射击训练手枪发出的激光束,训练枪由真实手枪改造而成,子弹为空爆弹,即没有子弹头。射击过程膛内有压力,手枪有后坐力,因此和实弹射击没有不同的感觉,能够达到预期的训练效果。手枪的不同之处是枪内加入一组小型纽扣电池和一个微型激光发生器,并利用膛内压力使激光器工作,其工作时间由膛内压力控制.激光靶由光敏二极管,模拟电路,数字电路,单片机和个人计算机系统组成,激光靶接收到激光信号后,经过信号处理,由单片机以串口通讯方式将信息发送给个人计算机,此时个人计算机显示胸靶图像,弹着点颜色不同与其它部分,并语音报靶,同时系统采用网络技术,在监控室可以实时的观看并统计各个激光靶的射击训练情况,及对训练效果进行评估.

2、硬件电路

2.1 激光信号采集处理电路

训练枪激光器发出的激光束波长为622~1500nm,激光靶采用光敏二极管作为传感器,而太阳光含有该波长范围内的光,特别是当阳光强烈时激光枪信号更显微弱.设计中采用完全补偿方案,即单独使用一个光敏二极管感应太阳光,再叠加微小电压作为基准电压,当激光打到靶面光敏二极管时,其输出高于基准电压,否则其输出低于基准电压,设计中采用CD4053将电平信号转换为开关信号.

由于激光器的工作时间较短,加之射击时的抖动,因此必须对CD4053的输出信号进行脉宽调制,以保证单片机读到有效的激光信号脉冲.激光信号采集处理电路如图1所示.

2.2 计算机实时通讯电路

8031单片机将采集到的数据处理完成后,将中靶位置信息通过RS232串口传送给个人计算机,由于单片机供电没有负电源,采用如图2所示的电路实现8031单片机与个人计算机的通信.


图1中V1和V2分别为激光接收电路电压和基准电压

2.3 数字信号编码采集电路

我们将激光靶的764 个光敏二极管分为64块,采用8位二进制编码处理,并将其组成8×8矩阵式键盘机构,使用8279完成对靶面位置的不断扫描,自动消抖,自动识别出位置并给出编码.采用8031单片机完成对8279的初始化和控制,以及数据的采集和处理,数字信号编码采集电路如图3所示


图3数字信号编码采集电路

3、单片机软件流程

单片机程序设计主要包括主程序,中断服务程序和数据传送子程序,其基本工作方式采用中断方式。单片机用8031CPU,它与PC机数据传送采用RS232串口通讯。单片机程序流程图如图4所示。

4、PC机软件设计

4.1 设计思想

软件使用VC++6.0设计,通过RS232串行接口接收下位机发来信息,然后显示并报环,同时记录做统计处理,产生报表。串行通讯采用MSCOMM32.OCX控件实现。

由于需要同时对对台下位机进行监控,软件采用多文档模式进行设计,硬件采用多串口卡PCL-858实现。系统结构如图1

4.2 关于MSCOMM32.OCX

MSCOMM32.OCX 控件是由微软提供,该控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他串行通信设备;可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工的、事件驱动的、高效实用的通信程序。现将常用的属性列举如下:
CommPort:设置通信口号     Settngs:设置串行口参数
PortOpen:打开与关闭串行口    InputLen:读入输入数据长度
Input:读入数据          InBufferCount:输入缓冲区读入字节数
Output:输出数据         OutBufferCount:输出缓冲区读出字节数
InputMode:定义Input属性获得数据的方式。
Rthreshold:设置、返回在通信控件置ComEvRecieve并激发OnComm事件前要接收的字符数。
Sthreshold:设置、返回通信控件置ComEvSend并激发OnComm事件前发送缓冲区种的最小字符数。

4.3 串口通讯的实现

在ClassWizard中为新创建的通信控件定义成员对象:CMSComm m_Serial。以下是通过设置控件属性对串口进行初始化的源代码:
CString m_set;
  m_CommDpj.SetCommPort(m_pDoc->m_dpjComm.m_uPort); // 指定串口号
  m_set.Format("%d,n,8,1",m_pDoc->m_dpjComm.m_uBps);
  m_CommDpj.SetSettings(m_set); // 通信参数设置
m_CommDpj.SetInBufferSize(1024);// 指定接收缓冲区大小
m_CommDpj.SetInBufferCount(0);// 清空接收缓冲区
m_CommDpj.InputMode(1);// 设置数据获取方式
m_CommDpj.SetInputLen(0);// 设置读取方式


图5  系统结构图

m_CommDpj.SetRThreshold(10);//设置OnComm事件的响应

m_Opened=m_CommDpj.SetPortOpen(m_Port);// 打开指定的串口

打开所需串口后,使用OnComm事件和CommEvent属性捕捉并检查通信事件和错误的值。发生通信事件或错误时将触发OnComm事件,CommEvent属性的值将被改变,应用程序通过检查CommEvent属性值并作出相应的反应。以下为OnComm事件的源代码:
  VARIANT m_input1;
  COleSafeArray m_input2;
  long length,i;
  if(m_CommDpj.GetCommEvent()==2)//接收缓冲区内有字符
  {
     m_input1=m_CommDpj.GetInput();//读取缓冲区内的数据
     m_input2=m_input1;//将VARIANT型变量转换为ColeSafeArray型变量
     length=m_input2.GetOneDimSize();//确定数据长度
     for(i=0;i<length;i++)
     m_input2.GetElement(&i,m_Data+i);//将数据转换为BYTE型数组
     FromDpj();//进行事件处理
     DpjLock=false;
}

4.4 数据文件的生成

数据文件才文本形式进行存储。在数据文档中建立如下结构体:
struct ShotData{
unsigned int m_uNum;//编号
unsigned int m_uSNum;//站号
unsigned int m_uPlot;//射击点
 CTime  m_Curtime;//当前时间};

数据记录的源代码如下:
void CJGBDoc::GetFileName()//获取记录文件名
{
CString m_str;
GetCurrentDirectory(128,m_str.GetBuffer(128));
m_str.ReleaseBuffer(-1);
CFileDialog dlg(false,"Txt",m_str+"\*.Txt",NULL,"记录文件(*.Txt)");
if(dlg.DoModal()==IDOK)
{
     if(file.Open(dlg.GetPathName(),CFile::modeRead)!=0)
     {
         if(AfxMessageBox("文件已存在,是否覆盖?",MB_YESNO)==IDNO)
         {
AfxMessageBox("文件保存失败!");
             return;
}
file.Close();
     }
     if(file.Open(dlg.GetPathName(),CFile::modeWrite|CFile::modeCreate)==0)
     {
         AfxMessageBox("文件保存失败!");
     }
}
else
     AfxMessageBox("文件保存失败!");
}

实时记录函数:
{
---
CString  m_record;
m_record.Format("%d,%d,%d,%s",m_pDoc-> ShotData.m_uNum,
m_pDoc-> ShotData.m_uNum, m_pDoc-> ShotData.m_uNum
m_pDoc-> ShotData.m_CurTime.Format ("%y-%m-%d %H:%M:%S"));
file.Write(m_record);
---
}

5、结论

激光靶研制出样机后,与模拟射击训练用手枪进行了联调,试验表明,激光靶设计合理,满足设计技术指标要求,工作稳定可靠。通过采用模拟射击训练,一方面可以降低训练成本,另一方面也可消除意外事故,因此模拟射击训练器有很好的应用前景。

参考文献
[1] 王福瑞. 单片微机测控系统设计大全.北京航空航天大学出版社,1998.4
[2] 李大友.微型机算计接口技术.清华大学出版社,1998.5
[3] David J.Kruglinski,Scot Wingo,George Shepherd ,Programming Visual C++ 6.0技术内幕
1999.5
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭