智能车制作

标题: 蓝宙电子线性CCD资料完全开源(官方) [打印本页]

作者: bydes    时间: 2012-12-7 21:37
标题: 蓝宙电子线性CCD资料完全开源(官方)
本帖最后由 bydes 于 2012-12-7 21:43 编辑

    为了感谢广大智能车学生的支持,蓝宙电子科技有限公司现在将我们之前总结的一些经验和调试程序资料完全公开,供广大学生参考学习!其中包括蓝宙电子官方线性CCD使用说明书、蓝宙电子线性CCD研发应用笔记、XS128驱动程序(线性CCD)、MK60驱动程序(线性CCD)、上位机调试软件等

以下为蓝宙电子线性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 无
法达到的。
为了能保证输出电压在合理范围(不饱和、不截止、能分辨赛道黑线),需要根据选
定的镜头确定运放放大倍数。以下是蓝宙电子线性CCD模块(镜头为无畸变镜头)中的
运放电路图:
[attach]36466[/attach]
其中运放放大倍数A = 1+R5/R4,此电路中A = 11,也就是对TSL1401 的AO信号进行
11倍放大。
由于增加了运放,白天环境下的采样率可以调节到更高,甚至可以达到100Hz。增加
了运放也会带来一个问题,就是在全黑的环境(例如盖上镜头盖)下线性CCD的输出已
经不再接近0V,这里我们称全黑的环境对应的电压为暗电压,蓝宙电子设计的CCD 模
块暗电压是1V 左右。其实暗电压完全不影响上层软件提取赛道黑线,我们可以把这个
暗电压当做信号中的直流分量,将采集的每个像素点的电压减去暗电压就可以了,该方
法已经验证可行,读者也可以实践。
曝光时间自适应策略
如果竞赛环境各个方向的光线均匀一致,我们可以在赛车出发前根据环境光线调节
一个合理的曝光时间,以得到合理的输出,这样赛车就能采用一个固定的曝光时间跑完
全程。但是这是最理想的情况,实际比赛环境远没有假设的这么理想,实际比赛场馆会
有窗户,赛道顶上也可能有灯,因此赛车的前进方向正对窗户和背对窗户不能采用同一
曝光参数,电灯下和里灯较远处也不能采用相同曝光参数。换句话说要想赛车完整跑完
全程需要适时地、动态的调整曝光参数。
以下就蓝宙电子研究的曝光时间自适应策略跟大家做一个介绍,策略示意图如下:
[attach]36467[/attach]

线性 CCD 模块的曝光时间,反馈是线性CCD 感应到的曝光量。调节的目标是设定曝光
量。控制器的工作原理是将设定的曝光量减去实际曝光量,差值即为曝光量的偏差e,
曝光量调节器用Kp 乘以e 再加上上次的曝光时间作为新的曝光时间进行曝光,曝光时
间调整后直接影响实际反馈的曝光量。如此反复进行调节就能达到适应环境光的目的。
需要大家注意的是实际曝光量并不是某一个像素的曝光量,因为单个像素是无法反应环
境光强度的,实际曝光量应该是一段时间和一定像素点强度的函数。蓝宙电子的做法是
取一次采集到的128个像素电压的平均值作为曝光量当量,设定的曝光量也就是设定的
128像素点平均电压。
采用该策略后线性CCD采集到电压值在正常的智能车运行环境中都能保持在合理范
围内。
4、曝光自适应程序流程
蓝宙提供的曝光自适应程序流程如下图所示:

[attach]36468[/attach]
其中主程序20ms执行一次,主要完成CCD采样、计算实际曝光量、计算曝光时间。
采集到的128 像素数据保存在Pixel[128]数组中,实际曝光量当量(128 像素平均电压)
保存在PixelAverageVoltage全局变量中,曝光时间(单位ms)保存在IntegrationTime全
局变量中。

曝光控制中断程序每1ms 执行一次,每次中断将TimerCnt20ms 计数器自加,根据
曝光时间IntegrationTime计算曝光点integration_piont(取值范围2~20),如果曝光点等
于当前计数器则开始曝光,当TimerCnt20ms 等于20时,重置TimerCnt20ms,同时置位
TimerFlag20ms 标志位,通知主程序20ms程序执行。

