飞思卡尔C语言_第1页
飞思卡尔C语言_第2页
飞思卡尔C语言_第3页
飞思卡尔C语言_第4页
飞思卡尔C语言_第5页
已阅读5页,还剩46页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2008-08-31 22:43求飞思卡尔智能车程序 悬赏分:80 - 解决时间:2008-3-5 12:53求飞思卡尔智能车的数据采集(CCD摄像头)程序,舵机,电机控制程序。 主控芯片为MC9S12DG128的汇编程序.硬件设计尚未完成,只要求实现基本功能即可.注释越详细越好.答案满意会加分.-/* Test.c* Description: This file includes I/ O function for test, the PWM outputs function for test, function* testing sensors.* (c) Copyright 2006,Z

2、hao Cheng* All Rights Reserved* By : Zhao Cheng* Note : Don't change this file if possible.*/#include <hidef.h>#include <mc9s12dg128.h>#define HIGHSPEED 8000#define LOWSPEED 11000 /* 速度变量,0-24000 数值越大,速度越慢 */void PWMout(int, int);/* 24000-20000 */void IOtest(void)static unsigned char

3、 i=0,j=0x01,k;DDRB = DDRA = 0xFF;PORTB = 0xf0;for(;)k=(j)&0x7f;PORTA = PORTB = k;while (TCNT != 0x0000);while (TCNT = 0x0000)if(i>9)j=j<<1;i=0;i+;if(j>=0x80)j=0x01;void PWMtest(void)int counter=-4500;DDRB = 0xff;PORTB = 0xff;TSCR1 = 0x80; /* enable timer TCNT */TSCR2 = 0x00; /* TCNT

4、prescaler setup */for(;)while (TCNT != 0x0000);while (TCNT = 0x0000);counter=counter+30;if(counter >= 3000)counter = 0;PWMout(4500, LOWSPEED);if(counter = 1500)PWMout(-4500, LOWSPEED);PORTB = (char)(counter/100);void SignalTest(void)unsigned char signal;int Direction, Velocity;Direction = 0;Veloc

5、ity = LOWSPEED;DDRA = 0x00;DDRB = 0xff;signal = PORTA;PORTB = signal;switch(signal)case 0x08: /* 0001 1000 */case 0x10:Direction = 800;Velocity = HIGHSPEED;break;case 0x04: /* 0010 0100 */case 0x20:Direction = 1500;Velocity = HIGHSPEED;break;case 0x02: /* 0100 0010 */case 0x40:Direction = 2800;Veloc

6、ity = HIGHSPEED;break;case 0x01: /* 1000 0001 */case 0x80:Direction = 4000;Velocity = LOWSPEED;break;case 0x3c: /* 0011 1100 over start line */case 0xff: /* 1111 1111 over crossing line */case 0x00: /* 0000 0000 go straight not need changed state */default:break;if(signal > 0x0f)Direction = -Dire

7、ction;PWMout(Direction, LOWSPEED);/* LCD1620.c* ICC-AVR application builder : 2006-1-8 21:43:48* Target : M8* Crystal: 4.0000Mhz* Note : Don't change this file if possible.*/#define CMD_CLEAR 0x01#define CMD_RESET 0x02#include <iom8v.h>#include <macros.h>#define LCD_DATA 0xff#define

8、LCD_EN 0x01 /PORTC 0#define LCD_RS 0x02 /PORTC 1#define LCD_RW 0x04 /PORTC 2#define LCD_DATAPORT PORTB#define LCD_ENPORT PORTA#define LCD_RSPORT PORTA#define LCD_RWPORT PORTAvoid lcd_init(void);void lcd_write_cmd(unsigned cmd,unsigned data);void lcd_setxy(unsigned char x,unsigned char y);void lcd_wr

9、ite_string(unsigned char X,unsigned char Y,unsigned char *str);void delay_nus(unsigned int n);void delay_nms(unsigned int n);void lcd_init(void)DDRB |= LCD_DATA;DDRA |= LCD_EN | LCD_RS | LCD_RW;LCD_RWPORT&=LCD_RW;LCD_DATAPORT=0x30; /控制字规则:5:8bit,4:16x2,3:5x7LCD_ENPORT|=LCD_EN;delay_nus(1);LCD_EN

