红外遥控避障小车msp430课设副本Word格式.docx
- 文档编号:16183276
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:34
- 大小:2.29MB
红外遥控避障小车msp430课设副本Word格式.docx
《红外遥控避障小车msp430课设副本Word格式.docx》由会员分享,可在线阅读,更多相关《红外遥控避障小车msp430课设副本Word格式.docx(34页珍藏版)》请在冰豆网上搜索。
任务分配情况如表1所示:
表1任务分配情况
夏银苹
红外遥控
谢稳桩
超声波测距避障
王兆然
PWM波的产生
刘子铭
小车运作
曾逸
1.3系统工作流程
整个电路系统分为遥控、驱动、运作、避障四个主要组成部分。
首先按键发射信号,由红外接收管接收到控制信号,将接收信号进行解码,其结果送入单片机,输出相应的信号给驱动芯片,驱动电机转动,从而控制整个小车的运作,与此同时,超声波模块检测前方是否有障碍物,并将搜集到的信息实时送到主控芯片,及时避开障碍。
硬件设计
此次课设课题中硬件部分的选取与设计主要包含以下模块:
MSP430F5438A单片机,VS1838B红外接收器,L293D电机驱动模块,HC-SR04超声波测距,若干个杜邦线。
2.1MSP430F5438A芯片简介
MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(MixedSignalProcessor)。
称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,以提供“单片机”解决方案。
BW-DK5438开发板采用了MSP430F54xx系列单片机片中的最高型号MSP430F5438,采用LQFP100封装,配备256KBFLASH存储器、16KRAM存储器和87个通用I/O引脚,8个型通用串行接口,支持UART/LIN/IrDA/SPI,16通道12位ADC,3个16位通用定时器,资源充足,性能强大;
板上为用户设计了丰富的外设接口。
MSP430F5438A单片机实物图如图2所示。
图2MSP430F5438A单片机实物图
2.2红外接收模块
2.2.1红外接收介绍
红外接收电路一体化的红外接收头VS1838B将遥控信号的接收、放大、解调、整形集于一身,不需要任何外接器件就输出可以让单片机识别的TTL信号,接收距离可达35m,接收红外信号频率为38kHz。
红外监测二极管监测到红外信号,然后把信号送到放大器,通过解调电路进行解调,还原出发射端的信号波形,输出的高低电平和发射端反相。
该模块使用红外接收头HS38B,有三个引脚,包括电源端,接地端和信号输出端。
有红外编码信号发射时,经红外接头处理后,输出为检波整形后的方波信号,并直接提供给单片机。
2.2.2红外接收管实物图
图3红外接收管实物图
2.2.3红外接收与单片机接口电路
图4红外接收电路接口图
红外接收头的VCC与电源相连,GND接地,输出端与单片机的P1.3相连。
2.3电机驱动模块
2.3.1电机驱动芯片介绍
本L293D驱动模块,采用ST公司原装全新的L293D芯片,采用SMT工艺稳定性高,采用高质量铝电解电容,使电路稳定工作。
可以直接驱动4路3-16V直流电机,并提供了5V输出接口(输入最低只要6V),可以给5V单片机电路系统供电(低纹波系数),支持3.3VMCUARM控制,可以方便的控制直流电机速度和方向,也可以控制2相步进电机,5线4相步进电机。
是智能小车必备利器。
主要参数如下:
控制信号输入电压范围(IN1IN2IN3IN4IN5IN6IN7IN8):
低电平:
-0.3V≤Vin≤1.5V;
高电平:
2.3V≤Vin≤Vss
使能信号输入电压范围(EN1EN2EN3EN4):
-0.3≤Vin≤1.5V;
L293D是专门的电机驱动芯片,工作电压5V,驱动电压输入可达36V,输出电流正负600ma,4个控制端,4个输出端,原理图如图5。
图5驱动芯片原理图
其中A为输出控制端,Y为输出控制端,1A即控制1Y,以此类推。
1,2EN3,4EN需要短接,芯片最大工作电压不得超过7V。
如图6所示。
图6驱动芯片封装图
Vcc1接工作电压,5V,Vcc2接电机的驱动电源,这个电压要比5V高,我用的是12V蓄电池,把12的正极接到Vcc2,芯片、单片机、蓄电池电源共地的,
电机是12V,单片机控制部分是5V,正极是完全独立的,GND都必须接在一起。
2.3.2电机驱动芯片实物图
图7电机驱动芯片实物图
2.3.3电机驱动与单片机接口电路
图8电机驱动与单片机的接口电路
单片机与电机驱动的连接IN1接P7.0、IN2接P7.1、IN3接P7.2、IN4接P7.3、IN5接P7.4、IN6接P7.5、IN7接P7.6、IN8接P7.7。
EN1、EN2以及EN3、EN4分别在芯片上使用跳线连接并接在单片机的P4.1、P4.2引脚上,另输出端的OUT1—4分别对应1—4号电机。
2.3.4H桥电路原理
图9中所示为一个典型的直流电机控制电路。
电路得名于“H桥驱动电路”是因为它的形状酷似字母H。
4个三极管组成H的4条垂直腿,而电机就是H中的横杠。
H桥式电机驱动电路包括4个三极管和一个电机。
要使电机运转,必须导通对角线上的一对三极管。
根据不同三极管对的导通情况,电流可能会从左
至右或从右至左流过电机,从而控制电机的转向。
图9H桥驱动电路图
要使电机运转,必须使对角线上的一对三极管导通。
当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极,驱动电机按特定方向转动。
另一对三极管Q2和Q3导通,电流将从右至左流过电机。
当Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动。
2.4超声波测距模块
2.4.1HC-SR04芯片简介
在此次课程设计实验中我们超声波测距避障所用到的是HC-SR04。
HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;
模块包括超声波发射器、接收器与控制电路。
主要参数:
工作电压DC为5V;
工作电流为15mA;
工作频率为40kHz;
最远射程为4m最近射程为2cm;
测量角度为15度;
输入触发信号为10uS的TTL脉冲;
输出回响信号为输出TTL电平信号,与射程成比例。
2.4.2HC-SR04芯片实物图
图10HC-SR04芯片实物图
2.4.3HC-SR04与单片机接口电路
图11HC-SR04与单片机接口电路
输入端口为P2.2,输出端口为P2.1
软件设计
3.1系统总体设计
整个电路系统分为遥控、驱动、运作、避障四个主要组成部分。
主控单元是小车的核心部分,它所要完成的任务是:
处理输入信号,启动和停止小车,控制电机转速,完成距离检测,做出避障判断等。
首先利用红外接收管对路面信号进行检测,然后将检测结果送入主芯片,输出相应的信号给驱动芯片,驱动电机转动,从而控制整个小车的运动,与此同时,超声波模块检测前方是否有障碍物,并将搜集到的信息实时送到主控芯片,及时避开障碍。
根据不同路段的控制要求,单片机系统主要由电机调速和换向子程序,加减速子程序,红外遥控子程序,测距避障子程序。
3.1.1系统流程图
图12系统流程图
首先进行各模块初始化,系统判断进入哪一个程序里面,调用子程序,完成各模块的功能。
3.2红外遥控模块
相关代码:
Init_IRUART(void)设置红外接收端口
change(void)表示取出按键的值
Decode(void)解码函数
Timer0_A1(void)定时器A中断处理
1、定时器A设置为捕获功能,当接收到红外信号进入中断,解码的方法有两种,一是判断一个周期的持续时间,二是判断高电平的持续时间,这里是采用第二种方法。
先捕获上升沿记录初始时间为start,置中断为下降沿触发,在下降沿到达后记录时间为end,因此高电平脉宽时间为width=end-start。
根据高电平的持续时间来区分不同的码型,如图13。
图13高电平持续时间
2、用IR_buf[0]、IR_buf[1]、IR_buf[2]、IR_buf[3]来分别表示用户码低位、用户码高位、数据码、数据反码,每一位都有8位,先传低位再传高位,码型的帧格式如图14所示。
解码时首先判断高电平的持续时间是否大于4.3ms为引导码,再判断是否大于0.85小于2ms为1,再判断是否大于0.3小于0.85ms为0,这里每次是传一位,然后在change函数中整合成十进制数进行缓存,再将键值取出来控制小车。
图14不同码型的帧格式
3.3小车驱动模块
3.3.1小车实现前进、后退、左转、右转功能
#defineGO_RUNdo{P7DIR|=0XFF;
P7OUT=0XAA;
}while(0)//前进
#defineBACK_RUNdo{P7DIR|=0XFF;
P7OUT=0X55;
}while(0)//后退
#defineLEFT_RUNdo{P7DIR|=0XFF;
P7OUT=0XA5;
}while(0)//左转
#defineRIGHT_RUNdo{P7DIR|=0XFF;
P7OUT=0X5A;
}while(0)//右转
#defineSTOP_RUNdo{P7DIR|=0XFF;
P7OUT=0X00;
}while(0)//停止
在这个小车驱动模块中,首先我们先用遥控器发送红外信号,由MSP430F5438A芯片上的红外接收器接受信号,然后得到的红外信号进行解码,当我们得到的信号与原先写入在芯片中的一致时,这时我们就分别给引脚P7.0-7分别写入不同的值,由单片机传入到L293D芯片上的IN1-8上,经过芯片的稳压以及放大处理,我们就得到了对应于输入IN1-8的OUT1-8的输出接口。
原理图的控制逻辑如表2所示:
表2原理图的控制逻辑表
IN1
IN2
EN1
电机
不转
1
正转
反转
我们可以让电机做出相应的动作,比如我们P7OUT=0XAA,转换为二进制即是10101010,那我们的IN1-7=10101010,这样我们得到的就是电机1、电机2反转,电机3、电机4正转,小车做出的动作就是左转,其他动作依次类推。
3.3.2加减速模块
相关代码:
Init_PWM(void)定时器B输出PWM波初始化
HIGH_SPEEDdo{TBCCR1=1000-1;
TBCCR2=1000-1;
}while(0)加速
LOW_SPEEDdo{TBCCR1=700-1;
TBCCR2=700-1;
}while(0)减速
1、L293D使能:
在L293D驱动电路板上有4位使能位分别为电机1、2的使能位EN1、EN2以及电机3、4的使能位EN1、EN2,当使能位为高电平时电机才能运作,同时这4位与单片机相连,由单片机产生的不同PWM信号控制。
2、实现的具体方法:
这主程序中定时器B的一个周期值对应为TBCCR0=1000-1,代表加速的TBCCR1=1000-1,占空比为100%(由于电压问题,小车加速运行的不明显,所以只能将平时的速度设为加速时的速度,利用减速来凸显加速),代表减速的TBCCR2=700-1,即占空比为70%;
将这两个的输出端分别接P4.1、P4.2(作引脚的第二功能),同时在L293D电路板上,我们分别将电机1、2和电机3、4的使能EN1、EN2用跳线连接起来,分别对应单片机的P4.1、P4.2引脚。
当我们需要加速时,此时的占空比为100%,即传过来的全是高电平,EN1、EN2一直打开,这样就实现了前进(加速)功能;
在减速时,此时的占空比为70%,即传过来的信号高电平占70%,低电平占30%,所以小车的体现为卡顿,因为周期很小,所以停顿的不明显,这样就实现了减速功能。
3.4超声波测距模块
Init_capture()捕获声波信号
wave(void)发送距离检测信号
avoid()避障函数
LED(inti)led灯亮灭函数
TIMER1_A1_ISR(void)超神波测距中断函数
1、给最少10us的高电平信号,采用10口TRIG触发测距,模块自动发送8个40kHZ的方波,自动检测是否有信号返回,有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离=(高电平时间*声速(340M/S))/2。
超声波时序图如图13所示。
2、只需要提供一个10uS以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。
一旦检测到有回波信号则输出回响信号。
回响信号的脉冲宽度与所测的距离成正比。
由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。
用公式uS/58=厘米;
或者是距离=高电平时间*声速(340M/S)/2;
测量周期一般为60ms以上,以防止发射信号对回响信号的影响。
图15超声波时序图
3、超声波测距实现方法:
本程序中的超声波测距模块主要使用到了定时器B的计数定时功能和定时器A1的捕获功能。
TIMEB在程序里有两个作用,第一作用是输出不同的PWM波,设置两个输出引脚分别控制小车左边两轮和右边两轮;
第二个作用是进入中断计数,为了能同时满足两个作用的要求,TIMEB初始化时设置了TBCCR0为1000-1,选择的始终频率为1M并选择增计数模式,经计算,确定为每1ms进入一次中断,中断里执行tiwave++,待tiwave>
=150即150ms就从P2.1发送一个大于10us的TTL高电平触发信号,避障模块Tirg引脚接收到触发信号后将会循环发送8个40KHz的脉冲测距,接收到回响信号后从Echo引脚输出一段高电平,这段高电平可用于计算距离。
TIMEA1则用于捕获从Echo输出的信号,并进行计算得出障碍物离小车的距离,本程序在定时器A1初始化中选择了ACLK(频率为32.768KHz),设置增计数模式,设置了捕获中断为先上升沿捕获,待捕获到上升沿后就更改捕获方式为下降沿捕获,两次捕获后既可以计算出障碍物里小车的距离,在中断里用start和end来计算脉宽,overflow用于保存中断溢出的次数,dis则用来保存最终计算出来的距离。
因为距离=高电平时间*声速(340M/S)/2,经计算高电平时间=(end+65536*overflow-start)/32768s,声速为340m/s=340000mm/s,所以距离dis=(end+65536*overflow-start)/32768*(340000/2)mm=(end+65536*overflow-start)*170/32.768mm。
每次下降沿到来后就完成了一次测距等待下一次测距。
3.5开发板的中断
1、与定时器相关的端口有:
TA0:
P1.3(CCR2)
TA1:
P2.2(CCR1)
TB0:
P4.1(CCR1)、P4.2(CCR2)
2、与中断有关的端口有:
P1.3、P2.2、P4.2
实验结果
4.1系统整体实物图
图16系统整体实物图
4.2实现过程
通过按键获得不同的键值,控制小车的运行。
按键如下图17所示。
图17按键图
按5启动或停止,从start处准备前进,如图18所示。
图18启动图
按2前进,如图19所示。
图19前进图
按8后退,如图20所示。
图20后退图
按4左转,如图21所示。
图21小车左转图
按6右转,如图22所示。
图22小车右转图
按加速键加速,如图23所示。
图23小车加速图
按减速键减速,如图24所示。
图24小车减速图
检测前方30cm处是否有障碍,遇障碍前,如图25所示。
图25小车遇到遇障碍前状态图
遇到障碍,小车左转或右转,如图26所示。
图26小车躲避障碍状态图
缺陷与调试
5.1调试过程
(1)在红外遥控部分,刚开始红外接收管没有接进电路,后来进行了测试,当接收到红外信号时,灯亮。
用万用表测试红外接收管是否有故障的方法:
将万用表的红表笔接红外接收管的OUT端,黑表笔接红外接收管的GND端,万用表置电压档,电源接通,无按键时,电压为30V左右,按键瞬间,电压有明显幅度变化。
(2)在小车运作部分,我们分别测试了它的输入电压、输出电压以及电源电压,其输入端IN1-8分别为2.82、0、2.93、0、2.90、0、3.01、0;
输出端分别为3.53、0、3.65、0、3.66、0、3.81、0;
VCC=4.70。
通过几次的测量,由此我们确定了小车正常运转时的电压。
(3)避障测试:
模块要测距必须发送一个最少10us的高电平信号,我本来以为只要一直给模块发送这个信号就可以一直探测距离,所以我前段时间一直没有成功测到距离,后来经过查看各种有关于这个模块的资料,多次修改调试后才发现必须要每隔一段时间后才发送一个10us的高电平信号给其触发引脚才能使器件正常工作,因此我在定时器B中断中用了一个变量自增,用于控制发送该电平的间隔时间。
对于测试距离的计算也遇到了些问题,在捕获到反馈信号的中断里,一开始我没有考虑到计数器溢出的情况,所以我每次探测的距离会发生很奇怪的变化无法准确的测出距离,经过多次测试后发现了捕获到的高电平长度是不一定的,所以极有可能溢出,所以我必须考虑到定时器溢出的情况,后来将定时器溢出的情况加进去了,测距模块的运行也正常了起来。
5.2程序的缺陷
(1)避障模块不能对静止状态进行屏蔽,小车停止时,若前方有障碍,小车会进行躲避。
(2)避障模块当遇到障碍时,小车会自动左转或右转,不能自己选择方向。
(3)红外遥控部分未对解码结果进行检测,没有用上数据反码的纠错功能。
实验心得
***的心得:
这次课设很好的锻炼了我们的实际动手操作能力,之前学得理论知识并不扎实,导致课设的时候出现各种小问题。
这次硬件课设是对前面学习的一个很好的考察,既考察了我们的编程能力,硬件实践能力,快速学习能力,也考察了我们团队合作,发现以及解决问题的能力。
在整个过程中,我们也曾经焦躁过,沮丧过,为了解决一个小问题,有时会花上很多时间和精力,但是亲力亲为的过程才是最有收获的。
我们最后基本上实现了最初的目标,红外遥控、小车运作、加减速以及超声波测距壁障,由于能力以及时间的限制,做的并不完善,比如我负责的红外遥控部分,没有校验的模块,刚开始加了校验,却一直报错,后来去掉了却可以了。
通过这次课程设计我学到了很多,对单片机的应用有了更深刻的理解,在动手实践的过程中,加深了对课本理论知识的理解,也认识到自己的不足,使我体会到实践的重要性。
在学习一个新知识时,要不骄不躁,认真研究,相信自己,终究会取得成功。
另外,整个课程设计的过程中,我们分工明确,互相帮助,积极查找资料,及时交流,甚至将讨论组命名为红外遥控小车研发队,共同讨论,一同进步,最后答辩也全组通过,让我们懂得了团队协作的重要性。
这次课设后,我认识到自己知识掌握不牢固。
所以从现在要注意平时知识点点滴滴的积累,这样才能在竞争中胜出。
此外,从现在起,培养团队合作精神,集思广益,才能做得最好。
最后,非常感谢老师给了我们这次机会。
从一开始做这个红外遥控小车的时候,我感觉无从下手,由于自己前一段时间对430单片机的程序编写不熟练,我犯了好多错误。
最初的红外解码程序我们错误百出,在刚开始时,我都不知道红外信号需要用到定时器的捕获模式,以为只要将信号通过已经设置好为输入方向的引脚就可以接收到信号,所以我开始找其他方法,经过同学指点后我知道了捕获模式可以将信号读取出来并解码,在和组员一起讨论和编写下,我们终于将红外解码程序完整编写出来,并且课堂授课也达到了很好的效果。
红外解码程序的顺利编写出来,意味着我们的红外遥控小车程序编写正式启动了,我们组的成员纷纷积极的选择遥控小车各模块的编写,在大家的讨论下,红外遥控小车分为了:
红外解码、小车前后左右行走、小车加减速(PWM波)、超声波测距。
而我就是负责超神波测距模块程序的编写。
超声波模块是老师额外加的模块,为了使红外遥控小车更加智能,我们用超声波测距模块来测量障碍物离小车的距离,当距离到某一个限定值得时候,我们再让小车自动进行相应的操作来进行避开障碍物,通过这个思想我便开始了超声波测距的程序编写,有了前面编写红外的基础,对于这个超声波测距程序编写有了更加清晰的思路,我仿照了红外捕获的方式来对超声波模块反馈的信号进行捕获。
进行多次失败和调试,我最终完成了,并用了不同于红外解码的方法来算出障碍物离它的距离。
以往的课设都是每个人一个题目,这是第一次以分组为一个题目的课设,我在完成它的过程中也深刻体会到团结的团队的力量是不可忽略的,因为团队可以让一个感觉无法完成的任务完美完成。
在这次为期1周的实验中,我们这一组要做的是红外壁障小车。
在这次实验的一开始,我挺担心自己的,因为我的基础不牢固,知识点到处都有漏洞。
实验一开始,我们分为了4个模块,我是一个相对简单的PWM波模块。
就是利用输出PWM波来控制小车的加减速。
当我得到这个任务的时候,我心里感觉是挺轻松的,但我感觉自己仍不是很会写,于是我立即找我们组员的同学进行帮忙。
经过大家的帮助和自己的翻书复习相关资料下,我完成了我的任务。
老实说,这次编程让我对C语言的运用有了一个初步的提升,让我敢于运用C语言进行编程,C语言在我的眼中也不再是曾经那么的难以使用。
通过这次红外小车的实验,我重新温习了我已经学过的知识,我对MSP430的定时器的各种输出模式,寄存器的各种功能和运用,以及PWM波的周期,占空比都有了进一步的了解和运用。
经过这次认真的课设学习,我获得了很多,对MSP430也产生了不晓得兴趣。
最后还要感谢帮助我的组员们,多亏他们的帮助我才能顺利完成这次实验。
以后我会自己努力学习,并多多请教同学,让我自己有更大的提升。
这次的课程设计和以往做过的都
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 红外遥控避障小车msp430课设 副本 红外 遥控 小车 msp430