复刻Cam84项目:手搓CCD相机(ICX453传感器)
🆘集帅们,CCD撅撅子💯,拍出来的照片太好看了救命🆘
注意:Cam8X系列的设计都已经过时了,不建议按照原版电路1:1复刻,如果想做的话,见文末---硬件上犯的错误---来对原版设计进行修正。
另外原文是用Markdown写的,所以有些地方的格式可能会有些奇怪(B站什么时候才能直接支持Markdown捏)
WHY
所以为什么突发奇想搞这么个东西,其实是和群友吹水时候聊到了自制相机,想着闲着也是没事干不如找点事情做。
HOW
传感器
从和群友的吹水中得知,ICX453这块CCD传感器比较合适,另外CCD相机的配套电路设计也比较简单,有Cam8X系列相机设计参考,我选的Cam84。现在回过头来看Cam84设计有许多缺陷,如果想要自己做的话,Cam86和87是不错的参考。
关于这块传感器,索尼并没有给出公开的对应资料。不过ICX453和ICX413的设计比较相近,而ICX413的手册是公开的,时序什么的参考413就好了(大概)
配套电路
额,上面说CCD的配套电路简单,其实也不算很简单,主要是以下几个部分
CCD驱动芯片:产生垂直驱动信号(这玩意的时序和电平自己调特阴间)
IP:一个图像处理芯片,包含了CDS/SH/ADC这些关键部件。分开来也不是不行,但是分开来做的话,工程难度以及最主要的---噪声水平会显著增加(如果设计得很好另说)
电源芯片:想要驱动一个CCD电路,需要产生+15/-8的供电,所以需要实现对应的正负电源
MOS驱动:CCD功耗不大,但FT2232直推不现实,所以要用MOS驱动。
控制器:原版Cam84使用了FT2232来将连接电脑并发送控制信号。不过我后期打算使用ESP32来控制并采集储存图像
原件的具体型号就不列了,Cam84的BOM表和电路图都有给出
拼起来
既然整套电路都是围着传感器设计的,那不妨先读一下传感器的时序图(热知识,这个阶段其实不用操心这个)

手册看一晚上我都没得出是啥玩意,google了半天,真的没一个人解释的,感觉全世界就我不懂CCD驱动。
但毕竟人家也没料到会有多少爱好者来手搓这些玩意,所以资料写的模糊一些挺正常,所以我决定先跳过时序这一部分,直接用现成的软硬件把东西搓出来,然后再自己去理解。
硬件设计
对照着Cam84的电路图,我在立创EDA里面把相机的电路画出来,相对应的做了一些改动:
1.小型化(但是好像没啥用,因为第二点打破了)
2.模块化(将原本一个板子的事情拆成了前端、电源、控制三部分),这样比较方便我研究时序信号。其实原作者在电路里面加入了很多跳针,这也是为了方便测试。另外原版是作为天文相机使用,时钟频率比较低,读出慢。将控制部分拆开后可以随时更换更快的主控来提高读出速度
设计的原则还是尽可能的保证重要信号不过孔,比如给Vout一条单独的通路,GND使用铺铜。各种时序信号也尽量保证等长(不过十几MHz的信号应该不是很要紧)
最后几张板子的图如下




