您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页激光自动射击打靶装置

激光自动射击打靶装置

来源:华拓科技网
激光自动射击打靶装置

摘要:系统以MSP430和STM32为控制核心。MSP430控制两个步进电机42BYGHM604在不同的两个坐标轴上转动以带动激光左右和上下移动,从而准确实现激光的瞄准和打靶。STM32对摄像头模块OV7670传输的图像信息进行采集、分析处理,然后在彩屏显示器ILI9325LCD上显示胸环靶的相应图形,并闪烁显示弹着点;另外,STM32通过无线通信模块nRf24L01将信息发送至单片机MSP430,单片机进行分析、处理并在128点阵液晶显示模块上显示弹着点环数及方位信息,同时由语音模块WTV020对环数进行播报。经调试,该系统较好的实现了基础部分要求的各项功能及发挥部分要求的第一项功能,基本完成了发挥部分要求的第二项、第三项功能。另外系统采用语音播报弹着点环数,清晰明了,具有一定的创新性。

关键词: MSP430 STM32 步进电机 摄像头 彩屏显示器 液晶显示器

1

1 系统方案论证

1.1 激光自动控制方案论证

方案一:舵机带动激光笔瞄准。

利用两个舵机,在一个舵机的轴上固定另一个舵机,采用PWM波直接调节两个舵机的偏移角度,从而实现双轴瞄准。但是,对于测控系统而言,5mV以上的控制电压的变化就会引起舵机的抖动,因此要达到精度要求有一定难度。

方案二:直流电机带动激光笔瞄准

利用两个直流电机,采用全桥PWM控制直流电机正、反转,从而达到动态瞄准。但该方案有许多不足之处,直流电机不易受单片机控制,旋转角度无法由程序有效控制且精度不高,对于固定角度旋转比较困难。

方案三:步进电机带动激光笔瞄准

给步进电机加一个脉冲信号,电机则转过一个步距角,加上步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域采用步进电机控制变的非常的简单,且定位精确,稳定,可靠。采用双桥电机驱动芯片L298N可实现瞄准机构旋转角度的精确控制。

经试验比较,我们采用第三种方案。 1.2 控制方案论证

根据控制对象的特点,比较PID控制、模糊控制和模糊PID控制这三种控制策略发现,常规PID(比例,积分,微分)控制具有简单、稳定性好、可靠性高的特点,但是,常规的PID控制存在一些问题。首先,常规PID控制器不能在线整定参数;并且,常规PID控制器对于非线性、时变的系统和模型不清楚的系统就不能很好的控制,其PID参数不是整定困难就是根本无法整定,因此不能得到预期的控制效果。简单模糊控制由于不具有积分环节,因而在模糊控制的系统中又很难消除稳态误差,而且在变量分级不够多的情况下,常常在平衡点附近会有小的振荡现象。但模糊控制器对复杂的和模型不清楚的系统都能进行简单而有效的控制,所以如果把两者结合起来,就可以构成兼有着两者优点的模糊PID(Fuzzy-PID)控制器。所以,针对被控对象的特性我们选择利用模糊控制方式来给PID 控制器在线自整定(或自校正,自调整)PID参数,组成模糊自整定(或自调整)参数PID控制器的控制策略。 1.3 系统总体方案

基于以上方案的比较选择,系统总体设计框图如图1所示。

2

扬声器OV7670摄像头模块图像采集点阵液晶D8显示模块WTV020语音模块STM32ILI9325LCD显示模块语音报靶按键模块MSP430F1611nRf24L01无线通信模块开断控制信号nRf24L01无线通信模块L298N电机驱动模块激光 图1 系统总体设计框图

整个设计以MSP430和STM32为核心,MSP430控制两个步进电机在不同的两个坐标轴上转动,从而带动激光进行左右和上下精确定位,实现打靶和和瞄准。STM32通过摄像头模块进行图像信息采集,经过分析处理后在彩屏显示器上显示胸环靶的相应图形,并闪烁显示弹着点。 MSP430与STM32之间通过无线通信模块进行数据交换,配合实现系统要求。

2 分析与计算

