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

下载本文档

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

文档简介

2008-08-3122:43求飞思卡尔智能车程序悬赏分:80-解决时间:2008-3-512:53求飞思卡尔智能车的数据采集(CCD摄像头)程序,舵机,电机控制程序。主控芯片为MC9S12DG128的汇编程序,硬件设计尚未完成,只要求实现基本功能即可.注释越详细越好.答案满意会加分.Test,cDescription:Thisfileincludes1/0functionfortest,thePWMoutputsfunctionfortest,functiontestingsensors.(c)Copyright2006,ZhaoChengAllRightsReserved*By:ZhaoChengNote:Don,tchangethisfileifpossible.ttinclude<hidef.h>Sinclude<mc9sl2dgl28.h>ttdefineHIGHSPEED8000ttdefineLOWSPEED11000/*速度变量,0-24000数值越大,速度越慢*/voidPWMout(int,int);/*24000-20000*/staticunsignedchari=0,j=0x01,k;DDRB=DDRA=OxFF;PORTB=OxfO:for(;;){k=Cj)&Ox7f;PORTA=PORTB=k;while(TCNT!=0x0000);while(TCNT==0x0000)(if(i>9)(j=j«l;i=0;)i++;)if(j>=0x80)j=0x01;intcounter=-4500;DDRB=Oxff;PORTB=Oxff;TSCR1=0x80:/*enabletimerTCNT*/TSCR2=0x00;/*TCNTprescalersetup*/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);unsignedcharsignal;intDirection,Velocity;Direction=0;Velocity=LOWSPEED;DDRA=0x00;DDRB二Oxff;signal=PORTA;PORTB="signal;switch(signal)|case0x08:/*00011000*/case0x10:Direction=800;Velocity=HIGHSPEED;break;case0x04:/*00100100*/case0x20:Direction=1500;Velocity=HIGHSPEED;break;case0x02:/*01000010*/case0x40:Direction=2800;Velocity=HIGHSPEED;break;case0x01:/*10000001*/case0x80:Direction=4000;Velocity=LOWSPEED;break;case0x3c:/*00111100overstartline*/caseOxff:/*11111111overcrossingline*/case0x00:/*00000000gostraightnotneedchangedstate*/default:break;)if(signal>OxOf)Direction=-Direction;PWMout(Direction,LOWSPEED);)/*LCD1620.cICC-AVRapplicationbuilder:2006-1-821:43:48Target:M8Crystal:4.OOOOMhz**Note:Don,tchangethisfileifpossible.#defineCMD_CLEAR0x01ttdefineCMD_RESET0x02#include<iom8v.h>ttinclude<macros.h>#defineLCD_DATAOxff#defineLCD_EN0x01//PORTC0^defineLCD_RS0x02//PORTC1#defineLCD_RW0x04//PORTC2SdefineLCD_DATAPORTPORTB#defineLCD_ENPORTPORTASdefineLCD_RSPORTPORTASdefineLCD_RWPORTPORTAvoidIcdinit(void);voidIcdwritecmd(unsignedcmd,unsigneddata);voidlcd_setxy(unsignedcharx,unsignedchary);voidIcdwritestring(unsignedcharX,unsignedcharY,unsignedchar*str);voiddelay_nus(unsignedintn);voiddelay_nms(unsignedintn);voidlcd_init(void)I:DDRB|=LCD_DATA;DDRA|=LCD_EN|LCD_RS|LCD_RW;LCD_RWPORT&="LCD_RW;LCD_DATAP0RT=0x30;〃控制字规则:5:8bit,4:16x2,3:5x7LCD_ENPORT|=LCD_EN;delay_nus(1);LCD_ENPORT&二〜LCD_EN;delay_nus(40);lcd_write_cmd(0,0x38);//8bittestlcd_write_cmd(0,0x0c);〃显示开1cd_write_cmd(0,0x01);〃显示清屏lcd_write_cmd(0,0x06);〃显示光标移动设置)voidlcd_write_cmd(unsignedcmd,unsigneddata)I:if(cmd==0)LCD_RSPORT&="LCD_RS;elseLCD_RSPORT|=LCD_RS;LCD_DATAPORT&=OxOO;LCD_DATAPORT=data;LCD_ENPORT|=LCD_EN;delay_nus(10);LCD_ENPORT&=~LCD_EN;delay_nus(10);)voidlcd_setxy(unsignedcharx,unsignedchary)Iunsignedcharaddr;if(y==0)addr=x+0x80;elseaddr=x+0xc0;1cd_write_cmd(0,addr);}voidlcd_write_string(unsignedcharX,unsignedcharY,unsignedchar*str)I:lcd_setxy(X,Y);while(*str)lcd_write_cmd(1,*str);str++;))voiddelay_lus(void)〃lus延时函数I:asm("nop");)voiddelay_nus(unsignedintn)//Nus延时函数Iunsignedinti=0;for(i=0;i<n;i++)delay_lus();)voiddelay_lms(void)〃lms延时函数Iunsignedinti;for(i=0;i<1140;i++);)voiddelay_nms(unsignedintn)//Nms延时函数I:unsignedinti=0;for(i=0;i<n;i++)delay_lms();//callthisroutinetoinitializeallperipheralsvoidmain(void)I:lcd_init();while(l)(lcd_write_cmd(O,0x01);〃清屏delay_nms(2);lcd_write_string(O,0,“happynewyear");delay_nms(100);lcd_write_string(O,1,“LCDsuccessful!,z);delay_nms(100);))I关于飞思卡尔智能车模起跑线识别方法的设计与实现2007-12-0200:33设计思想及算法实现车模与赛道的参数如图1所示。车模运行的主要形式主要是车模的规定的赛道内行进,赛道中央有一条25mm宽的黑色引导线。

EEW25mm

_l00mm 起跑标志线EEW.D—图i车模及安道的相美期17.5mmx2 100mm图i车模及安道的相美期常用的车模巡线方案有光电传感器阵列和CCD探测法等,这里介绍光电传感器阵列的设计方案。光电传感器是靠红外发射管和红外接收管组成的传感器,如图2所示。红外接收管红外发射管红外接收管红外发射管(a)白色反射面下的红外反射(b)黑色反射面下的外吸收