[attach]36469[/attach]
曝光控制原理实际就是发送一次启动和移位时序,从TSL1401的时序图可看出每128
时钟序列的前18个周期是内部复位(internal reset),这18个周期不仅不曝光,还会将
每个像素积分器电容放电,将积分电压清零,18个周期后的便开始积分。中断程序就是
根据曝光时间在合适的曝光点输出一个内部复位序列。下一个20ms 到达时会进行数据
采样,采集到数据对应的曝光时间就是输出内部复位到下次采样的时间。而上一次20ms
采样到本次输出内部复位信号之间的曝光将在本次曝光时清除,数据没有读取(不进行
AD转换)。


[attach]36470[/attach]

如何提取赛道黑线
采集到的128像素点电压绘制的曲线如下:

[attach]36471[/attach]

减去暗电压带来的直流分量后绘制的曲线如下:
从上面的图像可看出,黑线特征非常明显,可以采用找凹槽算法准确的提取黑线位
置。单行黑线提取算法如下,该算法之前是用于面阵摄像头的,由于线性CCD相当于面
阵摄像头的一行,因此该算法同样适用于线性CCD。该算法并非蓝宙所创,算法原出处
是第二届智能车冠军上海交大参赛队,本人第三届智能车借鉴了该算法,实践证明该算
法提取黑线准确可靠,适应性强。
[attach]36487[/attach]
上位机通信
调节面阵CCD 或CMOS 时可以采用视频采集卡或电视机观看图像信息,或者用来调
节镜头焦距。目前还没有能显示线性传感器图像的采集卡。为了方便用户像调试面阵
CCD一样调试线性传感器,蓝宙电子特意给用户开发了一款调试软件CCDView,单片机
采集传感器数据,通过串口实时的发送到上位机CCDView软件,CCDView将数据按照灰
度条和曲线两种形式显示出来了,用户可以直接在CCDView中观看线性数据、调节镜头
焦距、对传感器视场进行标定。
以下是CCDView软件界面:

[attach]36472[/attach]

很多用户拿到线性CCD 后不知道如果将图像显示到电脑上观看。以下介绍以下,如
何用XS128系统采集数据,并在电脑上显示数据。
1, 正确地连接线性CCD到XS128系统板(连接关系见下图)
2, 将系统板串口连接到电脑串口
3, 给单片机供电,将程序烧写到单片机,运行程序
4, 打开电脑上的CCDView,配置串口号和波特率(蓝宙程序波特率是115200),点
击开始。(在WIN7中使用该软件需要用右键à以管理员权限运行方法打开)
[attach]36475[/attach]
下面是采用蓝宙例程对应的连接方法。
如果按照上述步骤操作后仍然不能显示,可以先暂时关闭CCDView软件,打开串口大师之类的
串口调试软件,按下图所示配置串口参数,打开串口看看能不能收到下图所示这样的数据流。如不
能收到或收到乱码则说明串口连接或者通信协议有问题,请仔细检查后再试。常见问题如下:
1,USB 转TTL 和USB转RS232用混了,系统板于USB 串口接口类型要一致。
2,串口波特率不一致。
3,串口连接错误。
4,通信协议错误。
[attach]36477[/attach]
资料附件如下:
[attach]36486[/attach][attach]36485[/attach][attach]36484[/attach][attach]36483[/attach][attach]36482[/attach][attach]36481[/attach][attach]36480[/attach][attach]36479[/attach][attach]36478[/attach]


作者: wolflsh    时间: 2012-12-7 21:41
本帖最后由 wolflsh 于 2012-12-7 21:42 编辑

不错不错,学习学习。
作者: kido    时间: 2012-12-7 21:43
:D不错哦
作者: 智能车瓦力    时间: 2012-12-7 21:46
不错哦!学习学习,虽然还没有入门!
作者: 静静的等待    时间: 2012-12-7 21:47
我顶一下
作者: 夜月L    时间: 2012-12-7 21:47
顶一个
作者: 新天地    时间: 2012-12-7 21:49
不错哦
作者: ludlee    时间: 2012-12-7 21:58
学习一下
作者: subingkiun    时间: 2012-12-7 22:05
学习了!
作者: 黎明sunshine    时间: 2012-12-7 22:08
学习:D
作者: she╭マイ●疼ai    时间: 2012-12-7 22:20

作者: 叶子一哥    时间: 2012-12-7 22:30

作者: hbqyzpy    时间: 2012-12-7 22:35

