灭火机器人总结报告.doc

上传人:李医生 文档编号:5732748 上传时间:2020-07-25 格式:DOC 页数:25 大小:327.50KB
返回 下载 相关 举报
灭火机器人总结报告.doc_第1页
第1页 / 共25页
灭火机器人总结报告.doc_第2页
第2页 / 共25页
灭火机器人总结报告.doc_第3页
第3页 / 共25页
灭火机器人总结报告.doc_第4页
第4页 / 共25页
灭火机器人总结报告.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《灭火机器人总结报告.doc》由会员分享,可在线阅读,更多相关《灭火机器人总结报告.doc(25页珍藏版)》请在三一文库上搜索。

1、成都信息工程学院灭火机器人总结报告CDIO指导老师:申小颂 组员:刘建、白兰、张晓曦、赵勋、汤泉、马娜、蒋艳鹏2012年6月15日摘 要 本题设计一个智能灭火小车,以宏晶公司生产的STC12C5A60S2芯片为核心,辅助必要的外围电路(包括舵机控制、电机控制、红外接收、驱动),利用C语言编程,实现了智能车自动寻找火源(以下简称自动模式)以及由遥控方式寻找火源(以下简称遥控模式)两种灭火模式,在自动模式下,小车能够自己寻找火源并主动向火源靠近;在遥控模式下,小车能由遥控者控制寻找火源并进行灭火。该智能灭火小车基本达到预期效果。关键词:灭火 STC12C5A60S2 自动 遥控目 录1系统方案11

2、.1 电源模块11.2舵机驱动模块11.3 电机驱动的论证与选择11.3 主控芯片的论证与选择21.4 火源寻找模块的论证与选择31.5 遥控模块的论证与选择32系统理论分析与计算32.1 电机控制电路的分析32.1.1 电机驱动控制的分析32.1.2脉冲宽度的分析42.2舵机原理的分析42.2.1 舵机转动角度原理42.3红外编码原理的分析52.3.1 编码原理53电路与程序设计63.1电路的设计63.1.1系统总体框图63.1.2单片机系统框图与电路原理图63.1.3电机驱动系统框图与电路原理图73.1.4红外接收原理图83.1.4电源93.2程序的设计93.2.1程序功能描述与设计思路9

3、3.2.2程序流程图9附录1:系统电路原理图13智能灭火机器人1系统方案本系统主要由电源模块、电机驱动模块、舵机驱动模块、火源寻找模块、遥控模块、主控芯片组成,下面分别论证这几个模块的选择。1.1 电源模块方案一:采用1117稳压芯片将电池7.8V电压稳到5V供给单片机、红外及舵机。此方案设计简单,成本低。但是1117芯片最大承受电流不到1A,不能稳定供给给红外及舵机。方案二:采用2596芯片制作的开关电源为整个系统供电,2596芯片最大输出电流达3A,可以供给整个系统足够电流。但是此电路结构复杂,成本高。且用一个电源芯片会造成相互影响。特别是舵机、电机转动可能导致对单片机供电不稳定。方案三:

4、采用双电源供电,利用1117芯片只跟单片机供电。电机模块、舵机模块以及红外模块通过7805线性电源芯片为其供电。此方案电路结构简单,成本适中,并且减小了各个模块间的相互影响,增强系统稳定性。 综上所述,分析各个方案有确定及实际应用情况,我们选择方案三作为电源模块方案。1.2舵机驱动模块舵机转动自身会产生微弱电流,反馈给电源模块造成电压不稳定。所以不能与单片机用同一个电源芯片,我们在电源模块选择时选择双电源供电,解决了这一问题。舵机直接由7805线性电源芯片供电。1.3 电机驱动的论证与选择方案一:采用L298N驱动直流电动机,该芯片是利用TTL电平进行控制,对电机的操作方便,通过改变芯片控制端

