


前言
“Wait What,上次不是已经有一篇文章讲过这回事了吗?”
那确实,上一次已经测量过尼康D40里面的信号了,文章链接:

但自从那次后,我发现有个问题:尼康D40的设计是专业团队操刀的,对于驱动传感器的各种参数调教理论上都会优于传感器所需的基线。
而对于爱好者来说,自己设计的电路一般很难达到专业厂商的水平(我菜.jpg),如果传感器驱动不起来,则会难以排查问题。与此同时,上一次的测量我还遗漏了不少参数需要补测。
因此,我需要一个同样是由爱好者设计的、已知可用的电路,以此作为基线,来对自己的电路进行调试。
那么,这个电路就是原版的CAM84。另外CAM84的上位机cam8s_view是开源的,这为后续分析时序也带来了方便,文中有些地方会结合cam8s_view的源程序进行时序解读。但奈何UP主实在没怎么学过Pascal,加上注释都是俄文的,因此不可能对程序进行深入分析,有错误还请多指正。
Note:下文中,CAM84一词特指Cam84的原版设计、1:1复刻的板子(见下图)。而DIY板子指我根据Cam84电路修改而来的、自己绘制的板子(见我以前的动态/文章)。

正面

背面
废话不多说直接开始
参考链接:
cam8s_view 二进制文件:http://astroccd.org/2013/05/cam8s_view/
cam8s_view源代码:https://github.com/vakulenko/CAM8_software/tree/master/from_grim/cam8_view
之所以要测量上升和下降时间,是因为之前在调试时,发现DIY板子在垂直驱动的上升/下降时间上,不是很能满足手册上的要求(比如手册要求某个上升沿要在2us左右,实测DIY板子要大于3us甚至更慢),为此怀疑是不是这一项不达标导致了读取失败。因此需要对Cam84进行测量,以此设立基准线。
Note:因为V1和V3,V2和V4,H1和H2是一对的关系,而且经过测量发现同一对通道的响应基本一致,因此下列只列出其中一个通道。
V1和V3:
0v ---> 15v 上升时间

V1、V3
0v <---> -8v 上升和下降时间

V1、V3
-8 <---> 15v 未使用,不做测量
V2和V4:
0v <---> -8v 上升和下降时间:

V2、V4
H1、H2:

H1、H2
SHT:
Note:这里,我在DIY板子上测得的SHT最高电压仅为20V左右,而Cam84达到了30V。考虑到我的DIY板子在垂直驱动电路部分并没有完全按照Cam84的原版设计,而是自行更换了一些电容和二极管型号,因此怀疑是这些元件的变化导致了DIY板子上的SHT电压偏低。
但是不清楚SHT电压偏低会造成什么影响,会导致整个传感器完全无法读出吗?还是只会导致传感器残留电荷不能有效清除从而成像不够“干净”?有待进一步调查

SHT
RG:

RG
总结一下:Cam84的垂直驱动能力其实也是比较弱的(相比D40来说),但是依然可以正确成像。我又将其与自己DIY的板子对比了一下,发现两者相差不多,除了DIY板子上的SHT电压偏低。
但根据以上结果,猜测主要问题不在垂直驱动这一块。因此我将读出失败的原因转向时序部分,下面就来看看Cam84的时序是怎么做的。
待机(StandBy)电平:
V1、V2: 0v
V3、V4: -8v
H1: 6v、H2: 0v
SHT: 10v、RG: 12V、VOUT: 9v
Note:以下的内容,有的配图是通过示波器两次测量,然后对齐拼接而来(吃了没有8通道示波器的亏),所以读图时当成一张图即可。
通过大量的实测和对源程序代码的解读,发现Cam84读出主要分为以下几个步骤:
1.清除CCD内残余电荷
2.清除光电二极管内的残余电荷(即SHT信号发出,开始计算曝光时长)
3.等待到达曝光时间
4.将光电二极管收集到的电荷转移到CCD中(此时视为曝光结束)
5.将CCD内保存的电荷一路转移出传感器
在测试中我注意到,由于步骤一需要耗费一定时间(大约53ms),所以Cam84的上位机很巧妙的利用了这段时间:
如果用户设置的曝光时间大于53ms,则将SHT信号提前发出(即上面的步骤二放到步骤一之前),这样以来,在光电二极管收集光线的过程中,同步完成CCD的清理。如果曝光时间小于53ms,则按照原来的顺序进行。下面是图示:
示波器设置为SHT信号触发,蓝色波形是SHT信号(时间太短被光标盖过去了),黄色是H2,青色是V1,后面还会进一步分析,这里只是看个时序。
曝光时间设置为50ms:

曝光时间小于清空CCD所需时间
曝光时间设置为55ms:

