第四章 软件设计及调试
第四章 软件设计及调试
4.1 系统软件设计整体介绍
由系统电路框图知,系统主要由上位机和下位机两部分组成。系统上电后,上位机中雷达模块检测距离并对数据进行比较,最后模块输出最小距离。系统采用了两个雷达模块,两个模块输出的数据通过串口扩展电路分别传送到上位机控制中心,控制中心对接收到的数据再次进行比较,决定传输两个距离中最小的那组数据,并对要发送到下位机的数据先根据通信协议进行数据帧包装,然后通过XY-CN BUS总线传送到下位机;下位机根据通信协议接收信息,对信息进行检查与校验后,根据数据级别让蜂鸣器进行不同频率的工作,并送距离值到液晶显示器上显示。通过对系统电路框图的分析知,系统软件设计可分为上位机和下位机两部分软件设计,下面分别就这两部分的软件设计进行分析,在介绍之前先对上、下位机之间的通信协议进行介绍:
如上所述,上位机的两个雷达模块输出的数据通过串口扩展电路传送到上位机控制中心,控制中心对这两组数据再次进行比较,决定传输距离最小的那组数据,在发送之前要根据通信协议对数据进行数据帧包装,数据帧长度为八字节,制定的通信协议规定数据格式如下:
第一字节: 帧头 10101010;
第二字节: 地址 为下位机拟定的地址,为以后实现汽车电器网络化而预留的,长度可扩展为多个字节;
第三字节: 帧长度 指的是雷达模块发送过来的数据长度,该系统中为三字节;
第四至六字节:报警信号数据 这三个字节的数据是由雷达模块发送出来的;
第七至八字节: 帧校验码 通信的目的是要把信息及时可靠地传送给对方,因此要求一个通信系统传输消息必须可靠与快速,在数字通信系统中可靠与快速往往是一对矛盾。为了解决可靠性,通信系统都采用了差错控制。本系统设计中就采用了循环冗余校验CRC(Cyclic Redundancy Check),选用的是CCITT-16
27
第四章 软件设计及调试
【10】
循环冗余校验码。循环冗余校验码的生成采用查表法生成图4-1所示:
,其程序流程图如
Reg清0 数据后添加16位0生成校验数据 Reg左移四位,校验数据左移四位到Reg低四位 Reg= Reg XOR 生成参数表【Reg移出值】 NO 数据处理完毕? YES CRC校验码 = Reg
图4-1.生成校验码子程序流程图
其中流程图中Reg指代一个16位的寄存器,生成参数表是查表生成法中所要
依据的参数表,参数表中的每个参数为16位的数据,参数表的生成方法是用0到16的二进制数分别与CCITT-16循环冗余校验码相异或而得,具体原理请查阅参考文献。
4.2 上位机软件设计 4.2.1 上位机程序主流程图
上位机主要完成的任务是:利用雷达模块测距,控制中心(单片机)接收雷达模块发送出来的数据并对数据进行比较后根据通信协议通过总线发送到下位机。软件设计主要包括雷达模块程序设计,上位机接收数据程序设计和发送数据程序设计三大部分。上位机模块初始化后,接收数据
28
第四章 软件设计及调试
子程序利用P89C669单片机串口0中断负责接收雷达模块传送过来的数据,并处理数据,判断数据是否满足发送条件,满足则置发送就绪标志位。发送数据子程序发现发送就绪标志位置位,则根据通信协议把数据包装成数据包,然后通过P89C669单片机串口1发送到下位机。上位机程序的主流程图如图4-2所示:
开始 初始化GM8123 初始化P89C669 雷达模块有数据输出? NO YES 调用接收数据子程序 NO 满足发送条件? YES 调用发送数据子程序 图4-2. 上位机程序主流程图 4.2.2 雷达模块程序设计
雷达模块是以成都国腾微电子公司生产的GM3101倒车雷达专用控制芯片为核心的电路,GM3101芯片是用纯硬件方式实现倒车雷达主机功能,将倒车雷达需要的主要元件都集成在了单一芯片中,提高了集成度,并且不需要软件编程,从而降低了设计难度。在实际应用中可把该模块设置为受汽车倒车挡控制上电,使得系统更具自动化。当汽车置于倒车挡时,倒车雷达发
29
第四章 软件设计及调试
射超声波进行测距;置于其它挡,倒车雷达不工作。该模块以80ms为周期检测车后障碍物到汽车的最小距离并输出报警信号,报警信号以数据包格式输出,每个数据包包括3个字节,格式和内容如下所述:
第一个字节:第一字节高四位为起始标志,用于说明此报警数据是倒车模式下的数据还是扒车模式下的数据,倒车模式是“0101”,扒车模式是“1010”。第一字节的低两位用于输出附加消息,第四位SX1 和第三位SX0 表示最近障碍物的方位,00表示是探头1 方向,01表示是探头2方向,10表示是探头3方向,11表示是探头4方向。
第二个字节:见表4-1,SXA 和SXB 表示X 号探头检测到的障碍物的危险等级,危险等级分为安全、警告、危险、停车4级,分别用00、01、10、11表示。例如第二字节数据为“10010000”,表示第一个探头检测到危险状态,第二个探头检测到警告状态,第三和第四个探头为安全状态。
表4-1. 第二字节数据格式
S1A S1B S2A S2B S3A S3B S4A S4B 第三个字节:输出最近障碍物的距离值,数据格式如表4-2所示,DA1和DA0表示最近障碍物距离的第一位数据,按BCD 编码,最大值为3;DB0~DB3 表示最近障碍物距离的第二位数据,按BCD编码,最大值为9;DC0表示第三位数据,0表示0,1表示5。其中最高位默认为1。
表4-2. 第三字节数据格式
S1A S1B S2A S2B S3A S3B S4A S4B 4.2.3 上位机接收数据程序设计
上位机接收数据子程序利用P89C669单片机串口0中断接收雷达模块传送过来的数据,并把数据与上一次发送的数据进行比较,如果数据中的距离值小于上一次或两个数据都来自同一个雷达模块,就判断此次数据满足发送条件,置发送就绪标志位,通知发送数据子程序可以发送数据。其中利用定时\\计数器0的中断来计算串口0的接收超时,因为雷达模块发送数据的周期为80ms,发送数据大小为三个字节,波特率为4800bps,三个字节是连续发送,计算下来相邻字节之间接收相差20ms,可判定没有接收完整三字节数据,定义为超时,清空接收数据缓冲区,等待接收下一次数据。定时\\计数器0的接收超
30
第四章 软件设计及调试
时中断相对比较简单,这里不作介绍。接收数据子程序流程图如图4-3所示:
NO 有接收中断? YES 清接收缓冲区 NO 开始接收数据 帧头正确? YES NO 地址正确? YES NO 接收数据完 整? YES YES 小于前一次发送 数据? NO NO 接收地址与前一次发送地址相同? YES 置发送就绪标志 图4-3.上位机接收数据子程序流程图
31