5、的输入电平,即可以对电机进行正反转操作,很方便单片机的操作,亦能满足直流减速电机的要求。采用L298N少占用的空间且不容易产生信号干扰(电机驱动如图1.3所示)。图1.3 电机驱动电路方案二:采用分立元件组成的平衡式驱动电路,这种电路可以由单片机直接对其进行操作,但由于分立元件占用的空间比较大,容易产生信号干扰, 且还要配上两个继电器,考虑到小车运转稳定性问题,此方案不够理想。综合考虑采用方案一:采用L298N驱动直流电动机。1.3 主控芯片的论证与选择方案一:采用Atmel公司的AT89c52RC单片机作为系统的控制器。单片机算术运算功能强,软件编程灵活,可用软件较简单的实现各种算术和逻辑控

6、制,并且由于其成本低,体积小和功耗低等优点,使其在各个领域应用广泛;另外,由于本设计中会用到较多的算术运算,所以对本系统来说非常适合利用单片机作为控制器。方案二:采用Atmel公司的STC12C5A60S2单片机作为系统的控制器。该单片机也属于51单片机家族,51单片机的所有优点这款单片机都能达到,并且这款单片机有着比普通51单片机快12倍的运算速度,还具有内部AD功能。综合考虑,本系统所需处理的信息量比较大,并且要用到AD采集模块,所以采用方案二作为本系统控制芯片。1.4 火源寻找模块的论证与选择方案一:采用温度传感器作为火源寻找模块的主要传感器,利用火源外围温度比常温高这一特点寻找火源。此

7、方案虽然易于理解但是温度传感器稳定性差,在不同室温下门限值要求不同,适应性差。并且火源外围温度变化范围窄,不适合远距离寻找火源。方案二:采用红外接收头作为火源寻找模块的主要传感器,利用接收红外光的不同寻找火源,经试验,红外接收头在对准火源时电阻变化很大,很利于信号采集。而且电路结构简单,编程容易。缺点在于适应性差,阳光等热光源对其影响较大。综合考虑所有因素,我们选择方案二作为火源寻找模块的方案。1.5 遥控模块的论证与选择方案一:采用24L01无线射频收发芯片作为遥控模块主芯片,此芯片有效距离长并且外界对其干扰小。但是成本高,需要两块芯片作为发送和接受,并且电路复杂,编程困难。不容易调试,出问

8、题不易找出问题所在。方案二:利用红外编码遥控,此方案结构简单,只需一个普通红外遥控器及0038接收头就能实现遥控,成本低,编程容易,调试方便。缺点在于外界影响比较大。综合考虑两种方案的优缺点以及实际情况,我们选择方案二作为最终方案。2系统理论分析与计算2.1 电机控制电路的分析2.1.1 电机驱动控制的分析L298N是SGS公司的产品,内部含4通道逻辑驱动电路。是一种二相和四相电机专用驱动器,即含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可以驱动46V、2A一下的电机。表1 L298的逻辑电平IN1IN2ENA电机状态XX0停止101顺时针011逆时针000停止110停

9、止2.1.2脉冲宽度的分析脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。2.2舵机原理的分析2.2.1 舵机转动角度原理控制电路板接受来自信号线的控制信号(具体信号待会再讲),控制电机转动,电机带动

10、一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。 舵机的基本结构是这样,但实现起来有很多种。例如电机就有有刷和无刷之分,齿轮有塑料和金属之分,输出轴有滑动和滚动之分,壳体有塑料和铝合金之分,速度有快速和慢速之分,体积有大中小三种之分等等,组合不同,价格也千差万别。例如,其中小舵机一般称作微舵,同种材料的条件下是中型的一倍多,金属齿轮是塑料齿轮的一倍多。需要根据需要选用不同类型。 舵机的输入线共有三条,红色中间,是电源

11、线,一边黑色的是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。电源有两种规格,一是4.8V,一是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些,具体看应用条件;另外一根线是控制信号线,Futaba的一般为白色,JR的一般为桔黄色。另外要注意一点,SANWA的某些型号的舵机引线电源线在边上而不是中间,需要辨认。但记住红色为电源,黑色为地线,一般不会搞错。 舵机的控制信号为周期是20ms的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角

12、度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。由此可见,舵机是一种位置伺服的驱动器,转动范围不能超过180度,适用于那些需要角度不断变化并可以保持的驱动当中。 2.3红外编码原理的分析2.3.1 编码原理WD6122 所发射的一帧码含有一个引导码,16位的用户编码和8位的键数据码、键数据码的反码也同时被传送。码型结构如下:引导码由一个9ms的载波波形和4.5ms的关断时间构成,它作为随后发

