搜档网
当前位置:搜档网 › 飞思卡尔 使用监控程序经行程序烧写、调试的方法说明―C语言编

飞思卡尔 使用监控程序经行程序烧写、调试的方法说明―C语言编

飞思卡尔 使用监控程序经行程序烧写、调试的方法说明―C语言编
飞思卡尔 使用监控程序经行程序烧写、调试的方法说明―C语言编

本文由pknew贡献

pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。

使用监控程序经行程序烧写、调试的方法说明C语言编程版

对MC9S12DG128进行调试、程序烧写可以有两种方式:用BDM工具通过专门接口进行和利用监控程序通过串口进行。BDM方式是芯片厂商提供的调试、烧写方式,在DG128芯片上留有管脚,通过仿真器将目标板和PC机相连,PC机通过Hiwave程序将程序通过仿真器烧写至单片机中。BDM的一大特点是需要专门的仿真器和开发环境,在没有仿真器或者Hiwave程序时就无法进行程序的烧写。另外一种方式,也就是利用监控程序通过串口进行程序烧写的方式,不用专门的调试器,不用专门的程序就可进行程序的烧写。

一、简单原理

简单的说,通过串口烧写程序就是用已经烧写在单片机内部的一小段程序,通过异步串行接口与PC机通信,把得到的程序数据写在单片机的Flash中。已烧写进单片机的程序称为监控程序,由Freescale公司提供,在发单片机开发板或提供的硬件平台之前已用BDM烧写至单片机内。由于监控程序的存在,单片机的一些存储空间被占用,中断向量表的位置也要改变。已有监控程序的单片机在运行时,首先运行的程序就是监控程序,监控程序首先会等待3秒,同时查询串口是否接收到任何数据,若接收到数据,就进入调试状态,通过指令进行程序烧写、调试;若3秒之内没有从串口上接收到数据,就去执行用户烧写到单片机内的程序。

二、使用CodeWarrior进行程序编写时的注意事项

由于使用了监控程序,在进行程序编写时就要比平常多注意两个方面的东西,一是对整个程序存储空间的定义,一是中断向量的偏移。1.程序

存储空间的定义监控程序占用了¥F000-¥FEFF的存储空间,并且通过串口烧写程序时对此存储空

间进行了写保护,故用户在写程序时要注意必要将程序编译连接至此存储空间中,为了解决此问题,要在Full_Chip_Simulation_linker.prm进行改动,如下:将改为

2.中断向量表偏移的处理监控程序将中断向量表从¥FF00-¥FFFF偏移至¥EF00-¥EFFF,即用户的程序入口和中断程序的向量号需要改变。程序入口的改变要在Full_Chip_Simulation_linker.prm进行改动,如下将改为各中断程序的向量号,需要在原来(单片机资料给定的)基础上加上2048,例如10号中断为定时器第2通道中断,使用监控程序时,就要改为2058号中断。即将

改为

其他中断也是如此。

三、PC机串口界面——超级终端

PC机上使用的与单片机监控程序通信的软件是Windows自带的一个通信界面软件——超级终端。超级终端的位置在开始->所有程序->附件->通讯下,如图。

打开超级终端后先要给此链接起名称,这个名称可以随意起。

然后要选择通信端口,如下图,选择“连接时使用”为具体接线的那个端口。需要进行设置,具体要设置通讯的速率和数据格式,设置为如下图:

设置好以后就可以用了。

四、程序的下载连接好串口线,打开设置好的超级终端,然后对单片机商店或者复位时,超级终端就会出现以下文字:

D-BUGV1.1TsinghuaMACAllRightReservedTypeHforHelpTypeAnyKeyintoDebug,TypeHforHelp

在刚刚上电或复位的3秒内,超级终端会检测串口,等待PC机端是否发送过来任意字符。若无字符,则运行用户程序;若有任意字符,即用户按了键盘(一般按Enter键),则进入监控程序的调试状态,此时就可以进行程序下载了。进入调试状态如下图

此时,按‘H’键看帮助。

与烧写程序有关的操作有‘E’‘Q’‘F’,‘E’‘Q’都是擦除之前单片机里

面的旧程序,‘F’是下载程序。依次按‘E’‘Q’键,然后按‘F’,按‘F’之后程序会等待用户选择要下载的程序,如图:

这时,要通过传送菜单下发送文本文件进行要烧写程序的选择。

要选择已经编译好的后缀为.s19的文件,每个工程的s19文件一般放在工程文件夹下面的bin文件夹中。

选择打开以后,超级终端会以*号显示进度,等待*号不出现且光标换行后程序写入即完成可以通过复位来运行用户程序了。

飞思卡尔硬件和部分软件部分笔记

常见稳压芯片和电路图 Modified by Taiyou 2011-1-27 硬件部分 一、总体模块框图 1、基本模块包括电源模块、测速模块、驱动模块、道路识别模块等,再加上调试模块部分,调试模块部分可单独设计,调试完后拆下,框图如下: 2、此外,还可以包括车速,车架速度、电池电压和舵机位置检测等电路,增加模型车运行参数检测,提高模型车控制性能,增加调试电路方便现场调试。下面的第二图为硬件模块与上面层的关系。 二、具体电路图 1、电源模块 主要包括以下几个部分的电源:

1)5V电压。主要为单片机、信号调理电路以及部分接口电路提供电源,电压要求稳定、 噪声小,电流容量大于500mA。 补充,一般在输出端并联一个大电容来解决稳定性问题 2)6V电压。主要是为舵机提供工作电压,实际工作时,舵机所需要的工作电流一般在几 十毫安左右,电压无需十分稳定。 3)7.2V电压。这部分直接取自电池两端电压,主要为后轮电机驱动模块提供电源。 4)12V电压。如果采用CCD/CMOS图像传感器来进行道路检测,则需要12V工作电压。 5)2V电压。为红外发光管提供工作电压,可以采用开关电源从电池降压而得,这样可以 提高红外检测电路的电源利用效率。需要根据红外发射管的参数确定该电压值。 补充,此电路为光电组所需电压,我们不需要。 除此之外,如果使用了其的芯片和传感器,它们的工作电压可能不在上述之内,还需要通过专门的稳压电路提供相应的工作电压。例如采用飞思卡尔公司的MC7260加速度传感器进行车轮打滑检测,该传感器需要3.3V的工作电压。 补充,由于今年增加了坡度的控制,我们队考虑了增加坡度检测方面的传感器。 降压稳压电路可以采用可以采用串联稳压可开关稳压两种芯片。开关稳压芯片的工作效率高,但有较高的电源噪声,耗电量比较大的电路适于采用开关稳压电路。例如采用大电流红外检测电路,由于红外发射管数量较多,总的消耗电流很大,采用开关电源将电池电压将至2V左右,作为红外发射管的工作电压,此时每个红外发射管工作时只需串联很小的限流电阻甚至不用串联电阻,采用这种方法,可大大提高电源利用效率。 稳压电路的设计需要简单可靠,在满足电压波动范围的要求下应尽量简化电路设计,例如舵机电源在4.5V~6V的范围内,电流100mA左右,可以从7.2V的电池电压通过串联两只硅二极管获得。此外,通过实验可发现,组委会所提供的舵机可以直接工作在7.2V的电压下,此时舵机的响应速度也会提高,所以可以直接使用电池电压作为舵机的电源。 如果采用CCD或CMOS摄像头作为道路传感器,它们工作电压在9~12V范围内,此工作电压高于电池的电压,需要借助于斩波升压电路获取,可以采用专门升压芯片进行设计,也可以利用单片机PWM输出端口控制大功率晶体管进行斩波升压。有些CMOS摄像头工作电压在6~9V之间,所以也可以直接使用电池电压提供电源,所以选择CMOS摄像头可以简化电源电路的设计。 消除电源中的噪声并减少电压波动,需要在各级电源模块中安装滤波电容,包括容量小的高频滤波电容以及大容量的电解电容。由于存在电机驱动,为了避免电机在启动和制动过程产生的冲击电流对电源的影响,应尽量加大电池两端的电容容量,但不要超过大赛规则允许的电容容量限制。 另一本书上的版本(2.5V、5V、6.5V、7.2V、12V): 1)采用稳压芯片LM2576将电源电压稳压到5V后,给单片机系统电路、车速检测

飞思卡尔智能车竞赛新手入门建议

每年都会有很多新人怀着满腔热情来做智能车,但其中的很多人很快就被耗光了热情和耐心而放弃。很多新人都不知道如何入手,总有些有劲无处使的感觉,觉得自己什么都不会,却又不知道该干什么。新人中存在的主要问题我总结了以下几点: l缺乏自信,有畏难情绪 作为新人,一切都是新的。没有设计过电路,没有接触过单片机,几乎什么都不会。有些新人听了两次课,看了两篇技术报告,就发现无数不懂不会的东西,于是热情在消退,信心在减弱。这些都是放弃的前兆。殊不知,高手都是从新人过来的,没有谁天生什么都会做。一件事件,如果还没开始做,就自己否定自己,认为自己做不到,那么肯定是做不到的。 l习惯了被动接收知识,丧失了主动学习的能力。 现在的学生大多从小习惯了被灌输知识,只学老师教的,只学老师考的。殊不知一旦走向社会,将不再有老师来教,不再有应付不完的考试。做智能车和传统的教学不同,学生将从被动学习的地位转变为主动学习。就算有指导老师,有指导的学长,但也都处于被动地位,往往都不会主动来教。有的学生一开始就没有转变思想,还希望就像实验课一样,老师安排好步骤1,2,3……,然后自己按照老师安排好的步骤按部就班的完成。这样的学生,往往都丧失了提出问题和分析问题的能力,只是一个应付考试的机器。要知道,解决问题的第一步是提出问题,如果总等着别人来教,那么问题永远会挡在你面前。 l缺乏团队精神和合作意识 智能车比赛是以团队的形式参赛,只依靠个人能力单兵作战就能取得好成绩的是很少很少的。当今社会,任何人的成功都离不开身后的团队的支撑。智能车是一个很复杂的系统,电路、机械、传感器、单片机、底层驱动、控制算法……。如果所有的任务都是一个人去完成,固然锻炼了自己,但想做的很好却很不现实。很多新人,来到实验室,来到一个陌生的环境和团队,连向学长请教,和同学交流的勇气都没有,又如何融入团队呢。除了要主动融入团队,还要培养自己的团队意识。团队精神往往表现为一种责任感,如果团队遇到问题,每个人都只顾自己,出了错误,不想着解决问题,而是互相推诿埋怨。这样的团队,肯定是无法取得好成绩的。 l缺乏耐心和细心的精神 其实把一件事做好很简单,细心加上耐心。不细心就想不到,没有耐心,即使想到了也做不到。做事怕麻烦,将就,说白了就是惰性在作祟。明明可以把支架做的更轻更漂亮,明明可以把程序写的更简洁,明明可以把电路设计得更完善……。其实,每个人都有很大潜力,如果不逼自己一次,你永远不知道自己的潜力有多

飞思卡尔MC9S12XS128单片机中断优先级设置简易教程

