TA的每日心情 | 开心 2015-12-1 09:28 |
---|
签到天数: 90 天 连续签到: 1 天 [LV.6]常住居民II
|
本帖最后由 ??? 于 2013-4-23 23:51 编辑
CCD控制方式:
我用的这款CCD,接线很简单,一共就5根线,其中SI和CLK控制时序,AD输出信号,剩余两个给系统供电.
这张图是线性CCDTSL1401D的控制时序图,通过时序图和技术手册我们可以了解到从SI的一个高脉冲开始的前十八个CLK这段时间,电容放电,从第十九个CLK到下一个SI到来的这段时间为本次曝光时间,而本次的信号将在下次的128个CLK依次输出,同时还必须额外的输出一个CLK以结束,即SI到下次SI之间129个CLK.
此外第一个CLK的高电平至少10us
通过时序图的了解,我们可以知道CCD的采集分为两种:单次采集和连续采集
所谓单次采集并不是只采集一次,而是两次.每次采集前先提供129个CLK和SI脉冲以开始曝光和输出残留在CCD移位寄存器中的模拟量,等到曝光时间到了,再次提供129个CLK和一个SI,并且在每次的CLK的输出完成电压采集,也就是信号采集
所谓连续采集就是这次采集完后在下次曝光时间到了再次采集.
下面是采集图像的程序
void ImageCapture(unsigned char * pImageData)
{
unsigned char i;
unsigned char error;
unsigned int temp_int;
SI_SetVal(); /* SI = 1 */
CCD_NOP();
CLK_SetVal(); /* CLK = 1 */
CCD_NOP();
SI_ClrVal(); /* SI = 0 */
CCD_NOP();
//Delay 10us for sample the first pixel
for(i = 0; i < 10; i++)
{
CCD_NOP();
}
*pImageData++ = CCD_ADGet();
CLK_ClrVal(); /* CLK = 0 */
for(i=0; i<127; i++)
{
CCD_NOP();
CCD_NOP();
CLK_SetVal(); /* CLK = 1 */
CCD_NOP();
CCD_NOP();
//Sampling Pixel 2~128
*pImageData++ =CCD_ADGet() ;
CLK_ClrVal(); /* CLK = 0 */
}
CCD_NOP();
CCD_NOP();
CLK_SetVal(); /* CLK = 1 */
CCD_NOP();
CCD_NOP();
CLK_ClrVal(); /* CLK = 0 */
}
这里程序只是采集程序,曝光时间控制比较麻烦,下次再分享.下面是一些本人认为比较好的TSL1401资料,讲解非常详细.
|
|