第七章 开发工具、制作调试过程
推荐给好友
打印
加入收藏
更新于2008-08-18 16:11:00

前面几章从硬件设计到软件构架对智能车系统做了详尽的介绍和分析。一个系统方案制定好后,其实主要的工作是不断细化和调试。在对程序进行开发和软硬件联调的过程中需要一整套的软件开发与调试工具。在整个程序开发过程中,除采用汇编语言开发的方式外,还可使用 Metrowerks公司为 MC9S12系列单片机专门提供的全套开发工具( Metrowerks Codewarrior IDE)。这是一套用C语言进行编程的集成开发环境——本文智能车系统的软件设计部分就是在此开发环境下完成的。同时为了观察摄像头采集和控制算法的效果,还采用了 NI公司的虚拟仪器 Labview作为辅助开发调试工具。

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

7.1.1 Codewarrior IDE 功能介绍
CodeWarrior IDE能够自动检查代码中的语法错误,它通过一个集成的调试器和编辑器来扫描代码,以找到并减少明显的错误,然后编译、链接程序以便计算机能够理解和执行程序。每个应用程序都经过了像 CodeWorrior这样的开发工具进行编辑、编译、链接和调试的过程。

具体到比赛所应用 MC9S12DG128的一个显著特点就是片上外围设备众多,每个外围设备对应的寄存器也较多,有的甚至达到三十多个。Metrowerks Codewarrior IDE中的 mc9s12dg128.h文件对所有寄存器对应的存储映射地址都进行了宏定义,开发者在软件开发时直接调用这些宏就可以了(如图 7-1)。这些宏的名称都与说明文档上相应寄存器的名称相同或近似,这样便于对MC9S12DG128的开发。


图 7-1 S12DG128B的库文件

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


图 7-2 建立软件环境过程 1


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


图7-3 建立软件环境过程2


B 打开Start12.c文件,找到代码
#ifdef _HCS12_SERIALMON
#define ___INITRM (*(volatile unsigned char *) 0x0010)
#define ___INITRG (*(volatile unsigned char *) 0x0011)
#define ___INITEE (*(volatile unsigned char *) 0x0012)
#endif


修改成:


//#ifdef _HCS12_SERIALMON
#define ___INITRM (*(volatile unsigned char *) 0x0010)
#define ___INITRG (*(volatile unsigned char *) 0x0011)
#define ___INITEE (*(volatile unsigned char *) 0x0012)
//#endif


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

C 添加代码:将自己的代码加入到工程文件中。
 
D 如果文件编译通过,则可用BDM进行下载。启动CodeWarrior 4.1自带的Hiwave.exe程序,该程序一般位于CodeWarrior 4.1的安装目录“\Metrowerks\CW for HCS12X V4.1\prog”中,是用来往单片机下载程序和调试单片机程序的。启动后程序界面如图 7-4所示。


图 7-4 Hiwave程序烧写环境


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


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


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


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


在下载自己的程序前应该将板子中已经存在的程序擦除,选择有程序的部分,点击 Erase。擦除完成后,点击 Load,选择自己所建立工程文件夹中 bin文件夹下后缀为“.abs”的文件,点击打开,下载完成。

至此就基本完成了从程序代码编写和设置,到程序烧写的主要过程。这些步骤是开发一个完整工程所必须具备的。

7.2 辅助调试方法
根据仿真平台需要实现的各个功能,设计出仿真平台程序框图,利用LabVIEW编程软件编写程序。由于在LabVIEW环境下,程序基于数据流运行,所以宏观上,程序按照框图中各个功能模块的先后顺序结构执行;微观上,具体到每个功能模块内部实现时,其执行顺序由数据流的先后顺序决定 [6]。如:小车的转角显示和速度显示都是在同一个循环体内实现,但其执行的先后顺序是随机的。尽管如此,这种随机性并会不影响到程序的正确执行。

在LabVIEW编程环境下,除了图形化的编程方式,与文本混合编程的特色,还值得注意的是其控件库包含了很多常用的功能模块。除了常用的数学函数,矩阵数组、显示、计时及文件I/O等模块外,还包括测量I/O模块、仪器I/O模块、应用程序接口模块、图形声音模块、信号处理模块、数据通信模块等。这些模块体现了LabVIEW与外界设备进行交互的强大功能,也符合了 “仪器”的本质[8]。每个功能模块集成了与外设交互的相关程序,因此程序员无需了解程序是如何跟外接设备建立连接的,也无需了解如何驱动外界设备,只需要根据功能模块的接口,接收/发送相关的数据即可。所以,与外接设备交互的繁琐细节被LabVIEW屏蔽了,程序员可以集中精力处理主程序。这为程序员提供了极大的方便,也最大限度的减小了程序体出现漏洞的可能性。在本硬件在环仿真平台中,用到LabVIEW提供的通信协议里的VISA配置串口,利用串口进行无线通信,轻易的就能实现数据的收发。

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


图7-7 无线传输示意图


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


图 7-8 Zigbee无线通信模块


功能板上装有传感器、发光二极管、显示屏等元件,PC工具软件发送的控制指令通过无线网络传递到各功能板上,达到对所有元器件的监控目的,用这些简单的演示来模拟各种现场的实际应用。

工具中的控制板是USB接口,可与PC直接连接,并通过PC端的工具软件对其进行控制


图 7-9


接口标准

模块尺寸:40*16*3(mm)
接口:14PIN 扁平电缆
规格:0.5mm 间距,下接方式
推荐使用与模块相同的排线座


图 7-10


图7-11 参考设计原理图


7.3.2天线的摆放
如下图,两个模块处在同一高度上,且可以在y轴上进行适当的旋转,但需尽量使天线处于同侧,这时通讯效果最好。请注意尽量不要在其他轴上进行旋转。


图 7-12正确的天线收发示意图


图7-13 尽量避免的天线收发示意图


注意事项

1)在使用时,不要用手直接接触模块的芯片,以免芯片受到静电损伤。
2)在拔插扁平接口电缆时,不要用力过猛,以免损坏接口。

7.4 数码开关
7.4.1原理简介

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

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


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

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

7.4.2程序使用
了解了各元件的控制端口后我开始编写操作和显示的程序。程序已经写成了函数,可移植到其它程序中直接使用,只要执行 void operate(void)函数即可。

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

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

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

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

7.5计时器


计时器芯片是 DP8573ARTC芯片。引脚定义如图 

定时器精度为 0.01秒。完成计时器程序大致分为两个部分,一个是计时功能实现,另一个就是计时器初始化(端口初始化和显示),最后将光电触发功能加入计时器。在按键扫描中增加了对 P1.2口的扫描,为了防止小车通过时多次触发,加入了延时程序(在计时开始后程序主体经过 20次循环即 0.53s后才再次响应其他触发),最终的程序比较稳定。

计时器操作方法:

1.接线:发射管接 VIN01和 VIN02不分极性
接受管:灰—GND 蓝—GND 棕—VPP黑—SIN 白—GND
显示屏将白色接口插上即可

2.操作:接上电源,屏幕显示 smartcar即正常工作,注意对射装置要对准。若不正常工作,断开电源在插上。若要重启可按下右边第一个按键 reset。计时器也可手动操作,右边第二个按键是开始,第三个是停止。

3.注意事项:最好不要长时间通电,防止板子过热。

 

上一章:车体控制                                                 下一章:结论




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