
飞思卡尔——光电组.ppt
35页飞思卡尔智能小车教程,——光电组,,,光电组技术讲座主讲人:赵阳,一、光电车的布局、光电车的硬件、光电车的软件、个人经验,一 、光电车的布局,,,,,,,,,光电检测原理,光源发出的光线经过被测物体反射后,由光敏元件接收,当照射在黑线上时,反射光较弱,照射在白板上时,反射光较强光敏原件可以检测到光强的不同,将光强信息转化为电压信号通过单片机检测电压的不同来识别传感器是否处于黑线上按传感器输出信号不同,检测方法分两种:数字量输出(调制,以我们学校为代表)和模拟量输出(A/D,以清华为代表)二、光电车硬件,元器件标号基本知识:R电阻标号识别 C电容标号识别←无k是标号有k就是阻值→,光电传感器:发射电路,,注意:⒈我们使用的接收管只能接收调制光,因此发射管必须经过调制电 路发射调制光,否则接收管无法接收光信号;⒉调制管管脚(正面看):中间+5V,左OUT,右悬空,调制是为了将连续光变成频率约180kHz的光脉冲,,,,发射管分类:LED发光二极管——基本技术要求最低,也是最基本最常见的智能车传感器 有可见光和红外两种由于普通连续光传感器易受外部环境光线干扰,对环境的适应能力较差,所以要使用经过调制管调制的LED光电传感器来避免外部连续光的干扰。
激光发射管——进阶采用激光发射管与可见光LED原理相同,但是由于激光的特性(功率大、不易散射)可以得到较远的接收距离(即前瞻)前瞻决定反应速度,所以采用激光发射管的车相对于LED有着较大的优势,更容易提速和控制但是,激光传感器也有着造价非常高,驱动电路复杂、接收时容易相互干扰,调试难度很大,容易烧坏等缺点光电传感器:接收电路,注意:⒈接收管信号端接发光二极管显示,串联的电阻也同时起到输出信号上拉的作用⒉接收管管脚(正面看):中间OUT,左负右正,接受电路的主要元件是接收管,是光敏三极管的一种一般的接收管 接收到光时输出低电平(输出0),即在白色赛道上 接收不到光时为高电平(输出1),即在中心黑线上,传感器硬件原理图,,传感器元器件清单,发光二极管 × 8 发光二极管(贴片封装0805) × 8 接收管 × 8 调制管 × 4 三极管8050 × 4 电位器500Ω(滑动变阻器) × 8 电容0.1μF(贴片封装0603) × 8 电阻22Ω(贴片封装0805) × 16 电阻1.5kΩ(贴片封装0805) × 8 接口(双排10针) × 1,传感器PCB图,,主板:电源电路,2940/7805管脚定义:左输入(+7~12V)中地(0V)右输出(+5V),主板:接口电路,,主板:电机驱动,,主板部分元器件清单,5V稳压芯片LM2940或LM7805 × 1 电机驱动芯片MC33886 × 1 电容0.1μF × 3;电容47μF × 3(或100~220μF都行) 电阻10kΩ× 2;电阻1.5kΩ× 2 双排10针接口(传感器接口) 双排针/排座(单片机最小系统板转接) 单排针/排座(33886、舵机转接) 开关、电池电机接口、电源指示灯等,三、光电车软件,1、光电传感器路径识别状态分析2、路径识别算法,1、光电传感器路径识别状态分析,由于往届竞赛对光电传感器排布方式研究已经比较深入,传统的“一”字型排布方式在众多排布方式中效果显著,是最常用的一种排布方式。
模型车也充分利用了往年的成熟的传感器技术,其排布方式如图传感器处理原理,通过传感器所有接收管采集的信号状态,就可以得到哪些传感器在黑线上,进而得出车身的位置,做出相应的动作(加减速、转向),,传感器状态举例,,黑线在中心 00000011000000黑线稍偏左 00000111000000黑线偏左 00110000000000黑线相当偏左 01000000000000没有黑线(盲区) 00000000000000,将传感器状态二进制化后,单片机就能得到赛道信息,如下(14个发射与接收):,传感器在起点与十字路口,,如何分辨是后期重点,2、路径识别算法,传感器相关初始化 void PORT_Init(void) {DDRA = 0x00; //端口A方向输入PUCR_PUPAE = 1; //端口A信号上拉 PORTA = 0x00; //端口A初值为0},寄存器按位赋值举例PUCR_PUPAE = 1; (PUCR |= 0x01;),,,传感器状态采集: void Sensor_collect(void) //采集传感器状态 { test = PORTA; //右侧4灯状态进A口sensortemp = (test },,定义转向和速度的PWM波控制参数: #define right4 2200 #define right3 2100 //右转时转向舵机PWM波的高电平值 #define right2 1950 #define right1 1870 #define middle 1800 //舵机中值,对应约1.5ms的PWM高电平 #define left1 1730 #define left2 1650 //左转时转向舵机的PWM波高电平值 #define left3 1500 #define left4 1400#define speedhigh 2000 //定义直道时电机的PWM波高电平值 #define speedlow 1000 //定义弯道时电机的PWM波高电平值,,传感器状态判断: void Sensor_judge(void) { switch(sensortemp){ case 0b10000000 : pwmvalue = left4;speed = speedlow;break;case 0b00000001 : pwmvalue = right4;speed = speedlow; break;case 0b00011000 : pwmvalue = middle;speed = speedhigh; break;……default:break;} },,for(;;) { Sensor_collect(); //传感器采集Sensor_judge(); //传感器判断sensor = pwmvalue - pwmvaluetemp; if(absabsabs(sensor) >= 300) //消除误差{pwmvalue = pwmvaluetemp;} pwmvaluetemp = pwmvalue; //保存本次舵机值 PWMDTY01 = pwmvalue; //为舵机赋值 PWMDTY23 = speed; //为电机赋值},四、个人经验,⒈光电传感器的改良⒉调试与故障分析,传感器的改良,1.改良发射管(前瞻度): 2.改良接收管(前瞻度): 3.增加发射数量(宽度): 4.发射管的布局(精度): 5.抑制相互干扰(精度): 6.传感器板安装(重心): 7.传感器轻量化(重心): 8.软件优化,调试与故障分析,传感器的调试:调灯的方向和电阻,防止相互干扰,黑线白线都要测试,使用极限距离的三分之二就够了 ①传感器不亮: ②接收管无信号:硬件问题:多看原理图,多利用万用表和示波器,沿着信号或电源逐步 排除问题。
焊接的同学也请仔细,尽量将错误扼杀在摇篮中 软件问题:先检查语法,再看逻辑顺序,最后再查参数,多利用实时调 试工具查看各变量数值是否正确平时多注释方便检查 先排除硬件问题,再看软件,胆大心细,多问多学小心交通事故:传感器很脆弱,一定要装防护杠! 爱惜自己的车,也请留意别人的车~,谢谢⌒_⌒ 愿大家的爱车早日上路,。