10、PORT&=LCD_EN;delay_nus(40);lcd_write_cmd(0,0x38); /8bit testlcd_write_cmd(0,0x0c); /显示开lcd_write_cmd(0,0x01); /显示清屏lcd_write_cmd(0,0x06); /显示光标移动设置void lcd_write_cmd(unsigned cmd,unsigned data)if(cmd=0)LCD_RSPORT&=LCD_RS;elseLCD_RSPORT|=LCD_RS;LCD_DATAPORT&=0x00;LCD_DATAPORT=data;LCD_ENP

11、ORT|=LCD_EN;delay_nus(10);LCD_ENPORT&=LCD_EN;delay_nus(10);void lcd_setxy(unsigned char x,unsigned char y)unsigned char addr;if(y=0)addr=x+0x80;elseaddr=x+0xc0;lcd_write_cmd(0,addr);void lcd_write_string(unsigned char X,unsigned char Y,unsigned char *str)lcd_setxy(X,Y);while(*str)lcd_write_cmd(1

12、,*str);str+;void delay_1us(void) /1us延时函数asm("nop");void delay_nus(unsigned int n) /N us延时函数unsigned int i=0;for (i=0;i<n;i+)delay_1us();void delay_1ms(void) /1ms延时函数unsigned int i;for (i=0;i<1140;i+);void delay_nms(unsigned int n) /N ms延时函数unsigned int i=0;for (i=0;i<n;i+)delay_1

13、ms();/call this routine to initialize all peripheralsvoid main(void)lcd_init();while(1)lcd_write_cmd(0,0x01); /清屏delay_nms(2);lcd_write_string(0,0,"happy new year");delay_nms(100);lcd_write_string(0,1,"LCD successful!");delay_nms(100);/* 程序结束 */关于飞思卡尔智能车模起跑线识别方法的设计与实现2007-12-02 0

14、0:33设计思想及算法实现车模与赛道的参数如图1所示。车模运行的主要形式主要是车模的规定的赛道内行进,赛道中央有一条25mm宽的黑色引导线。 常用的车模巡线方案有光电传感器阵列和CCD探测法等,这里介绍光电传感器阵列的设计方案。光电传感器是靠红外发射管和红外接收管组成的传感器,如图2所示。 红外发射管发射的红外线具有一定的方向性,当红外线照射到白色表面上时会有较大的反射,如果距离Dl取值合适,红外接收管可接收到反射回的红外线,再利用红外接收管的电气特性,在电路中处理红外线的接收信息;如果反射表面为黑色,红外光会被表面将其大部分吸收,红外接收管就难以收到红外线。这样,就可以利用红外收发管组成的光

15、电传感器检测赛道黑线,实现智能车的巡线方案。光电传感器阵列布局参数的确定如图3所示,光电传感器阵列参数主要有管距D(管内侧距离),管直径d,影响光电传感器阵列参数的主要因素有:起跑标志线和十字交叉线;比赛规则对车模尺寸的限制;跑道黑色引导线的宽度;舵机转弯精度。根据以上影响因素,建立模型如图3和图4所示。 起跑标志线和十字交叉线的识别方案要和光电传感器阵列参数联系起来考虑,所以首先根据起跑标志线的基本识别方法来确定光电传感器阵列参数。单片机在处理起跑标志线和十字交叉线的区别时,较方便的方法就是当光电传感器阵列经过十字交叉线时7个传感器全检测到黑线,而经过起跑标志线时会有个别传感器检测到白色赛道

16、表面。根据这个道理,建立模型如图3和图4所示,分两种情况讨论:1) 光电传感器阵列有2个传感器检测到白色跑道而其它传感器检测到黑线时,如图3所示;2) 光电传感器阵列有1个传感器检测到白色跑道而其它传感器检测到黑线时,如图4所示。根据以上两种情形,在光电传感器阵列采用等距分布的情况下,可有如(1)式所示的数学描述。   (1)   (2)   (3)根据(3)式,做如图5所示的数轴标注方法来表示不等式的取值范围。图5中计算所得的D值范围为(25, 30-1.5d)。但是也要考虑特殊情况。由于车身在经过起跑标志线时并不是每次都能保持和跑

