TI杯重庆市电子设计大赛论文的写作.docx
《TI杯重庆市电子设计大赛论文的写作.docx》由会员分享,可在线阅读,更多相关《TI杯重庆市电子设计大赛论文的写作.docx(19页珍藏版)》请在冰豆网上搜索。
TI杯重庆市电子设计大赛论文的写作
2012年“TI杯”重庆市大学生电子设计竞赛
激光枪自动射击装置(E题)
参赛学校:
XXXXXX
参赛队员:
XXXXXXXX
指导教师:
XXX
时间:
2012.8.7
激光枪自动射击装置(E题)
摘要:
本系统是以TI公司生产的MSP430G2553为主控芯片,以单片机控制中心为核心,设计并制作的激光枪自动射击装置。
系统包括单片机控制中心、遥控键盘模块、舵机驱动电路模块、液晶显示模块、语音播报模块等五个模块。
系统首先通过遥控键盘控制激光枪进行射靶,再经弹着点检测电路产生对应的数据信息。
该数据信息信号通过MSP430G2553主控单片机,并由单片机对其进行处理,输出对应的处理信息并将其反映在液晶显示屏上。
最后,对击中环数语音播报。
经分析,本系统可以有效利用MSP430系列单片机的低功耗特性及强大的运算处理能力,最大程度地利用MSP430G2553单片机各个部分的功能,实现资源的优化配置,一定程度上节约作业成本。
关键词:
键盘遥控、电机驱动、弹着点检测、液晶显示
Abstract:
ThissystemisbasedontheMSP430G2553producedbyTIcompanyasthecontrollerchip,withthesingle-chipprocessorasthecoretodesignandproducethelasergunfiringautomaticdevice.Thesystemincludesthesingle-chipmicrocomputercontrolcenter,long-rangekeyboardmodule,steeringgeardrivecircuitmodule,liquidcrystaldisplaymodule,speechbroadcastmodule.Firstofall,thesystemcancontrolthelaserguntoshotontargetbypressingkeyboard,thentheimpactareadetectioncircuitwillproducecorrespondingdataandinformation.Further,thisinformationsignalwilloutputprocessinginformationandreflectitontheLCDscreenthroughtheMSP430G2553singlechipmicrocomputercontrol,andtheprocessingofmicrocomputer.Finally,tobroadcasttheringshotted.Accordingtotheanalysis,thesystemcaneffectivelyuselow-powerconsumptioncharacteristicsandstrongabilitytohandleoperationonMSP430MCU,maximumuseMSP430G2553eachfunctionofsinglechipmicrocomputerandoptimizetheallocationofresources,tosomeextent,thissystemcouldsavetheworkcost.
Keywords:
Keyboardremotecontrol、Motordrive、Impactareadetection、Liquidcrystaldisplay
目录
一、系统方案论证
1.驱动电机方案论证和选择
方案一:
采用舵机(伺服机)驱动电路。
由于MSP430G2553仅有20各引脚,可用的I/O端口有限,采用舵机可以一定程度上省去使用某些I/O口,节约系统资源。
同时,舵机较其他类型的电机(如五相步进电机)价格相对低廉,便于节约成本。
该方案电路连接简单,容易进行调试。
方案二:
采用步进电机带动激光枪。
该方案主要利用步进电机的工作特性,用户可以利用其步幅角,对步进电机运作的每一步进行控制。
但低端的步进电机步幅角一般为7°/步,不满足本题目的要求,同时也不便于用户通过键盘对激光枪的方向进行控制。
因此鉴于如上所述,最终确定使用方案一驱动激光枪。
2.物理键盘方案论证和选择
方案一:
采用矩阵键盘对激光枪进行控制,其原理图如图1.2.1所示。
矩阵键盘具有一定程度的拓展性,可一定程度上减少对I/O口的占用。
但涉及的连线较繁琐,对I/O的占用只是相对减少,对于一般需要控制电路,并不会用到全部的按键,造成了资源的一定浪费。
并且加大了单片机的负载,涉及的MSP430G2553单片机的引脚比较多,很容易对单片机其他功能的使用造成影响,不利于用户发挥单片机的功能特性及性能优势。
图1.2.1矩阵键盘原理图
方案二:
利用无线遥控键盘远程控制激光枪射靶。
采用无线数据传输,避免了繁琐的连线,实现了用户的非近距离触控操作,很大程度地提高了操作的自由度。
由于减少了端口连线,同时也很好地避免了调试过程中各功能模块之间的相互影响。
经分析,确定使用方案二控制激光枪射靶,其原理如图1.2.2所示。
图1.2.2遥控键盘原理图
3.摄像头采集方案论证
结合题目要求,采用OV7725作摄像头采集数据,同时利用STM32芯片作为外围电路处理OV7725所采集到得数据。
OV7225是一款不带FIFO数据缓存器的摄像头,因此需要外围电路的驱动。
但其配以STM32芯片具有较佳的图像数据采集及显示性能。
该电路的优点是:
电路比较简单,芯片及摄像头价格适中,可靠性高。
缺点是:
摄像头像素有限,数据处理范围有限(针对本题目要求,其像素大小已经适用)。
二、理论分析与计算
1.弹着点检测原理
弹着点检测即对激光枪射靶的环数进行探测,转换为单片机可识别的信息。
根据题目要求,选取摄像头来采集和捕获数据。
同时,由于拍摄出来数据图像的色彩都是由RGB来构成,因此可利用各种颜色构成的RGB差异,对胸靶上激光枪的射靶情况进行处理。
激光枪射出的光点为红斑,纯红色的RGB为(255,0,0),但激光枪射出的光线受室内的明暗程度及摄像头采集情况的影响,其RGB可在砖红(156,102,31)、镉红(227,23,13)等红色类属里变化。
因此,在调试程序中需设定弹着点的RGB,利用单片机控制芯片对所采集的数据进行筛选,使得弹着点检测电路在用户射靶后能探测到正确的弹着点。
2.激光枪自动控制原理
激光枪自动控制电路的发挥,需要在弹着点检测电路的基础上完成。
对于自动控制激光枪,同时还需与舵机驱动电路的进行结合。
弹着点检测电路在探测到激光枪当前位置未能击中10环时,能再次调用舵机驱动电路带动激光枪进行射靶。
此处需要注意舵机的工作频率,由于驱动电路选用的舵机为数字舵机,其出厂工作频率为300Hz,需对应将MSP430G2553的时钟设置为SMCLK,转动角度也需作对应调整。
为使得激光枪自动控制电路能探测到并击中10环,可采取方案将靶心进行标记。
例如标记为蓝色,其RGB为(0,0,255),弹着点检测电路在探测激光枪当前位置能否击中10环时,便可直接利用舵机驱动电路通过摄像头采集到的数据,搜寻RGB为(0,0,255)的点。
三、电路与程序设计
1.无线收发电路设计
本无线收发电路,采用了TI公司制造生产的CC1101系列模块,CC1101收发部分波特率均设为9600。
要实现单片机、PC机之间的无线通信,固需2块CC1101模块,对不同单片机的发射端、接收端的信号进行处理。
该模块设计主要完成以下功能:
(1)减少整个电路的连线,避各模块电路之间的相互影响。
(2)实现单片机数据的无线传输,增加用户操作的自由度以及避免电路连线的繁琐。
2.舵机(伺服机)驱动电路设计
由于电路各个模块集成后,需实现激光枪手动、自动射靶等功能,因此在电路设计时,需要加入有效的驱动电路以便于对激光枪进行操作。
如图3.2所示,该电路需要由MSP430G2553单片机输出PWM波形,并对舵机进行控制。
同时,鉴于电路需要对激光枪的方向进行控制,故此处需要两个舵机对激光枪进行驱动。
图3.2舵机驱动电路
3.液晶显示电路设计
题目要求在图形点阵显示器上显示胸靶的相应图形,并闪烁弹着点,故需要采用必要的液晶对弹着点检测电路的检测结果予以显示。
针对该电路,我们选取了STM32外围芯片电路对采集到的图像进行输出处理。
为满足题目相应的显示要求,我们将其与摄像头OV7725相连接,信号经其他外围电路(此处略去)处理后,传入该主控芯片,使单片机控制中心的数据能够很好地反映在液晶显示界面上。
同时,该电路部分还含有LCD12864液晶显示部分,其原理图如下所示:
图3.3液晶显示原理图
4.音频播报电路设计
该音频模块电路,是针对题目发挥部分所设计的电路。
在此同样采取了TI公司生产的MSP430G2553作为主控芯片。
音频信号在经外界传入单片机后,需要采取必要的芯片对其进行转换,才能输出正确的声音。
此处,采用了WT588D-U芯片进行数据转换,信号经该芯片处理后,再由其I/O输出信号使扬声器进行发声。
其原理图,如图3.4所示。
图3.4音频播报电路原理图
5.程序设计
图3.5主程序流程图
(需要对流程进行文字说明)
四、系统测试及结果分析
1.键盘控制激光枪射靶测试
测试方法:
通过遥控键盘按下有效键,调整激光枪的方向并进行击靶。
测试条件:
单片机除接收端引脚外,其他引脚均空载。
表4.1键盘控制激光枪射靶测试记录表
序号
按键
偏转方向
备注
1
A
向左
无异常
2
B
向右
无异常
3
C
向下
无异常
4
D
向上
无异常
测试结果分析:
从数据可以看出,遥控按键基本正常,能达到题目键盘控制激光枪转向的要求。
2.弹着点检测电路测试
测试方法:
通过遥控键盘进行射靶。
测试条件:
液晶显示电路及遥控按键电路均正常。
表4.2弹着点检测电路测试记录表
次数
实际击中环数
液晶显示环数
弹着点闪烁
备注
1
10
9
是
存在一定误差
2
9
9
是
无异常
3
脱靶
无
否
无异常
4
6
6
是
无异常
5
7
8
是
无异常
测试结果分析:
弹着点检测电路液晶显示环数与弹着点闪烁基本匹配,但与实际击中环数比较存在略微误差。
误差造成原因:
系统刚接入电源进行初始化,运行状态还不太稳定。
总体而言,弹着点检测电路的精度基本符合要求。
3.语音播报测试
题目要求在发挥部分需有一定的其他模块添加,因此对电路的语音播报进行测试。
测试方法及条件同上一部分“弹着点检测电路测试”,因其与液晶显示环数同属于弹着点检测电路的拓展结果。
经测试,语音播报的结果与液晶显示环数的结果完全吻合,符合对弹着点环数语音播报的指标要求。
五、设计总结
*****
参考文献
[1]黄根春,周立青,张望先.全国大学生电子设计竞赛教程[M]——基于TI器件设计方法.北京:
电子工业出版社,2011
[2]高吉祥,王晓鹏,宋克慧.全国大学生电子设计竞赛培训系列教程[M].北京:
电子工业出版社,2011
[3]张金.电子设计与制作100例[M].北京:
电子工业出版社,2009
[4]秦龙.MSP430单片机C语言应用程序设计实例精讲[M].北京:
电子工业出版社,2006
[5]全国大学生电子设计竞赛组委会.第九届全国大学生电子设计竞赛获奖作品选编[M].北京:
北京理工大学出版社,2010
附录程序:
/*舵机驱动程序*/
#include"msp430g2553.h"
#defineD0P1IN&BIT0
#defineD1P1IN&BIT1
#defineD2P1IN&BIT2
#defineD3P1IN&BIT3
voidpwm_p(floatp)
{
//初始化TA1为两通道pwm,smclk(如果低频输出300hz可出三路pwm)
P2DIR|=BIT1;//P2.1andP2.4output
P2SEL|=BIT1;//P2.1andP2.4TA1options
TA1CCR0=3444;//PWM_DEPTH-1;//PWMPeriod
TA1CCTL1=OUTMOD_7;//CCR1reset/set
TA1CCR1=p;
TA1CTL=TASSEL_2+MC_1;//SMCLK,upmode
}
voidpwm_s(floats)
{
P2DIR|=BIT4;//P2.1andP2.4output
P2SEL|=BIT4;//P2.1andP2.4TA1options
TA1CCR0=20000;//PWM_DEPTH-1;//PWMPeriod
TA1CCTL2=OUTMOD_7;//OUTMOD_6反极性
TA1CCR2=s;
TA1CTL=TASSEL_2+MC_1;//SMCLK,upmode
}
voiddelay_1s(intm)
{
intb;
for(b=m;b>0;b--)
__delay_cycles(1000000);
}
voidjiaodu0(floatw)
{
floatn;
n=((w+45)/1800)*3444;
pwm_p(n);
__delay_cycles(700000);
}
voidjiaodu1(floatw)
{
floatn;
n=((w+45)/1800)*3444;
pwm_s(n);
__delay_cycles(700000);
}
voidzy(floatn)//控制舵机左右旋转
{
floatm,a;
if(n>0)
{
m=90-n;
jiaodu0(m);
}
else
{
if(n==0)
{
jiaodu0(90);
}
else
{
a=(-n);
m=90+a;
jiaodu0(m);
}
}
}
voidsx(floatn)//控制舵机上下旋转
{
floatm,a;
if(n>0)
{
m=90-n;
jiaodu1(m);
}
else
{
if(n==0)
{
jiaodu1(90);
}
else
{
a=(-n);
m=90+a;
jiaodu1(m);
}
}
}
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR=0Xf0;
inti=848;
intj=850;
while
(1)
{
if(D0)//按键A
{
jiaodu0(i);
i=i-15;
while(D0);
}
if(D1)//按键B
{
jiaodu0(i);
i=i+15;
while(D1);
}
if(D2)//按键C
{
jiaodu1(j);
j=j-15;
while(D2);
}
if(D3)//按键D
{
jiaodu1(i);
j=j+15;
while(D3);
}
}
}
/************************/
/*无线接收程序*/
/************************/
#include"msp430g2553.h"
#include"hb12864.h"
#defineCPU_F((double)1000000)
#definedelay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))
#definedelay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))
unsignedcharstring1[]={"HelloWorld\r\n"};
unsignedchari;
unsignedchara;
/*系统时钟初始化函数MCLK(主系统时钟)=1MHZSMCLK(子系统时钟)=1MHZACLK(辅助时钟)=1MHZ*/
voidConfigClocks(void)
{
if(CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF)
while
(1);//异常挂起
//runFaultRoutine()
BCSCTL1=CALBC1_1MHZ;//Setrange
DCOCTL=CALDCO_1MHZ;//SetDCOstep+modulation
BCSCTL3|=LFXT1S_2;//LFXT1=VLO
IFG1&=~OFIFG;//ClearOSCFaultflag
BCSCTL2=0;//MCLK=DCO=SMCLK(MCLK=1MHZSMCLK=1MHZ)
}
voidConfigUART(void)
{
UCA0CTL1|=UCSWRST;
UCA0CTL1|=UCSSEL_2;//SMCLK时钟源选择SMCLK(子系统时钟)
UCA0BR0=109;//1MHz设置波特率9600
UCA0BR1=0;//1MHz
UCA0MCTL=UCBRS1;//ModulationUCBRSx=5调整波特率
UCA0CTL1&=~UCSWRST;//**InitializeUSCIstatemachine**
}
voidConfigPins(void)
{
P2DIR|=tx;//P2.0接液晶的RXD端
P2OUT|=tx;//clearoutputpins
P1DIR|=BIT0;
P1OUT|=BIT0;
P1SEL=BIT1+BIT2;//P1.1=RXD,P1.2=TXD
P1SEL2=BIT1+BIT2;
}
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;//StopWDT关闭看门狗
ConfigClocks();//设置初始化时钟
ConfigPins();//引脚初始化
ConfigUART();//串行通信初始化
/*液晶显示部分*/
LCD_clear();
delay_ms(10);LCD_rst();
delay_ms(10);
dis_s(string1,0,5);
delay_ms(10);
IE2|=UCA0RXIE+UCA0TXIE;//EnableUSCI_A0RXinterrupt//RXD中断使能TXD中断使能
delay_ms(10);
__bis_SR_register(LPM0_bits);
}
//串行接受中断服务程序
#pragmavector=USCIAB0RX_VECTOR
__interruptvoidUSCI0RX_ISR(void)
{
//while(!
(IFG2&UCA0TXIFG));//USCI_A0TXbufferready?
IE2|=UCA0TXIE;//开启TXD中断使能
a=UCA0RXBUF;//将接受缓冲器送给a
//delay_ms(50);
if(a=='10')
{
LCD_clear();
dis_s("10环",2,9);//在液晶上显示pc机传送回来的数据
}
if(a=='9')
{
LCD_clear();
dis_s("9环",2,9);
}
if(a=='8')
{
LCD_clear();
dis_s("8环",2,9);//在液晶上显示pc机传送回来的数据
}
if(a=='7')
{
LCD_clear();
dis_s("7环",2,9);
}
if(a=='6')
{
LCD_clear();
dis_s("6环",2,9);//在液晶上显示pc机传送回来的数据
}
else
LCD_clear();
dis_s("脱靶",2,9);
delay_ms(10);
P1OUT^=0x01;
}
//串行发送中断服务程序
#pragmavector=USCIAB0TX_VECTOR
__interruptvoidUSCI0TX_ISR(void)
{
//UCA0TXBUF=a;//将a送给发送缓冲器
//UCA0TXBUF=string1[i++];//TXnextcharacter在PC机上显示HelloWorld
if(i==sizeofstring1-1)//TXover?
IE2&=~UCA0TXIE;//关闭TXD中断使能
}
******************************************************
设计报告内容:
1.封面:
单独1页
2.摘要、关键词:
中文、英文;
3.目录:
内容必要对应页码号
4.正文:
一、前言:
二、总体方案设计:
包括方案比较、方案论证、方案选择
(以方框图的形式给出各方案,并简要说明)
三、单元模块设计:
①各单元模块功能介绍及电路设计;
②电路参数的计算及元器件的选择;
③特殊器件的介绍;
④各单元模块的联接,以一个模块为一个框,画出框的联接图并简要说明。
四、系统调试:
说明调试方法与调试内容,软件仿真放这里。
五、系统功能、指标参数:
①说明系统能实现的功能;②系统指标参数测试,说明测试方法,要求有测试参数记录表;③系统功能及指标参数分析(与设计要求对比进行)。
六、设计总结:
包括:
①对设计的小结;②设计收获体会;③对设计的进一步完善提出意见或建议。
5.参考文献:
6.附录:
①系统原理图;关键程序等。