曝光时间大于清空CCD所需时间
所以如果有编写驱动时序的朋友,可以在曝光时间大于53ms时稍微节省一些时间(乐)
那么为了方便起见(受制于测量设备性能---主要是示波器存储深度不够),下面的分析中,都以50ms曝光时间为例子,把第一步和后面的步骤稍稍“分开”一些,这样更好进行分析。
结合之前对尼康D40的测量,我大概总结出了要清空CCD残余电荷的几个子步骤:
子步骤1. 水平驱动一个奇怪的“前摇”
子步骤2. 将垂直CCD的残余全部推到水平CCD中
子步骤3. 将水平CCD中的“垃圾”全部倒掉
子步骤1:


重新测量,加入H2,然后放大细节
我个人也不是很理解这一步是为什么,但是既然尼康D40,Cam84都这样干了,那应该有自己的道理在里面。无论如何,这个“前摇”是必须有的,即:向水平CCD发出118.5k个转移脉冲。至于频率是不是关键,我也就不清楚了,我记得D40里面的这一步好像要快不少。
子步骤2:

这些垂直驱动的初始状态在上文写了

具体时序可以根据网格大小估算
这里展示了垂直CCD向水平CCD转移残余电荷的过程,可以看到一共有1012个脉冲,这个刚好和cam8s_view的程序对应起来:

但是这里有个疑问,ICX453是一个600万像素传感器,有效宽度为2000,那垂直CCD不应该有2000多个吗?为什么这里只发出了1000多个转移脉冲?让人感到有些迷惑,注释里面也没写原因。
Note:后面经过进一步测试,发现还真是这样,垂直CCD只需要1012个脉冲就可以将全部像素转移,具体见下文。
子步骤3:


反复确认不是我示波器带宽问题,而是在这个速度下,板子驱动能力不足
清空CCD的最后一步,是将水平CCD积累的“垃圾”全部排出,然鹅,这里也有让我迷惑的地方:居然发出了6000多个水平转移脉冲?好像和前面对应起来了,既然垂直CCD脉冲少了一半,那水平CCD把这少的一半补回来很合理吧(确信)。随着测试的深入感觉逐渐清晰起来了。
总之,到现在,第一步清空CCD的工作已经完成了。
接下来你可以发出SHT信号,清空光电二极管内电荷,开始计算曝光时间。
Note:在准备写完这篇文章时,才发现图里面有个小尖尖(这里是V1)

在结束CCD清理后,还来了一次垂直转移(V1~V4行为和上文一样,这里就不重测了),也是不大清楚为什么要这么做,猜测可能他们逆向的相机型号上有这么个操作?不知道重不重要

第四步对应的部分应该只有白框里面的那段时间。左边多出来的部分是黑体转移(即传感器有一部分像素是不见光的,一般用来校准黑平衡)
那我们下面就来仔细看看白框部分的时序
如果之前的步骤没问题的话,现在四个垂直驱动的初始电平分别为:
V1、V2:0V,V3、V4:-8V
然后,先来一个常规的垂直转移脉冲,V4落下2.5us后,将V1拉高到15V,并持续10us。10us后,将V1拉回0V,此时V3拉高到0V。

拉高V1
又经过2.5us,将V3拉高至15V,V1拉低到-8V,同样持续10us

拉高V3,持续10us
V3拉高至15v持续10us后拉低到0v。后面的就调整回到普通转移。进行12次,以转移黑体像素。
黑体像素如果有需要的话,也是可以读取出来的,不过看起来Cam84就直接把这些全部丢掉了。留着黑体可以做黑平衡,对于天文摄影应该还是比较重要的。
Note:每次垂直转移发生的时候,都是V3先动作,然后是V1、V4、V2,这一点要注意。
接下来就可以按照"垂直转移1次,水平转移6392次,循环1000次"的顺序,将所有的有效像素转移出来了。大概长下面这样:

这脉冲数我已经数过了,每垂直转移一次,水平脉冲发出6932次,垂直转移一共1012次(包括黑体像素)。读出速度看硬件上限和人的意愿。Cam84选择的读出速度是2.5MHz,但是在尼康D40中这个速度可以达到25MHz。

另外,Cam84中,H1/H2/RG/ADC的三个采样时钟,都是用RC电路+门芯片做的,所以讲道理,这驱动波形很难看。在D40中就很规整,如果用FPGA之类的芯片直接驱动,可以做的比较好看。
而关于RG和H1/H2的关系,在《CCD_CMOS图像传感器基础与应用》一书有提及,这里就不测试了。

后续阅读cam8s_view的注释时,发现了一段:

立即验证了前面的测量结果,ICX453每进行一次垂直转移,会一次推动两行垂直CCD,然后读出时,水平CCD的脉冲数就需要加倍。
行吧,这篇文章就写到这里了,UP主准备期末考试了,打算放假再继续推进这个项目。