17、道引导线平行,所以要考虑当车身偏斜进入起跑线时的情况会不会使(1)式有所变化。如图5所示。考虑偏斜的角度如图6所示,车身偏斜时在起跑线白色间隙的长度f=19mm,这样(1)式的数学描述中发生变化的仅仅是图4所示中的跑道间隙值17.5mm,该值被f代替。带入新值后用数轴标注法标注D值的区间如图7所示。比较图6发现, A点向B点靠近形成A点,并没有超过B点;C点和D点分别移动到C点和D点位置,所以D的取值范围有扩大的趋势,这样,图5标注的D值范围符合要求。如果偏斜角度继续增大,前排光电传感器阵列不能同时进入起始标志线,这样在单片机编程算法中很容易处理这种情况。综合以上讨论,可知:光电传感器的管距(

18、管内侧距离)D取值范围为(25, 30-1.5d);根据误差理论,单纯从传感器的外径尺寸上考虑,其值d越小越好;本设计中取光电管直径d值为3mm,D值范围(25mm,25.5mm)。 实测效果根据以上分析的光电传感器的管距D取值范围制作车模的寻线传感器阵列,对车模进行了大于50次的测试,实测结果表明:车模均能正确识别到起跑线。但是,设计还存在一些问题,主要有:*对D的取值要求苛刻;*要求红外传感器的正常工作率为90%以上。 结语本文分析了智能车模比赛中的相关技术参数,建立了光电传感器阵列的数学模型,确定了阵列参数。这为车模系统的路况记忆算法提供了基本参考点。本文还分析了起跑线识别方法的实测效果

19、,实测结果表明:车模均能正确识别到起跑线。(因版面有限,本文已作部分删节) 第二届“飞思卡尔”杯全国大学生智能车大赛侧记2007年08月27日 星期一 14:22   转眼间,智能车大赛已经进入了第二个年头。今年的全国总决赛在上海交通大学举行,华工的九头鸟队再次杀入决赛,自然我作为曾经的队员和交大的地头蛇,接待工作自然是义不容辞。   可能有些朋友对这个比赛还不太了解,那我首先来做一个简单的说明。1.为啥叫“飞思卡尔”?飞思卡尔 (Freescale) 是全球著名的半导体芯片生产商,对于芯片行业不太了解的同学可能对这个名字很陌生,但提起摩托罗拉,估计是尽

20、人皆知了。不错,飞思卡尔就是摩托罗拉公司原来的芯片部,如今独立出来,唤作飞思卡尔。那么使用飞思卡尔芯片,由飞思卡尔公司赞助的比赛,理所当然就是飞思卡尔杯咯。2.啥是智能车?智能车的定义很广泛,我在这里掉书袋就恶心了。本次比赛的智能车,实际上是一种小车模型。但这不是“奥迪”的四驱车模型,也绝不是什么遥控车,而是能识别路径的自主行驶的智能小车。这种智能小车,可以识别白色赛道上的黑色标志线,然后跟随黑线行进。而比赛规则就是竞速咯,既不能跑出赛道,又要速度最快,这里就要牵涉到硬件的设计啦,机械结构的改装啦,控制程序的算法啦,传感器的选择啦等等一大串头疼的事情。3.比赛的规则是咋样的?先从队伍选拔开始吧

21、,由于今年参赛队伍达到300+支,因此在上半年,将全国划分为 华东,华南,华北,西南四个赛区进行预选赛;每个赛区的前X名进入全国总决赛。那么比赛时候有些啥说道呢?首先有一个事先不公布的赛道,但赛道的一些参数会告诉大家,比如多长,弯道弧度,有无坡道,有无连续S道,有无大回环等等。然后比赛的时候呢,每辆小车从起始线发车,如果中途冲出赛道,则必须重新开始比赛;若冲出赛道达2次则算失败未完成比赛,木有成绩。所有小车在赛道上跑两圈,记时间最短的一圈为自己的成绩。到此,大家都心里有个数了。今年全国总决赛在上海交大的新体育馆进行,TASA我也是第一次进去啊。外面看着是一幢白色鸟巢状拉风型建筑物,内里也相当华

22、丽。赛场中央是比赛赛道,赛道正前是所有参赛的76支队伍的小车分两列排开,很是壮观!今年的比赛以摄像头作为检测装置的方案居多,因此远看过去就是一溜长颈鹿!说道这里,可能有的观众又要问了,啥摄像头啊?那我再把这些智能小车的大致原理给大家介绍下。小车要跟随黑线,就要有东西做眼睛咯。人走路靠眼珠子看,小车靠啥呢?靠传感器!参赛的小车所使用的传感器无非两类:红外传感器,和CCD或者CMOS传感器。所谓红外传感器,就是一个检测红外线的装置啦。大家都知道,一般的光里包含了各种波长的光波,有红橙黄绿青蓝紫啦,这是看得见的;还有光波频率高或者低到人眼无法识别的光波,就是红外线和紫外线啦。而红外传感器就是检测这部

