/ Camera

关于Camera(成像)

其实早就想写,但这种题目会让模电考试作弊才堪堪及格的我压力山大。。。

注意:这里的camera,基本指目前绝大多数的电子成像设备。

本文从一个有基本理科知识的角度,来科普性质的讲讲图像传感器都干了些什么(才助力陈老师造福全人类的)。当然也一定会有遗漏缺失错误的地方(不吝指出~)

本文很多内容,是基于《CMOS图像传感器集成电路原理、设计和应用》(罗昕 编著),这本书不错,让我重新梳理所学,值得看一看~

小孔成像

在说到图像传感器前,先说说小孔成像;这是目前所有成像技术的光学基础 -- 光是直线传播的(在忽略引力作用的前提下):

尽管我不喜欢baidu,但是这篇百科中,墨子如是说:

“景。光之人,煦若射,下者之人也高;高者之人也下。足蔽下光,故成景于上;首蔽上光,故成景于下。在远近有端,与于光,故景库内也。”

用通俗的话说,就是说照射在人身上的光线,(反射出去)就像射出去的箭;下面的光也会(反)射向上方,上部的光也会(反)射向下方,(通过小孔时),小孔下半部分挡住了下面的光,所以足部成像在上面;小孔上半部分挡住了上面的光,所以头部成像在下面。

墨子居然就这么轻描淡写的,阐述了:光是直线传播的。

有个疑问是,那小孔变成大孔那?为何不能成像了?

因为。。。假设大孔无限大,这样反射光就全无遮拦无过滤的混在一起了,光线们都没羞没躁的混在一起,就是白色(总觉得哪里不太对啊嘿嘿嘿)了嘛。

基于此,人类有了真实记录自己的理论依据。

再之后,通过对感光材料的研究,人类发明了照片


既然已经知道了成像的原理,那camera如何成像的?

分三步:

  • 把冰箱门打开
  • 把大象推进去
  • 把冰箱门关上

。。。好吧其实是这么几步:

  • 光,打到sensor(像素阵列每个像素的)光电二极管上,激发电荷

---如果是CCD

  • 逐行逐列的读取
  • 电荷信号经过电荷-电压转换电路转换成模拟电压信号
  • 电压信号通过常规模拟电子电路实现放大

---如果是CMOS

  • 激发后的电荷通过像素上的电路转换为电压并放大
  • 逐行逐列的读取

---结束如果

  • 通过模数转换将模拟电压信号转换为数字信号
  • 通过差分传输将数据从sensor传输到isp
  • ISP将sensor传出的数据(根据pattern不同,目前主流是bayer的GRGB结构)进行整帧组装
  • ISP开始对这一帧进行处理(如lens shading,color enhancement, crop等),最终输出YUV(或其他常规格式)的整帧数据。(这里先忽略3A)
  • Jpeg encoder(目前主流均已hw化了)将整帧数据写入jpeg文件(因为上面忽略了3A,这里的exif也顺带忽略~)
  • 恩,可以上传照片到朋友圈了

似乎有点复杂,简化下:

光 -> 1.光电二极管 -> 2.生成电荷 -> 3.转换到电压并放大信号 -> 4.阵列化逐行逐列输出 -> 5.电压信号模数转换到数字信号 -> 6.传输给ISP -> 7.ISP处理成YUV -> 8.Encoder编码写入文件 -> 0.发朋友圈!

其中先3再4,是CMOS;
先4再3,是CCD;
下面会详细说它们的差别;

什么是图像传感器?

把“光”(准确的说,指自然光照射到物体上再反射后,通过小孔成像,来成的“像”),变成数字信号并传输给ISP(1-6)的小家伙。

一般结构如下图:

(像素阵列图,那本书中的图2.1)

主流图像传感器有哪些?

图像传感器目前主流分为两种,CCD和CMOS(因为制作工艺和市场导向等原因,CCD已经势微了)

像素阵列的像素(PIXEL)是什么?

即CCD或CMOS

其本质都是本身包含一个光电二极管,用来捕获光信号,并输出电信号的单个像素结构(为什么称为pixel?因为这玩意儿真心不好单个制作,都是整版光刻来实现);

这样复杂的结构如何设计?