关于电源板的事在文末---硬件上犯的错误--会有解释
购买零件
Wait What?这也值得单独拿出来说吗?至少我觉得这里面还是有点门道的
首先看看这玩意的原版BOM,其实算是比较杂的,有各种规格的无源器件,还有六七种芯片。在根据BOM找原件的过程中,根本做不到一家买齐所有。千万别看错型号,特别是贴片三极管、稳压器一类等只印代号的器件。我自己就是把LM和LP看错,结果买了错的LDO😅。浪费时间又浪费钱。
除此之外,封装确认也是个问题,特别是贴片这玩意,一不小心就会掉坑里,比如:三极管的封装是DO-xxx,但是下面还会分为SMA、SMB、SMC三个小类。除此之外,像是电感、扼流器又是两种不同的玩意,两种东西又各自有几种不同的封装。
最后一点:如果遇到了买不到、难买、价格太高的零件怎么办?比如原版BOM里面某种规格的钽电容,电容电阻在不影响功能前提下可以替换成近似的(比如滤波电容、限流电阻)
对于芯片IC,还可以优先考虑拆机片商家,先看看拆机片商家卖多钱,问问供货情况。这招对于已停产、冷门型号、热门造假型号比较好用。并且拆机片也没那么不堪,毕竟芯片不容易坏,买的时候多买几颗就行。
组装
贴片原件的焊接方法主要有两种:1.直接上烙铁 2.用热板
我选择用热板。其实热板这东西嘛,也不用买专门的。直接搜LED拆焊热板,买个功率最小的就好了。可能有经验的SMT仙人要跳出来说了:WTF,你这样做是不好的!!!
不过,根据嘉立创的SMT服务参数来看,如果你不加钱上高级产线的话,SMT的温度在250c左右,正好就是大部分不可控拆焊板的温度。
yes yes I know,如果你想要做严肃的SMT焊接,可控的温度曲线是非常重要的,这样才能满足锡膏的熔点特性。但咱就是说,既然只是偶尔做做SMT回流焊,就别讲究那么多了🤔大不了烙铁补一补。
板级测试
当所有东西(除传感器)焊接好之后,做个简单的Smoke Test,摸摸芯片有没有发烧的🥵,万用表量一下各级电压是否符合设计需求,如果都OK的话,看好CCD的方向,焊接到板子上。
正常情况下,我这里用的8V可调电源供电,前端(带传感器)静态电流应当在0.06A附近,读取时最大电流也刚好在0.1A出头。如果大于这个数值肯定不正常。另外要提一点,我的采集板由USB口供电,如果前端和采集整合在一起(就是Cam84原版设计)要加上对应电流。
如果遇到遇到电流大于这个的情况,一般有两种:
前端电流上升到0.11A待机0.15A读取,ADC也伴随着不正常的发热:大概率ADC寄。
电流巨大,同时正负电源电压严重拉低:估计CCD焊反。
将电源PCB单独制作的好处就是能方便测量各路电压,同时可以有选择性的断开某一路供电来排除错误。原版Cam84的设计是All in one,也使用了跳线排针和跳线帽来达到相同目的。
当然,如果有示波器的话可以看看波形对不对。将电源和控制板连接,打开软件,按下拍摄按钮。下面是我自己测量的一些波形(注意,只有当CCD连接到板后,垂直驱动的电压波形才会和手册对应)
垂直驱动



水平驱动

外壳设计
使用了堪称反人类的FreeCAD来折磨自己,这么个简单的东西画了四天三夜

Tip:你可以不用去自己把卡口给画出来,只需要上网搜索“Sony E mount cover 3D model”,然后截取适当的长度即可。E卡口法兰距是18mm,即保证传感器平面到镜头卡口的平面距离是18mm
最后拼起来是这样的(底壳没装因为要做测量)


硬件上犯的错误
传感器方向看反/封装失误
这个真的难绷,为此还废了一个传感器