23、分光波的!光照在不同物体上会发生反射,人眼就是通过接收反射光来看见东西的。但唯有黑色是不反射光线,只吸收光线的。那么当红外传感器移到黑色线条上方时,就几乎接收不到光线了,都被黑色吸收了嘛;但到了白色跑道上,因为白色是反光的颜色,所以红外线基本都被反射回来,自然传感器就有信号了饿就这样使用一排红外传感器,就可以知道黑线的位置啦那么CCD/CMOS是啥呢?说白了就是摄像头,一般来说CMOS比CCD要差些,因此手机摄像头大多用CMOS摄像头,而数码相机一般采用CCD摄像头。采用摄像头方案的小车呢,采集到的是前方的图像,因此需要用图像处理的算法,从这图中分析出哪里是黑线,走势如何等等,就这样黑线就被看

24、到了。通常来说,摄像头看到的是最直观的图像,信息量远远大于红外传感器,因此理论上来说摄像头作为小车的眼睛是更好一些。这也是今年满城尽带摄像头的原因啦。今年比赛和去年相比没啥悬念,去年清华大学和上海交大上演的生死时速到了今年成了上海交大小车的独领风骚。预赛阶段上交的两只队伍就牢牢占据前两名,而这种优势一直保持到决赛,比赛呈现一边倒的趋势。而清华大学不但卫冕失败,连三甲都未能染指,实在是有江郎才尽的味道,可惜可惜。除了交大一枝独秀以外,其他许多不知名的学校都取得了不俗的成绩,第三名为天津工业大学夺得,而北京科技大学和武汉科技大学也是实力相当强劲的10强队伍。而华中科技大学在决赛第一轮惨遭淘汰,去年

25、的遗憾又延续到今年,可惜之余,我也只能期望明年会有转机吧。PP今晚上传飞思卡尔单片机C语言编程框架2007-11-30 14:451978年美国贝尔实验室正式发表C语言,后来美国在此基础上制定了一个C语言标准于1983年发表即 ANSI C。学习一种编程语言,需用一个好的编程环境,Freescale为广大的用户提供了免费的Codewarrior集成开发系统。为用户快速步入单片机的C语言编程提供一个很好的平台。Codewarrior一般按照工程进行文件的管理。一个工程包含的文件无非就是,C文件, H文件, Lib文件和内存分配文件。项目的框架如下所示:/*-*工 程 名:Prgframe.mcp

26、                          *硬件连接:PTA.1接指示灯                      &#

27、160;          *程序描述:指示灯PTA.1闪烁                               *目     的:第一个freescale(Mo

28、torola) HC08系列MCU程序框架*说     明:提供Motorola MCU的编程框架,供教学入门使用    *注     意:如果延时不够长的话,会发觉灯不会闪烁,而是一 *          直亮,这是由于人的视觉的引起的。              *

29、/*头文件*/i nclude "GP32C.h"                 /映像寄存器地址头文件/*指示灯所接引脚定义*/#define   Light_P      PTA          /灯(Light)接在PTA口#define 

30、  Light_D      DDRA         /相应的方向寄存器#define   Light_Pin    1            /灯所在的引脚/*全局变量声明*/unsigned char I1;/*延时子函数声明*/void Delay1000(void);/*主函数*/void

31、 main()           /I/O初始化      Light_D|=1<<Light_Pin;        /令指示灯引脚为输出      Light_P|=1<<Light_Pin;        /初始时,指示灯"暗&

32、quot;      /程序总循环入口      while(1)                            /指示灯(Light)“亮”       

33、60; Light_P&=(1<<Light_Pin);          /延时         for(I1=0;I1<=250;I1+)            Delay1000();          /指示灯(Li

34、ght)"暗”                      Light_P|=1<<Light_Pin;        /延时        for(I1=0;I1<=250;I1+)   &#

35、160;        Delay1000();         /*内部子程序存放处/*Delay1000:延时1000个时钟周期-*    *功   能:延时函数(约1000个时钟周期)                  &#

36、160;   *参   数:无                                            &

37、#160; *返   回:无                                              *-*/&

38、#160;                           void Delay1000(void)      unsigned char u;      for(u=0;u<=110;u+);   智能车运动状态实时监