2.1 激光自动控制原理

本设计使用了两个0.9度的步进电机来实现激光瞄准,将一个步进电机安装在另一个步进电机的轴上,从而构成一个双轴结构的激光,采用四项八拍的控制方式对两个步进电机转动角度进行精确定位,上下两个电机分别实现激光束横轴和纵轴方向的移动。 2.2 弹着点检测原理

摄像头采集信息经过处理后将图像显示在TFT彩屏上,TFT上每个像素都有一个RGB数据值,由于弹着点为红色激光光斑,其RGB值与其周围靶面的RGB值相差很大,所以可以设定一个范围,当RGB值在这个范围之内时认为是有效光斑。检测时,由TFT左上角第一个点开始从左向右、从上向下进行扫描,当扫描到RGB值在设定范围内的点时,将其记作P1(Xp,Yp),然后计算出O点坐标O(XO,YO),其中XO=Xp+2,YO=Yp+2,再找到O点周围的四个点A(XA,YA)、B(XB,YB)、C(XC,YC)、D(XD,YD)。

其中XA=XO,YA=YO+2,XB=XO+2,YB=YO,XC=XO,YC=YO+2,XD=XO-2,YD=YO。如果A、B、C、D四点均为有效光斑,即可认为O点为弹着点中心;若A、B、C、D四点中任意一点不是有效光斑,则继续从P1点开始继续扫描,直到确定弹着点中心为止。弹着点检测原理如图2所示。

3

P1ADOBC

图2 弹着点检测原理图

3 硬件设计

3.1 激光及瞄准机构设计 3.1.1 光源控制模块

单片机开断信号经过两个并联的100Ω功率电阻加到三极管S8050基极,激光

头接于S8050集电极,通过单片机控制可实现激光的开通与关断。光源控制电路如图3所示。

3.3V3.3VP6.7100Ω100ΩS8050

图3 光源控制电路

3.1.2 瞄准机构电机驱动模块

电路主要由光电耦合器TLP521-4和TLP521-2以及电机驱动芯片L298组成。IN1、IN2控制电机正反转方向,ENA使能,同理,IN3、IN4和ENB实现对另一电机的控制。单片机控制端与L298之间采用光耦隔离以减少信号干扰。瞄准机构电机驱动电路如图4所示。

3.3V330O12330O345678TLP521-4161514131211109470OVDDVEE470OL298N5IN17IN210IN312IN46ENAENBOUT1OUT2OUT3OUT4D12313D3D5D7330O470O330O470O330O12330O348765TLP521-2470O1114D2SENA1SENB15D4D6D8470O

图4 瞄准机构电机驱动电路

4

3.2 弹着点检测 3.2.1 摄像头模块

系统采用OV7670图像传感器来采集胸环靶及弹着点信息,OV7670通过SCCB总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率8位影响数据,VGA图像最高达到30帧/秒。所有图像处理功能过程包括伽玛曲线、白平衡、饱和度、色度等都可以通过SCCB接口编程。应用独有的传感器技术,通过减少或消除光学及电子缺陷可以输出高清晰度、高稳定性的彩色图像。 3.2.2 无线通讯模块

本设计通过nRF24L01无线射频通讯模块实现STM324和MSP430之间的双机通信。nRF24L01是一款工作在2.4~2.5GHz的通用ISM频段的单片无线收发器芯片,输出功率、频道选择和协议的设置可以通过SPI接口进行设置,具有低功耗,受干扰小,稳定性高的特性。 nRF24L01无线通信模块接口电路如图5所示。

图5 nRF24L01无线通信模块接口电路

3.3 显示及播报 3.3.1 显示模块

本设计使用了FTF彩屏和LCD128液晶显示屏构成系统的显示模块。基于FTF具有较高的对比度和荧屏更新频率的特性,用它来显示胸环靶的相应图形,并闪烁显示弹着点;而LCD128是一种具有4位/8行、2线或3线串行多种接口方式的点阵图形液晶显示模块,其显示分辨率为128*,可以显示8*4行16*16点阵的汉字,用来显示弹着点环数及方位。 3.3.2 语音模块