CMOS超大规模集成的设计方法学!

基本就是设计,仿真(SPICE);再设计、再仿真的不断上升迭代;

全部设计好并仿真通过,就可以交给Silicon Foundry(晶元代工)厂投片了!

这样密集的结构,晶圆代工厂又是如何制作的?

上个IMX214镇楼!

【这个已经拆开了,上半部分是镜头(中间透明部分)+马达(在镜头周围);下面是MIPI接口线,连接到ISP;中间幽幽泛着绿光的就是像素阵列了】

CMOS目前的商用技术都是纳米级的,所以传统制造业那种单构件制作再组合的方式肯定是不现实的;

制作基本靠光刻和离子注入;

如图:

简单说,

就像多层蛋糕的制作过程一样,铺一层,加工并修饰一层;再铺一层,再加工;如此往复。

光电二极管是神马?

直接上wiki

简单说,就是对光敏感的半导体(同其他二极管没有本质区别),光线打到这这面会激发出来电子,这样就产生了电荷;

更深入的原理我还在研究ING~ 答应我别问了好么!

什么是CCD?

CCD全称是Charge Couple Device,即电荷耦合器件;

何谓电荷耦合?

非常直观(连我这种差学生都看懂了),交错的时钟信号,把电荷一点一点的从左边“吸”到右边;恰好3条就够了,真是够赞~

所以CCD其实只有一个光电二极管就够了;也叫做无源像素传感器(Passive Pixel Sensor)

回到光电传感器阵列图(无视“有源像素传感器”部分),这样,通过电荷耦合,就可以完成逐行逐列的电荷输出,再统一经过电荷->电压转换,再通过放大电路和模数转换,最后得到方便使用的数字信号;

如下图:

什么是CMOS?和CCD的差别是什么?

全称是Complementary Metal Oxide Semiconductor,即互补金属氧化物半导体

和CCD最大的差别就是 --- 单像素是否有放大电路;

CMOS单像素即一个个有源像素传感器(Active Pixel Sensor),内部有额外电路,来完成电荷->电压的转换和放大(电路和光电二极管之间不需要一个特殊的绝缘层了);然后和CCD一样,逐行逐列输出并经过模数转换来得到数字信号;

【插句话:据说CMOS的兴起是因为制作工艺和市场等因素,当初诸多做内存的厂商,本身的设备转做CMOS很方便,而CCD需要特殊的设备(还记得那层绝缘层么)】

想一下CCD,这种结构设计和电荷耦合,带来的好处是,信号更纯净(不经过放大),但是也意味着更脆弱;当曝光过长时,光电二极管激发的电荷过多,可能会造成电荷击穿或串扰;这样可能出现某一行或若干行数据完全错掉的问题(信息完全丢失/错误);

所以一般CCD的单像素尺寸不会特别小(越小越容易串扰);也因此普遍认为CCD并不适合低光的情况,因为低光带来的长曝光,更容易产生坏点。

那对单像素而言,不管是CCD还是CMOD,电路都会挡到光,怎么办?

其实有个系数,叫像素填充系数;即光电二极管实际受光面积和像素总面积的比例,可以想象,该比例越高,则信号越能反映真实的像;

但显然的是,因为电路的存在,所以需要阻光层来仅仅遮罩电路,避免长期光照对电路本身性能的改变;所以如何增加像素填充系数,又避免电路过于密集带来的串扰,成了一个需要权衡的点;

一般情况下,基本的单像素的结构侧剖面如下图左边:

可以看到光线会被环绕光电二极管的电路层层叠加后形成的“井”挡住,而通过增加一个微透镜(右边的设计),可以让光线更多的射进去;也就间接增加了像素填充系数。

但是显然的是,这种设计为了保证井不能太深(否则微透镜也无力折射),电路层层数就被限制了;

当然会有人想到,为什么不把电路板放到光电二极管下面?

好问题,因为那需要一个特殊的技术,即如何让光电二极管上面的硅层尽量薄,薄到可以透光。

也就是背照式(Backside Illuminated);如图:

仅仅光刻是不足够的,这需要按照非背照式的方式,光刻完成后,阵列反转,然后对背面进行打磨,打磨到透光需要多薄那?