图2用于路况识别期I外光电传19器红外发射管发射的红外线具有一定的方向性,当红外线照射到白色表面上时会有较大的反射,如果距离D1取值合适,红外接收管可接收到反射回的红外线,再利用红外接收管的电气特性,在电路中处理红外线的接收信息;如果反射表面为黑色,红外光会被表面将其大部分吸收,红外接收管就难以收到红外线。这样,就可以利用红外收发管组成的光电传感器检测赛道黑线,实现智能车的巡线方案。光电传感器阵列布局参数的确定如图3所示,光电传感器阵列参数主要有管距D(管内侧距离),管直径d,影响光电传感器阵列参数的主要因素有:起跑标志线和十字交叉线;比赛规则对车模尺寸的限制:跑道黑色引导线的宽度;舵机转弯精度。根据以上.影响因素,建立模型如图3和图4所示。图3光电传塔哪例与起题线的相对关系(1)图4光电传用S«列与起题前相对关系(2)起跑标志线和十字交叉线的识别方窠要和光电传感器阵列参数联系起来考虑,所以首先根据起跑标志线的基本识别方法来确定光电传感器阵列参数。单片机在处理起跑标志线和十字交叉线的区别时,较方便的方法就是当光电传感器阵列经过十字交叉线时7个传感器全检测到黑线,而经过起跑标志线时会有个别传感器检测到白色赛道表面。根据这个道理,建立模型如图3和图4所示,分两种情况讨论:1)光电传感器阵列有2个传感器检测到白色跑道而其它传感器检测到黑线时,如图3所示;2)光电传感器阵列有1个传感器检测到白色跑道而其它传感器检测到黑线时,如图4所示。根据以上.两种情形,在光电传感器阵列采用等距分布的情况下,可有如(D式所示的数学描述。根据(3)式,做如图5所示的数轴标注方法来表示不等式的取值范围。图5中计算所得的D值范围为(25,30-1.5d)。但是也要考虑特殊情况。由了车身在经过起跑标志线时并不是每次都能保持和跑道引导线平行,所以要考虑当车身偏斜进入起跑线时的情况会不会使(1)式有所变化。如图5所示。TOC\o"1-5"\h\z [[ ►\o"CurrentDocument"A BC D X\o"CurrentDocument"21.25-O.5d 25 30-1.5(/ 60-2d图5数轴标注D的取值落凰考虑偏斜的角度如图6所示,车身偏斜时在起跑线白色间隙的长度f=19mm,这样(1)式的数学描述中发生变化的仅仅是图4所示中的跑道间隙值17.5mm,该值被f代替.带入新值后用数轴标注法标注D值的区间如图7所示.比较图6发现,A点向B点靠近形成A'点,并没有超过B点:C点和D点分别移动到C'点和D'点位置,所以D的取值范围有扩大的趋势,这样,图5标注的D值范围符合要求。用6车身嘀进入起跑标志峥偌况21.25-0.53 25 30-1.54 60-2"22-0.54 31.5-1.5d 63-24图7改知图后数轴标注D的取值耗用如果偏斜角度继续增大,前排光电传感器阵列不能同时进入起始标志线,这样在单片机编程算法中很容易处理这种情况。综合以上.讨论,可知:光电传感器的管距(管内侧距离)D取值范围为(25,30-1.5(1);根据误差理论,单纯从传感器的外径尺寸上考虑,其值d越小越好;本设计中取光电管直径d值为3nlln,D值范围(25mm,25.5mm).实测效果根据以上分析的光电传感器的管距D取值范围制作车模的寻线传感法阵列,对车模进行了大于50次的测试,实测结果表明:车模均能正确识别到起跑线。但是,设计还存在一些问题,主要有:*对D的取值要求苛刻;*要求红外传感器的正常工作率为90%以上。结语本文分析了智能车模比赛中的相关技术参数,建立了光电传感器阵列的数学模型,确定了阵列参数。这为车模系统的路况记忆算法提供了基本参考点。本文还分析了起跑线识别方法的实测效果,实测结果表明:车模均能正确识别到起跑线。(因版面有限,本文已作部分删节)第二届“飞思卡尔”杯全国大学生智能车大赛侧记2007年08月27日星期一14:22转眼间,智能车大赛已经进入了第二个年头。今年的全国总决赛在上海交通大学举行,华工的九头鸟队再次杀入决赛,自然我作为曾经的队员和交大的地头蛇,接待工作自然是义不容辞。可能有些朋友对这个比赛还不太了解,那我首先来做•个简单的说明。.为啥叫“飞思卡尔”?七思卡尔(Freescale)是全球著名的半导体芯片生产商,对于芯片行业不太了解的同学可能对这个名字很陌生,但提起摩托罗拉,估计是尽人皆知了。不错,飞思卡尔就是摩托罗拉公司原来的芯片部,如今独立出来,唤作飞思卡尔。那么使用飞思卡尔芯片,由飞思卡尔公司赞助的比赛,理所当然就是飞思卡尔杯咯。.啥是智能车?智能车的定义很广泛,我在这里掉书袋就恶心了。本次比赛的智能车,实际上是一种小车模型。但这不是“奥迪”的四驱车模型,也绝不是什么遥控车,而是能识别路径的自主行驶的智能小车。这种智能小车,可以识别白色赛道上的黑色标志线,然后跟随黑线行进。而比赛规则就是竞速咯,既不能跑出赛道,又要速度最快,这里就要牵涉到硬件的设计啦,机械结构的改装啦,控制程序的算法啦,传感器的选择啦等等一大串头疼的事情。.比赛的规则是咋样的?先从队伍选拔开始吧,由于今年参赛队伍达到300+支,因此在上半年,将全国划分为华东,华南,华北,西南四个赛区进行预选赛;每个赛区的前X名进入全国总决赛。那么比赛时候有些啥说道呢?首先有一个事先不公布的赛道,但赛道的一些参数会告诉大家,比如多长,弯道弧度,有无坡道,有无连续S道,有无大回环等等。然后比赛的时候呢,每辆小车从起始线发车,如果中途冲出赛道,则必须重新开始比赛;若冲出赛道达2次则算失败未完成比赛,木有成绩。所有小车在赛道上跑两圈,记时间最短的一圈为自己的成绩。到此,大家都心里有个数了。今年全国总决赛在上海交大的新体育馆进行,TASA我也是第一次进去啊。外面看着是-一幢白色鸟巢状拉风型建筑物,内里也相当华赛场中央是比赛赛道,赛道正前是所有参赛的76支队伍的小车分两列排开,很是壮观!今年的比赛以摄像头作为检测装置的方案居多,因此远看过去就是一溜长颈鹿!说道这里,可能有的观众又要问了,啥摄像头啊?那我再把这些智能小车的大致原理给大家介绍下。小车要跟随黑线,就要有东西做眼睛咯。人走路靠眼珠子看,小车靠啥呢?靠传感器!参赛的小车所使用的传感器无非两类:红外传感器,和CCD或者CMOS传感器。所谓红外传感器,就是…个检测红外线的装置啦。大家都知道,一般的光里包含了各种波长的光波,有红橙黄绿青蓝紫啦,这是看得见的;还有光波频率高或者低到人眼无法识别的光波,就是红外线和紫外线啦。而红外传感器就是检测这部分光波的!光照在不同物体上会发生反射,人眼就是通过接收反射光来看见东西的。但唯有黑色是不反射光线,只吸收光线的。那么当红外传感器移到黑色线条上方时,就几乎接收不到光线了,都被黑色吸收了嘛;但到了白色跑道上,因为白色是反光的颜色,所以红外线基本都被反射回来,自然传感器就有信号了饿〜就这样使用一排红外传感器,就可以知道黑线的位置啦那么CCD/CMOS是啥呢?说白了就是摄像头,一般来说CMOS比CCD要差些,因此手机摄像头大多用CMOS摄像头,而数码相机一般采用CCD摄像头。采用摄像头方案的小车呢,采集到的是前方的图像,因此需要用图像处理的算法,从这图中分析出哪里是黑线,走势如何等等,就这样黑线就被看到了。通常来说,摄像头看到的是最直观的图像,信息量远远大于红外传感器,因此理论上来说摄像头作为小车的眼睛是更好•些。这也是今年满城尽带摄像头的原因啦。今年比赛和去年相比没啥悬念,去年清华大学和上海交大上演的生死时速到了今年成了上海交大小车的独领风骚。预赛阶段上交的两只队伍就牢牢占据前两名,而这种优势一直保持到决赛,比赛呈现一边倒的趋势。而清华大学不但卫冕失败,连三甲都未能染指,实在是有江郎才尽的味道,可惜可惜。除了交大一枝独秀以外,其他许多不知名的学校都取得了不俗的成绩,第三名为天津工业大学夺得,而北京科技大学和武汉科技大学也是实力相当强劲的10强队伍。而华中科技大学在决赛第一轮惨遭淘汰,去年的遗憾又延续到今年,可惜之余,我也只能期望明年会有转机吧。PP今晚上传飞思卡尔单片机C语言编程框架2007-11-3014:451978年美国贝尔实验室正式发表C语言,后来美国在此基础上制定了一个C语言标准于1983年发表即ANSICo学习一种编程语言,需用一个好的编程环境,Freescale为广大的用户提供了免费的Codewarrior集成开发系统。为用户快速步入单片机的C语言编程提供一个很好的平台。

Codewarrior一般按照工程进行文件的管理。-个工程包含的文件无非就是,C文件,H文件,Lib文件和内存分配文件。项目的框架如下所示:TOC\o"1-5"\h\z/* *工程名:Prgframe.mcp *硬件连接:PTA.1接指示灯 *程序描述:指示灯PTA.1闪烁 *目的:第一个freescale(Motorola)HC08系列MCU程序框架*说明:提供MotorolaMCU的编程框架,供教学入门使用*注意:如果延时不够长的话,会发觉灯不会闪烁,而是一*直亮,这是由于人的视觉的引起的。 *//*[头文件]*/#include"GP32C.h”/*[指示灯所接引脚定义]*/^define Light_P PTA#define LightD DDRA#define Light_Pin 1/*[全局变量声明i*/unsignedcharII;/*[延时子函数声明]*/voidDelaylOOO(void);/*[主函数]*/voidmain(){〃[I/O初始化]LightD=K<Light_Pin;Light_P|=l«Light_Pin;〃酶序总循环人口]while(l)(〃指示灯(Light)“亮”Light_P&="(l«Light_Pin);/?延时for(I1=0;11<=250;11++)Delay1000();//指示灯(Light)"暗"Light_P|=l«Light_Pin;〃延时for(I1=0;11<=250;11++)Delay1000();〃映像寄存器地址头文件〃灯(Light)接在〃映像寄存器地址头文件〃灯(Light)接在PTA口〃相应的方向寄存器〃灯所在的引脚〃令指示灯引脚为输出〃初始时,指示灯"暗”/*Delayl000:延时1000个时钟周期TOC\o"1-5"\h\z功能:延时函数(约1000个时钟周期) *参数:无 *返回:无 *voidDelay1000(void){unsignedcharu;for(u=0;u<=110;u++);智能车运动状态实时监测系统的设计及实现2008-10-1512:36系统功能及应用本系统主要完成将智能车行驶过程中的各种状态信息(如传感器亮灭,车速,舵机转角,电池电量等)实时地以无线串行通信方式发送至上位机处理,并绘制各部分状态值关于时间的曲线。有了这些曲线就不难看出智能车在赛道各个位置的状态,各种控制参数的优劣便一目了然了。尤为重要的是对于电机控制P1D参数的选取,通过速度一时间曲线可以很容易发现各套PID参数之间的差异。对于采用CCD传感器的队伍来说,该系统便成为了调试者的眼睛,可以见智能车之所见,相信对编写循线算法有很大帮助。而且还可以对这些数据作进一步处理,例如求取•阶导数,以得到更多的信息。系统的硬、软件设计设计方案主要分成三部分:车载数据采集系统,无线数传系统,上位机数据处理系统。系统基本构建如图1所示。检漓发数据处理并画图车各部分信息激光传感H从单片机主单片机显示瞬时状态检漓发数据处理并画图车各部分信息激光传感H从单片机主单片机显示瞬时状态第一次制发时发送启动单片机命令图1科能实时监测系统结构框图与流程图车载数据采集系统车载数据采集系统主要由单片机负责采集赛车行驶过程中的速度、传感器状态、电池电压、舵机转角等信息。为了使监测系统不占用S12单片机的内部资源并且支持热插拔,我们将除供电之外的监测系统与智能车控制系统相分离。我们选择ATMEL公司的ATMEGA16单片机作为该数据采集系统的处理器。二值型光电传感器信号的采集直接使用该单片机的I/O口进行采集,连续型光电传感器、电池电压及CCD摄像头信号则采用该单片机的A/D口进行采集,速度信息则通过光电编码器和该单片机的计数器来采集。采集到的数据每20ms向上位机发送一次。无线数传系统下位机向上位机传输的是以每20ms传输•组包含了光电编码器值(speed),电池电压(battery),舵机转角值(angle),传感器当前状态(sensor)的数据,如果是在理想状态下,h位机接收到的应是上述各值循环出现的周期性数据,此时上位机只需将这些数据按顺序装入各自的数组并画图即可。但在实际的无线传输过程中可能出现数据丢失现象。因此加入适当的数据校验是必要的,否则会出现数据装入错误,造成画图的混乱.我们在实际过程中是在每组数据中加入0x00,0xff的帧头,当数据出现错误时,则舍弃该帧数据。数据的无线收发部分采用的是SUNRAY公司的QC96型无线收发模块,该模块可以收发波特率为9600bps的串行数据,距离可达100m。上位机的数据接收及处理上位机部份主要由四个模块构成:•数据接收模块功能:上位机通过串口采集下位机发送的原始数据。实现:VC++中实现串口通信一般有二种方式,分别是MSComm控件和WindowsAPI函数。MSComm简洁易用,适用于比较简单的系统,WindowsAPI函数应用较广但比较复杂繁琐,由于此模块的串口通信功能相对简单,木系统采用前者。在实际过程中使用的是事件驱动的方式,这种方法响应及时,可靠性高,并且比查询法占用更少的资源。•存储模块功能:可直接存储采集到的原始数据,以备以后更多的分析处理。实现:在每个OnComm事件被触发后,将串口接收到的数据直接存入temp临时文件,并且可以在用户的要求下将temp临时文件里的值存储到指定文件。■数据的分析和处理模块功能:将采集到的原始数据进行用户选定的分析和处理,主要包括丢弃错误数据,以及去除帧头并进行数据装入任务,同时也可以对已保存的数据进行分析和处理。实现:将temp临时文件或用户指定文件的数据读出并装入,以下为主要程序代码:voidCChuankokjDlg::finddata(cardatac_data[],BYTEcsource[],intclength)(inti=0;while(i〈c_length-6)〃防止下标越界{if((csource[i]==0x00)&&(csource[i+l]==0xff)&&(c_source[i+6]==0x00)&&(c_source[i+7]==0xff))〃判断帧头并进行数据装入(c_data[length].speed_data=c_source[i+2];c_data[length].battary_data=c_source[i+3];c_data[length].direction_data=c_source[i+4];c_data[length].sensor_data=c_source[i+5];i=i+l;}elsei++;•图形显示模块功能:以图形界面来显示处理后的数据,以便更直观地观察智能车的运行状态。实现:将上•模块中装入各数组的数据在用户的选择的模式下进行画图,可以只看幅图,也可以将四幅图放在一起进行对比观看。实际的运行界面及效果如图20

图2图形显示介面运行模块结语该系统通过添加无线收发模块,将智能车的实时状态信息传到匕位机匕通过VC++编程,用图象口观形象地将其表现出来,很好地达到了对智能车状态实时监测的目的,极大地方便了我们调节PID等智能车参数,对赛道记忆算法的研究提供了很大的帮助。7月31日【原创纯TECH】第三届飞卡智能车详解/*前些天发现不少XDJM搜索“智能车”结果搜到了我的页面,既然我们已经被K0出局,直接解密技术好了,能拿全国一等奖的队应该也不是太稀罕我们的技术吧〜源代码涉及知识产权,不能贴出*/东北赛区战况:预赛摄像头组:8.105秒,猎豹,东北大学。随后是吉林大学东北虎,和东北大学影驰。预赛光电组:11.58X秒,猎鹰,东北大学。随后是12.9秒哈尔滨工程大学某某,和13.0秒东北大学神龙(唉。。。。预赛长度大约30m。

决赛摄像头组:16.8秒,猎豹。决赛光电组:23.9秒,猎鹰。决赛长度略大于2倍预赛。////////////////////////////////////////////车模改造:如果按车模原定架构安装,会发现有如卜.问题:1.舵机横放影响转向速度:2.原电池位置可能会影响车辆重心位置影响转向;3.控制电路板的位苴摆放很大程度上会影响车辆中心,最好贴近车底盘安置,在底盘重新打孔固定:4.测速系统,不论是码轮式还是光电编码器,原车模未提供空间,都需要在车后部重新固定,是否结实自己考量;成熟的改良做法是:1.舵机竖起,或加高横放,使得舵机到前轮连杆的连片加长,提高单位角度的转向角度;2.电路板贴底板安装,已经证实有很好的效果;3.传感器支架,包括摄像头的立杆,和光电排管的支撑,都必须与车体紧密连接,这关系到整个系统的稳定性,需要精细制作:4.电池位置以居中或稍前为佳,使得整车重心前移,转向灵活。////////////////////////////////////////////传感器安置:摄像头组基本大同小异,二个支杆上面固定摄像头,以最佳角度高度获得最合适的视野范围。基本视野范围在40cm到1m左右,猜的。没做摄像头组。。。/我们的布局:发射接收相对,上下两排。/我们的布局:发射接收相对,上下两排。光电组排布各异,大多数组使用单排/双排直行光电管探测。有的队使用W型或U型排布,wellsleep认为与其浪费几个传感器探测近处,不如全部探远,提早知道赛道情况总是好些。具体探远的方法,二是通过选择优秀的发光源,例如激光,或者功率较大的红外管;三是使用多个较小功率发射管打到同一点提高反射强度。比赛允许使用16个传感器,除去测速传感器基本还剩14-15个,经实验用于探测起始线停车至少需要4组传感器,也就是说前探路线的灯管数量大约在10-11个。我们使用的是上排10组,前探距离30cm左右,检测路径;卜♦排4组,前探距离5cm左右,检测起始线。有一点要说明,前探距离越大,白然能提前转向,有利于提高车速,但探测的准确度和光电管的敏感度都有很大的变化。由于红外线肉眼无法看到,即使使用CCD或CMOS观察到红外光斑,但接收管接收光线的角度仍然未知,只能通过大量反复试验获得大概位置,非常难缠。而敏感度更是我们决赛失法的决定性因素,因为比赛长达两天,而期间无法调试车辆,温度的变化,甚至电子器件自己的微小变化都会影响接收的精度。这也许可以从软件上得到一些解决的办法(例如计算最高最低电压求平均来动态定黑白阈值),但灯管的生产批次,电阻的生产批次不同使得同一性极难得到统二软件是不法解决这类偏拳的。对于激光光源,有着优秀的亮度和无与伦比的方向性,但缺点同样出在它的方向性匕由于方向性过强,导致反射角度要求苛刻,要求安装角度及牢同度比通常红外管严格的多。另外激光由受激振荡产生,地线不可接生二起,需要使用三八译码器或反相器解决。总之,光电组的胜则就是,远and稳。///////////////////////////////////////////舵机改造:现在似乎没有队不改造舵机了吧?加长连片,使舵机小角度就能带动前轮大角度摆动从而加快转向。不过改造不宜过分,左右最大角PWM值在400/3200(PWMDTY/PWMPER)或左右或稍小为宜,如果到达300/3200那就太夸张了,很容易转向无力,导致急转失败。//此图可见舵机黄色转动轴卜的延长连片连接拉杆//此图可见舵机黄色转动轴卜的延长连片连接拉杆//////////////////////////////////////////闭环控速系统:速度较快的车辆必须使用闭环速度控制,即MCU给出预期速度->驱动芯片产生要求电流驱动电机->电机旋转带动车轮->测速系统返回目前速度值。MCU计算速度偏差。驱动芯片更改电流值,依此循环。〃此测速系统由与左侧车轮同轴的大齿轮(码盘)返回信号,经频率-电压转换传回MCU的AD接口,计算当前速度。原理:码盘上方有二U型架设的红外传感器,当红外接收器穿过齿轮的齿接收到对射过来的红外光时,接收器产生低电平,反之产生高电平(电平大约就是电压的意思).于是车轮转动产生二一系列高低电平,又频率不同即可知道车轮的转速,随后推知当前车速。MCU采到测速返回的电压值后进行AD转换,得到当前速度,通过PID的公式计算,得出卜一步应该给出的电流值(实际上是调整PWM的频率),再次循环控速,以获得直道的快速加速和进弯的减速。此处的PID为自动控制中的币:要算法,参数需慢慢调试,下图为理想效果图,即变速时间短,

速度控制稳定。//Vo为期望的速度速度控制稳定。//Vo为期望的速度大多数赛车采用MC33886芯片提供电机驱动,少则1片,多则4片。多片并行的好处在于瞬间提供更大的电流以快速启动,和特殊设计提供反向电流以快速刹车。此次比赛看来,反向33886减速的接法在高速比赛中是必须的,PID控速几乎不可达到类似的效果,这在需要极短反应时间的比赛中是致命的。IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII算法设计:其实最好的算法就是没有算法.…至少没有发现除记忆之外的其他光电优秀而有用的算法。。。我们的感觉,第二,算法一定要反应快,if语句多了很影响速度;第二,MCU的初始化很重要,各中断的分频系数设置正确才行;第三,DG128的堆栈真的很小,注意用static定义常量数组;第四,相信DG128和33886是牢固的,很多问题还是出现在程序匕第五,再NB的人也老老实实用C,汇编没人能懂值得注意的是,由于第三届比赛要求识别起始线,对于光电组来说,如何发现两条黑色10cm起始线中夹的两段3.75cm宽度自缝就很要点技术了。我们的做法是特意设计灯管在车辆行驶中正好夹在白缝当中,当然这要求车辆在转向后能迅速摆正位置,而不左右摇晃。也有许多车队采用偷懒的办法,例如将交叉线和起始线二起计算,然后用过数经过的次数来得以识别(有二学校运用此法,屡试不爽,其设定10次识别,在起跑之前人工计算经过的次数,如果多了,则起跑前在跑道上蹭够次数再跑。。。):或识别起始线后利用定时中断屏蔽经过交叉线的时间,达到在起始线停车的观看效果。而识别起始线对于摄像头组就简单多了,毕竟二行30+的采样点怎么着也能采到中间的窄缝,利用异或的方法计算二行中黑白跳变的次数就可以识别出起始线。我们的车,花了90%的时间在硬件修理和机械性能改造匕软件实在缺乏亮点,soover.Illllllllllllllllllllllllllllllll最后的话:要想快,软件占30%,电气性能占30%,剩下的就是机械架构。跑的越快,越发现机械的重要性。要想达到极速,稳定的机械特性不可或缺。各个角度和零件连接,都有可能对整车产生影响。郁闷,设计硬件花了了大半个准备期的车,在决赛还是倒在了硬件架构上。5个月,最最累的5个月(别跟我提高考,跟这比高考算个P),终于结束了.希望明年的飞思卡尔智能车,速度能突破4m/s」。那观赏性就更强了 想学一句上届上交解说员MM对猎豹比赛时说的话:猎豹加油!突破16秒!i告(0) 写入日志ccd图像采集解决方案2009-02-1215:18在采集图像之前,我们首先要知道摄像头输出信号的特性。目前的模拟摄像头一般都是PAL制式的,输出的信号由复合同步信号,复合消隐信号和视频信号。其中的视频信号才是真正的图像信号,对于黑白摄像头,图像越黑,电压越低,图像越白,电压越高。而复合同步信号是控制电视机的电子枪对电子的偏转的,复合消隐信号是在图像换行和换场时电子枪回扫时不发射电子。由于人眼看到的图像大于等于24Hz时人才不会觉得图像闪烁,所以PAL制式输出的图像是25Hz,即每秒钟有25幅画面,说的专业点就是每秒25帧,其中每一帧有625行。但由于在早期电子技术还不发达时,电源不稳定,容易对电视信号进行干扰,而交流电源是50Hz所以,为了和电网兼容,同时由于25Hz时图像不稳定,所以后来工程师们把一副图像分成两场显示,对于一幅画面,-共有625行,但是电子枪先扫描奇数场1,3,5然后再扫描2,4,6所以这样的话,一副图像就变成了隔行扫描,每秒钟就有50场了。其中具体的细节请参考这个网站电视原理与系统http:〃courseware,/zsb/zjx/zjx09/zjx090000.htm只用看前面的黑白全电视信号和PAL制式就可以了(当然如果感兴趣可以全部看完)。通过上面的内容如果你对PAL制式信号了然于心,那么就可以开始图像的采集了,PAL输出的信号有复合同步信号,复合消隐信号和视频信号。那么我们首先就是要从这三种信号中分理出复合同步信号,复合消隐信号和视频信号,以便我们对AD采样到的值进行存储,从而形成一幅画面。具体如何分离,我们使用的是LM1881视频同步分离器件,具体的硬件连接请参看论坛内相关文章(论坛里有介绍LM1881的文章,自己搜吧,我不重复了)。分离出行场同步,奇偶场信号后,就把他们接到单片机的外部中断口,产生中断,在中断服务程序中对AD采集到的数据进行图像存储,从而形成一个二维数组的数字图像。下面就说说图像采集方案,方法有多种,但我使用的方案是在行终端中读取AD采样的灰度值,在场同步中交换图像采集和处理缓存指针,并对图像进行处理,然后控制小车,在主函数中只有初始化和键盘扫描和串口输出函数。这样做效率比较高,而且可以把调试和图像采集处理分开,变成起来比较方便。大家遇到的还有一个很棘手的问题可能是AD采样频率该设置多大呢?建议大家先通过PLLL超频,然后把AD时钟频率设置的高点才行。下面就把我的代码贴给大家看看吧。//* *************************锁相环初始化voidvPLLInit(void){ //BUS-CLOCK=PLL-CLOCK/2=32MREFDV=1;//settheREFDVregister16M*2*(3+1)/(1+1)=64MSYNR=3; //settheSYNRregistertogiveusa64MHzPLL-clock.asmnop //nopsrequiredforPLLstability,asmnopasmnopasmnopwhile((CRGFLG&0x08)==0);//waitheretillthePLLislocked.CLKSEL|=0x80; //switchthebusclocktothePLL.)设置总线时钟为32M//* *************************定时器初始化voidvECTInit(void)(TIOS=0x00; 〃设为输入捕捉TSCRl=0x80; 〃定时器使能TSCR2=0x83; 〃允许定时器溢出中断,定时器时钟32M/(2^3)=4MTCTL4=0xAA; 〃触发电平:下降沿TIE=0x07;〃开中断TFLGl=0xFF; 〃清除中断标志)输入捕捉的1,2通道接行场中断。//* ***************************ad转换初始化程序voidvADInit(void)//********************************atd1设置控制寄存器2»»»»»»»»»»»»»»»>〃上电,标志位快速清零,忽略外部触发,执行一次停止,中断禁止。ATD1CTL2=(ATD1CTL2_AFFC_MASK|ATD1CTL2_ADPU_MASK);〃久控制寄存器3»»»»»»»»»»»»»»»>〃转换序列长度为1,FIFO模式,Freeze模式下继续转换。|ATD0CTL3_FIF0_MASKATD1CTL3=(ATD1CTL3_S1C_MASK);//««<«<«<««<«<<<<<««<<«控制寄存器4»»»»»»»»»»»»»»»>〃8位精度,2AD采样周期,采样长度8。//ATDClock=[BusClock*0.5]/[PRS+1];PRS="15”,divider="32”ATD1CTL4=(ATD1CTL4_SRES8_MASK|ATD1CTL4_PRSO_MASK);控制寄存器5»»»»»»»»»»»»»»»>〃右对齐无符号,扫描模式连续采样,单通道采样〃多通道采样|ATD0CTL5_MULT_MASKoATD1CTL5=(ATD1CTL5_DJM_MASK|ATD1CTL5_SCAN_MASK);〃<<<<<<<<<<<<<<<。<<<<<<<<<禁止数字输入缓冲〉>〉〉〉>>>>>〉>>>>〉>>>>>>>>>>〉>>>>ATDlDIEN=0x00;ATD1的0通道用于AD转换下面是真正的图像采集程序//««««««««««««««««««<»»»»»»»»»»»»»»»»»>〃当前采样图像的行和列。unsignedintui_Samp1eRow=0,ui_Samp1eCo1umn=0;//««««««««««««««««««<»»»»»»»»»»»»»»»»»>〃图像数据缓存unsignedcharuca_Bufferl[IMAGE_ROW][IMAGE_COLUMN];unsignedcharuca_Buffer2[IMAGE_ROW][IMAGE_COLUMN];//««««««««««««««««««<»»»»»»»»»»»»»»»»»>〃指向当前采集数据采样缓存首地址的指针unsignedchar*puca_BufferSample=&uca_Bufferl[0][0];//««««««««««««««««««<»»»»»»»»»»»»»»»»»>〃指向当前处理数据采样缓存首地址的指针unsignedchar*puca_BufferProcess=&uca_Buffer2[0][0];//««««««««««««««««««<»»»»»»»»»»»»»»»»»>〃用于图像采集和处理交换缓存。〃(注意:在每次交换指针后保证pucaBufferTemp与pucaBufferSample相同)unsignedchar*puca_BufferTemp=&uca_Bufferl[0][0];#pragmaC0DE_SEGN0N_BANKED//* *〃* *******************输入捕捉2通道中断函数//* *〃行同步,用于数据采集。voidinterrupt10vIC2ISR(void){unsignedcharucTemp;unsignedchar*pucTemp;TFLG1_C2F=1;if(ui_Samp1eRow>=SAMP_ROW_START&&ui_Samp1eRow<SAMP_ROW_MAX)(if(ui_SampleRow%SAMP_R0W_SEP==0)(for(ui_Samp1eCo1umn=0;ui_Samp1eCo1umn<SAMP_COL_MAX;ui_Samp1eCo1umn++)(while(!ATDlSTATl_CCFO);if(ui_Samp1eCo1umn>=SAMP_COL_START){if(ui_SampleColumn%SAMP_C0L_SEP==0)pucTemp=//puca/zBufferSample+((ui_SampleRow-SAMP_ROW_START)/SAMP_ROW_SEP)*IMAGE_COLUMN+(ui_SampleColumn-SAMP_COL_START)/SAMP_COL_SEP;*pucTemp=ATD1DR0L;ucTemp-ATDIDROL”;ui_SampleRow++; 〃采样行坐标加一。)//* *〃* *******************输入捕捉1通道中断函数//* *〃场同步,交换缓存以及图像处理和模型车控制。voidinterrupt9vIClISR(void){TFLG1_C1F=1;ui_SampleRow=0; 〃把采样行坐标清零。uiSamp1eCo1umn=0;//««««««««««««««««««<»»»»»»»»»»»»»»»»»>〃交换图像采集和处理缓存pucaBufferSamp1e=puca_BufferProcess;puca_BufferProcess=pucaBufferTemp;pucaBufferTemp=puca_BufferSamp1e;//«««««««««««««««««»»»»»»»»»»»»»»»»>»»>〃系统时间加一。ul_SystemTime+=l;//««««««««««««««««««<»»»»»»»»»»»»»»»»»>〃开中断,允许行信号中断进行采样。Enablelnterrupts;if(uc_CarState==STATE_START)(//PORTB_BIT1=1;〃分析图碑,获取路径参数,根据路径参数控制模型车。。vlmageProcess();〃根据路径参数控制模型车。vAutoControl();//PORTB_BIT1=O;—个单□上位机程序——FSonPC[2007-8-2112:56:00|By:东东]我们匕思卡尔髀能车的比赛己经接近尾市了.23号就要去上海决赛「阿。论文基不完成,Duuboo己经揖版结束,排出来还真挺长的。修个过程都挺累的,持续的时间还这么长,最累的恐怕只有惠哥了,这些比赛完再说吧.这里介绍下在Donald写的•个串口调试程序,主耍是方便我们查看运行起来的小车的内部参数。程序的作用是接收来自FreescaleMC9SDG128单片机发送来的数据,并显示出来.分为两部分. 部分是普通的数据,ASCII数据,另部分是实时的图像.也是以ASCII方式传输.程序可通过“模式”按钮设置工作在这两种模式。当进入CCD模式时.通过“连接”按钮触发DG128电片机发送图像信息,这时“连接”按钮变为“断开”,可通过其触发DG128单片机停止发送,降低单片机内部资源消耗.程序中串口部分的编程蓼考的是《VisualCi串口通信技术与工程实践》,李现勇编著.书中对串口的编程讲得很不错,除了C的,还有VB的。详细请参考读曲.这里介绍本程序的一部分程序代码.、添加中口控件本程序是在VC6下MFC实现,所以添加一个串门控件,方法足选择Project菜单下AddToProject子菜单中的CoaponentsandControls选项,在弹出的对话框中进入RegisteredActiveXControls目录,选择MicrosoftConnunicationsControl,version6.0..Insert到Project中就行了.然后可在窗体中添加串II控件,接若ClrHW到ClassFizard中为该控件添加一个对应的变录就行。二、申口工作方式的改变甲U的工作方式有很多种,比如出口的选择、波特奉、校验位、数据位和停止位等.这些的设置可以通过组介框实现.实现方法基本样,Donald就以波特率说明下,之前已经为波特率组合框对象IDCCOMBOBAUD添加对应变量mcboBaud.在程序主窗体初始化时笃有如下代码.//comboBaudinitmcboBaud.AddString(_T(*1200*));ncboBaud.AddStririR(TC2400*,)):mcboBaud.AddString(_T(*4800*)):mcboBaud.AddString(T("9600"));n_cboBaud.AddString(_T(*115200*)):mcboBHud.SelCurSel(3):m.strBaud=T(*9600*);西在ClassMzard中为1DCCOMBOBAID添加CBX_SELCHANGE消息处理函数,施在函数中添加代码。switch(n.cboBaud.GetCurSel0)(case0:nstrBaud=TC1200");break:nstrBaud=T(*24OO*):break:■strBaud=TC4800*);break;mstrBaud=T(*9600*);break;nstrBaud=TC115200"):break;default:mstrBaud=T(*9600*);)InitConunPort();通过switch选择不同的波特率.case的顺序按照初始化添闻时的顺序,开始为0.三、OnConnO消息处理函数在串”控件中,最丑要的就是OnCommO函数,这个函数是用来处理串门消息事件的,每当串门接收到数据,就会产生一个串H接收数据缓冲区中“有字符”的消息事件,只要在该函数内与好处理这些字符的代码就可以。在Domdd的这个程序里,该程序代码如下,代码的结构(swilch结构)是参身读书.VARIANTvariant.inp:COleSafeArraysafearrayinp;CByteArrayarraySend;LONGlen,k;BYTErxdata[1024]://An8-bitintegerthatisnotsignedforReceiveCStringstrAdd;inti:mstrComRcv.Eapty():switch(m_com.GetCommEvent())(//conEvSendarraySend.RenuveAlI():arraySend.SetSize(mstrEditTrn.GetLengthO);for(i=0;i<n_strEditTrn.GetLengthO:i++)(arraySend.SetAt(i,tnstrEditTrn.GetAt(i));)m,coa.SetOutput(COleVariant(arraySend));break;//comEvReceivevariantinp=mcom.GetInput()://Readbuffersafearrayinp=variantinp://VARIANTtoColeSafeArraylen=safearrayinp.GetOrieDimSizeO;//Geteffectivelength//StoretoEDIT_REVfor(k=0;k<len;k++)fsarearrayinp.GetElement(4k,rxdata+k)://ChangetoBYTEarrayBYTEbt=♦(char*)(rxdata+k)://BYTEtypestrAdd+=bl;if(mbCcdMode=FALSE)(mnyEdit.AppendText(strAdd);)else]g_strRcv=strAdd;gbReceive=TRUE:}break;default://Errormcom.SetOulBufferCount(0);//AfxMessagcBox(*ConErr"):break;I使用控件编程就是相对简单,系统的串口消息发生时,程序自动调用该函数•由switch语句判断,参数1为发送,参数2为接收。Donald主要介绍卜接收的思路,由F,接收时仃两种模式,所以通过mbCcdMode成员变肽记录这两种模式.当其为FALSE时点接实时显示在窗LI右边,就像Windows处事的超级终端.如果是TRUE.则不显示,将信息放到一个全局变量gstrRcv.其实尽量不要用全同变量,但Donald暂时也不信线程间通信,只能简单这么做了.并置位全局变IftgbReceive。该变量是在CCD模式下一个线程处理的依据,实时显示图像。四、文本框实时显示和发送串口字符为了能实现Windows超级终端文本框的功能,我们必须手动修改Edit类,然后用CWnd::SubclassDlgItew提供的动态连接功能,将原来的文本框和修改的类连接起来.利用ClassAizard新建•个CEdit类自己命名(如CMyEdit),并在这个类中添加WMCHAR消息处理函数和。确定后,再在新建类的头文件中手动添加voidAppendText(LPCSTRpTexl)函数,用于将串H收到的字符输出在文本框中。以及添加CByleArruyarraySend成员变境,用于显示字符的临时存储,Donald程序中.CMyEdit::AppendText(LPCSTRpText)的内容如F;ininLen=GetlindowTextLength0:CStringstrTmp=pText:SetFocus0;if(strTmp.GetAt(0)=(char)0X08)(SetSel(nLen-1,nLen):strTmp.Delete(0);ClearO;)else(SetSel(nLen,nLen);ReplaceSel(pText):)^t^CMyEditKOnCharOnNTnChar,U1NTnRepCnt,UINTnFlags)函数,该函数实现在文本控件中输入一字符时白动由串口向外发送.代码如下:arrayScnd.RemoveAl1():arraySend.SelSize(l);arraySend.SetAt(0,(char)nChar);((CFSonPCDlg*)AfxGetApp()->mpMainWnd)->■com.SelOutput(COleVariant(arraySend));//CEdit::OnChar(nChar,nRepCnt,nFlags);程序的第四行语句必是向Donald的窗体串口控件关联变量mcom输出字符,注意要调用COleVarianlO函数。五、实时接收图像线程众所周知,如果一个程序用了while。)语句的话,那么这个程序将是一个死循环,将严重占用CPU资源,而这里,我们的理序又需要用・hile来实时地接收来口单片机的串口信息,「是,最好的解决方法就是用线程。调用线程的思路是这样,当程序处于文本框模式时,战程是关闭的.如果进行CCD模式,还没“连接”,程序状态同上,如果进行“连接”状态,则创建实时接收线程,并设宜•定时器以在•定时间未接收到来自用U的握手信号时自动断开.如果从“连接”状态手动或自动“断开”,则将线程终止,向单片机发送终止传送图像信号并关闭定时器。至此,完成犍示图像流程.线程中首先是发送握F信号FSCONNECTJON.arraySend.SetSize(l):arraySend.SetAt(0.FS_C0NNECTI0N);g_bOvertiBe=FALSE://SendConnectionSignal((CFSonPCD1g*)AfxGetApp()->mj)MainWnd)->mcon.SetOutput(COleVariant(arraySend)):然后无限循环等带接收,用了两层while语句,第•个等待来自单片机的握手信号,第二个处理接收图像。while(l)(//Waitforreceiving((CFSonPCDIg*)AfxGetApp()->apMainWnd)->GetDlgltem(IDC_STATIC.NOW)->SetWindoirText「等待...”);g_bReceive=FALSE;SetTimer(AfxGetApp()->GetMainWnd0->nhind,1,1000,NULL);g_bOvertime=TRUE:while(!gbReceive);KillTin»er(AfxGetApp()->GetMainWnd()->mhind,1);gbReceive=FALSE;g_bOvertime=FALSE;if(-1=gstrRcv.Find(FSCONNECTION))(//Notfoundcontinue;)else(((CFSonPCDlg*)AfxGetApp()->n_pMainWnd)-XietDlg11cm(IDC_STATIC.NOW)>SetIindowText「连接完成,接收中“);row=0:col=0:while(l){SetTiaer(AfxGetApp()->GetMainWnd()->mhWnd,1,1000.NULL);gbOvertine=TRUE:g_bReceive=FALSE:while(!gbReceive):KillTiner(AfxGetApp()-X;etMainWnd()->mhWnd,I):gbReceive=FALSE:g_b0verti»e=FALSE;//AfxMessageBox(gstrRcv);n=g_strRcv.Find(FS.TRANFINISH):if(-l=n){〃Notfinishn=g_strRcv.GetLength();for(i=0;i<n;i++){cRcvtrow][col++]=g_strRcv.GetAt(i):if(col=MAXCCDY)(col=0:if(++row=MAXCCDX)(row=0;}else{//FinishZ/n=gstrRcv.Find(FSTRANFIN1SH):for(i=0:i<n;i++){cRcv[row][col++]=gstrRcv.GetAt(i):if(col=MAX_CCD_Y)(col=0:if(++row=MAX_CCD_X)(row=0;((CFSonfOlg*)AfxGetApp()->m_pMainWnd)->b,ccdGraph.ChangeBit(cRcv):((CFSonPCDlg*)AfxGetApp0->m^pMainWnd)->GetDlgIten(IDC_STATICNOW)->SetWindowText("接收完毕”)://Showit((CFSonPCDlg*)AfxGetApp()->mpMainWnd)->m_ccdGraph.ShowGraph(((CFSonPCDlg*)AfxGetApp()->apMainWnd)->n^dcViewS);((CFSonPCDlg*)AfxGetApp()->m_pMainWnd)->«_dcViewB.StretchBlt(0,0,MAXCCDX♦4,MAX.CCDY*4,((CFSonKDIg»)AfxGetApp()->n^pMainWnd)->n_dcViewS.Getl'indow()-X^tDC(),0,0.MAXCCD_X,M.UCCD_Y,SRCCOPY):break;)}}I结束语悔个程序的总体思路便是如上,并没有对程序的每个细。都作介绍。书上和网上也能锂到很多各种串门的程序,写得相当优秀,Dorwld的程序比较粗糙,但基本能完成我们智能小车的调试功能,目的就达到广»如果感兴趣.可向Donald要源码.http:〃www.dona】,cn/post/22.html阅读全文I回宜⑺I引用通行编辑•标卷:VC图像蚂单•片机上篇;处T--s:专注与合作Re:一个串口上位机程序——FSonPC2008-8-1511:33:22|By:liyangli]—我刚刚做了个单片机图像采集系统,但是没有申口上位机图像显示程序,学长能把程序发给我参考-F吗?谢谢了1个人主页I引用I返回I删除回免Re:一个串口上位机程序——FSonPC[2008-7-168:26:02By:a802110904仃没仃MSComm控件的详细教程可不可以发给我?a802110904«126.com谢谢Re:一个串口上位机程序——FSonPC[2008-5-219:37:53IBy:访客XRHt4X(游客)]J ■发下源码看看可以么。谢谢了navy80eyou.coaRe:一个串口上位机程序——FSonPC[2008-5-2020:26:55By:访客N6Iu48(游客)]

您好能给源丹学习•下吗?Re:一个串口上位机程序——FSonPC[2008-5-916:55:21By:访客pul80B(游客)您好能给源丹学习•下吗?Re:一个串口上位机程序——FSonPC[2008-5-916:55:21By:访客pul80B(游客)]能把源码和生成程序给我发过来么,谢谢,julili0454@163.com个人主页I业旦I驷1酗⑼复Re:一个申口上位机程序——FSonPC[2008-4-3020:42:28:By:访客0281am(游客)]谢谢.cicixyletgnai1.coaRe:一个串口上位机程序——FSonPC[2008-3-2720:07:02By:肯辿(游客)]您好,可否把源码和生成的程序发给我,谢谢了.I增加轮胎的抓地性有几种方法2008-11-1621:01-、增加轮胎和地面的摩擦力要增加轮胎和地面的摩擦力有两种方法可达成这个目的。第一是增加路面的摩擦系的,所谓“摩擦系数”是路面所能提供对轮胎的抓附能力,摩擦系数越大抓附力越大。柏油路面、水泥路面、砂石路而各有不同的摩擦系数。所能提供对轮胎抓附力也各有不同。其次是增加轮胎本身的摩擦系数,这可由选择较软的轮胎来达成。较软的轮胎可提供较强的抓地力,但是相对的磨损也较快。这里所谓“软的轮胎”指的是轮胎胎面的橡胶材质较软,如果和高扁平比轮胎和胎压不足所造成行路性较软、较舒适联想在一起那就大错特错!二、增加轮胎接地面积要增加轮胎和路面接触的面积,最简单的方法就是换上较宽的轮胎,再来就是选用胎纹较少的轮胎,如此可增加轮胎与地面实际的接触面积,但是却也会影响在湿滑路面抓地表现。最后也是最重要的就是在既定的接地面积下,经由正确的轮胎胎压及悬挂的精确调校把轮胎的潜力完全发挥。轮胎的接地面积即使是行驶在平坦的直路都会小于静止时,行经不平路面或是过弯时更会因为上下的跳动或是侧向的受力,而造成接地面积的大幅减少,甚至悬空。悬挂的改良最终的目的就是随时把轮胎尽可能的保持与地面接触,尤其是在过弯或是行经不平路面时。三、增加轮胎的垂直荷重轮胎的垂直荷重是车辆本身施予轮胎的重量加上空气动力学效应所产生的下压力的总和。轮胎的橡皮会因为垂直荷重的增加而与地面更紧密的接触,轮胎的抓地性能也得以更充分的发挥。有别于大家所认知的,增加轮胎的垂直荷重并不会增加轮胎的接地面积,至少在现代的高性能胎和赛车用轮胎儿乎都是如此,增加垂直荷重所提高的是轮胎接地面积内,每一单位面积内橡胶分子和地面的附着力。在接地面积不变的情况下,轮胎抓地性的增加是由于对橡胶分子所施的压力增加。我们可以做个小实验:在…个光滑平面上移动橡皮擦,在橡皮擦上方没有施加压力的情况下我们可以很轻易的自由移动橡皮擦,当我们压着橡皮擦时,要移动它就变得比较不容易,压的力量越大橡皮所产生的附着力就越强,也就是抓地性越好。轮胎的垂直荷重似乎可由增加车重来达成,虽然这可增加轮胎的抓地性,但是由于轮胎承受来自车重的负荷也增加,所以过弯速度、刹车距离、加速表现都不会有所改善。事实上整体的性能表现反而会因为车重的增加而变坏。要在不破坏整体性能表现的情况下提高轮胎的垂直荷重,唯一的途径就是经由车身空气动学的设计来达成。空气动力学所的下压力(AerodynamicDownforce)空气动力学对车身所产生的下压力(Downforce)也会增加轮胎接地面积的垂直负荷。对一般的道路用车来说并不需要很在意空气动力学所产生的下压力,但是对于任何比赛车种而言这却是必须去仔细考虑的问题。空力下压力的好处是只会增加轮胎接地面积的垂直负荷却不会增加车重。由于车重不变轮胎不用负担额外的惯性和离心力,加上轮胎抓地性的提高,所以过弯速度得以提高。同时刹车和加速时的抓地性也会获得提升。这也是为什么这二十儿年来赛车工程师对于尾翼、车身空力组件和地面效应持续不断的进行研究、发展与改进。空力效应包含了车身下压力、车身扬升力和行进阻力,这三个力量是伴随发生的,而且所产生的力量是和车速成平方正比,也就是速度提高为2倍时空力效应会增为4倍。这也说明了为什么空力效应只有在高速时才会变得明显。对…部针对比赛而生产的厂车来说,改善操控性的重要关键除了底盘悬挂的改良调校以外,其次就是就是空力特性的改良。要改良车身的空力特性,最重要的就是要减少高速流动的空气对车身产生的扬升力,因为扬力会减少轮胎的垂直荷重,破坏抓地性。目前的ITC、BTCC、JTCC等房车赛参赛车种车尾都有扰流尾翼的设计,最主要的的作用就是在减少车身的扬力并产生些许的下压力。此外前扰流和车侧裙角也可减少进入车底的气流,减少车底气流对车尾产生的扬力。由于产生下压力和改变气流的同时都会伴随产生行车阻力,所以改善车身空力特性的另一个重要课题就是要在伴随发生的压力、扬力、阻力三种力量间取的协调、均衡与折冲。胎压对抓地性的影响胎压对抓地性的影响可能远超乎你的想像,胎压并不会直接影响橡胶分子和地面的附着力,但却会影

温馨提示

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

评论

0/150

提交评论