作者: hbqyzpy    时间: 2012-12-7 22:36
蓝宙,,,顶一下。
作者: 为丞而琳    时间: 2012-12-7 23:44
强力顶
作者: 猎豹115    时间: 2012-12-7 23:47
力挺蓝宙,相信你们会越做越好!!
作者: quzhanguang    时间: 2012-12-8 02:02
表示PE 不会用,希望蓝宙写个简单些的程序,能让大家好移植。
当然比龙丘的delay来产生时序的挫程序强多了。
作者: 伤心豆    时间: 2012-12-8 07:33

作者: 幽墨    时间: 2012-12-8 07:52
受教了!
作者: x舞z    时间: 2012-12-8 09:14
虽然不错,但是对蓝宙CCD有点失望
作者: 十七岁不哭    时间: 2012-12-8 09:28
看看。。。。。。。
作者: abch1120    时间: 2012-12-8 11:32

作者: abch1120    时间: 2012-12-8 11:34

作者: abch1120    时间: 2012-12-8 12:48

作者: Smile_Sun    时间: 2012-12-8 12:55

作者: 389059751    时间: 2012-12-8 14:21
--顶
作者: 蓦然回首mxk    时间: 2012-12-8 15:16
蓝宙终于像个样子了!
作者: qual9109    时间: 2012-12-8 15:26
不错
作者: sangxiaoran    时间: 2012-12-8 21:44
学习
作者: 柯超    时间: 2012-12-8 22:55
quzhanguang 发表于 2012-12-8 02:02
表示PE 不会用,希望蓝宙写个简单些的程序,能让大家好移植。
当然比龙丘的delay来产生时序的挫程序强多了 ...

简单版,非PE版本程序已经写好了,就在这个帖子的附件里面,可以下载的!
作者: 你是我/sun    时间: 2012-12-9 00:36

作者: verm    时间: 2012-12-9 08:28
观望

作者: li853141431    时间: 2012-12-9 14:59

作者: happyxieqiang    时间: 2012-12-9 18:38
看来蓝宙还是不错的 至少没有保守 可为什么论坛上很多车友说蓝宙不好呢
作者: hbqyzpy    时间: 2012-12-9 20:31

作者: 心永恒    时间: 2012-12-10 09:22
说句实话,蓝宙就是蓝宙啊!人家做的东西真的没有什么可挑剔的,最近看了很多人在攻击蓝宙,但是我想说,一般的学生除非天大的事情没有人去那么干,肯定是某些商家在后面搞的,我想说,蓝宙还是坚持自己的路吧,从之前的免费送车模,发奖品,到各种新奇的方案,到资料开源,我想说,蓝宙我顶你!让别人说吧,你按照自己的路走,坚持踏实做事情,广大消费者看在心里!
作者: 你是我/sun    时间: 2012-12-10 12:37
多谢
作者: verm    时间: 2012-12-16 09:49

作者: Аレしêη    时间: 2012-12-16 17:54
感谢楼主!
作者: 戒灬    时间: 2012-12-17 10:44
学习之
作者: chillms91    时间: 2012-12-17 18:11
各种大神 呵呵 谢谢分享了
作者: °冷色    时间: 2012-12-17 20:09
给力!!
作者: 封剑    时间: 2012-12-18 10:09
见识
作者: 杰♂人堂☆涛    时间: 2012-12-20 19:01

作者: verm    时间: 2012-12-24 16:58
学习了
作者: 释是圣杰    时间: 2012-12-26 10:05
学习啦
作者: drting    时间: 2012-12-27 12:20

作者: sanzhong    时间: 2013-1-2 10:10
您好,蓝宙的东西确实还行,想请教一下蓝宙的各位师哥师姐,一些关于TSL101的专业性的问题,望指教:
1、积分电容的作用,积分时间是从哪里结束的呢?按照笔记里所说是从SI来了脉冲之后18时钟之后开始积分,可是不知道是什么结束。
2、按照Datasheet,SI的脉冲来了之后,TSL1401会对所有的像素点的积分电容复位,但是前18个像素点的输出,要在每个脉冲的时候读取AO,这是不是说前18个点的采样不需要积分?
3、嘿嘿,是关于蓝宙的开源程序里的一段,在程序StartIntegration(void)中,SI脉冲到来之后,紧接着来了128时钟,但是没有读取AD(我理解的是这个时候其实是可以读取AO的)。这段程序的用意是说明现在开始积分,是对后来的采样起作用的。不过奇怪的是在后来ImageCapture(),又再次的给了一个SI脉冲,那不是又会把积分电容复位掉?那之前的开始积分不是就成摆设了? 就是说这两个函数是除了读不读AD之外完全一样的?
  小弟再次谢谢蓝宙的各位师兄,能在百忙之中给点指导
   祝愿蓝宙越办越好!!支持蓝宙