39、测系统的设计及实现2008-10-15 12:36系统功能及应用本 系统主要完成将智能车行驶过程中的各种状态信息(如传感器亮灭,车速,舵机转角,电池电量等)实时地以无线串行通信方式发送至上位机处理,并绘制各部分状 态值关于时间的曲线。有了这些曲线就不难看出智能车在赛道各个位置的状态,各种控制参数的优劣便一目了然了。尤为重要的是对于电机控制PID参数的选取, 通过速度时间曲线可以很容易发现各套PID参数之间的差异。对于采用CCD传感器的队伍来说,该系统便成为了调试者的眼睛,可以见智能车之所见,相信对 编写循线算法有很大帮助。而且还可以对这些数据作进一步处理,例如求取一阶导数,以得到更多的信息。系

40、统的硬、软件设计设计方案主要分成三部分:车载数据采集系统,无线数传系统,上位机数据处理系统。系统基本构建如图1所示。图1智能实时监测系统结构框图与流程图车载数据采集系统车 载数据采集系统主要由单片机负责采集赛车行驶过程中的速度、传感器状态、电池电压、舵机转角等信息。为了使监测系统不占用S12单片机的内部资源并且支持 热插拔,我们将除供电之外的监测系统与智能车控制系统相分离。我们选择ATMEL公司的ATMEGA16单片机作为该数据采集系统的处理器。二值型光电传 感器信号的采集直接使用该单片机的I/O口进行采集,连续型光电传感器、电池电压及CCD摄像头信号则采用该单片机的A/D口进行采集,速度信息

41、则通过光 电编码器和该单片机的计数器来采集。采集到的数据每20ms向上位机发送一次。无线数传系统下 位机向上位机传输的是以每20ms传输一组包含了光电编码器值(speed),电池电压(battery),舵机转角值(angle),传感器当前状态 (sensor)的数据,如果是在理想状态下,上位机接收到的应是上述各值循环出现的周期性数据,此时上位机只需将这些数据按顺序装入各自的数组并画图即 可。但在实际的无线传输过程中可能出现数据丢失现象。因此加入适当的数据校验是必要的,否则会出现数据装入错误,造成画图的混乱。我们在实际过程中是在每 组数据中加入0x00,0xff的帧头,当数据出现错误时,则舍弃该

42、帧数据。数据的无线收发部分采用的是SUNRAY公司的QC96型无线收发模块,该模块可以收发波特率为9600bps的串行数据,距离可达100m。上位机的数据接收及处理上位机部份主要由四个模块构成:·数据接收模块功能:上位机通过串口采集下位机发送的原始数据。实 现:VC+中实现串口通信一般有二种方式,分别是MSComm控件和Windows API函数。MSComm简洁易用,适用于比较简单的系统,Windows API函数应用较广但比较复杂繁琐,由于此模块的串口通信功能相对简单,本系统采用前者。在实际过程中使用的是事件驱动的方式,这种方法响应及时,可靠性 高,并且比查询法占用更少的资源。

43、·存储模块功能:可直接存储采集到的原始数据,以备以后更多的分析处理。实现:在每个OnComm事件被触发后,将串口接收到的数据直接存入temp临时文件,并且可以在用户的要求下将temp临时文件里的值存储到指定文件。·数据的分析和处理模块功能:将采集到的原始数据进行用户选定的分析和处理,主要包括丢弃错误数据,以及去除帧头并进行数据装入任务,同时也可以对已保存的数据进行分析和处理。实现:将temp临时文件或用户指定文件的数据读出并装入,以下为主要程序代码:void CChuankokjDlg:find_data(car_data c_data, BYTE c_source, in

44、t c_length)int i=0;while(i<c_length-6)/防止下标越界 if(c_sourcei=0x00)&&(c_sourcei+1=0 xff)&&(c_sourcei+6=0x0 0)&&(c_sourcei+7=0xff)/判断帧头并进行数据装入c_datalength.speed_data=c_sourcei+2;c_datalength.battary_data=c_sourcei+3;c_datalength.direction_data=c_sourcei+4;c_datalength.sensor_d

45、ata=c_sourcei+5;i=i+1;elsei+;·图形显示模块功能:以图形界面来显示处理后的数据,以便更直观地观察智能车的运行状态。实现:将上一模块中装入各数组的数据在用户的选择的模式下进行画图,可以只看一幅图,也可以将四幅图放在一起进行对比观看。实际的运行界面及效果如图2。图2 图形显示介面运行模块结语该系统通过添加无线收发模块,将智能车的实时状态信息传到上位机上,通过VC+编程,用图象直观形象地将其表现出来,很好地达到了对智能车状态实时监测的目的,极大地方便了我们调节PID等智能车参数,对赛道记忆算法的研究提供了很大的帮助。7月31日【原创纯TECH】第三届飞卡智能车详

