第五讲:智能车检测技术一、概述在这一讲中,为大家介绍智能车的眼睛——赛道传感器。
赛道传感器的数据采集与处理是整个智能车制作调试中至关重要的一环,车在赛道上的奔跑可就靠它指路了,赛道传感器调试不好的话再厉害的控制算法也起不到作用。
在第一讲中简单介绍过智能车的传感器分类,用于检测赛道的传感器主要有线阵摄像头、面阵摄像头、电磁传感器等。
线阵摄像头的图像传感器采用的是CCD(Charge Coupled Device,电荷耦合组件),是应用在摄像、图像扫描方面的高端技术组件;面阵摄像头的图像传感器采用的是CMOS(Complementary Metal-Oxide Semiconductor,附加金属氧化物半导体组件),大多应用在一些低端视频产品中。
但是这样的定位并不表示在具体的摄像头使用时,两者有很大区别。
事实上经过技术改造,目前CCD和CMOS的实际效果的差距已经大大减小了。
而CMOS的制造成本和功耗都要低于CCD不少,所以很多摄像头生产厂商采用的都是CMOS镜头。
用于智能车比赛的线阵摄像头通常使用TSL1401,它可以一次成像128×1的图像。
线阵型CCD成本较低,如果加以运动机构,也可以扫描面阵图像,例如:复印机中实际上就是一个线阵型CCD,通过运动机构和线阵型CCD相互配合,就可以把整个图片扫描下来,不过需要一定的时间。
用于智能车比赛的面阵摄像头分为数字摄像头与模拟摄像头。
最主要的区别在于摄像头提供给我们的数据是数字信号还是模拟信号。
数字摄像头的信号线最少需要8根,再加上行中断,场中断,像素中断,电源和地线,使得接线变得比较复杂,摄像头体积也偏大,但由于可以直接得到数字信号,在一定程度上降低了使用难度;模拟摄像头只有三根线:电源线、地线、信号线,而且体积相对较小,可以有效的降低车体的重心,但需要专用芯片进行解码。
电磁赛道传感器采用电感和电容并联产生相应的特定频率谐振,其频率的设定为跑道谐振频率的附近,再通过谐振选频、放大,获取跑道上由变化的电流产生的变化的磁场,从而产生相应的交流电压,再将相应的交流电压进行放大、整流和滤波,从而得到单片机可以采集的电压。
下面对电磁传感器的原理及运用作详细的介绍。
二、电磁检测的电路原理电磁检测电路的组成如图1所示,下面我会对这四部分依次讲解。
图1 电磁信号处理电路的组成1.LC 谐振电路智能车电磁组赛道中央铺设了一条0.1mm~1.0mm 的漆包线,其中通有20KHZ 、100MA 的交变电流,在赛道中央产生磁场。
大家仔细观察智能车上的传感器电路板,会发现从左到右共有4组图2所示的电感与电容的组合,这个组合就形成了一个电感电容并联谐振电路。
电感采用10mH 的工字电感,电容采用精度稳定性较高的校正电容,容值为6.8nF ,根据以下公式计算得到并联谐振电路谐振频率:LCf π210=计算得到10mH 电感与6.8nF 电容的谐振频率为19.3kHz ,这是使用市面上容易获取的电容、电感所得到的最接近20kHz 的谐振频率。
图2 电感与电容的组合这个电路会与赛道产生的磁场发生电磁感应,在电感两端产生感应电动势,在一个水平面上电感与赛道中央漆包线距离越近产生的感应电动势就会越大,呈现图以,假如将电磁传感器垂直对称放置于赛道漆包线上方并且水平的话,采集到的数据也会对图3 水平电感感应电动势与位置关系运算放大电路U-STM32-F101主控电路板上,对谐振电路输出的震荡波形进行放大滤波的R710K5%R810K5%由于运放的差模输入电阻也很大,一般通用型运算放大器的输入电阻都在121101R RP R U U i o ++=放大倍数A 为O U 与=U U i 的比值,这样可得到同向比例放大器放大倍数的计算公式:121101R RP R A ++=根据上面放大倍数的计算公式我们可以计算出这个同向比例放大电路的放大倍数在100~150倍之间,也就是说将LC 谐振电路输出的感应电动势放大了一百多倍,通过图7我们可以看到实际的输入输出波形:图7 同向比例放大电路的输入与输出波形看到图7大家是不是会感到有点不太对劲?为什么放大器输入是有正负两个半波的,怎么输出就只有正半波了?原因就在我们的放大器的使用上。
大家可以看到图6的放大器使用的是单电源,引脚4并没有使用负电压的电源而是直接接地了,这就导致我们的输出波形的负半轴没有了。
那这样是不是就错了?当然是没错的,因为我们使用的STM32单片机的ADC 可输入电压范围为0~3.6V ,不能将负电压输入ADC 引脚;其次,正半波的波形就已经可以反映出磁场强度的大小了。
通过图7可以知道输入波形的峰峰值大约53mV ,输出波形的峰峰值大约6V (峰峰值指的是波形最高点与最低点的电压差,输出波形只有半波,这里的放大倍数要用全波来算,因为这里的半波是由于只有正电源造成的),算一下实际的放大倍数大约是113倍,在我们计算出的放大倍数范围之内。
实际的运算放大器应用中,我们还有可能用到反向比例放大电路,如图8所示:VCC9 反相比例放大电路的输入与输出仿真波形由于最终我们需要的是电感两端感应电动势的大小,虽然图7图11 一阶RC低通滤波器的幅频曲线通过图11我们可以看到当F=20KHZ,Fc=1KHZ时高频成分已经衰减到了之前的大约0.05倍以下。
图12就是滤波完成后的波形,可以看到波形几乎就是一条直线。
图12 RC一阶低通滤波电路输出波形但放大后还是可以看到20KHZ的波形(如图13),峰峰值只有大约40mV,不过波形已经变成了三角波。
这是由于电容不停的充电放电,并且充电与放电周期不同导致了一个斜三角波形的产生。
图13 RC一阶低通滤波电路输出波形的交流成分波形(交流耦合下)总结一下,整个电磁信号的处理过程如下图图14:图14 电磁信号处理电路三、电磁信号的ADC采集与数据处理方法经过滤波后的信号已经变成了一个基本平稳的电压信号,这个电压信号会随着我们将对应的电感靠近赛道中央而变大,而单片机只需要采集出这个电压信号的幅值就可以知道传感器偏离赛道的远近了。
1.电磁信号的ADC采集第三讲我们讲过了ADC的采集与OLED的使用,那下面我们就将ADC采集到的数据在OLED上显示出来。
1)、首先进行ADC与OLED的初始化。
将BSP_Initializes()函数中对应的函数解除注释就可以了。
图15 ADC与OLED的初始化2)、调用OLED_ShowNum函数,关于这个函数的讲解在第三讲已经讲到了。
g_ADC1_ConvertedValues数组里存储了当前采集的四路ADC数据,这里将四个数据逐一显示出来。
图16 显示ADC数据3)、程序编译通过后下入单片机后屏幕上就会出现四个数据了。
上一步我们将传感器数据采集出来之后,其实就可以进行下一讲,用控制算法来让车跑起来了。
但是这样未经处理的数据可能跑的不够理想。
大家先耐着性子看完下面两节,加上这两个算法后传感器的数据马上就能改头换面。
2. 将传感器数据归一化举个例子:当引导线电流为100mA时,单片机采集到处于引导线正上方1号线圈AD值为500,这时假设我们程序根据这个AD值等于500来判定车模处于赛道中间位置,当在环境(电流值、线圈规格、温度等)不变的情况下,这样处理是没有问题的。
当我们换一个赛道电流源时,由于两个电流源之间存在差异,同样设定为100mA ,但是引导线实际电流变为110mA 。
此时处于引导线正上方1号线圈AD 值为变为600,而在偏离赛道一定距离时AD 值才为500,而我们程序里还是通过1号线圈AD 值为500来判定车模处于中间位置,这时就出现了问题!为了解决上述例子里的问题,我们引入归一化的思想。
数据归一化的目的是将所有电感 AD 转化的结果归一化到了一个同一的量纲,其值只与传感器的高度和小车的偏移位置有关,与电流的大小和传感器内部差异无关。
归一化包括传感器标定与数据归一化。
传感器的标定就是获取传感器的转换结果的最值过程,主要是为了数值归一化做准备,在单片机上电之后左右晃动车模,采集每个电感的最大值和最小值。
归一化公式为:K MIN MAX MIN AD value ⨯--=其中AD 为传感器实时采集的值,MAX 是标定时采集到的最大值,MIN 是标定时采集到的最小值,K 为归一后,输出的最大值,value 是经过归一化之后的,代表磁场强度的值。
还是上面的例子,我们设1号线圈在偏离赛道最大时AD 值为0,即MIN=0;当处于电流为100mA 的引导线正上方时AD 值为500,即MAX=500。
设K=100,则归一化后,当换电流源后。
这样我们程序里可以100100050005001=⨯--=value 100100060006002=⨯--=value 利用1号线圈AD 值为100判定车模处于赛道中间位置,可以看出归一化后的值不受赛道电流的影响了!在外界环境变化时,我们只需采集最值就可以实现对赛道的适应。
下面给出归一化C 代码:for(i=0;i<4;i++){sensor_to_one[i]=(float)(AD_valu[i]-min_v[i])/(float)(max_v[i]-min_v[i]);if(sensor_to_one[i]<=0.0)sensor_to_one[i]=0.001;if(sensor_to_one[i]>1.0)sensor_to_one[i]=1.0;AD[i]=100*sensor_to_one[i]; //AD[i]归一化后的值,0-100之间}上面是对四个线圈AD值的归一。
注意:max_v[i] 和min_v[i]是在车模起跑前采的。
调试中由于谐振电路电容与电感的差异导致四路传感器某几路信号过弱,通过电位器调大对应一路的放大倍数也没用时,使用归一化算法也可以有效实现某路AD值的对应比例放大。
3. 电磁传感器对应的偏差计算方法偏差计算是电磁车至关重要的一个步骤,想要车模沿着赛道中心线运行,首先要提取出车模与赛道的偏移量得到一个误差,然后将这个误差送给控制器处理,最后控制器输出信号控制舵机和电机来纠正车模的姿态和控制车子的速度。
如果连控制器的输入都是错误的,怎么能让控制器给出正确的输出呢?E1E2E3E4图17 线圈布局图线圈布局如图17所示,设E2与E3中点垂直于通电导线的横向坐标为X,线圈支架距离引导线垂直高度h=20cm。
根据传统的E2- E3做差来确定偏差,如图18所示。
图18 作差曲线可以看到在(-10cm,10cm )区间内曲线是线性的,即一个偏差可以唯一确定一个X ,在这个区间内作差法是可取的。
但是在此区间外由于E2和E3都下降所以偏差也会下降,实际上偏差应该“增大”!因此作差法计算得到的偏差量在一定范围内是可行的,一旦车模偏离中心线的距离超出这个范围,其偏差是不可取的,这也是作差法的最大弊端。