第六章 系统开发与调试
推荐给好友
打印
加入收藏
更新于2008-08-20 21:25:45

6.1 软件调试平台

Codewarrior 是由Metrowerks 公司提供的专门面向Freescale 所有MCU 与DSP 嵌入式应用开发的软件工具。其中包括集成开发环境IDE、处理器专家、全芯片仿真、可视化参数显示工具、项目工程管理、C 交叉编译器、汇编器、链接器以及调试器。其中在本设计方案中最为重要的部分就是集成开发环境IDE以及调试器,所以接下来将主要介绍该两部分。

6.1.1 Codewarrior IDE 功能介绍

CodeWarriorIDE 能够自动地检查代码中的明显错误,它通过一个集成的调试器和编辑器来扫描你的代码,以找到并减少明显的错误,然后编译并链接程序以便计算机能够理解并执行你的程序。每个应用程序都经过了使用像CodeWorrior 这样的开发工具进行编码、编译、编辑、链接和调试的过程。具体到比赛所应用MCS12DG128B 的一个显著特点就是片上外围设备众多,每个外围设备对应的寄存器也较多,有的甚至达到三十多个。MetrowerksCodewarrior IDE 中的mc9s12dg128.h 文件对所有寄存器对应的存储映射地址都进行了宏定义,开发者在软件开发时直接调用这些宏就可以了(如图6-1)。而且,这些宏的名称都与说明文档上相应寄存器的名称相同或类似,这样,很便于对MC9S12DG128 的开发。


图6-1

6.1.2 Codewarrior IDE 基本使用方法

A 运行“开始菜单—>所有程序—>Metrowerks CodeWarrior—>CW12V3.1— >CodeWarrior IDE”,选择“File—>New”,出现如下的对话框


图6-2


此后选择MC9S12DG128B,按照提示选取期望的选项。直至建立工程文件。如下:


图6-3

打开Start12.c 文件,找到代码


修改成:


之所以要进行这个步骤是因为,初始化代码是认为程序中有监控程序的,但是因为我们是使用的bdm 调试工具,所以就不需要监控程序了。如果不注释掉这两条语句,一旦将程序烧写到片内的flash,会发现程序跑不起来,因为初始化过程在等待监控程序的响应,如果没有监控程序,那么程序就会进入死循环的状态。

C 添加代码:将自己的代码加入到工程文件中。

D 如果文件编译通过,通过BDM 下载。启动CodeWarrio 4.1 自带的Hiwave.exe程序,该程序一般位于CodeWarrio 4.1 的安装目录“\Metrowerks\CWfor HCS12X V4.1\prog”中,是用来往单片机下载程序和调试单片机的程序。启动后程序界面如图6-4 所示。


图6-4 HIWAVE程序烧写环境


装好相关驱动后,界面如图6-5 所示:


图6-5 烧写环境建立界面


之后运行路径C:\Program Files\Metrowerks\CW for HCS12X V4.1\prog 下的hiwave.exe 文件选择TBDML HCS12,在下拉菜单中选择“set speed”,输入晶振频率16.00,然后这个下拉菜单中会出现“Flash”选项,点击这个选项,出现如下的对话框:


图6-6 程序烧写擦除界面


在下载自己的程序前应该将板子中已经存在的程序擦除,选择有程序的部分,点击Erase,擦除完成后,点击Load,选择自己所建立工程的文件夹中bin文件夹下后缀为“.abs”的文件,点击打开,下载完成。至此已经基本完成了从程序代码编写和设置过程,到下载烧制进S12 芯片的主要过程;其中也包括程序开发和调试的基本步骤。

6.2 辅助调试工具

6.2.1无线通讯模块

在智能车的制作和调试过程中,需要将赛车检测到的路面信息以及速度等参数实时地发送给PC,以便对算法进行有针对性的分析。由于小车在行驶时不能通过有线的方式获得其运行参数,就需使用无线方式。

这里选择的是Zigbee 无线通信模块,它可以设置传输速率,以数据包的形式对数据进行收发。下图为Zigbee 模块的示意图。


图6-7 无线传输示意图


图6-8 Zigbee无线通信模块


图6-9 ZigBee模块安装图示



1、IP-Link1270型模块支持信息


2、模块简介

IP-Link1270是完全符合IEEE802.15.4标准与ZigBee规范的2.4GHz无线收发模块。射频部分使用Freescale的MC13191/ 13192 / 13193芯片,MCU使用的是Freescale 的MC9S08GT60 芯片。


图6-10 IP-Link1270 模块的照片


3、IP-Link1270模块简化功能框图


图6-11 IP-Link1270 模块简化功能框图


4、接口定义


表6-1



其中,我们只用到了1.4.5.14号接口,1号口是接地口,4号是接受端口,5号是发送端口,14号口接VCC。

5、软件支持

AT命令概述

模块初次使用时,应采用AT命令通过UART0对模块进行配置,配置结果保存在模块内部非易失性存储器中(模块断电后配置结果仍然保留)。正确配置后,模块应进入数据状态。

AT命令的格式是:ATxxx……\r

其中“AT”为AT命令的前导字符,不区分大小写,用ASCII码表示;