46、解/*前些天发现不少XDJM搜索“智能车”结果搜到了我的页面,既然我们已经被KO出局,直接解密技术好了,能拿全国一等奖的队应该也不是太稀罕我们的技术吧源代码涉及知识产权,不能贴出*/ 东北赛区战况:预赛摄像头组:8.105秒,猎豹,东北大学。随后是吉林大学 东北虎,和东北大学 影驰。预赛光电组:11.58X秒,猎鹰,东北大学。随后是12.9秒哈尔滨工程大学 某某,和13.0秒东北大学 神龙(唉。)。预赛长度大约30m。 决赛摄像头组:16.8秒,猎豹。决赛光电组:23.9秒,猎鹰。决赛长度略大于2倍预赛。 / 车模改造:如果按车模原定架构安装,会发现有如下问题:1.舵机横放影响转向速度;2.原

47、电池位置可能会影响车辆重心位置影响转向;3.控制电路板的位置摆放很大程度上会影响车辆中心,最好贴近车底盘安置,在底盘重新打孔固定;4.测速系统,不论是码轮式还是光电编码器,原车模未提供空间,都需要在车后部重新固定,是否结实自己考量;成熟的改良做法是:1.舵机竖起,或加高横放,使得舵机到前轮连杆的连片加长,提高单位角度的转向角度;2.电路板贴底板安装,已经证实有很好的效果;3.传感器支架,包括摄像头的立杆,和光电排管的支撑,都必须与车体紧密连接,这关系到整个系统的稳定性,需要精细制作;4.电池位置以居中或稍前为佳,使得整车重心前移,转向灵活。 / 传感器安置:摄像头组基本大同小异,一个支杆上面固

48、定摄像头,以最佳角度高度获得最合适的视野范围。基本视野范围在40cm到1m左右,猜的。没做摄像头组。 /我们的布局:发射接收相对,上下两排。光电组排布各异,大多数组使用单排/双排直行光电管探测。有的队使用W型或U型排布,wellsleep认为与其浪费几个传感器探测近处,不如全部探远,提早知道赛道情况总是好些。具体探远的方法,一是通过选择优秀的发光源,例如激光,或者功率较大的红外管;二是使用多个较小功率发射管打到同一点提高反射强度。比赛允许使用16个传感器,除去测速传感器基本还剩14-15个,经实验用于探测起始线停车至少需要4组传感器,也就是说前探路线的灯管数量大约在10-11个。我们使用的是上

49、排10组,前探距离30cm左右,检测路径;下排4组,前探距离5cm左右,检测起始线。有一点要说明,前探距离越大,自然能提前转向,有利于提高车速,但探测的准确度和光电管的敏感度都有很大的变化。由于红外线肉眼无法看到,即使使用CCD或CMOS观察到红外光斑,但接收管接收光线的角度仍然未知,只能通过大量反复试验获得大概位置,非常难缠。而敏感度更是我们决赛失误的决定性因素,因为比赛长达两天,而期间无法调试车辆,温度的变化,甚至电子器件自己的微小变化都会影响接收的精度。这也许可以从软件上得到一些解决的办法(例如计算最高最低电压求平均来动态定黑白阈值),但灯管的生产批次,电阻的生产批次不同使得同一性极难得

50、到统一,软件是无法解决这类偏差的。对于激光光源,有着优秀的亮度和无与伦比的方向性,但缺点同样出在它的方向性上,由于方向性过强,导致反射角度要求苛刻,要求安装角度及牢固度比通常红外管严格的多。另外激光由受激振荡产生,地线不可接在一起,需要使用三八译码器或反相器解决。总之,光电组的胜则就是,远and稳。 / 舵机改造:现在似乎没有队不改造舵机了吧?加长连片,使舵机小角度就能带动前轮大角度摆动从而加快转向。不过改造不宜过分,左右最大角PWM值在400/3200(PWMDTY/PWMPER)或左右或稍小为宜,如果到达300/3200那就太夸张了,很容易转向无力,导致急转失败。/此图可见舵机黄色转动轴下