本教程试图用最少的时间教你飞思卡尔XS128单片机的中断优先级设置方法和中断嵌套的使用,如果是新手请先学习中断的基本使用方法。 先来看看XS128 DataSheet 中介绍的相关知识,只翻译有用的: 七个中断优先级 每一个中断源都有一个可以设置的级别 高优先级中断的可以嵌套低优先级中断 复位后可屏蔽中断默认优先级为1 同一优先级的中断同时触发时,高地址(中断号较小)的中断先响应 注意:高地址中断只能优先响应,但不能嵌套同一优先级低地址的中断 下面直接进入正题,看看怎么设置中断优先级: XS128中包括预留的中断一共有128个中断位,如果为每个中断都分配一个优先级寄存器的话会非常浪费资源,因此飞思卡尔公司想出了这样一种办法:把128个中断分为16个组,每组8个中断。每次设置中断时,先把需要的组别告诉某个寄存器,再设置8个中断优先寄存器的某一个,这样只需9个寄存器即可完成中断的设置。 分组的规则是这样的:中断地址位7到位4相同的中断为一组,比如MC9SX128.h中 这些中断的位7到位3都为D,他们就被分成了一组。0~F正好16个组。

INT_CFADDR就是上面说到的用来设置组别的寄存器: 我们需要设置某个组别的中断时,只要写入最后8位地址就行了,比如设置SCI0的中断优先级,就写入0xD0。 设置好组别之后,我们就要该组中相应的中断进行设置,设置中断的寄存器为 这其实是一组寄存器,一共有8个,每个都代表中断组中的一个中断。对应规则是这样的:中断地址的低四位除以2 比如还是SCI0,低四位是6,除以二就是3,那么我们就需要设置INT_CFDATA3 往INT_CFDATAx中写入0~7就能设置相应的中断优先级了 拿我本次比赛的程序来举个例子:我们的程序中需要3个中断:PIT0,PORTH,SCI0。PIT0定时检测传感器数值,PORTH连接干簧管进行起跑线检测,SCI0接收上位机指令实现急停等功能。因此中断优先级要SCI0>PORTH>PIT0。 我们先要从头文件中找出相应中断的地址: PIT0【7:4】位为7,选择中断组: INT_CFADDR=0x70;

飞思卡尔 智能车舵机控制

智能车的制作中,看经验来说,舵机的控制是个关键.相比驱动电机的调速,舵机的控制对于智能车的整体速度来说要重要的多. PID算法是个经典的算法,一定要将舵机的PID调好,这样来说即使不进行驱动电机的调速(匀速),也能跑出一个很好的成绩. 机械方面: 从我们的测试上来看,舵机的力矩比较大,完全足以驱动前轮的转向.因此舵机的相应速度就成了关键.怎么增加舵机的响应速度呢?更改舵机的电路?不行,组委会不允许.一个非常有效的办法是更改舵机连接件的长度.我们来看看示意图: 从上图我们能看到,当舵机转动时,左右轮子就发生偏转.很明显,连接件长度增加,就会使舵机转动更小的转角而达到同样的效果.舵机的特点是转动一定的角度需要一定的时间.不如说(只是比喻,没有数据),舵机转动10度需要2ms,那么要使轮子转动同样的角度,增长连接件后就只需要转动5度,那么时间是1ms,就能反应更快了.据经验,这个舵机的连接件还有必要修改.大约增长0.5倍~2倍. 在今年中,有人使用了两个舵机分别控制两个轮子.想法很好.但今年不允许使用了.