“xxx……”是由字母和数字组成的功能命令,字母和数字都是由ASCII表示的,其中的字母不区分大小写,数字反映十进制数值。

\r表示在AT命令的末尾要加上回车符(ASCII码为0DH,这里H表示16进制数)

IP-Link1270模块在收到AT命令后, 将在10ms内由UART0向外设返回信息。若返回的信息是“Em\r”或在规定的时间内没有出现反馈信息,表明模块没有正确接收该命令或没有完成该命令所要求的功能;若返回的信息是“O\r”或其它相关内容,表示该AT命令对模块已经生效。

AT命令中的返回信息也是由ASCII码描述的,“\r”表示回车符。“Em\r”中的“m”表示返回信息错误类型代码(错误类型代码参见附录1:AT命令中返回值错误类型代码),返回信息中的字母和数字都是由ASCII表示的,其中的字母不区分大小写,数字反映十进制数值。

例如,外设要通过模块UART0查询模块的节点号,可通过UART0向模块输入以下数据


表示模块没有完成此项功能,出现第100类型的错误;

模块也可能在规定时间内不会返回信息,表示模块没有接收此项AT命令。

6.数据帧结构

采用AT命令通过UART0配置IP-Link1270模块,再用ATW\r命令使模块进入数据状态。在数据状态下,利用IP-Link1270模块组成的网络可以进行数据交换。数据交换必须按照IP-Link1270数据帧结构的格式来发送、接收、解析网络中的数据。

IP-Link1270模块的数据帧结构由数据模式、目标地址、数据长度、数据信息与校验和五部分构成,格式如下(数据帧结构中的数据都是16进制度数):


“数据模式”占用一个字节,可以是43H (‘C’)、44H(‘D’)、52H(‘R’)和57H(’W’)四种数值之一,分别表示数据帧结构是正确返回型、数据型、错误返回型和命令型。

“目标地址”表示数据帧结构要发送的目标位置(网络中的节点号),“目标地址”占用一个字节,取值范围是0——255。当“目标地址”与自身模块的节点号一致时,表示数据帧结构发送到自身的模块内;当“目标地址”与自身模块的节点号不同时,表示数据帧结构要无线发送到目标地址所指定的网络节点中。

“数据长度” 表示数据数据帧结构中从“数据1”到“数据n”所占据的字节数。数据长度占据一个字节,取值范围是0——100。

“数据信息”表示用户要通过UART0传送的命令或有效数据,占据的字节数由“数据长度”规定,范围是0——100字节。

“检验和”是对帧结构中的全部数据(校验和字节除外)进行的校验,采用字节逐位异或的方式实现。校验和占据一个字节。

应当说明,命令型和数据型两种类型的数据帧结构都是由用户通过UART0送入IP-Link1270模块的,但这些数据帧结构的作用以及最终到达的目标是不同的。命令型数据帧结构的作用是对IP-Link1270模块进行设置或获取模块的有关信息(目前只是设置模块进入两种省电模式),最终到达的目标是IP-Link1270模块本身的内部电路,是直接与用户相连的IP-Link1270模块。

采用命令型数据帧结构的通讯方式实质上是外部设备与IP-Link1270模块之间的通讯,具体工作过程是:发送端把数据帧结构通过UART0送到直接连接的IP-Link1270模块上,该模块接收这些信息自行处理,并把处理结果发送回外部设备。

6.2.2 数码开关

一.原理简介

新的S12电路板上将拨码开关换成了数码开关,数码开关可以左右旋转并可以按下,如S12P80V1.mdi图所示,开关有三个输出端口QESA,QESB,QESP,它们分别与单片机的PT5-PT7相连。

如下图所示,当数码开关顺时针旋时,A,B口的电平从右向左变化,依次是10,11,01,00,而当数码开关顺时针旋时,A,B口的电平从右向左变化,依次是00,01,11,10。



图6-12


因此可通过不断读PT5和PT6口判断开关是否在旋转并确定方向,通过软件或硬件计脉冲数确定旋转量(由于一圈有32个脉冲,所以我将脉冲数除以5,操作效果较好)。而QESP在位按下时为高电平,按下后即变为低电平,所以可用排脉冲捕捉,通过读标志位判断是否按下。

板子上有两个八段数码管和5个并列的LED灯可用于数码开关的操作和程序运行时的显示。

二.程序使用

程序写成了函数,可移植到其它程序中直接使用,只要执行void operate(void)函数即可。

程序开头对一些端口做的宏定义,还定义了一些全局变量,其中LEDvalue[5]存储操作后所定的参数值(未操作前初值为零,若要改变初值,可在void operate(void)函数的开头部分对LEDvalue[]数组赋值),中除第一个元素外,其余四个均可赋值给控制程序中的任何参数。

若要单独使用数码管显示可直接调用void dis_digital(char number)函数。 

三.操作

数码开关顺时针旋转为增加,逆时针为减少,按下为确定。