13、射的码的引导,这样当接收系统是由微处理器构成的时候,能更有效地处理码的接收与检测及其它各项控制之间的时序关系。编码采用脉冲位置调制方式(PPM)。利用脉冲之间的时间间隔来区分“0”和“1”。每次8位的码被传送之后,它们的反码也被传送,减少了系统的误码率。3电路与程序设计3.1电路的设计3.1.1系统总体框图系统总体框图如图3.1.1所示主系统板红外接收遥控接收舵机驱动电机驱动遥控板 系统总体框图3.1.2单片机系统框图与电路原理图1、单片机最小系统框图单片机最小系统采用宏晶公司的STC12C5A60S2单片机,核心板采用5V输入,采用12M有源晶振。核心板13只I/O口引出,便于与外围器件的连

14、接及系统扩展。单片机最小系统框图如图1所示。图1:单片机系统原理图3.1.3电机驱动系统框图与电路原理图L298N内部包含4信道逻辑驱动电路,是一种二相和四相步进电机的专用驱动器,可同时驱动2个二相或1个四相步进电机,内含二个H-Bridge 的高电压、大电流双全桥式驱动器,接收标准。TL逻辑准位信号,可驱动46V、2A以下的步进电机,且可以直接透过电源来调节输出电压从而控制电机转速。原理图如图2所示。图2:电机驱动原理图3.1.4红外接收原理图本系统一共设置了2个红外接收头,左右各一个用于火源寻找。图3:红外接收原理图3.1.4电源1117电源:7805电源:3.2程序的设计3.2.1程序功

15、能描述与设计思路1、程序功能描述程序包括舵机角度控制,电机转速控制,红外解码,红外接收等功能模块。实现两种寻火模式。在遥控模式下,红外接收模块停止工作,机器人只由遥控者控制前往火源出进行灭火。在自动模式下,机器人自主寻找火源,自主前往火源处,此时遥控者随时可以中断自动模式改为遥控模式。3.2.2程序流程图1、主程序流程图启动初始化遥控模式自动模式模式选择遥控器控制小车灭火红外接收模块控制小车停止附录1:系统电路原理图系统电路PCB红外接模块PCB驱动模块PCB附件二:程序代码#include #include #define uchar unsigned char#define uint un

16、signed intsfr P1ASF = 0X9D; /P1口选择功能寄存器sfr ADC_CONTR = 0XBC; /ADC控制寄存器sfr ADC_RES = 0XBD; /ADC转换结果寄存器高sfr ADC_RESL = 0XBE; /ADC转换结果寄存器低sfr AUXR1 = 0XA2; /ADC转换结果调整位sfr CMOD = 0xD9; /PCA工作模式寄存器sfr CCON = 0xD8; /PCA控制寄存器/sfr CR = CCON6;sfr CCAPM0 = 0xDA; /PCA0比较捕获寄存器sfr CCAPM1 = 0xDB; /PCA1比较捕获寄存器sfr

17、CL = 0xE9; /PCA的十六位计数器低八位CLsfr CH = 0xF9; /PCA的十六位计数器高八位CHsfr CCAP0L = 0xEA; /PCA捕捉比较寄存器sfr CCAP1L = 0xEB;sfr CCAP0H = 0xFA;sfr CCAP1H = 0xFb;sfr PCA_PWM0 = 0xF2; /PCA模块PWM寄存器sfr PCA_PWM1 = 0xF3; /PCA模块PWM寄存器uchar LCD_ID_116 = mie huo xiao che;uchar LCD_ID_216 = IR CODE:-H;uint ADC_Result3; /AD转换结果存

