坦克打靶论文文档格式.docx
- 文档编号:20699755
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:27
- 大小:93.25KB
坦克打靶论文文档格式.docx
《坦克打靶论文文档格式.docx》由会员分享,可在线阅读,更多相关《坦克打靶论文文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
附录12
附2程序源码12
一系统方案
系统主要由控制电路模块、黑色轨迹引导信号采集模块、系统电源模块、追光光信号采集模块,红外激光笔,电机驱动模块组成。
1.1核心控制电路的论证与选择
方案一:
FPGA系统实现
采用数字电路系统进行逻辑分析,其具有多进程,实时性高,响应触发信号快等优点,可以由目前比较主流的FPGA实现。
通过VHDL语言编程,配置FPGA内部逻辑门资源可以实现该设计的逻辑要求关系。
但使用FPGA具有编程复杂和电路复杂的缺点。
方案二:
单片机实现
采用MSP430系列单片机进行编程实现。
MSP430系列单片机具有低功耗、速度快、外围电路简单,片上资源丰富等优点,。
可以由高级语言C语言编写程序,通过程序的编写能够对修正采集的信号误差以及控制被控对象。
方案三:
DSP技术实现
运用DSP技术,通过摄像头采集光源进行图像分析。
DSP具有速度快、精度高的特点,但是此方案技术难度高,开发周期长,不容易实现。
通过方案比较,本设计采用方案二,选用MSP430F149单片机作为主控芯片。
1.2黑色轨迹引导信号采集电路的论证与选择
摄像头采集图像信号进行图像分析
由摄像头采集图像信号,通过采集到的图像信号进行图像分析。
根据分析结果确定坦克偏移引导轨迹方向量,再交由控制器处理结果。
该方案具有信息精确度高、抗干扰性强等优点,但是该方案还有成本极其高昂、电路非常复杂的缺点。
红外对管进行黑色区检测
由简单的红外对管加上一些辅助电路实现黑色区的识别。
由于靶场由白底和黑色的引导线组成,红外对管可以在黑色和白色区输出的电压信号差极其大,它能实现黑色引导轨迹的识别,输出的高低电平代表是否在黑色区。
该方案具有电路简单,稳定性强,成本低廉,操作简单的有点。
通过比较,本设计采用方案二。
1.3追光信号采集电路论证与选择
摄像头采集图像信息
通过摄像头采集图像信息,然后进行图像分析,通过分析计算出光源所在位置。
该方案具有稳定性强,信息可靠性高的优点,但是成本过高,编程实现复杂。
光敏电阻采集光强
为光敏电阻套上一根适当长的直管,由于光具有直线传播的特性,当光敏电阻上的长直管正对光源时,光敏电阻的阻值最小。
输出一个电压信号。
该方案具有电路简单,成本低廉,实现容易的优点。
通过比较,本设计选用方案二。
中功率三级管直接搭建
在电机驱动要求不高的地方可以由三极管直接搭建一个驱动电路,使用三级关搭建的电机驱动电路电路简单,但功率和性能一般。
对输入信号要求较高,输出性能只能满足一般要求。
使用专用电机驱动芯片L298N
L298N的驱动能力强,输入电压可变化范围大,是一块专用直流电机驱动芯片。
其各项性能都较好,但价格较高,在电机要求驱动器较高的地方使用较佳。
在该设计中,两个前进电机使用L298N,炮台电机使用中功率三极管搭建。
二硬件电路设计
2.1系统总体框图
本系统将外接的12V直流蓄电池为系统供电,通过电源稳压芯片为系统提供9V、5V、3.3V电压。
单片机获取红外对管检测的引导黑线信息和光敏电阻采集到的光线强度信息,然后按照一定的算法控制电机的转动,以完成各种控制动作。
图1系统总框图
2.2单片机最小系统
该系统以MSP430F149单片机的最小系统原理图,单片机获取红外对管检测到的引导黑线的信息,然后控制电机转向。
单片机的最小系统如图2所示。
图2单片机最小系统
2.3系统电源电路
系统需求12V、9V、5V、3.3V电源,采用12V蓄电池通过LM7809、LM7805和LM1117-3.3转换成电路需要的电源电压。
电路如图3所示。
图3 系统电源电路
2.4电机驱动电路设计
1、前进电机驱动电路
前进电机驱动电路用于坦克运动时的电机驱动。
由于该电机的功率较大,故使用L298N驱动。
电路如图4所示。
图4 前进电机驱动电路
2、炮台电机驱动电路
由于炮台电机的功率不大,故对驱动电路的功率要求也不高,故该设计采用中三极管搭建。
电路如图5所示。
图5 炮台电机驱动电路
2.5寻迹模块电路
寻迹模块由红外对管和反相器组成。
当红外对管正对白色区域时,白色区域返回红外光,使得接收管阻值很低。
当红外对管正对黑色区域(黑色引导线)时,由于黑色区域反射红外对光能力较弱,接收管收到红外光较少,接收管阻值较高。
它们串接有一定阻值的电阻进行分压,使得电路在白色区域和黑色区域输出电平不相同。
电路如图6所示。
图6寻迹模块电路
2.6声光指示电路
声光指示部分就由单片机的一个普通IO口控制一个三极管,用三极管驱动LED和蜂鸣器。
电路如图7所示。
图7声光指示电路
2.8追光模块电路
追光部分由三个同一型号的光敏电阻和三颗10K的电阻组成,由于光线强度的变化使得光敏电阻阻值变化,从而输出与光强有一定关系的电压值。
又由于三颗光敏所对方向不同,从而可以根据三颗光敏电阻两端电压值确定光源方向以及是否已经对准光源。
电路如图8所示。
图8 追光模块电路
2.9显示模块电路
显示部分采用LCD1602液晶,用于调试程序及显示行驶时间,以及当前工作模式。
电路如图9所示。
图9LCD1602液晶显示电路
三软件设计
3.1主程序设计
当系统上电后单片机初始化后,先进行按键检测,若按键选择为基本部分测试模式,程序则按照基本部分的程序算法执行。
若选择为发挥部分测试模式,则按照运行发挥部分的程序算法执行。
在程序中,程序检测黑色引导线,当偏离引导线后,程序调整电机转动方向。
当检测到打靶点时,若选择为基本测试部分则停下打靶,若选择为发挥部分则不停止,依然打靶,打靶时间为两秒,并伴随声光指示。
程序开器有定时器,当计时器达到60秒时,坦克自动停止前进和打靶。
主程序流程如图10所示。
图10 总体流程图
3.2定时器中断程序流程图
定时器中断程序用于对系统运行时间的计时以及定时工作时间不能超过60s,当时间超过60s时,自动停止运行。
定时器中断程序如图11所示。
图11 定时器子程序
四测试方案与测试结果
4.2基本部分要求测试
1、坦克从起点出发,沿引导轨迹快速到达终点。
坦克上标示一醒目的检测基准。
在寻迹跟踪的全过程中,其检测基准偏离引导轨迹边缘距离应≤2cm,一旦不满足该要求,坦克自动给出声光报警;
当行驶时间达到60S时,坦克立即自动停车并停止炮击的动作并给予声光报警。
2、在引导轨迹适当位置设置有4条“炮击点”黑色短线,坦克检测到“炮击点”黑色短线时需立即发出声光指示信息,并停车,在检测到“炮击点”标志1s内瞄准炮击。
炮击全过程以激光指示弹着点并伴随声光指示,持续时间≥2s,以便确切检测激光炮击点刻度位置,记录该过程中最大偏差值。
4.3发挥部分要求测试
炮塔增加250g的转动惯量配重,
1、全程行驶时间,其余要求同“基本要求”第
(1)条。
2、坦克在行进过程中可以动态瞄准目标,当检测到“炮击点”黑色短线时立即炮击。
炮击过程必须伴随声光指示,时间持续2S。
炮击过程中不能停车,也不允许有明显降低坦克行进速度的情况发生,全程行驶时间不能大于40S。
3、坦克每瞄准炮击一次,炮塔应自动复位,当检测到“炮击点”标志时需在2s内瞄准炮击且不允许停车,全程行驶时间不能大于60S。
其余要求同发挥部分第
(2)条。
复位位置为火炮指向车头正前方位置,自动复位到位应当有声光指示信息。
4.4系统测试结果及分析
1、坦克安装完毕及程序调试结束后的各项测试数据见表格所示。
表1基本部分测试
次数
测试项目
第一次
第二次
第三次
全程行驶时间(单位:
s)
36
38
37
弹着点偏差(单位:
cm)
7
4
2
1
3
5
炮击快速性(单位:
<
表2发挥部分测试
39
15
10
8
12
9
14
13
6
2、对测试所得数据进行分析,坦克平均38s完成全过程。
在检测到打靶标志线时,炮台瞄准光靶,开始打靶,偏离靶心平均4cm。
经分析,由于追光的传感器采用光敏电阻,而同型号光敏电阻之间光敏系数有一定的差距。
五结束语
经过多日的辛勤努力,我们基本上实现了题目的要求,在硬件调试的过程中,我们遇到很多问题。
由于时间紧,工作量大,系统还存在许多可以改进的地方。
本次竞赛锻炼了我们各方面的能力,虽然我们遇到了很多困难和障碍,但总体上成功与挫折交替,困难与希望并存,我们将继续努力争取更大的进步。
六参考文献
[1]童诗白等.模拟电子技术基础.高等教育出版社,2000
[2]沈建华等.MSP430系列16位超低功耗单片机实践与系统设计.清华大学出版社,2005.4
[3]胡寿松.自动控制原理.科学出版社,2007
[4]郁有文等.传感器原理及工程应用.西安电子科技大学出版社.2008
附录
附2程序源码
#include"
msp430x14x.h"
#defineuintunsignedint
#defineucharunsignedchar
uintnum,miao,shi,fen,adcnum2,time=0,right_time=0,left_time=1300,tui=300;
uchartemp,adcnum,direction=0,number=0,sight,hei_xian=0,sight_num=0,kuai_man,mode=0;
/*
direction判断炮筒的转向
sight判断炮筒是否瞄准
number记忆采集黑线的次数
*/
uinttable[15];
uinttable1[15];
uintadcdata[8];
voidjian_che();
voidcar_stop();
voiddelay(uintz)
{
uintx,y;
for(x=100;
x>
0;
x--)
for(y=z;
y>
y--);
}
voiddelayms(uintz)
for(x=2;
voidcar_advance()
uinti;
for(i=0;
i<
90;
i++)
{
P1OUT&
=0X0f;
//p5.7左轮使能p5.6方向控制p5.4右轮使能
P1OUT|=0X90;
delay
(1);
delay
(2);
}
voidcar_right()
P1OUT|=0Xd0;
delayms(8);
voidcar_left()
P1OUT|=0Xb0;
voidwrite_date(ucharshuju)
P4OUT|=0x20;
P5OUT=shuju;
delayms(80);
P4OUT|=0x80;
P4OUT&
=0x7f;
voidwrite_com(ucharcom)
=0xdf;
P5OUT=com;
voidADC_read()
P1OUT|=0x03;
ADC12CTL0|=ADC12SC;
while((ADC12IFG&
BIT2)==0);
adcdata[0]=ADC12MEM0;
adcdata[2]=ADC12MEM1;
adcdata[4]=ADC12MEM2;
if(adcdata[2]<
adcdata[6]-300){direction=1;
adcdata[1]=4500;
if(adcdata[4]<
adcdata[7]-300){direction=0;
}
//table[0]=adcdata[0]%100000/10000;
/*table[1]=adcdata[0]%10000/1000;
table[2]=adcdata[0]%1000/100;
table[3]=adcdata[0]%100/10;
table[4]=adcdata[0]%10;
write_com(0x80+0x05);
//第一行首地址
//write_date(0x30+table[0]);
write_date(0x30+table[1]);
write_date(0x30+table[2]);
write_date(0x30+table[3]);
write_date(0x30+table[4]);
table[5]=adcdata[2]%100000/10000;
table[6]=adcdata[2]%10000/1000;
table[7]=adcdata[2]%1000/100;
table[8]=adcdata[2]%100/10;
table[9]=adcdata[2]%10;
write_com(0x80+0x40);
write_date(0x30+table[5]);
write_date(0x30+table[6]);
write_date(0x30+table[7]);
write_date(0x30+table[8]);
write_date(0x30+table[9]);
table[0]=adcdata[4]%100000/10000;
table[1]=adcdata[4]%10000/1000;
table[2]=adcdata[4]%1000/100;
table[3]=adcdata[4]%100/10;
table[4]=adcdata[4]%10;
//write_com(0x80+0x46);
write_date(0x30+table[0]);
*/
sight_num++;
if(adcdata[1]>
adcdata[0]||adcdata[0]>
adcdata[1]+90||adcdata[0]>
adcdata[3]-500)
{
sight_num=0;
sight=0;
adcdata[0])adcdata[1]=adcdata[0];
if(direction==0)
=0Xfd;
P1OUT|=0X01;
delayms(9);
}
else
=0Xfe;
P1OUT|=0X02;
P1OUT|=0X03;
if(sight_num>
=100){sight=1;
adcdata[6]=adcdata[2];
adcdata[7]=adcdata[4];
voidcar_stop()
P1OUT|=0Xf0;
delayms(500);
temp=P2IN;
temp&
=0x03;
if(number>
=1&
&
number<
=4)
P1OUT|=0X04;
//开启声光指示
while(sight!
=1)
ADC_read();
P1OUT|=0X08;
//开启激光笔
delay(3000);
=0Xfb;
//关闭声光指示
=0Xf7;
//开启激光笔
number++;
car_advance();
voidinit_clk()
BCSCTL1|=0x80;
do
IFG1&
=~OFIFG;
for(i=0xff;
i>
i--);
while((IFG1&
OFIFG)!
=0);
BCSCTL2&
=~SELM_0;
//10001000
voidinit()
{
//init_clk();
WDTCTL=WDTPW+WDTHOLD;
//关闭看门狗
P1DIR=0Xff;
P4DIR|=0XFF;
P5DIR|=0Xff;
P6SEL=0X07;
//使能ADC通道A4即光敏电阻接口
TACTL|=TASSEL1+TACLR+TAIE+ID1+ID0;
////开启WDT中断
TAR=0X3caf;
TACTL|=MC1;
_EINT();
P2DIR=0Xe0;
P1OUT=0X00;
adcnum=0;
ADC12CTL0=ADC12ON+SHT0_11+MSC;
//ADC开,4*16分频
ADC12CTL1=SHP+CONSEQ_1;
ADC12MCTL0=INCH_0;
ADC12MCTL1=INCH_1;
ADC12MCTL2=INCH_2+EOS;
ADC12CTL0|=ENC;
/************************************************************
开机时模式选择
**************************************************************/
=0x04;
if(temp==0x04)
delay(20);
if(temp==0x04)
//开启声光指示
mode^=0x01;
//关闭声光指示
while(temp==0x04)
P4OUT=0x00;
/**********************************************************************
液晶初始化
********************************************************************/
write_com(0x38);
//设置16x2显示,5x7点阵,8位数据接口
write_com(0x01);
//清除显示
write_com(0x0c);
//开显示,显示光标
write_com(0x06);
//光标自动加一
write_com(0x80+0x00);
write_date(0x30+0x01);
write_date('
t'
);
:
'
f'
/********************************************************************
等待开车指令
********************************************************************/
number=0;
while(temp==0x00)
miao=0;
adcdata[3]=ADC12MEM0;
adcdata[6]=ADC12MEM1;
adcdata[7]=ADC12MEM2;
P5OUT=0Xff;
sight=0;
while(sight==0)
voidjian_che()
=0X0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 坦克 打靶 论文