作者: dongguotian    时间: 2013-1-7 20:35
多谢
作者: dlyt03    时间: 2013-1-10 23:09
谢谢分享
作者: 我爱小kb    时间: 2013-1-11 00:03
哎呦,好帖,顶呀顶呀顶
作者: 我爱小kb    时间: 2013-1-11 00:03
哎呦,好帖,顶呀顶呀顶
作者: cuijing    时间: 2013-1-11 13:53
不错
作者: 1039074784    时间: 2013-1-11 19:59

作者: 风暴    时间: 2013-1-11 20:03
新手,顶一下

作者: 王海青    时间: 2013-1-12 15:51
黎明sunshine 发表于 2012-12-7 22:08
学习

[attach]39329[/attach]这个波形,对吗?
作者: 封剑    时间: 2013-1-13 21:21
学习了
作者: 望着着    时间: 2013-1-14 20:06

作者: 望着着    时间: 2013-1-14 21:33

作者: AOE    时间: 2013-1-15 11:26
{:soso_e179:}
作者: cmwanysys    时间: 2013-1-15 21:05
{:soso_e179:}
作者: xiongcaifei    时间: 2013-1-15 21:40
虽然不懂,但觉得很有用,顶
作者: 新手请指教    时间: 2013-1-17 20:59
辛苦了
作者: 一毛钱~~~~~~    时间: 2013-1-18 17:28

作者: 赦叶    时间: 2013-1-19 18:53
{:soso_e100:}
作者: xin99    时间: 2013-1-19 19:42

作者: 乔大侠    时间: 2013-1-20 10:21

作者: Sony    时间: 2013-1-21 01:14
ehheeheh
作者: LCALS    时间: 2013-1-22 10:37
太棒了
作者: 微电部队    时间: 2013-1-24 10:50
感谢
作者: 唯楚有青    时间: 2013-1-24 12:09

作者: 七彩人生    时间: 2013-1-24 13:22

作者: 七彩人生    时间: 2013-1-24 13:24
:victory:
作者: chenyuchenyu    时间: 2013-1-25 14:56
感谢分享~
作者: 1504529166    时间: 2013-1-25 18:07
好好好
作者: 墨路相逢    时间: 2013-1-26 17:11

作者: 201000171238    时间: 2013-1-26 22:05

作者: 董小文    时间: 2013-1-28 12:13
:):)
作者: 荷马111    时间: 2013-1-28 15:50
好帖子,不要让他沉下去
作者: 王谦623    时间: 2013-1-29 10:03
太感谢了!
作者: zyj    时间: 2013-1-30 23:31
请问设定的曝光量是一个固定的数值吗?
作者: 黑小子攀    时间: 2013-2-6 23:20
顶一个哈
作者: fruit    时间: 2013-2-7 01:55
芜湖的,顶下吧
作者: dlyt03    时间: 2013-2-11 09:04
学习
作者: 月相伴    时间: 2013-2-21 14:21

作者: dlyt03    时间: 2013-2-22 15:00
谢谢
作者: 夜影    时间: 2013-2-26 10:51
谢谢
作者: 陆少游    时间: 2013-2-26 20:34
有没有虚拟示波器的源代码呀 大神
作者: 陆少游    时间: 2013-2-26 20:35
补充下有的话发给我吧正需要呢100531867@qq.com
作者: qiangge007    时间: 2013-2-26 23:39
顶一下
作者: 临轩    时间: 2013-2-27 14:47
V5
作者: a67811980    时间: 2013-2-28 15:26
谢谢
作者: 月绕紫藤    时间: 2013-3-1 10:46
学习
作者: 枫桥叶    时间: 2013-3-1 15:22
蓝宙不错嘛很好很强大
作者: 寒冬的朝阳    时间: 2013-3-1 21:24

作者: dlyt03    时间: 2013-3-1 22:09
谢谢
作者: fish007    时间: 2013-3-2 18:18

作者: rao    时间: 2013-3-2 20:50
顶一个!好东西!
作者: 赦叶    时间: 2013-3-3 13:56
有没有coldfire的驱动程序啊
作者: fish007    时间: 2013-3-3 15:12
我怎么没找到对应的接口啊?PA0什么的,没找着啊!求回复……




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2