18、储uchar CYCLE; /定义周期 uchar PWM_ON = 0 ;/定义低电平时间uchar IRCOM7;uchar keys=0xff,x;int mie = 0;void PWM_Init(void);void ADC_init0(void); /P1.0口AD转换初始化void ADC_init1(void); /P1.1口AD转换初始化void ADC_init2(void); /P1.2口AD转换初始化void Delay(uint x); /延时函数void delay(uchar x); /x*0.14MSvoid delay1(int ms);void Delay(

19、uint z); /延时函数void dang();sbit dj1in1 = P13;/电机接口1IN1sbit dj1in2 = P14; /电机接口1IN2sbit pz1 = P32; /碰撞开关接口1sbit pz2 = P34; /碰撞开关接口2sbit IRIN = P33; /红外接收器数据线sbit PWM = P36;/定义舵机的控制端口sbit feng = P20;sbit E=P27;/1602使能引脚sbit RW=P26;/1602读写引脚sbit RS=P25;/1602数据/命令选择引脚sbit ring = P24;void qian();void hou(

20、);void zuo();void you();void stop();void zidong();void miehuokai();void miehuoguan();/* 名称 : delay()* 功能 : 延时,延时时间大概为140US。* 输入 : 无* 输出 : 无*/void Delay2()int i,j;for(i=0; i=10; i+)for(j=0; j=2; j+);/* 名称 : enable(uchar del)* 功能 : 1602命令函数* 输入 : 输入的命令值* 输出 : 无*/void enable(uchar del)P0 = del;RS = 0;R

21、W = 0;E = 0;Delay2();E = 1;Delay2();/* 名称 : write(uchar del)* 功能 : 1602写数据函数* 输入 : 需要写入1602的数据* 输出 : 无*/void write(uchar del)P0 = del;RS = 1;RW = 0;E = 0;Delay2();E = 1;Delay2();/* 名称 : L1602_init()* 功能 : 1602初始化,请参考1602的资料* 输入 : 无* 输出 : 无*/void L1602_init(void)enable(0x01);enable(0x38);enable(0x0c)

22、;enable(0x06);enable(0xd0);/* 名称 : L1602_char(uchar hang,uchar lie,char sign)* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示b ,调用该函数如下 L1602_char(1,5,b)* 输入 : 行,列,需要输入1602的数据* 输出 : 无*/void L1602_char(uchar hang,uchar lie,char sign)uchar a;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0;a = a + lie - 1;enable(a);write(

23、sign);/* 名称 : L1602_string(uchar hang,uchar lie,uchar *p)* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示ab cd ef ,调用该函数如下 L1602_string(1,5,ab cd ef;)* 输入 : 行,列,需要输入1602的数据* 输出 : 无*/void L1602_string(uchar hang,uchar lie,uchar *p)uchar a;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0;a = a + lie - 1;enable(a);while(

24、1)if(*p = 0) break;write(*p);p+;void Time0(void)TMOD |=0x01; /定时器设置 1ms in 12M crystalTH0=(65536-250)/256; TL0=(65536-250)%256; /定时0.25mS /打开中断TR0=1; /定时器打开void Time1(void)TMOD |=0x01; /定时器设置 1ms in 12M crystalTH0=(65536-250)/256; TL0=(65536-250)%256; /定时0.25mS /打开中断TR0=1; /定时器打开/*/main() Time0(); I

25、E = 0x86; /允许总中断中断,使能 INT1 外部中断 TCON = 0x10; /触发方式为脉冲负边沿触发 CYCLE = 81;PWM = 0; IRIN = 1; /I/O口初始化feng = 0; delay1(10); /延时 L1602_init(); /初始化LCD L1602_string(1, 1, LCD_ID_1);L1602_string(2, 1, LCD_ID_2);PWM_Init(); while(1) switch(keys)case0x45:zidong();break;case0x40:qian();break;case0x19:hou();bre

26、ak;case0x07:zuo();break;case0x09:you();break;case0x15:stop();break;case0x47:miehuokai();break;case0x43:miehuoguan();break;case0x0C:x=0X60;break;case0x18:x=0X50;break;case0x5E:x=0X40;break;default:break; /end main/*/void IR_IN() interrupt 2 using 0 unsigned char j,k,N=0; EX1 = 0; delay(15); if (IRIN=

27、1) EX1 =1; return; /确认IR信号出现 while (!IRIN) /等IR变为高电平,跳过9ms的前导低电平信号。 delay(1); for (j=0;j4;j+) /收集四组数据 for (k=0;k=30) EX1=1; return; /0.14ms计数过长自动离开。 /高电平计数完毕 IRCOMj=IRCOMj 1; /数据最高位补“0” if (N=8) IRCOMj = IRCOMj | 0x80; /数据最高位补“1” N=0; /end for k /end for j keys=IRCOM2; if (IRCOM2!=IRCOM3) EX1=1; ret