有三个注胶孔和三个定位环
我一开始把注胶孔当成定位环,结果插上去传感器直接短路😅,炸了。
而且传感器的引脚间距比ICX413的大了一些(目测大2~3mm),然后不得不把传感器引脚掰弯一些才勉强塞下。画板子一定要量实物啊😢
针脚很密集的情况下直接用示波器探针去捅
嗯...然后把LDO烧了。
还没完,LDO烧了之后击穿,12V直通后端。我当时吓的差点尿裤子,后端的ADC烧了的话得重新买(记住这句话)。还好换个LDO就正常了,没把后端芯片的魔法烟雾放出来。
东西没断电就往上焊东西
虽然我的烙铁有接地,并且我家的接地是有效的,但感应电还是把ADC(ADC:还是没逃过)、MOS驱动、LDO(LDO:为什么又是我)给一套带走了😭,另外我ADC只买了两片,而且第二片不懂是不是有问题还用不了。所以就这个原因得让项目往后推几天
熬夜画板子
然后画出来几条错的线,还好容易改,小刀加飞线解决。
晚上画的板子还是得第二天起来再检查检查
板子的通孔画太小
导致拆焊特别特别困难,清理不干净。上面那个传感器就是我拆焊的时候心态崩了,直接拿钳子拽下来的。
照抄别人的方案(Cam84的不足)
emmm...其实本来也没啥问题,但是cam84有许多设计不合理的地方
电源:
原方案使用的是TPS6513X正负电源芯片来产生垂直驱动所需要的+15v/-8v电压,但至少在我手里没能让它成功跑起来,可能是画板的问题,可能是芯片的问题,可能是焊接的问题......反正跑不起来就对了。
最后换成双MAX686方案(电源板二),两个686分别负责正电源和负电源,一次成功。
另外这个电源化简为繁,能5V供电结果还整一堆LDO从12V降下来,后面测试发现这一整套的功耗也就8V*0.1A=0.8W,而且要注意我是从电源端进行测量的,电路中有个效率很低的LDO。整体改用5V直接供电,根据群友的说法,5V 500mA就可以满足需求。
时钟:
在cam84后续的设计(cam85/86)中,作者很明显也意识到了不足,将时钟信号的分工更加细化,由原来3条时钟线变成我也懒得数反正多了好几条。
不过让我们先看看原版的骚操作,下面是我测量的读出时序信号,从上到下依次为:Vout,RG,CDSCLK1,CDSCLK2

前置知识:CDS时钟是下降沿触发,Vout分为三个阶段,分别是RG,RST,SIGNAL
**才意识到我的Vout在上面这图稀烂,很难分辨RST阶段,就是信号下降过程中的斜率变小那块,所以我重新采集了一遍(其实是ADC炸了之后重测的几次)**

从图里面可以清楚看到三个阶段(但是为啥信号阶段会振铃wtf)
具体的电路图我就不贴出来了,简单来说,原作者使用了非门、电容、电阻来调节RG、CDSCLK1、CDSCLK2。输入信号为高时,开始为电容充电。若电容电压超过逻辑门规定的“逻辑高电平”,逻辑门就会输出0,那么在电容从0v充电到“逻辑高电平”的这段时间就是逻辑门输出为“1”的时间。
又因为CDSCLK是下降沿触发,假若我们想要增大触发的延迟,即下降沿向后推迟,只需要增大电容,延长“0v--->逻辑高电平”的充电时间即可。
但是在实践过程中,我发现电容超过一定容量后(我试出来大约是>=560pF),因为电容放电时间 > 时钟周期,就会产生长短不一的输出信号。所以这个调节也是有范围的。
唠完了采样时钟,其实水平时钟也有着很大缺陷:那颗MAX4428。一看手册猛如虎,实操起来2.5(MHz)。手册说时钟信号最大可达20MHz,结果一个10MHz,50%占空比的驱动信号就干趴下了😅。50%占空比都驱动不了,其他更小的占空比真不敢想。所以我也在寻找一个pin2pin的替代方案。
所以cam84的时钟电路设计就是一个“勉强能用的”糙品,抖动巨大,各种不确定性因素叠加在一起(比如电容自身的误差),导致无论是ADC采样时钟,还是水平驱动信号都十分糟糕。but hey, it works :-)
HOLY SHIT! IT ACTUALLY WORKS!
错误软件+屎一样的信号路径+没有正确的镜头卡口

很纳闷为啥出来是这效果,进行了一些调查后发现是ADC输出线拉太长+用错软件导致的。
我原本以为ADC出来的不就是8位的并行数字信号嘛,而且频率也不高,用杜邦线连起来应该不会有太大问题,结果nope。这玩意的损耗比我想象的大得多。最后让采集板直接怼到输出口上才彻底消除。
如果想拍星空用MaxIM肯定没错,但是对于日常拍摄来说显然是不合适的。于是下载原版的Cam8View软件,这下就正常许多,而且自带Debyer(好耶)
另外镜头卡口的事情上面提过了
换了个软件+调整信号路径+有正确的镜头卡口和镜头+对上焦后

两张图拍摄的场景不同
上面这张我就知道个光圈1.8开满(因为是手动镜头),其他的东西诸如iso和快门速度之类的不详
下一步就是研究cam84view的控制信号,以及读出过程,将这个过程搬到ESP32上去做,并将得到的照片存储到SD卡里