TSL1401线性CCD应用笔记
蓝宙TSL1401线性CCD应用笔记
本文对第八届飞思卡尔智能车竞赛指定用线性CCD使用相关经验跟大家分享一下,本文不再讲述线性CCD基本原理,基本原理大家可阅读芯片手册,本文重点介绍使用线性CCD时需要考虑的一些问题及注意事项,并给出了参考解决方案。旨在让大家更有效地使用和深入研究TSL1401线性CCD模块。
环境光影响问题
试验表明TSL1401线性CCD的输出信号和环境光线密切相关,在自然光条件比晚上灯光下AO引脚输出电压值高出很多,正对着光线比背着光线输出电压高,白炽灯光下比日光灯下输出电压高。因此,同一参数(曝光时间、镜头光圈)难以适应各种环境,在光线较弱环境下的参数在强光下会出现输出饱和,在较强光线下调节好的参数在弱光下输出电压过低,甚至处于截止状态。在智能车应用中,白天自然光环境和晚上灯光环境、正对光和背光、不同的比赛场地之间都不能采用相同的曝光参数。与输出电压密切相关的参数是曝光量,曝光量取决于CCD模块所采用的镜头光圈大小和程序所控制的曝光时间。智能车为适应各种运行环境,必须实时感知环境,并根据环境闭环调节曝光量,使得在不同环境中曝光量都处于一个合理的范围,这样才能保证在不同环境中CCD输出电压在合理范围,以利于算法提取黑线信息。镜头相关参数一旦选定在智能车运行难以改变,曝光时间比较容易通过程序控制,因此比较容易实现的调整曝光量方法是通过软件调整曝光时间。曝光时间调整方法见“曝光时间自适应策略”一章。
输出信号放大
根据上一章所述,可以通过调整曝光时间来适应各种环境,在弱光环境增大曝光时间,在强光下减小曝光时间。但是曝光时间不能无限增大的,因为增大曝光时间势必降低采样率(每秒采样次数)采样率低控制周期就长,智能车反应就慢。根据历届摄像头车参赛经验,1米的前瞻,3.5m/s的速度情况下,控制周期不得高于20ms(采样率不得低于50Hz),否则智能车转向机构反应再快也无法很好跟随赛道而冲出赛道。控制周期不高于20ms就意味着曝光时间不能超过20ms。试验时,我们将TSL1401线性CCD曝光时间调整到20ms(采用周期20ms),分别在强光、弱光、灯光不同环境进行采用,采样数据表明环境光线较弱时CCD输出信号较低,以致赛道黑线信息不够明显,晚上日光灯环境下输出信号电压值更低,几乎接近0,根本无法辨别赛道信息!由于智能车制作和调试很大部分时间都是在晚上,因此必须在不降低采样率的情况下,增大晚上弱光环境下线性CCD的输出电压。要增大输出电压,简单有效的方法就是放大输出信号,我们可以采用运放来放大AO输出信号。蓝宙电子实践表明增大运放能非常有效的解决弱光时输出电压低问题,在晚上环境同样能达到50Hz的采样率,这是无运放的线性CCD无法达到的。
为了能保证输出电压在合理范围(不饱和、不截止、能分辨赛道黑线),需要根据选
芜湖蓝宙电子科技有限公司 www.landzo.cn 蓝宙
TSL1401线性CCD应用笔记
定的镜头确定运放放大倍数。以下是蓝宙电子线性CCD模块(镜头为无畸变镜头)中的运放电路图:
其中运放放大倍数A = 1+R5/R4,此电路中A = 11,也就是对TSL1401的AO信号进行11倍放大。
由于增加了运放,白天环境下的采样率可以调节到更高,甚至可以达到100Hz。增加了运放也会带来一个问题,就是在全黑的环境(例如盖上镜头盖)下线性CCD的输出已经不再接近0V,这里我们称全黑的环境对应的电压为暗电压,蓝宙电子设计的CCD模块暗电压是1V左右。其实暗电压完全不影响上层软件提取赛道黑线,我们可以把这个暗电压当做信号中的直流分量,将采集的每个像素点的电压减去暗电压就可以了,该方法已经验证可行,读者也可以实践。
曝光时间自适应策略
如果竞赛环境各个方向的光线均匀一致,我们可以在赛车出发前根据环境光线调节一个合理的曝光时间,以得到合理的输出,这样赛车就能采用一个固定的曝光时间跑完全程。但是这是最理想的情况,实际比赛环境远没有假设的这么理想,实际比赛场馆会有窗户,赛道顶上也可能有灯,因此赛车的前进方向正对窗户和背对窗户不能采用同一曝光参数,电灯下和里灯较远处也不能采用相同曝光参数。换句话说要想赛车完整跑完全程需要适时地、动态的调整曝光参数。
以下就蓝宙电子研究的曝光时间自适应策略跟大家做一个介绍,策略示意图如下:
光线
e 设定曝光量 曝光量调节器,Kp 曝光时间T 线性CCD模块 计算实际曝光量 AD转换
从上图可看出,该曝光时间自适应策略时间就是一个典型的闭环控制,控制对象是
芜湖蓝宙电子科技有限公司 www.landzo.cn 蓝宙
TSL1401线性CCD应用笔记
线性CCD模块的曝光时间,反馈是线性CCD感应到的曝光量。调节的目标是设定曝光量。控制器的工作原理是将设定的曝光量减去实际曝光量,差值即为曝光量的偏差e,曝光量调节器用Kp乘以e再加上上次的曝光时间作为新的曝光时间进行曝光,曝光时间调整后直接影响实际反馈的曝光量。如此反复进行调节就能达到适应环境光的目的。需要大家注意的是实际曝光量并不是某一个像素的曝光量,因为单个像素是无法反应环境光强度的,实际曝光量应该是一段时间和一定像素点强度的函数。蓝宙电子的做法是取一次采集到的128个像素电压的平均值作为曝光量当量,设定的曝光量也就是设定的128像素点平均电压。
采用该策略后线性CCD采集到电压值在正常的智能车运行环境中都能保持在合理范围内。
4,曝光自适应程序流程
蓝宙提供的曝光自适应程序流程如下图所示:
20ms周期执行 1ms中断程序 开始 开始 毫秒计数器加1 CCD采样 计算曝光点(毫秒值) N 计算实际曝光量 计算自适应曝光时间(ms) 曝光点=计数器? Y 开始曝光! 结束 计数器 = 20 ? N Y 计数器=0,20ms标志位置位 结束 其中主程序20ms执行一次,主要完成CCD采样、计算实际曝光量、计算曝光时间。
采集到的128像素数据保存在Pixel[128]数组中,实际曝光量当量(128像素平均电压)保存在PixelAverageVoltage全局变量中,曝光时间(单位ms)保存在IntegrationTime全局变量中。
芜湖蓝宙电子科技有限公司 www.landzo.cn 蓝宙
TSL1401线性CCD应用笔记
曝光控制中断程序每1ms执行一次,每次中断将TimerCnt20ms计数器自加,根据曝光时间IntegrationTime计算曝光点integration_piont(取值范围2~20),如果曝光点等于当前计数器则开始曝光,当TimerCnt20ms等于20时,重置TimerCnt20ms,同时置位TimerFlag20ms标志位,通知主程序20ms程序执行。
曝光控制原理实际就是发送一次启动和移位时序,从TSL1401的时序图可看出每128时钟序列的前18个周期是内部复位(internal reset),这18个周期不仅不曝光,还会将每个像素积分器电容放电,将积分电压清零,18个周期后的便开始积分。中断程序就是根据曝光时间在合适的曝光点输出一个内部复位序列。下一个20ms到达时会进行数据采样,采集到数据对应的曝光时间就是输出内部复位到下次采样的时间。而上一次20ms采样到本次输出内部复位信号之间的曝光将在本次曝光时清除,数据没有读取(不进行AD转换)。
20ms 曝光时间 1ms * 20 开始曝光 时间轴
采样点 曝光开始点 采样点
注:曝光点 = 20 – 曝光时间,上图中曝光时间 = 8ms,曝光点 = 12ms
具体的采样机自适应程序源码请参看蓝宙电子提供的例程。
芜湖蓝宙电子科技有限公司 www.landzo.cn 蓝宙
TSL1401线性CCD应用笔记
如何提取赛道黑线
采集到的128像素点电压绘制的曲线如下:
减去暗电压带来的直流分量后绘制的曲线如下:
从上面的图像可看出,黑线特征非常明显,可以采用找凹槽算法准确的提取黑线位置。单行黑线提取算法如下,该算法之前是用于面阵摄像头的,由于线性CCD相当于面阵摄像头的一行,因此该算法同样适用于线性CCD。该算法并非蓝宙所创,算法原出处是第二届智能车冠军上海交大参赛队,本人第三届智能车借鉴了该算法,实践证明该算法提取黑线准确可靠,适应性强。
芜湖蓝宙电子科技有限公司 www.landzo.cn 蓝宙
TSL1401线性CCD应用笔记
上位机通信
调节面阵CCD或CMOS时可以采用视频采集卡或电视机观看图像信息,或者用来调节镜头焦距。目前还没有能显示线性传感器图像的采集卡。为了方便用户像调试面阵CCD一样调试线性传感器,蓝宙电子特意给用户开发了一款调试软件CCDView,单片机采集传感器数据,通过串口实时的发送到上位机CCDView软件,CCDView将数据按照灰度条和曲线两种形式显示出来了,用户可以直接在CCDView中观看线性数据、调节镜头焦距、对传感器视场进行标定。 以下是CCDView软件界面:
很多用户拿到线性CCD后不知道如果将图像显示到电脑上观看。以下介绍以下,如何用XS128系统采集数据,并在电脑上显示数据。
1, 正确地连接线性CCD到XS128系统板(连接关系见下图) 2, 将系统板串口连接到电脑串口
3, 给单片机供电,将程序烧写到单片机,运行程序
4, 打开电脑上的CCDView,配置串口号和波特率(蓝宙程序波特率是115200),点击开始。(在WIN7中使用该软件需要用右键à以管理员权限运行方法打开)
芜湖蓝宙电子科技有限公司 www.landzo.cn 蓝宙
TSL1401线性CCD应用笔记
下面是采用蓝宙例程对应的连接方法。
如果按照上述步骤操作后仍然不能显示,可以先暂时关闭CCDView软件,打开串口大师之类的串口调试软件,按下图所示配置串口参数,打开串口看看能不能收到下图所示这样的数据流。如不能收到或收到乱码则说明串口连接或者通信协议有问题,请仔细检查后再试。常见问题如下:
1, USB转TTL和USB转RS232用混了,系统板于USB串口接口类型要一致。 2, 串口波特率不一致。 3, 串口连接错误。 4, 通信协议错误。
正确的数据流!
芜湖蓝宙电子科技有限公司 www.landzo.cn
因篇幅问题不能全部显示,请点此查看更多更全内容