51、的延长连片连接拉杆 / 闭环控速系统:速度较快的车辆必须使用闭环速度控制,即MCU给出预期速度->驱动芯片产生要求电流驱动电机->电机旋转带动车轮->测速系统返回目前速度值->MCU计算速度偏差->驱动芯片更改电流值,依此循环。 /此测速系统由与左侧车轮同轴的大齿轮(码盘)返回信号,经频率-电压转换传回MCU的AD接口,计算当前速度。原理:码盘上方有一U型架设的红外传感器,当红外接收器穿过齿轮的齿接收到对射过来的红外光时,接收器产生低电平,反之产生高电平(电平大约就是电压的意思)。于是车轮转动产生一系列高低电平,又频率不同即可知道车轮的转速,随后推知当前车速。MC

52、U采到测速返回的电压值后进行AD转换,得到当前速度,通过PID的公式计算,得出下一步应该给出的电流值(实际上是调整PWM的频率),再次循环控速,以获得直道的快速加速和进弯的减速。此处的PID为自动控制中的重要算法,参数需慢慢调试,下图为理想效果图,即变速时间短,速度控制稳定。/Vo为期望的速度 大多数赛车采用MC33886芯片提供电机驱动,少则1片,多则4片。多片并行的好处在于瞬间提供更大的电流以快速启动,和特殊设计提供反向电流以快速刹车。此次比赛看来,反向33886减速的接法在高速比赛中是必须的,PID控速几乎不可达到类似的效果,这在需要极短反应时间的比赛中是致命的。 / 算法设计:其实最好

53、的算法就是没有算法至少没有发现除记忆之外的其他光电优秀而有用的算法。我们的感觉,第一,算法一定要反应快,if 语句多了很影响速度;第二,MCU的初始化很重要,各中断的分频系数设置正确才行;第三,DG128的堆栈真的很小,注意用static定义常量数组;第四,相信DG128和33886是牢固的,很多问题还是出现在程序上;第五,再NB的人也老老实实用C,汇编没人能懂值得注意的是,由于第三届比赛要求识别起始线,对于光电组来说,如何发现两条黑色10cm起始线中夹的两段3.75cm宽度白缝就很要点技术了。我们的做法是特意设计灯管在车辆行驶中正好夹在白缝当中,当然这要求车辆在转向后能迅速摆正位置,而不左右

54、摇晃。也有许多车队采用偷懒的办法,例如将交叉线和起始线一起计算,然后用过数经过的次数来得以识别(有一学校运用此法,屡试不爽,其设定10次识别,在起跑之前人工计算经过的次数,如果多了,则起跑前在跑道上蹭够次数再跑。);或识别起始线后利用定时中断屏蔽经过交叉线的时间,达到在起始线停车的观看效果。而识别起始线对于摄像头组就简单多了,毕竟一行30+的采样点怎么着也能采到中间的窄缝,利用异或的方法计算一行中黑白跳变的次数就可以识别出起始线。我们的车,花了90%的时间在硬件修理和机械性能改造上,软件实在缺乏亮点,so over。 / 最后的话:要想快,软件占30%,电气性能占30%,剩下的就是机械架构。跑

55、的越快,越发现机械的重要性。要想达到极速,稳定的机械特性不可或缺。各个角度和零件连接,都有可能对整车产生影响。郁闷,设计硬件花了了大半个准备期的车,在决赛还是倒在了硬件架构上。5个月,最最累的5个月(别跟我提高考,跟这比高考算个P),终于结束了。希望明年的飞思卡尔智能车,速度能突破4m/s。那观赏性就更强了。想学一句上届上交解说员MM对猎豹比赛时说的话:猎豹加油!突破16秒!0:45 | 查看引用通告 (0) | 写入日志ccd图像采集解决方案2009-02-12 15:18      在采集图像之前,我们首先要知道摄像头输

56、出信号的特性。目前的模拟摄像头一般都是PAL制式的,输出的信号由复合同步信号,复合消隐信号和视频信号。其中的视频信号才是真正的图像信号,对于黑白摄像头,图像越黑,电压越低,图像越白,电压越高。而复合同步信号是控制电视机的电子枪对电子的偏转的,复合消隐信号是在图像换行和换场时电子枪回扫时不发射电子。由于人眼看到的图像大于等于24Hz时人才不会觉得图像闪烁,所以PAL制式输出的图像是25Hz,即每秒钟有25幅画面,说的专业点就是每秒25帧,其中每一帧有625行。但由于在早期电子技术还不发达时,电源不稳定,容易对电视信号进行干扰,而交流电源是50Hz所以,为了和电网兼容,同时由于25Hz时图像不稳定

