哈尔滨工程大学本科生毕业论文
找到光源,这些事件都有一个共同点,就是系统要对这些事件做出相应的处理或采取相应的措施。所以为了简化编程,让这些事件在主任务中能得到统一的处理,可以给这些事件编上号,然后由一个消息搜集模块去等待各种消息。一旦某个事件发生,该模块马上给主任务返回该事件的编号,即消息值,让主任务按照消息值分类去处理消息。
在消息搜集模块的头文件中定义了如下若干个消息:
//消息的结构为:高三位,消息分类码,可以加快消息处理的速 //度;低五位,消息值。 #define NULL 0 //按键消息的定义
#define MSG_K_QIAN 0x01 #define MSG_K_HOU 0x02 #define MSG_K_ZUO 0x03 #define MSG_K_YOU 0x04 #define MSG_K_TING 0x05 #define MSG_K_MODE 0x06 #define MSG_K_FEN 0x07 #define MSG_K_REC 0x08
//“前进”按键消息 //“后退”按键消息 //“左转”按键消息 //“右转”按键消息 //“停止”按键消息 //“模式选择”按键消息 //“漏粉”按键消息 //“记录路线”按键消息
//“显示切换”按键消息
#define MSG_K_DISPMODE 0x09 //超声避障消息
#define MSG_QIANZHANG 0x14 #define MSG_HOUZHANG 0x15
//前方出现障碍消息
//后方出现障碍消息
#define MSG_NOQIANZHANG 0x16 //前方障碍消失消息 #define MSG_NOHOUZHANG 0x17 //光源消息
#define MSG_NOTFOUND 0x28 #define MSG_FOUND 0x29
13
//后方障碍消失消息
//没有发现光源消息 //发现光源消息
哈尔滨工程大学本科生毕业论文
//主从机之间的控制消息 #define MSG_BEGINFIND 0x31 #define MSG_ENDFIND 0x32
extern uchar getmsg(void); extern uchar imgetch(void);
消息搜集模块对外提供了两个接口函数:getmsg()函数一直等待到有消息时返回消息值;imgetch()函数立即返回按键值,这是为了某些地方使用上的灵活而设置的。
有了这个消息搜集模块后,主任务执行的大部分时间就会停留在getmsg()函数内等待消息,当有按键命令或遇到障碍时返回消息值,主任务对其进行相应的处理。
主任务处理消息可以设计成如下结构: while(1) {
switch(getmsg())
//消息分类处理
//消息循环
//开始寻找光源命令消息
//停止寻找光源消息
{
case MSG_K_QIAN: … break; case MSG_K_HOU:
… break; case …
}
}
14
//“前进”按键消息处理
//“后退”按键消息处理
哈尔滨工程大学本科生毕业论文
2.5本章小结
本章将系统拆分成了若干个功能模块,并且采用两个AT89C52单片机来各分担一部分功能。在软件方面通过对结构的特殊设计,基本上实现了多任务并发运行,并且通过软件的分层结构将功能实现和具体的硬件分离开,再加上消息驱动的结构,这将给后续的各模块软件的设计带来方便。
15
哈尔滨工程大学本科生毕业论文
第3章 各模块的详细设计
3.1 红外遥控模块的设计
3.1.1 遥控模块的功能需求
遥控模块采用红外遥控方式,因为采用红外遥控抗干扰能力强,且不会对周围的无线电设备产生干扰电波,接口简单;但是红外方式遥控的距离比较有限,一般在几米之内。鉴于本设计不需要远距离遥控,所以综合考虑之下采用红外遥控较为合适。
本设计中要求能用遥控器控制小车的前进、后退、左转、右转、停止、记录路线、寻找光源等很多种功能;遥控距离在几米之内即可;并且要在遥控发射模块加入语音识别模块,能够实现声控功能。 3.1.2 编解码芯片的选型
由于在遥控端的按键数目有多个,而红外通道传输的只能是由0、1组成的串行代码,所以需要在发射端对按键进行“并-串”编码,在接收端相应的要进行“串-并”解码。码的波特率在收、发两端应该是一致的。
方案一,使用MC145026、MC145027编解码芯片,其特殊的编码方式保证了信息的可靠传输,但是外围器件参数的选定较为烦琐,并且不能利用到其所提供的地址功能,也就是说传输的信息当中地址码部分是多余的,这就降低了信道的利用率。
方案二,采用台湾瑞昱公司生产的专用于遥控车模的CMOS大规模集成电路TX-2/RX-2,该编解码芯片具有5种控制功能,使用方便,所以本设计中采用了该方案。 3.1.3 遥控模块原理图
遥控模块发送部分原理如图3.1所示。TX-2的11脚和12脚之间接的电阻决定振荡频率;3脚接地;10脚接3-5V电源;14脚、1脚、4脚、5脚、6脚分别为5路发射控制端;9脚为发射指示端,当有按
16
哈尔滨工程大学本科生毕业论文
键按下时LED1发光提示;7脚为带载波的编码信号输出端,即编码信号已经内调制到38KHZ的载波上,该脚的信号通过一个NPN型三极管放大后可直接驱动红外发射二极管发射信号;8脚为不带载波的编码信号输出端。
3.1.3 遥控发射端按键数目的扩展
图3.1 遥控发射原理图
图3.2 遥控接收电路图
遥控接收电路如图3.2所示。RX-2的4脚和5脚之间接的电阻阻值要和TX-2的11脚、12脚间的电阻阻值接近,相差在20%之内方可正确的解码,本设计中这两个电阻都选用150KΩ;2脚接地;13脚接3-5V电源;3脚接输入信号,由一体化红外接收头1838输出的信号
17