进入操作程序,最上方一个LED灯亮,数码管显示为“0”,此时若按下数码开关,即不改变任何参数,跳出操作界面。若旋转数码开关可选择第几个LED亮(即选择要调整的参数),移动到所需要的灯后,按下即可调整该灯所对应的参数,调整完,按下确定后修改即生效。然后可继续调整其它参数。若要退出,选择第一个LED按下确定键即可。

四.问题

在修改参数时,可能会发生跳变,这可能和数码开关的内部结构有关。

6.3 仿真平台LABVIEW

实际调试过程中为了获得更多的底层数据、信号信息,有必要开发、使用一些辅助的调试工具和方法。接下来将主要介绍如何将虚拟仪器作为辅助的调试开发工具。

6.3.1虚拟仪器Labview和串口通讯

摄像头方案相比于光电管方案,它的底层信息更为复杂,所以只有在充分了解和掌握视频信号特点的情况下才有可能将其应用至赛车的实际控制。如果能够将S12采集到的视频信号以及中间算法处理得到的数据通过串口发送至PC,不仅能够直观地看出视频信号的特点,还能够检验算法的准确性和可靠性。

虚拟仪器中对串口的配置如同超级终端一样的方便快捷,只需要选择串口号、波特率、数据位、校验位、停止位和控制位就可以了。主要的子VI就是VISA中的SERIAL。


图6-13 Labview串口配置程序


配合Labview中的串口配置程序,S12的程序也需要进行相应的串口配置,其初始化设置在前面已经介绍过,这里不再赘述。

6.3.2 Labview测试程序

(1)虚拟仪器Labview单行视频显示

设置好串口通讯协议之后,就可以将S12采集到的任何数据通过串口发送到PC上进行观察和测试。首先,需要测试的是摄像头信号单行的数据特点。虽然通过查阅说明书可以了解一部分信号特征,比如行同步、行消隐、场同步和场消隐,但是具体到AD采样以后的数据信号特点还是需要通过直接观察才能有一个比较明确的认识和了解。所以,首先得到了单行的采样数据:


图6-14单行视频信号


通过观察图6-14中的数据曲线,可以很明确地看到行同步信号和行消隐所需要维持的时间。相比与示波器而言,这样不仅能看到波形,而且可以具体得到哪些点是实际上的有效点,有效数据点到底有几个等等。

(2)虚拟仪器Labview 40×54灰度图显示

在得到了单行的数据信号之后,就可以将多行数据通过串口发送到PC上,然后在Labview中用灰度图来显示,这样就得到了整幅图像的信号特点:


图6-15虚拟仪器用灰度图显示40×54 视频信号


虽然最终算法和控制不需要分辨率这么高的图像,但是通过对图像的观察可以进一步加深对图像采集和数据转换的认识,以便在后面的算法控制和策略研究中应用地更加灵活自如。

(3)虚拟仪器Labview舵机测试、速度测试等

虚拟仪器除了简单的对S12发送上来的数据进行处理之外,也可以对赛车进行实时控制,这对于进行类似舵机测试和速度测试来说是非常重要的。但是由于S12控制舵机的PWMDTY01是16位的,所以需要将其转化为两个8位的整型数据。具体的程序可以参见下图:


图6-16 虚拟仪器Labview舵机测试

6.3.3智能车仿真平台

由于最终比赛赛道是不提前公布的,这就给系统可靠性测试提出了更高的要求。一个可靠的系统应该能在各种赛道上稳定运行。但是实际中受到场地时间等的限制,不可能铺设太多赛道进行测试,因此参赛队员们开发了一套智能车仿真平台,以提高测试效率。

这套仿真系统包括离线仿真和在线仿真两大部分。其中离线仿真可以通过MapCreator.exe对所需测试的地图进行生成,如图6-17所示。生成地图后,打开图6-18所示的离线仿真平台再将地图导入,然后就可以选择相应的控制算法对系统进行仿真了。该平台同时支持光电管方案和摄像头方案的仿真,并且可以实时地显示导引线相对于光电管的位置、舵机方向角命令、当前速度以及行驶时间等主要参数值。值得一提的是,针对某一方案编写控制算法时只需采用C语言进行编程即可。这和实际环境中的软件编写是十分接近的,因此代码具有较高的移植性。为了使仿真效果更贴近实际,系统对赛车进行了高阶建模,并加入了侧滑的模拟。在准备比赛的最初阶段,通过离线仿真系统测试了许多不同赛道上赛车行驶的情况。

在线仿真平台在离线仿真的基础上,将数据采集和算法执行直接交给了实际赛车,但控制算法仍只需在PC机上用C进行编写。其界面如图6-19所示。S12单片机通过Zigbee无线通讯模块和PC进行通信,将图像和速度信息发送上来,然后PC机的控制程序对这些信息进行处理,返回相应的舵机转角和速度控制命令。由于赛车在实际赛道上运行,通过这样的仿真过程能更加逼真地对算法进行测试。


图6-17 赛道创建工具界面


图6-18 离线仿真平台界面


图6-19 在线仿真平台界面


图6-20为在线仿真平台的程序流程图。


点击查看:图6-20 在线仿真平台LABVIEW实现程序框图

 

 

上一章:赛车系统软件设计                                                       下一章:结论




 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.