5nm

一开始这种技术只是设想,现在,已经是随处可见了(例如Sony家的堆栈背照式,也是在此背照式基础上把更多电路板放到“背部”而已)

那为何还需要快门?

sensor的成像和人眼不同,完全不是一个机理;(这又是另外一个晦涩却有趣的话题了)

如果让像素阵列长时间曝光的话,带来的问题就是,整幅图像的所有像素都过曝了;

所以需要限定一个曝光时长,来获取一个相对合理的数据帧;从开始曝光,到结束曝光,然后输出整幅图像数据;

而快门,就是用来给出个一个开始曝光信号的玩意儿;

什么是电子快门?(机械快门这里不讨论了)

其实就是用来控制曝光的一个特殊信号,一般分为滚动快门和全局快门;

什么是滚动快门?

Rolling-shutter;

如图:

因为阵列数据只能一行一行输出,所以只能做成如上结构来尽快逐行曝光,并尽快逐行输出;

但这样带来一个严重的问题;就是运动失真和闪光失真;简单来说,某一行的时间段,和其下一行曝光的时间段是有一个时间差(要长到足以用来输出一行数据)的,所以在这个时间差内,如果希望捕捉的“像”发生了变化,那么就出现了失真的情况;在运动场景下尤为明显。

这时候就需要用到全局快门了。

一般3T-APS,即3个晶体管和一个光电二极管组成的像素(这里要说到PN结,鉴于我不太擅长就略过吧~)只能实现滚动快门。

什么是全局快门?

想象一下,如何在逐行输出的基础上,避免逐行曝光的时间差?

回答是:那就一起曝光,再一起结束曝光;然后把像素的曝光信息存储在像素的一个“Cache”中;接着再逐行输出就好了。

也确实是这样做的:通过4T-APS,比3T-APS多了一个悬浮的N扩散区(Floating Diffusion, FD),可以作为像素上的第二个电荷存储器件;这样一个电荷存储器件足以担当“Cache”的角色。

4T-APS的全局快门曝光时序如下:

但也可以看到,4T-APS有个缺点,就是曝光结束后,下次曝光开始前,必须等待所有行输出完毕;不然直接重置就会丢失“Cache”数据;

那没有办法连续曝光了么?

当然有,使用5T-APS,增加对光电二极管的重置,而不影响“Cache”;如此一来,只要曝光时长 > 逐行输出的时间(不然“Cache”也被重置了),就可以连续曝光了。

逐行输出有办法提高速度么?

有。

单路输出确实太慢了;

哪怕增加一路也可以提升一倍的输出速度;

电压信号是逐行逐列输出的,假设是M x N的阵列,那么每读取N的一行,则有M个数据需要传输出去;这里可以做优化,例如对M进行并行多路输出(这只需要增加一侧的管脚即可)

如下图的六组并行图像信号读出:

那是否入射到两个不同像素的光完全相同,则两个像素的输出电压信号就完全一致?

这也显然不可能完全一致~

因为固定图案噪声(Fixed Pattern Noise, FPN);这是由制造工艺决定的转换阵列表面不均匀而产生;

也因此,即使完全没有光照,也会收FPN影响,输出一个固定不变的图案信号;而在有光照的情况下,这个固定不变的图案信号会叠加到真实图像信号上。

那如何消除FPN?

一般的解决方法,用相关双取样(Correlated Double Sampling, CDS):测量两次(而非一次)输出电压,一次是曝光开始时的,一次是曝光结束时的,然后其差值,就是去掉了FPN的有效值;

电压信号如何转变为数字信号?

这就是我最不擅长的模电内容啊:模数转换

通过逐次逼近(体积小但性能差)或直接比较(体积大但性能好)

一般是两者的结合

逐次逼近的原理有点像二分查找的过程;不过一个是查找,一个是累加;

直接比较就不废话了,就是做了个N位比较器,上图:

什么是差分传输?

可以直接参考WIKI,简单直接。

经过了差分传输,就到ISP了;这就已经超出了Sensor的范畴~


到这里,成像部分基本就结束了(Bayer这些pattern,放到ISP部分吧~)。

肯定有不少纰漏,等我慢慢补全吧~