设计中使用WTV020这一款功能强大的可编程语音芯片来播报弹着点环数及方位,WTV020内嵌高速DSP内核处理器,支持WAV、MP3两种常用的音频格式,具有DAC和PWM两种输出方式,内置功放输出可直接驱动0.5W喇叭。WTV020语音芯片引脚图如图6所示。

5

图6 WTV020语音芯片引脚图

4 软件设计

本次设计采用了两套控制系统, 以MSP430为核心的单片机控制系统用于控制激光二维平面位置及瞄准发射,以STM32为核心的ARM控制系统则进行图像信息采集与分析处理。MSP430程序流程图如图7所示,STM32程序流程图如图8所示。主要控制程序见附录。

开始系统初始化开始模式选择移动到中心移动到某环手动靶心校正电机动作后是否退出?N无线发送成功?YY锁屏等待触发N无线接收成功?扫描胸环靶Y电机动作锁屏寻找射击点动作调整是否完成?YN读环数显示

图7 MSP430程序流程图 图8 STM32程序流程图

6

5 测试数据与结果分析

5.1 测试仪器

(1)精度0.1cm的卷尺和直尺; (2)精度0.01s秒表。 5.2 测试方法 (1)基础部分测试

用键盘设置激光束在靶纸上上下、左右移动,通过摄像头识别激光投射在胸环靶上的弹着点光斑,并显示弹着点的环数与方位信息。经过多次反复测试得到测试数据如表1所示。

表1 测试数据

测试次数 实际环数 显示环数 播报环数 实际方位 显示方位 播报方位 1 2 3 4 5 10 9 8 6 5 10 9 8 6 5 10 9 8 6 5 中心 左上 右上 右下 正上 中心 左上 右上 右下 正上 中心 左上 右上 右下 正上 从测试数据反映,系统对弹着点的环数及方位检测准确度高。 (2)发挥部分测试

自动控制激光,使激光束光斑从胸环靶上的指定位置迅速瞄准并击中靶心,并记录所用时间。经过多次反复测试得到测试数据如表2所示。

表2 测试数据

测试次数 1 2 3 4 5 指定点对应环数 9 8 7 6 5 瞄准误差(mm) 1 1.2 1.5 0.9 1.6 所用时间(S) 3 3 4 5 6 任意设定环数,控制激光瞄准击中胸环靶上相应位置,并记录所用时间。经过多次反复测试得到测试数据如表3所示。

表3 测试数据

测试次数 1 2 指定环数 10 9 瞄准误差(mm) 1 1.5 所用时间(S) 5 7 7

3 4 5 8 6 5 1.2 1.6 1.3 9 12 15 从测试数据反映,系统瞄准精度较好,瞄准速度还有待进一步提高、完善。 6 结论

通过测试,激光自动射击装置较好的实现了控制激光击发、自动报靶及自动瞄准等功能,能准确检测、显示和播报弹着点环数及方位。整个系统功能完善,检测与瞄准精度较好,自适应能力较强,且有一定的创新性。

参考文献

[1] 瞿安连.电子电路-分析与设计.华中科技大学出版社,2010.

[2] 王兆安,黄俊.电力电子技术.第四版.西安交通大学:机械工业出版社,

2006.

[3] 刘树棠等.基于运算放大器和模拟集成电路的设计.西安交通大学出版社,

2004.

[4] 张天钟,姜宝钧,邓兴成.基于MCS-51单片机的光源跟踪.实验科学与技

术,2006,(01):39-40.

[5] 张日希等.MSP430系列单片机实用C语言程序设计.人民邮电出版社,2005.

8

附录 系统主要控制程序

基于MSP430的电机控制程序: void cir_x_y() //运动到圆心 {

Run_Time1=0; IO_send(); num_x=179; num_y=119; get_dir(); cycle_num=10;

point_to_point(num_x,num_y,ox,oy); }

void cir_run(float x,float y) //x,y轴所运动的长度 {

uint the_numstep_x,the_numstep_y; num_x=x; num_y=y;