接下来就是软件上面的问题了. 这里的软件问题不单单是软件上的问题,因为我们要牵涉到传感器的布局问题.其实,没有人说自己的传感器布局是最好的,但是肯定有最适合你的算法的.比如说,常规的传感器布局是如下图: 这里好像说到了传感器,我们只是略微的一提.上图只是个示意图,意思就是在中心的地方传感器比较的密集,在两边的地方传感器比较的稀疏.这样做是有好处的,大家看车辆在行驶到转弯处的情况: 相信看到这里,大家应该是一目了然了,在转弯的时候,车是偏离跑道的,所以两边比较稀疏还是比较科学的,关于这个,我们将在传感器中在仔细讨论。 在说到接下来的舵机的控制问题,方法比较的多,有人是根据传感器的状态,运用查表法差出舵机应该的转角,这个做法简单,而且具有较好的滤波"效果",能够将错误的传感器状态滤掉;还有人根据计算出来的传感器的中心点(比

飞思卡尔单片机复习题

复习题: 1.根据总线时钟频率会计算TCNT计数时钟周期的最大值?最小值?溢出周期最大值? 如:fbus=2.4576MHz,值分别为多少?若fbus=8MHz呢? 2.熟悉LED共阴极共阳字型码的计算。 3.熟悉A W60各输入输出端口功能。 4. 不带缓冲和带缓冲的PWM有什么差异性? 5.为什么要将某些寄存器名和寄存器位在头文件中进行宏定义? 6.简述中断的作用与处理过程。 7.AW60 MCU都有哪些中断源? 8.为了实现对键盘的编程,如何区分按键是否真正地被按下,还是抖动?如何处理重键问题? 9.为了实现对键盘的编程,如何识别键盘上的按键? 10.实现计数与定时的基本方法有哪些?比较它们的优缺点。 11.比较AW60定时器模块实现输出比较功能与PWM功能的异同点。 12.为什么要对采集的数据进行滤波,有哪些滤波方法? 13.什么是输出比较?主要用途是什么? 14.什么是中断?什么是中断向量?什么是中断向量地址?GP32一共有多少个中断源? 15.什么是LED静态扫描、LED动态扫描? 16.请描述键盘逐行逐列扫描法原理。判断是否有键按下通常有哪两种方法?各有何优缺点?17.键盘设计思路中是如何获取按键的行列位置信息的?以3*3键盘为例。 18.LED和LCD各有何特点? 19.什么是脉宽调制波?脉宽调制输出功能主要用途是什么? 20.微控制器的片外晶体振荡器的频率是不是越高越好?为什么? 21.简述定时接口的基本原理。 22.如果系统中需要9个按键,那么矩阵式键盘接口方案应如何设计?并编写键盘初始化子程序及读取键值子程序,键值存入A中,若无键按下,为$FF。 23.设计并编程:仿照本章给出的定时器1通道0输入捕捉中断里程,捕捉两路输入信号,分别用相应的指示灯指示。 24.使用中断方式,对通道0输入的模拟信号连续采样8次,送入缓冲区。 25.用AW60不带缓冲的输出比较功能产生周期约为1S的方波。设内部总线时钟频率为32.768KHz。26.根据P178页码图9-3硬件连接图,编写程序完成在四个8段数码管上显示8字循环的程序。27.根据P178页码图9-3硬件连接图,编写程序完成在四个8段数码管上的4个8段abcdefgh 轮流点亮。 28.编写一个子程序对T1CH0初始化,使T1CH0产生20ms定时中断,并编写T1CH0中断服务程序使PTC0输出周期为1S的方波。设fbus=8MHz。 29.复习所有的实验。 30.复习所有的例题、作业题。 题型:选择题(30分)、问答题(40分)、编程题(30分) 1

飞思卡尔智能车摄像头组freescale程序代码

extern int left,w,top,h; extern HDC m_hdc; CBrush brush3(RGB(0,255,0)); CBrush brush4(RGB(255,0,0)); CBrush brush5(RGB(255,255,0)); #else #include #include "math.h" // #include "LQfun.h" #endif #ifdef ccd #define MAX_VIDEO_LINE 39 #define MAX_VIDEO_POINT 187 #else //#define MAX_VIDEO_LINE 26 // #define MAX_VIDEO_POINT 301 #define MAX_VIDEO_LINE 78 #define MAX_VIDEO_POINT 57 #endif extern unsigned char g_VideoImageDate[MAX_VIDEO_LINE][MAX_VIDEO_POINT]; #define INT8U unsigned char #define INT8S signed char #define INT16U unsigned int #define INT16S int #define INT32S int #define NO_DATA_180 254 //#define INT32U unsigned int unsigned char LIMIT=((MAX_VIDEO_POINT)/2); unsigned char MIDDLE[MAX_VIDEO_LINE]; #define MAX_BLACK_NUM 7 INT8S n;

飞思卡尔智能车电机资料

3.1.6驱动电机介绍 驱动电机采用直流伺服电机,我们在此选用的是RS-380SH型号的伺服电机,这是因为直流伺服电机具有优良的速度控制性能,它输出较大的转矩,直接拖动负载运行,同时它又受控制信号的直接控制进行转速调节。在很多方面有优越性,具体来说,它具有以下优点: (1)具有较大的转矩,以克服传动装置的摩擦转矩和负载转矩。 (2)调速范围宽,高精度,机械特性及调节特性线性好,且运行速度平稳。 (3)具有快速响应能力,可以适应复杂的速度变化。 (4)电机的负载特性硬,有较大的过载能力,确保运行速度不受负载冲击的 影响。 (5)可以长时间地处于停转状态而不会烧毁电机,一般电机不能长时间运行于 停转状态,电机长时间停转时,稳定温升不超过允许值时输出的最大堵转转矩称为连续堵转转矩,相应的电枢电流为连续堵转电流。 图3.1为该伺服电机的结构图。图3.2是此伺服电机的性能曲线。 图3.1 伺服电机的结构图

图3.2 伺服电机的性能曲线 3.1.7 舵机介绍 舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。一般舵机的控制要求如图3.3所示。图3.4为舵机的控制线。

飞思卡尔技术报告

K60模块分配 K60的简介,我们本次使用了以下模块。 1. FTM模块:K60中集成3个FTM模块,而今年我们选用两个B车进行追踪循迹。B车模使用单电机、单舵机,另外需要一个编码器。所以对3个FTM模块进行如下配置:FTM0用以产生300Hz PWM信号控制舵机,FMT1用以产生18.5KHz PWM信号控制电机,FTM2用以采集编码器数据。 2. 定时器模块:K60中有多个定时器模块,我们使用了其中2个。其一用以产生5ms 中断,处理相关控制程序。另一个用以超声波模块的计时。 3. SPI模块:我们使用了K60的一个SPI模块,用以和无线射频模块NRF24L01P通信。 4.外部中断:我们使用了三个外部中断。第一个是PORTA的下降沿中断,用以响应干簧管检测到磁铁。第二个是PORTD的跳变沿中断,用以响应超声波模块的输出信号。最后一个是PORTE的下降沿中断,用以响应NRF24L01P模块的相关操作。 数据采集算法 传感器是智能车的眼睛,它们给智能车循迹和追踪提供了必不可少的信息。因此,在智能车软件设计中必须保证数据采集算法的稳定性,同时兼顾其快速性。本车比赛,我们的智能车主要采集以下传感器的数据:电感传感器电路板、编码器、超声波、干簧管。下面主要详述超声波模块、电感传感器电路板的数据采集。 1 .超声波模块数据采集 我们使用的超声波模块的DO引脚输出50Hz的矩形波信号,通过高电平的时间向单片机传递数据。本超声波传感器的高电平时间为声波单程传输的时间,通过这个时间可计算出两车之间的距离。 我们使用外部中断和计时器结合的方式测量高电平时间。首先配置PORTD11为跳变沿中断。中断被触发时,如果PORTD11为高电平则开始计时,如果PORTD11为低电平则停止计时并记录时间间隔。 2. 电感传感器电路板的数据采集 电感传感器电路板通过输出电压的大小反应响应位置和方向的磁场强度。本次比赛中,我们使用了10个电感分布在6个不同位置,因此每个周期都要采集10路ADC数据,每路ADC数据采集32次进行平均滤波。K60芯片中有两路ADC模块,为了最大程度的减少采集数据的时间,我们采用两个ADC模块并行采集的方法。 首先,将10路ADC分为两组,第一组6个使用ADC0模块采集,第二组4个使用ADC1模块采集,两个ADC模块同时采集数据。以第一组为例,依次采集6路ADC 数据,循环32次。当两个ADC模块都完成任务时,ADC转换结束。最后进行平均滤波。 控制算法 1.定位算法 A.两个电感定位算法 在电磁组算法设计中,“差比和”(即用连个电感数据的差除以它们的和)是一个简单易用的定位算法,但是我们测量发现“差比和”算法得出的偏差距离用着较大非线性。如下图所示,其横轴为实际偏差(单位mm),其纵轴为“差比和”得出的偏差。可以发现,在实际偏差较小时,“差比和”算出的偏差变化较快,实际偏差较大时“差比和”算出的偏差变化较缓。

飞思卡尔智能车电磁组信号采集

?пㄖ ???? ??? ? ??? ?? ? ? 1? ? ??? ? 哖 世?? ???? ??? ??? ??? ? ??? ㄎ? ?? ??????仁??20kHz??????⌒ ???仁?VLF? ??⌒???仁仁?? ? 仁 ?仁??⌒????3kHz?30kHz?⌒?? 100km?10km? ?? 3.1?? ??? ? ? ?? ? ? ?а ? ?????? ??? ? ? ? ? ?? ??オ???? ??? ??? ? ? ??? ? ? ???о? ??? ??? ??? ? ? ? ? ?? ? ??? й ?????? ? ? ?? ? ???? ?н ????? ? ? на???? ??? ? ? ?? ? ? ?? а ? ???? ?? ??? ?? ? ??? ? ? ?? ?? ??? ??? ?? ??仁? ??? ?? ???? ??? ?? ?? ????? ?? ? ?? ?????? ↓ ? ?? ?? ↓ ? ?? ?? ??? ???? ? ??? ?? ? ? ?? ? ↓ ?? ?? ? ? ? ? ?? っ ?? ???/& ????? ??? ? ? ??/&? ?? ? ?

?йㄐ ???? ?? ?LC? ?? ? ? ?? ?? ? ?? ??????? ??? ??AD???? 享 ?? 儈?↓? фн?? ?? ???AD? ???? ? ?? ?? 3.3 ?? ?? ???????? ?? 傼 ??н ??? ? ? н ? ?? ?? ?н ? н? ? ? ??? ? ?? ?нっ ???? ?????? ? ф? 儈? ? ?

飞思卡尔S12系列寄存器和中断讲解

S12的输入/输入端口(I/O口) I/O端口功能 可设置为通用I/O口、驱动、内部上拉/下拉、中断输入等功能。 设置I/O口工作方式的寄存器有: DDR、IO、RDR、PE、IE和PS。 DDR:设定I/O口的数据方向。 IO :设定输出电平的高低。 RDR:选择I/O口的驱动能力。 PE:选择上拉/下拉。 IE:允许或禁止端口中断。 PS:1、中断允许位置位时,选择上升沿/下降沿触发中断;2、中断禁止时且PE有效时,用于选择上拉还是下拉。 I/O端口设置 1、A口、B口、E口寄存器 (1)数据方向寄存器DDRA、DDRB、DDRE DDRA、DDRB、DDRE均为8位寄存器,复位后其值均为0。 当DDRA=0、DDRB=0、DDRE=0 时A口、B口和E口均为输入口。 否则,A口、B口、E口为输出口。当DDRA、DDRB、DDRE的任何一 位置1时,则该位对应的引脚被设置为输出。 例如,将A口设置为输出口,则其C语言程序的语句为:DDRA=0xff;(2)A口、B口、E口上拉控制寄存器PUCR PUCR为8位寄存器,复位后的值为0。当PUPAE、PUPBE、PUPEE被设置为1时,A口、B口、E口具有内部上拉功能;为0时,上拉无效。当A口、B口、E口为地址/数据总线时,PUPAE和PUPBE无效。 (3)A口、B口、E口降功率驱动控制寄存器RDRIV RDRIV为8位寄存器,复位后的值为0,此时,A口、B口、E口驱动保持全功率;当RDPA、RDPB、RDPE为1时,A口、B口、E口输出引脚的驱动功率下降 (4)数据寄存器PORTA、PORTB、PORTE PORTA、PORTB、PORTE均为8位寄存器,复位后的值为0,端口引脚输出低电平;要使引脚输出高电平,相应端口对应位应该置1。 由于PE0是/XIRQ、PE1是IRQ,因此,PE0和PE1只能设置为输入。

飞思卡尔智能车比赛个人经验总结

先静下心来看几篇技术报告,可以是几个人一起看,边看边讨论,大致了解智能车制作的过程及所要完成的任务。 看完报告之后,对智能车也有了大概的了解,其实总结起来,要完成的任务也很简单,即输入模块——控制——输出。 (1)输入模块:各种传感器(光电,电磁,摄像头),原理不同,但功能都一样,都是用来采集赛道的信息。这里面就包含各种传感器的原理,选用,传感器电路的连接,还有传感器的安装、传感器的抗干扰等等需要大家去解决的问题。 (2)控制模块:传感器得到了我们想要的信息,进行相应的AD转换后,就把它输入到单片机中,单片机负责对信息的处理,如除噪,筛选合适的点等等,然后对不同的赛道信息做出相应的控制,这也是智能车制作过程中最为艰难的过程,要想出一个可行而又高效的算法,确实不是一件容易的事。这里面就涉及到单片机的知识、C语言知识和一定的控制算法,有时为了更直观地动态控制,还得加入串口发送和接收程序等等。 (3)输出模块:好的算法,只有通过实验证明才能算是真正的好算法。经过分析控制,单片机做出了相应的判断,就得把控制信号输出给电机(控制速度)和舵机(控制方向),所以就得对电机和舵机模块进行学习和掌握,还有实现精确有效地控制,又得加入闭环控制,PID算法。 明确了任务后,也有了较为清晰的控制思路,接下来就着手弄懂每一个模块。虽然看似简单,但实现起来非常得不容易,这里面要求掌握电路的知识,基本的机械硬件结构知识和单片机、编程等计算机知识。最最困难的是,在做的过程中会遇到很多想得到以及想不到的事情发生,一定得细心地发现问题,并想办法解决这些问题。 兴趣是首要的,除此之外,一定要花充足的时间和精力在上面,毕竟,有付出就会有收获,最后要明确分工和规划好进度。

飞思卡尔单片机知识点

1、单片机组成:1> CPU 2> 存储器3>I/O ; 2、存储器包括2大类:ROM , RAM 3、标准ASCII码使用(1)个字节表示字符; 4、BCD码是用()进制表示的()的数据; 5、HCS08QG8的最小系统包括(电源电路,复位电路,下载口,(内部时钟)); 6、QG8管脚数量(16)、只能输入的是(PTA5)、只能输出的是(PTA4)、程序下载的是、接外部时钟的是; 7、QG8的管脚可以作为数字输入输出、也可以作为模拟输入,可以作为模拟输入的有(); 8、QG8管脚复用优先级最低的功能是(I/O); 9、QG8存储器配置中,不同资源的分界线……; 10、CPU寄存器有(A, HX, PC, CCR, SP); 11、可以执行位操作的地址范围(0X0000~0X005F); 12、有地址的寄存器分成了(3)块(0页,高页,非易失); 13、如何在C语言中定义常数(数据类型变量名;),如何指定变量的地址(数据类型变量名@ 地址;); 14、堆栈的管理者是寄存器(SP); 15、SP的复位缺省值是(0X00FF); 16、堆栈对数据的操作特点是(向上生长型:先压后涨、先减后弹); 17、堆栈一般在RAM的高地址区域还是低地址区域?高地址区 18、内部时钟源包括哪4大部分? 19、外部时钟分哪2大类;振荡器,整形外部时钟 20、内部时钟中FLL固定倍频(512倍频); 21、ICS的7种工作模式(FEI, FEE, FBI, FBILP, FBE, FBELP, stop); 22、ICS的内部参考时钟是可以校准、微调的,调整的寄存器名(ICSTRM);该寄存器的数值越大,输出时钟频率越(低); 23、FLASH是按页管理的,页大小(512)字节,每页分(8)行; 24、高页寄存器位于FLASH的最后一页的(第六行/0xFFB0~0xFFBF)位置; 25、FLASH的最后一页最后一行是(中断向量); 26、FLASH块保护寄存器(FPROT);块加密寄存器(FOPT);对应的非易失寄存器分别是(NVOPT, NVPROT); 27、FLASH操作的一般过程是(); 28、FLASH操作的有效命令有(空检查,字节编程,突发模式编程,页擦除,全部ROM 擦除); 29、记录程序运行状态的CPU寄存器是(CCR); 30、指令系统包括6大类指令,分别是(算术运算指令、数据传送指令、数据和位操作、逻辑运算、程序控制、堆栈处理); 31、寻址方式是指(CPU访问操作数和数据的方法); 32、寻址方式包括7大类16种,分别是: INH IMM DTR EXT IX,IX1,IX2,SP1,SP2,IX+,IX1+ REL IMD, DD,IX+D,DIX+ 33、8指令模板和6指令模板分别是(); 34、QG8是高电平复位还是低电平复位?低电平 35、QG8数据存储器RAM的大小为(512)字节; 36、上电复位期间将管脚(A4)设置为(低)电平可以进入调试模式 37、QG8的存储器结构为冯·诺伊曼还是哈佛结构?冯诺依曼

飞思卡尔智能车竞赛光电组技术报告

第九届“飞思卡尔”杯全国大学生智能车竞赛光电组技术报告 学校:中北大学 伍名称:ARES 赛队员:贺彦兴 王志强 雷鸿 队教师:闫晓燕甄国涌

关于技术报告和研究论文使用授权的说明书本人完全了解第八届“飞思卡尔”杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。 参赛队员签名: 带队教师签名: 日期:2014-09-15日

摘要 本文介绍了第九届“飞思卡尔杯全国大学生智能车大赛光电组中北大学参赛队伍整个系统核心采用飞思卡尔单片机MC9S12XS128MAA ,利用TSL1401线性CCD 对赛道的行扫描采集信息来引导智能小车的前进方向。机械系统设计包括前轮定位、方向转角调整,重心设计器件布局设计等。硬件系统设计包括线性CCD传感器安装调整,电机驱动电路,电源管理等模块的设计。软件上以经典的PID算法为主,辅以小规Bang-Bang 算法来控制智能车的转向和速度。在智能车系统设计开发过程中使用Altium Designer设计制作pcb电路板,CodeWarriorIDE作为软件开发平台,Nokia5110屏用来显示各实时参数信息并利用蓝牙通信模块和串口模块辅 助调试。关键字:智能车摄像头控制器算法。

目录 1绪论 (1) 1.1 竞赛背景 (1) 1.2国内外智能车辆发展状况 (1) 1.3 智能车大赛简介 (2) 1.4 第九届比赛规则简介 (2) 2智能车系统设计总述 (2) 2.1机械系统概述 (3) 2.2硬件系统概述 (5) 2.3软件系统概述 (6) 3智能车机械系统设计 (7) 3.1智能车的整体结构 (7) 3.2前轮定位 (7) 3.3智能车后轮减速齿轮机构调整 (8) 3.4传感器的安装 (8) 4智能车硬件系统设计 (8) 4.1XS128芯片介绍 (8) 4.2传感器板设计 (8) 4.2.1电磁传感器方案选择 (8) 4.2.2电源管理模 (9) 4.2.3电机驱动模块 (10) 4.2.4编码器 (11) 5智能车软件系统设 (11) 5.1程序概述 (11) 5.2采集传感器信息及处理 (11) 5.3计算赛道信息 (13) 5.4转向控制策略 (17) 5.5速度控制策略 (19) 6总结 (19)

飞思卡尔智能车程序

Main.c #include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12db128b" #include "define.h" #include "init.h" // variable used in video process volatile unsigned char image_data[ROW_MAX][LINE_MAX] ; // data array of picture unsigned char black_x[ROW_MAX] ; // 0ne-dimensional array unsigned char row ; // x-position of the array unsigned char line ; // y-position of the array unsigned int row_count ; // row counter unsigned char line_sample ; // used to counter in AD unsigned char row_image ; unsigned char line_temp ; // temperary variable used in data transfer unsigned char sample_data[LINE_MAX] ; // used to save one-dimension array got in interruption // variables below are used in speed measure Unsigned char pulse[5] ; // used to save data in PA process Unsigned char counter; // temporary counter in Speed detect Unsigned char cur_speed; // current speed short stand; short data; unsigned char curve ; // valve used to decide straight or turn short Bounds(short data); short FuzzyLogic(short stand); /*----------------------------------------------------------------------------*\ receive_sci \*----------------------------------------------------------------------------*/ unsigned char receive_sci(void) // receive data through sci { unsigned char sci_data; while(SCI0SR1_RDRF!=1); sci_data=SCI0DRL; return sci_data; } /*----------------------------------------------------------------------------*\ transmit_sci \*----------------------------------------------------------------------------*/ void transmit_sci(unsigned char transmit_data) // send data through sci { while(SCI0SR1_TC!=1); while(SCI0SR1_TDRE!=1);

飞思卡尔智能车光电组技术报告

第十届全国大学生“飞思卡尔”杯华 北赛 智能汽车竞赛 技术报告 目录 目录 (11) 第一章方案设计 (11) 1.1系统总体方案的选定 (11) 1.2系统总体方案的设计 (11) 1.3 小结 (22) 第二章智能汽车机械结构调整与优化 (33) 2.1智能汽车车体机械建模 (33) 2.2 智能汽车传感器的安装 (44) 2.2.1速度传感器的安装 (44) 1 / 26

2.2.2 线形CCD的安装 (55) 2.2.3车模倾角传感器 (55) 2.3重心高度调整 (55) 2.3.1 电路板的安装 (66) 2.3.2 电池安放 (66) 2.4 其他机械结构的调整 (66) 2.5 小结 (66) 第三章智能汽车硬件电路设计 (77) 3.1主控板设计 (77) 3.1.1电源管理模块 (77) 3.1.2 电机驱动模块 (88) 3.1.3 接口模块 (99) 3.2智能汽车传感器 (1010) 3.2.1 线性CCD传感器 (1010) 3.2.2 陀螺仪 (1010) 3.2.3 加速度传感器 ............................ 错误!未定义书签。错误!未定义书签。 3.2.3 编码器 (1111) 3.3 键盘,数码管....................................... 错误!未定义书签。错误!未定义书签。 3.4液晶屏 (1212) 3.5 小结 (1212) 第四章智能汽车控制软件设计 (1313) 4.1线性CCD传感器路径精确识别技术 (1313) 4.1.1新型传感器路径识别状态分析 (1414)

飞思卡尔智能车电磁组程序员成长之路(未完待续)

飞思卡尔智能车电磁组程序员成长之路 1.飞思卡尔智能车小车入门 智能汽车电磁组简介: 第五届全国大学“飞思卡尔杯”智能汽车竞赛新增加了“电磁组”。根据比赛技术 要求,电磁组竞赛,需要选手设计的智能车能够检测到道路中心线下电线中20KHz 交 变电流产生的磁场来导引小车沿着道路行驶。在平时调试和比赛过程中需要能够满足比 赛技术要求的 20KHz 的交流电源驱动赛道中心线下的线圈。同时参赛选手需要自行设 计合适的电磁传感器来检测赛道信息完成智能寻迹功能。 智能车制作是一个涵盖电子、电气、机械、控制等多个领域和学科的科技创新活动。简单点来说可以将其分为硬件电路(包括电源、MUC 控制部分、电机驱动、传感器)、机械、算法三方面的设计。电磁组在机械方面可以参照光电组的设计方案,这里不再赘述。本设计指导只讲述20KHZ 电源、电磁传感器设计方案以及部分算法。 智能车对单片机模块需求: 飞思卡尔单片机资源:

智能车涉及到IO模块,中断模块,PWM模块,DMA模块,AD模块等。在车模调试中还有必须的模块。如SCI模块、定时器模块,SPI模块等。其中还涉及到一些算法和数据的存储和搬移。一个好程序框架对智能车的制作过程中会达到事半功倍的效果。但是就智能车这样系统来说,如果完全专门移植一个操作系统或者写一个程序的bootload,感觉有一些本末倒置,如果有成熟的,可以借用的,那样会比较好。 2.电磁传感器的使用 20KHz电源参考设计方案: 电源技术指标要求: 根据官网关于电磁组赛道说明,20KHz 电源技术要求如下: 1.驱动赛道中心线下铺设的 0.1-0.3mm 直径的漆包线; 2.频率围:20K±2K; 3.电流围:50-150mA; 图 2.1 是赛道起跑区示意图,在中心 线铺设有漆包线。 首先分析赛道铺设铜线的电抗,从而得 到电源输出的电压围。我们按照普通的练习 赛道总长度 50m,使用直径 0.2mm 漆包线。在30 摄氏度下,铜线的电阻率大约为 0.0185 欧姆平方毫米/米。计算可以得到中心线的电阻大约为 29.4 欧姆。 按照导线电感量计算机公式: 其中 l, d 的单位均为 cm。可以计算出直径为 0.2mm,长度 50 米的铜线电感量为131 微亨。对应 20KHz 下,感抗约为 16.5 欧姆。

飞思卡尔智能车比赛电磁组路径检测设计方案

飞思卡尔智能车比赛电磁组路径检测设计方案电磁组竞赛车模 路径检测设计参考方案 (竞赛秘书处 2010-1,版本 1.0) 一、前言 第五届全国大学生智能汽车竞赛新增加了电磁组比赛。竞赛车模需要能够通 过自动识别赛道中心线位置处由通有 100mA 交变电流的导线所产生的电磁场进行路径检测。除此之外在赛道的起跑线处还有永磁铁标志起跑线的位置。具体要求请参阅《第五届智能汽车竞赛细则》技术文档。 本文给出了一种简便的交变磁场的检测方案,目的是使得部分初次参加比赛 的队伍能够尽快有一个设计方案,开始制作和调试自己的车模。本方案通过微型车模实际运行,证明了它的可行性。微型车模运行录像参见竞赛网站上视频文件。 二、设计原理 1、导线周围的电磁场 根据麦克斯韦电磁场理论,交变电流会在周围产生交变的电磁场。智能汽车 竞赛使用路径导航的交流电流频率为 20kHz,产生的电磁波属于甚低频(VLF) 电磁波。甚低频频率范围处于工频和低频电磁破中间,为 3kHz,30kHz,波长为 100km,10km。如下图所示: 图 1:电流周围的电磁场示意图

导线周围的电场和磁场,按照一定规律分布。通过检测相应的电磁场的强度 和方向可以反过来获得距离导线的空间位置,这正是我们进行电磁导航的目的。 由于赛道导航电线和小车尺寸 l 远远小于电磁波的波长,,电磁场辐射能量很小(如果天线的长度 l 远小于电磁波长,在施加交变电压后,电磁波辐射功率正比于天线长度的四次方),所以能够感应到电磁波的能量非常小。为此,我们将导线周围变化的磁场近似缓变的磁场,按照检测静态磁场的方法获取导线周围的磁场分布,从而进行位置检测。 由毕奥-萨伐尔定律知:通有稳恒电流 I 长度为 L 的直导线周围会产生磁场,距离导线距离为 r 处 P 点的磁感应强度为: 图 2 sin直线电流的磁场 , d, ,(0 , 4 10, 7 TmA 1 ) B , ,, cos,1 2 ,。 (1) ,1 4 r 由此得: B , cos, 4 r 4 r

飞思卡尔智能车激光资料

飞思卡尔智能车激光调制电路 文章开始,自己想先说飞思卡尔智能车光电组的车子越跑越快,大有超越摄像头的架势。自己参加第五届飞思卡尔智能车大赛获得华北赛区一等奖。名次并不想说明什么问题,只是想说自己亲自做过,对此有一些看法,在这里与各位分享,希望对大家有用。 光电组要想跑的的快,大的前瞻是必要的,其中的道理也不用我说了。但是用以往的红外或是其他什么光敏电阻之类的都不能达到要求,最好的选择就是调制激光。调制激光虽然有很大的优势,但是由于其新,所以相关方面的资料并不多,一些高校更是对此讳莫如深,应为这对于他们来说就是一张非常有价值的底牌,使用调制激光前瞻和抗干扰方面有非常大的优势,所以能够使用调制激光,在起点上已经领先很大一部分了。虽然调制激光正在不断的普及,但是普及还不够,技术还是掌握在一部分人手里。不利于智能车整体水平的提高。自己做光电组的车子,也是从光敏电阻过渡到调制激光,在这里把自己所了解的一些知识和自己的一些见解与大家分享一下。首先是调制激光的电路图,电路图如下,可以看出电路并 不复杂,其中C11为胆电容,容值为1uf,JP11和jp12可以到电子市场买到,单价差不多5元一个,jp11为调制管,jp12为接收管,他们长的差不多,都是三条腿,但是需要注意的是,在购买的时候调制管和激光管一定要买相配的,应为他们之间必须频率必须匹配才可以正常工作。L11就是激光发射管,用5mw就够了。图中的OUT1为控制信号,控制激光发射管是否工作,IN1为信号输出,当有光线反射回来也就是激光点照在白色底板上面,IN1输出为低电平,当没有光线返回,也就是激光点照在黑线上,IN1输出为高电平。 调制管和接收管如下图所示,其实调制管也是3只引脚,知识因为第三只引脚无用就剪去了。

飞思卡尔万能初始化函数

/*IQR.H */ /*Designed by chen binbin */ /*2011-1-26 18:39 */ /*单片机外部接收中断用于计数或处理*/ /*实时事件 */ #include /* common defines and macros */ #include unsigned char IRQ_flag=0; unsigned int IRQ_count=0; /*中断初始化*/ void IRQ_Init(void) { IRQCR_IRQE=1; //1 下降沿触发中断,0 低电平有效 IRQCR_IRQEN=1;//使能IRQ 中断 } //中断服务子函数 #pragma CODE_SEG __NEAR_SEG NON_BANKED void interrupt 6 IRQ_ISR(void)//PE1 接收中断 { IRQ_flag=1; IRQ_count++; //IRQCR_IRQEN=0;//这两条指令共同作用清除中断标志 //IRQCR_IRQEN=1;//以响应下一次中断 } /*PIT.H / /*Designed by chen binbin */ /*2011-1-27 18:03 */ /*4 位内部定时器可产生准确的时间中断*/ /*用于处理特定时间下系统需求功能 */ #include /* common defines and macros */ #include #define PITTIME0 10000//设定为20ms 定时 #define PITTIME1 20000//设定为40ms 定时 #define PITTIME2 30000//设定为60ms 定时 #define PITTIME3 40000//设定为80ms 定时 volatile uint count0=0,count1=0,count2=0,count3=0; //定时器初始化 void PIT_Init(void)//定时中断初始化函数 { //通道0 初始化,20ms 定时中断设置 //PITCFLMT_PITE=0; //定时中断通道关,4 个通道均关闭 PITCE_PCE0=1;//定时器通道0 使能 PITMUX_PMUX0=0;//0:8 位定时器0 与16 位定时器共同作用,需设定PITMTLD0 初值//1:8 位定时器1 与16 位定时器共同作用,需设定PITMTLD1 初值

相关主题