57、,所以后来工程师们把一副图像分成两场显示,对于一幅画面,一共有625行,但是电子枪先扫描奇数场1,3,5.,然后再扫描2,4,6.,所以这样的话,一副图像就变成了隔行扫描,每秒钟就有50场了。其中具体的细节请参考这个网站电视原理与系统只用看前面的黑白全电视信号和PAL制式就可以了(当然如果感兴趣可以全部看完)。     通过上面的内容如果你对PAL制式信号了然于心,那么就可以开始图像的采集了,PAL输出的信号有复合同步信号,复合消隐信号和视频信号。那么我们首先就是要从这三种信号中分理出复合同步信号,复合消隐信号和视频信号,以便我们对AD采样到的值进行存储

58、,从而形成一幅画面。具体如何分离,我们使用的是LM1881视频同步分离器件,具体的硬件连接请参看论坛内相关文章(论坛里有介绍LM1881的文章,自己搜吧,我不重复了)。   分离出行场同步,奇偶场信号后,就把他们接到单片机的外部中断口,产生中断,在中断服务程序中对AD采集到的数据进行图像存储,从而形成一个二维数组的数字图像。   下面就说说图像采集方案,方法有多种,但我使用的方案是在行终端中读取AD采样的灰度值,在场同步中交换图像采集和处理缓存指针,并对图像进行处理,然后控制小车,在主函数中只有初始化和键盘扫描和串口输出函数。这样做效率比较高,而且可以把

59、调试和图像采集处理分开,变成起来比较方便。   大家遇到的还有一个很棘手的问题可能是AD采样频率该设置多大呢?建议大家先通过PLLL超频,然后把AD时钟频率设置的高点才行。下面就把我的代码贴给大家看看吧。/*/*    *锁相环初始化*    */*void vPLLInit(void)                   &#

60、160;              /BUS-CLOCK=PLL-CLOCK/2=32M   REFDV = 1; / set the REFDV register 16M*2*(3+1)/(1+1)=64M    SYNR =3;    / set the SYNR register to give us a 64 MHz PLL-clock.    asm nop

61、    / nops required for PLL stability.    asm nop     asm nop    asm nop   while (CRGFLG&0x08)=0); / wait here till the PLL is locked.    CLKSEL|=0x80;           

62、;  / switch the bus clock to the PLL.设置总线时钟为32M/*/*    *定时器初始化*    */*void vECTInit(void)TIOS =0x00;    /设为输入捕捉TSCR1=0x80;    /定时器使能TSCR2=0x83;    /允许定时器溢出中断,定时器时钟32M/(23)=4MTCTL4=0xAA;    /触发电平:下降沿TIE =0x

63、07;    /开中断TFLG1=0xFF;    /清除中断标志输入捕捉的1,2通道接行场中断。/*/*    *AD转换初始化程序*    */*void vADInit(void)/*ATD1设置*/<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器2>>

64、;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/上电,标志位快速清零,忽略外部触发,执行一次停止,中断禁止。ATD1CTL2 = (ATD1CTL2_AFFC_MASK | ATD1CTL2_ADPU_MASK);      /<<<<<<<<<<<<<<<<<

65、;<<<<<<<<<<<<<<控制寄存器3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/转换序列长度为1,FIFO模式,Freeze模式下继续转换。|ATD0CTL3_FIFO_MASKATD1CTL3 = (ATD1CTL3_S1C_MASK);     /<&l

66、t;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器4>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/8位精度,2AD采样周期,采样长度8。/ATDClock=BusClock*0.5/PRS+1 ; P

67、RS="15", divider="32"ATD1CTL4 =(ATD1CTL4_SRES8_MASK|ATD1CTL4_PRS0_MASK);    /<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器5>>>>>>>>>>>>>>&g

68、t;>>>>>>>>>>>>>>>>/右对齐无符号,扫描模式连续采样,单通道采样/多通道采样|ATD0CTL5_MULT_MASK。ATD1CTL5 = (ATD1CTL5_DJM_MASK|ATD1CTL5_SCAN_MASK);/<<<<<<<<<<<<<<<<<<<<<<<<<<禁止数字输入缓冲>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ATD1DIEN=0x00;ATD1的0通道用于AD转换下面是真正的图像采集程序/<<<<<&l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论