28、urn; IRCOM5=IRCOM2 & 0x0F; /取键码的低四位 IRCOM6=IRCOM2 4; /右移4次,高四位变为低四位 if(IRCOM59) IRCOM5=IRCOM5+0x37; else IRCOM5=IRCOM5+0x30; if(IRCOM69) IRCOM6=IRCOM6+0x37; else IRCOM6=IRCOM6+0x30;/L1602_char(2,10,IRCOM5);L1602_char(2,9,IRCOM6); /beep(); EX1 = 1; void tim(void) interrupt 1 using 1static unsigned ch

29、ar count; TH0=(65536-250)/256; TL0=(65536-250)%256;/定时1mS if(count=PWM_ON)PWM = 1; /直流电机转 count+;if(count = CYCLE)count=0;if(PWM_ON!=0) /如果左右时间是0 保持原来状态PWM = 0; /直流电机不转/*/void delay(unsigned char x) /x*0.14MS unsigned char i,j; while(x-) for (j = 0; j 12; j+) for (i = 0; i13; i+) /*/void delay1(int

30、ms) unsigned char y; while(ms-) for(y = 0; y ADC_Result1+50) PWM_ON = 75; ring = 0;else if (ADC_Result1 ADC_Result0+50) PWM_ON = 71; ring = 0;else PWM_ON = 73;/*if (ADC_Result2ADC_Result1) & (ADC_Result2 ADC_Result0) PWM_ON = 71;*/void PWM_Init(void) /PWM初始化程序CCON = 0;CL = 0;CH = 0;CMOD = 0x02; /计数模

31、式、计数时钟选择CCAP0H = CCAP0L = 0Xff;CCAPM0 = 0x42;/使能PCA模块工作在PWM模块CCAP1H = CCAP1L = 0Xff;/PCA_PWM1 = 0x03;CCAPM1 = 0x42; /使能PCA模块工作在PWM模块CCON = 0X40;/*P1.0口AD初始化程序*/void ADC_init0(void) /AD转换初始化uint ADC_Result1, ADC_Result2, a;ADC_RES = 0;ADC_RESL = 0;for (a = 0; a 20; a+);P1ASF = 0X07; /X选择P1.0作为ADC转换输入

32、通道ADC_CONTR = 0X80; /打开ADC转换电源_nop_();_nop_();AUXR1 = 0X04; /将高两位存放在寄存器ADC_RES, 低八位存放在寄存器ADC_RESL中ADC_CONTR |= 0X68; /ADC初始化设置_nop_();_nop_();_nop_();_nop_();Delay(2);ADC_Result1 = ADC_RES;ADC_Result2 = ADC_RESL;ADC_Result0 = ADC_Result2 + ADC_Result1 * 256;/ADC_CONTR = 0x00;/return AADC_Result;/*P1

33、.1口AD转换初始化程序*/void ADC_init1(void) /AD转换初始化uint ADC_Result1, ADC_Result2, a;ADC_RES = 0;ADC_RESL = 0;for (a = 0; a 20; a+);P1ASF = 0X07; /X选择P1.1作为ADC转换输入通道ADC_CONTR = 0X80; /打开ADC转换电源_nop_();_nop_();AUXR1 = 0X04; /将高两位存放在寄存器ADC_RES, 低八位存放在寄存器ADC_RESL中ADC_CONTR |= 0X69; /ADC初始化设置_nop_();_nop_();_nop_();_nop_();Delay(2);ADC_Result1 = ADC_RES;ADC_Result2 = ADC_RESL; ADC_Result1 = ADC_Result1 * 256 + ADC_Result2;/ADC_CONTR = 0x00;/return BADC_Result;/*P1.2口AD转换初始化程序*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1