汽车驾驶辅助系统设计分析方案.docx
《汽车驾驶辅助系统设计分析方案.docx》由会员分享,可在线阅读,更多相关《汽车驾驶辅助系统设计分析方案.docx(14页珍藏版)》请在冰豆网上搜索。
汽车驾驶辅助系统设计分析方案
第六届信息技术应用水平大赛
基于0M0传感器的汽车驾驶辅助系统
学校:
参赛队员:
专业:
指导教师:
摘要:
此系统是基于0M0传感器的汽车驾驶辅助系统,主要包括速度检测模
块、向心力采集模块、底盘模拟模块和前大灯模拟模块。
采用0M0传感器采集
信息,通过C8051F020处理数据,从而通过步进电机调节底盘和前大灯的角度,同时检测模拟发动机转速,通过调节PWM波占空比来稳定发动机的转速。
关键词:
单片机0M02传感器汽车
1、设计背景4
2、系统方案4
2.1微控制模块52.2光学传感器芯片及鼠标控制器5
2.3P/S2言协议原理6
2.40M02数据处理7
2.5电机驱动的设计8
2.6系统显示模块9
3、产品简介9
4、产品特色12
5、总结12参考文献:
13附录:
14
1、设计背景
汽车电子是车体汽车电子控制装置和车载汽车电子控制装置的总称。
车体汽车电子控制装置,包括发动机控制系统、底盘控制系统和车身电子控制系统<车身电子ECU。
汽车电子最重要的作用是提高汽车的安全性、舒适性、经济性和娱乐性。
汽车电子化被认为是汽车技术发展进程中的一次革命,汽车电子化的程度被看作是衡量现代汽车水平的重要标志,是用来开发新车型,改进汽车性能最重要的技术措施。
汽车制造商认为增加汽车电子设备的数量、促进汽车电子化是夺取未来汽车市场的重要的有效手段。
尽管现在的汽车电子已经很发达了,但是还有一些问题还没有很好的解决。
比如很多新手在驾驶手动挡的汽车时由于油门和离合器的结合不好而导致突然熄火,这种情况如果发生在中途行驶时尤其在汽车上坡的时候是非常危险的。
而我们设计的汽车驾驶辅助系统就可以采集当前的发动机转速和发动机的负载从而调整发动机的输出功率来避免汽车突然熄火。
还有就是汽车在夜间行驶时,当汽车转向的时候由于汽车的前大灯不能够及时的跟着汽车转向,从而在前侧面会造成一定的盲区。
如果在这个盲区里有人或者其他的东西,这样司机就不会很早的发现从而也埋下了驾驶的安全隐患。
很多汽车都配备了空气悬挂系统,但是空气悬挂系统也仅仅用来提高在比较颠簸路段的舒适性。
而我们可以用0M0传感器来测量出汽车在转向时的向心力通过控制系统结合空气悬挂使汽车地盘转动一定的倾角,使向心力和重力的合力垂直于座位这样的话人们在坐车的时候就不会感觉向心力了。
在下面我简要的说明一下设计的汽车驾驶辅助系统:
我们设计的汽车驾驶辅助系统,有两个0M0传感器、一个直流电机、两个步进电机、一块c8051f020的核心板和一块12864构成。
该系统由0M0传感器采集的数据送入单片机核心板经过单片机处理后实现对电机的控制。
当本系统启动时,12864会显示直流电机的转速和输入电机的PWM&空比,当增大直流电机的阻力时,单片机给直流电机输入PWM波的占空比会自动增大,从而稳定直流电机的转速。
按下按键1,该系统会调节到转向模式。
当系统在转向模式时,转动轮子前大灯会以一定的角度跟着方向盘转动,以达到提前改变灯向。
当行驶在弯道时,为了事人们坐的更舒服,整个系统的倾角会发生一定的改变,底盘会根据车速和弯道的弧度,检测到向心力的大小,从而自动调节整个底盘的角度进而使底盘的合力垂直于底盘的平面。
2、系统方案
我们设计的本系统是采用模拟方式来演示的:
我们用直流电机来模拟成汽
车发动机,当该直流电机的阻力增大时就相当于汽车发动机的负载增加,此时单片机通过增加PWM波占空比来调节直流电机的输出功率从而保证电机的转速不会减小。
我们在步进电机上接上一个底板来模拟汽车地盘,当整个系统与水平面有一定倾角的时候这个底板通过调节角度来始终保持水平,这样就相当于当汽车转向的时候通过调节地盘的角度来改变合力的方向。
我们将灯也接在步进电机上,当转向的角度发生改变时步进电机通过转动一定的角度来改变灯照射的范围从而消除盲区。
我们用了两个0M0传感器,其中一个0M0传感器实时测量直流电机的转速,当转速低于设定的转速时则单片机会自动增加PWM波
的占空比。
还有一个传感器是用来测量向心力,用了两个橡皮筋将0M0传感器
固定,当受到到的力不平衡时0M0传感器将会有一定的位移并且根据弹簧的比例系数该位移量是和向心力成正比的。
单片机通过采集0M0传感器的位移量来
确定向心力从而调整地盘转动的角度。
2.1微控制模块
C8051F020是一种集成度高、功能强的单片机芯片,适合于要求可靠性高、速度快和扩展功能强的应用系统。
与以前的51系列单片机相比,C805仆020增添了许多功能,同时其可靠性和速度也有了很大提高。
C8051F020的JTAG逻辑还可为在系统测试提供边界扫描功能。
通过边界寄存器的编程控制可以对所有器件引脚、SFR总线和I/0口的弱上拉功能实现观
察和控制。
由于C8051F020是51单片机中速度最快的单片机,本系统采用C8051F020单片机大大提高系统反应时间。
又有51的内核方便的移植其他的51程序缩短了开发周期。
同时C8051F020的JTAG逻辑使整个系统的调试更加简单明了。
2.2光学传感器芯片及鼠标控制器
这款光学0M0传感器是一款针对个人计算机所配置的非接触式光电鼠标芯片。
它集成有数字信号处理器<DSP、双通道正交输出端口等。
在芯片底部有一个感光眼,能够不断的对物体进行拍照,并将前后两次图像送入DSP中进行
处理,得到移动的方向和距离。
DSP产生的位移值,转换成双通道正交信号,配合鼠标控制器,将双通道正交信号转结成单片机能够处理的PS/2数据格式。
设备安装在一套塑料的光学透镜设备上,并一个配备有一个高强度的LED此
外,它可提供高达400点/英寸的分辨率以及16英寸/秒以内的速度检测。
图1为鼠标芯片的安装装配图。
因0M02芯片为C0MS1传感器,因此必须配备有与之相适应的高强度发光二极管,发射角度与底板夹角30°〜45°范围内。
在标
准安装配合后,底板距离工作表面的有效距离在0mn〜2mm内,OM02芯片可进行正常的数据接收检测。
图1鼠标芯片传感器装配原理图
2.3P/S2信协议原理
鼠标与单片机的数据通信方式采用PS/2通信协议。
根据协议要求,单片机对鼠标的控制只需把时钟线拉低最少100us以上来禁止其通信,并且单片机拉低数据线使之处于请求发送状态。
如图2所示,当时钟线升为高电平后被PS/2设备重新拉低,即可开始单片机向鼠标的通信。
1
冃H
AT89S51
Gonoooooocv
——-1——————————————————————————I———uru^^LnmmjiAj
Mouse
图2单片机对PS/2设备通信的时序图
因单片机对总线具有控制权,当鼠标要向单片机发送信息时,必须先检查时钟线是否为高电平。
如图3所示,当时钟线出现高电平,数据线出现低电平,表明鼠标请求发送,单片机可以接受来自鼠标的数据。
E^Q_rLrLrLrLrLrLrLrLrLru
Mouse
奇偶枝验位gM^rvjzzooczooczoczr-
停止
5/14
图3鼠标对单片机通信的时序图
按照鼠标的PS/2协议规范,实际编程时先对鼠标发送Oxff使其复位,默认采样频率为100次/秒,缩放比例1:
1,数据报告禁止。
使用Oxea命令进入stream模式、使用0xe8,0x03命令设置解读度为8点/毫M使用0xf4命令使能数据报告。
配合C8051F020单片机的定时器功能,将其时间常数设置为0.1s,每次中断时发送0xeb命令读取位移数据信息,每发出一次,单片机接收到的位移数据包都包含有位移信息和按键动作信息。
具体格式为表1所示。
編译时也只緡提取X3的有效数据包即Y方向位移赠屋
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BITO
字节1
Y適出
Y方向
X方向
1
中按键
左按犍
右拶键
字节2
X方向位移呈信息
字节3
Y方向位移駅信息
字节4
E方向位移虽:
信息
Ai1.北熨亂标搖牧S!
(拥样式
2.4OMO2数据处理
图4是我设计的OMO传感器的电路原理图:
图4OMO2传感器的电路原理图
首先打开定时器先采集当前位置的坐标,然后定时器开始计时,定时时间为20ms后执行中断程序,同时测量当前的坐标。
通过OMO传感器采集的是位移信息,用不到滚轮的信息和按键的信息这样就可以将它们的数据给屏蔽掉。
只需测量出两点X,丫方向上的位移。
计算两点总位移的方法是分别取X方向和丫方向上的绝对位移量,然后计算这两个位移量的平方根。
这样计算出该段时间的位移量然后用该段时间的位移量除以这段时间便可以得到速度了。
另外采集角度的时候也是采集两点的位移,这两点不能离得太远。
根据数学上的积分可以认为:
这两点间的直线距离就可以近似看做这个圆弧的长度。
根据圆弧的半径就可以计算出圆弧的角度。
2.5电机驱动的设计
ULN2003是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
比如伺服电机、步进电机、各种电磁阀、泵等驱动电压高且功率较大的器件。
我们在这里选用ULN2003芯片作为步进电机的驱动芯片,因为这个芯片的电路设计非常简单并且驱动能力也符合设计要求。
ULN2003
图5ULN2003电路的原理图
L298N是SGS公司的产品,内部包含4通道逻辑驱动电路。
是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接
收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。
我们选用L298N来驱动直流电机原因是直流电机的电流比较高,L298N驱动能力完全满足直流电机
的需要。
图6为L298N电机驱动的原理图
图6L298N电机驱动的原理图
2.6系统显示模块
我们采用的现实模块是点阵图形式液晶显示模块,点阵数为64行X128列,每屏可以显示4行X8个汉字(每汉字16X16点阵〉。
该显示模块有2片HD61202(乍为列驱动器和1片HD61203作为行驱动器,可显示64K的点阵图形。
其主要特点是能与80系列微处理器直接接口,可以进行图形、字符及图形和字符混合3种方式显示。
3、产品简介
下面是我们做的模拟系统的图片:
上图为整个模拟系统的平面图,主要包含速度检测系统、向心力检测系统、底盘模拟系统、灯模拟系统和液晶显示模块。
液晶主要用于显示轮子的速度和电机当前占空比,下面分别对其他四模块进行简要说明:
向心力采集系统
向心力采集模块主要用于采集向心力,此模块通过两根橡皮筋和一个0M02
传感器组成,当有一定的离心力时,系统根据收到的离心力会偏移到一边,根据偏移的位移,检测向心力的大小,从而控制底盘改变一定角度。
速度采集系统
速度采集模块主要用来检测轮子的速度,0M02芯片可以检测到通过发光二
极管发出的光线,根据透镜反射回来的光线,可以检测到转动物体的速度。
底盘模拟系统主要由一个步进电机组成,此模块可以根据向心力检测系统检测到的数据对模拟底盘进行控制,让模拟底盘产生一定的倾角,可以让人在转弯时不至于因为离心力太大而产生不适的感觉。
汽车灯模拟系统主要由一个步进电机组成,此模块可以根据检测到的方向盘的转动方向而改变照射的方向,防止转弯时产生的盲区照明现象。
4、产品特色
在机电产品设计中,有时需要检测物体的相对运动,包括运动方向和运动距离。
若采用机械式的结构,由于频繁的机械运动而发生故障,导致精度下降甚至失效,维修起来也不方便。
另外它需要两个物体表面相接触,靠相互问的摩擦进行工作,这在某些场合是不许的。
解决方案之一就是采用光电器件,运用光学原理来测定运动。
“水平相对位移检测系统是基于鼠标原理通过光电传感器来测量位移。
我们通过市场调查发现,虽然测量位移方法很多,但近年来比较流行的是光电位移测量技术。
这种测量技术不但可以高速移动探测,而且测量精度有了很大的提高。
光电位移测量技术愈来愈被国内外专家学者和有关部门重视。
而我们采用的0M0传感器它可提供高达400点/英寸的分辨率以及16英寸/秒以内的速度检测,并且测速是不需要机械间的接触。
这样不仅大大提高了测量的精度还大大延长了产品的寿命。
汽车作为我们生活中比较常用的本系统采用了OMO传感器来测量速度和角度完全满足了在汽车工程中的应用。
此产品改善汽车驾驶的安全性和舒适性:
1、此系统就可以实时采集当前的发动机转速和发动机的负载从而调整发动机的输出功率来避免汽车突然熄火,大大提高了汽车驾驶的安全性。
2、此系统设计的前大灯可以随着方向盘的转动而转动一定的角度,消除了汽车在黑夜行驶转向时的盲区,拓宽了司机在晚间驾驶汽车转向时的视野,提高了汽车驾驶的安全性。
3、此系统设计的汽车底盘可以随着汽车转向时的向心力而转动一定的角度,使乘客所受重力和支持力的合力与离心力抵消,使乘客感觉不到离心力的存在,从而大大提高驾驶的舒适性。
5、总结
经过辛勤的努力,在小组各成员的努力下,我们顺利完成了作品的设计与制作。
但是我们的作品也有一些缺憾,值得改进。
我们在制作过程中遇到了种种困难和障碍,但是我们知道取得成功挫折是难免的。
通过这次制作过程我们学到了很多知识,让我们领悟了想成功就要付出努力,没有最好只有更好的道理,制作的过程也就是积累经验的过程,在以后的学习中我们会再接再厉,争取取得更好的成绩,做出更好的作品。
参考文献:
[1]阎石.数字电子技术基础(第五版>.[M].高等教育出版社.2006.5
[2]华成英.模拟电子技术基础(第四版>.[M].高等教育出版社.2006.5
[3]顾慧芳.手把手教你51单片机.[M].电子工业出版社.2009.1
[4]
.2008.9
张艳虹.基于Proteus的51系列单片机设计与仿真.[M].电子工业出版社
[5]杨路明.C语言程序设计教程.[M].北京邮电大学出版社.2009.01
附录:
#include<12864.h>
#include
sbitmouse_SDA=PM7。
//数据线P3_5
sbitmouse_CLK=P1A6。
//时钟线P3_3
sbitpwmout=P1A0。
sbitdianji=P2A4。
sbitk1=P2A6。
sbitk2=P2A7。
bitflag1=0。
ucharcount=0,zz=0,fz=0,zz1=0,fz1=0。
voidmain(>
{
WDTCN=0xde。
//关闭看门狗
WDTCN=Oxad//先写入Oxde在写入Oxad
SYSCLK_Init(>。
PORT_Init(>。
PCA_Init(>。
lcd_init(>。
/*xianshi(0,0,"X坐标:
">。
xianshi(1,0,"Y坐标:
">。
xianshi(2,0,"按键:
">。
*/
dspeed(>。
timeri(>。
while(1>
dspeed(>
TR0=1
//speed(>。
//key(>。
zhengz1(zz1>。
zz1=0。
fanz1(fz1>。
fz1=0。
zhengz2(zz>。
zz=0。
fanz2(fz>。
fz=0。
}
}
//50Hz
voidtimer0(>interrupt1
{
TR0=0。
TH0=0x01。
TL0=0x60。
mouse_send_data(0xf4>。
receive=receive_1frame(>mdate[0]=receive_1frame(>mdate[1]=receive_1frame(>mdate[2]=receive_1frame(>mdate[3]=receive_1frame(>weiyi(>。
key(>。
if(flag1==0>
{
dianji=1。
if(move_x>10000>
{
xc=move_x-10000。
else
{
xc=10000-move_x。
}yc=abs(move_y-10000>。
move_x=10000。
move_y=10000。
speed(>。
}
else
{
dianji=0。
}
TR0=1。
}