the_numstep_x=(int)(num_x/little_length_x); the_numstep_y=(int)(num_y/little_length_y);

if((the_numstep_x>=the_numstep_y)&(the_numstep_y!=0)) {

together_step=(int)(the_numstep_y/little_length_y); per=(int)(the_numstep_x/(the_numstep_y));

along_step=((int)the_numstep_x)%((int)((the_numstep_y))); while(per--) { a=0;

while(a!=together_step) {

TACCTL0 |= CCIE; } a=0; dir_up=0;

9

}

while(a!=along_step) {

TACCTL0 |= CCIE; } a=0; dir_down=0; }

if((the_numstep_xtogether_step=(int)(the_numstep_x/little_length_x); per=(int)((the_numstep_y)/(the_numstep_x));

along_step=(((int)(the_numstep_y))%((int)(the_numstep_x))); while(per--) { a=0;

while(a!=together_step) {

TACCTL0 |= CCIE; } a=0; dir_down=0; }

while(a!=along_step) {

TACCTL0 |= CCIE; } a=0; dir_up=0; } }

10

基于STM32的弹着点检测程序: /*寻找射击点*/

ErrorStatus GUI_LoctaionShootPoint(u16 *PointX,u16 *PointY) {

u16 x,y;

//u16 PointX,PointY;

u16 Xlimit;//每个Y行对应的X极限长度 int delta=0;

// u8 PonitLen=4;//点的直径 // 十字星

// GUI_Line(39,119,279,119,0x0000);//横 // GUI_Line(159,0,159,239,0x1234);//竖

//ili9320_ClearScreen(0xffff);//清屏 此代码放于main函数开头 for(y=0;y<240;y+=2) {

if(y<120) delta=120-y;

{

*PointX=x;

*PointY=y; 某个范围 {

*PointX+=1; *PointY+=1;

if((ili9320_GetPoint(*PointX,*PointY)&0xF800)>58000)//仍然在圆斑内 {

if( ((ili9320_GetPoint(*PointX+1,*PointY)&0xF800)>58000)&&

else delta=y-119;

Xlimit=sqrt(120*120-delta*delta );

for(x=159-Xlimit;x<159+Xlimit;x+=2) //X 开始在圆内

if( (ili9320_GetPoint(*PointX,*PointY)&0xF800)>58000)//注意:这个值应该在

((ili9320_GetPoint(*PointX,*PointY+1)&0xF800)>58000)&&

11

((ili9320_GetPoint(*PointX-1,*PointY)&0xF800)>58000)&& ((ili9320_GetPoint(*PointX,*PointY-1)&0xF800)>58000) )//仍然在圆斑内

{

GUI_ShowShootPoint(PointX,PointY); //打点 //显示坐标

GUI_ShowRGB(0,0,*PointX,0x0000,0xffff); GUI_ShowRGB(0,16,*PointY,0x0000,0xffff); return SUCCESS; }

/*中心位置处理*/ for(y=118;y<120;y++) {

for(x=144;x<174;x++)

{

if( (ili9320_GetPoint(x,y)&0xF800)>25000 ) { if((ili9320_GetPoint(x+1,y)&0xF800)>25000) {

*PointY=y;

*PointX=x+1;

GUI_ShowShootPoint(PointX,PointY); //打点//显示坐标

GUI_ShowRGB(0,0,1,0x0000,0xffff); GUI_ShowRGB(0,16,*PointY,0x0000,0xffff);

return SUCCESS;

}

for(x=158;x<160;x++)

{

} }

}

}

} }

12

} for(y=104;y<134;y++) { if( (ili9320_GetPoint(x,y)&0xF800)>25000 )

{

if((ili9320_GetPoint(x+1,y)&0xF800)>25000)

{

*PointY=y+1; *PointX=x;

GUI_ShowShootPoint(PointX,PointY); //打点//显示坐标

GUI_ShowRGB(0,0,1,0x0000,0xffff); GUI_ShowRGB(0,16,*PointY,0x0000,0xffff); return SUCCESS; }

*PointX=0;

*PointY=0;//脱靶 return ERROR;

}

} }

13

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务