回答

收藏

基于A3BU开发板线性CCD采集(二)

其他 其他 4535 人阅读 | 0 人回复 | 2013-04-23

本帖最后由 ??? 于 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资料,讲解非常详细.


TSL1401R-LF技术文档.pdf

207.78 KB, 下载次数: 10

TSL1401线性CCD模块用户手册.pdf

361.46 KB, 下载次数: 12

蓝宙TSL1401线性CCD应用笔记.pdf

478.89 KB, 下载次数: 18

线性TSL1401CCD中文资料.pdf

706.21 KB, 下载次数: 15

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条