首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于FPGA的TDI-CCD时序电路的设计

基于FPGA的TDI-CCD时序电路的设计

摘要:为解决TDI-CCD作为遥感相机的图像传感器在使用中所面临的时序电路设计问题,文中较为详细地介绍了TDI-CCD的结构和工作原理,并根据工程项目所使用的IL-E2 TDI-CCD的特性,设计了一种基于现场可编程门阵列 (FPGA) 的TDI-CCD时序电路,其驱动时序使用标准的硬件描述语言VHDL编写,时序仿真的波形效果相当理想。工程应用的结果表明,该设计具有一定的先进性和实用性。
关键词:TDI;FPGA ;VHDL;驱动时序

引言

CCD(Charge Coupled Devices),即电荷耦合器件,它是20世纪70年代初发展起来的新型半导体集成光电器件,是美国贝尔实验室的W.S.Boyle和G.E.Smith于1970年首先提出来的【1】。30年来, CCD的研究取得了惊人的进步,已成为现代光电子学和现代测量技术中最活跃、最富有成果的新兴领域之一。尤其是在摄像方面的应用, CCD图像传感器具有体积小、重量轻、功耗小等优点,在分辨率、动态范围、灵敏度、实时传输和自扫描等方面的优越性也是其它摄像器件无法比拟的。而在CCD的使用中,不同型号的CCD器件的驱动时序不同,因此快速、方便地设计出CCD的时序电路成为应用技术中的关键【2】

2  TDI-CCD器件结构、工作原理及特性

TDI (Time Delay and Integration)是一种扫描方式,它是一项能够增加线扫描传感器灵敏度的技术。TDI-CCD的结构像一个长方形的面阵CCD,但从功能上说它是一个线阵CCD。其工作过程是基于对同一目标多次曝光,通过延时积分的方法,以增加等效积分时间,增强光能的收集。它的列数是一行的像元数,行数为延迟积分的级数M。工作原理如下:某一行上的第一个像元在第一个曝光积分周期内收集到的信号电荷并不直接输出,而是与同列第二个像元在第二个积分周期内收集到的信号电荷相加,相加后的电荷移向第三行…… CCD最后一行第M 行的像元收集到的信号电荷与前面(M-1)次收集到的信号电荷累加后转移到输出移位寄存器中,按普通线阵CCD的输出方式进行读出。由此可见,CCD输出信号的幅度是M 个像元积分电荷的累加,即相当于一个像元的M 倍积分周期所收集到的信号电荷,输出幅度扩大了M 倍。在TDI-CCD中,根据不同的应用背景,积分级数M 可设计为6,12,24,48,96等可调。由于TDI-CCD的曝光时间与使用的TDI级数成比例,通过改变TDI级数,即改变了可见光CCD的曝光时间。因此,可见光TDI-CCD用于成像系统,在不改变帧频的情况下,通过改变TDI级数,可以在不同的照度下正常工作,这是非常有义的。随着TDI级数增加,信号随TDI级数M成线性增加,而噪声随TDI级数成平方根增加,TDI-CCD 的信噪比(SNR)可以增加 倍。TDI-CCD 另一个特点是通过多次曝光可减少像元间响应不均匀和固定图形噪声的影响。基于以上特点,TDI-CCD在航天、航空等领域有着非常广泛的用途。在航空和航天遥感上,传输型TDI-CCD遥感相机是当前世界上技术最先进、性能最优越的新一代的遥感相机。

DALSA公司IL-E2型TDI-CCD是单向、单端输出,级数可选,具有蓝光响应增强功能的TDI-CCD。如图1所示,整个TDI-CCD可以分为3个功能区,即光敏元探测区、电荷传输区、检测输出区。

图 1  IL-E2 TDI-CCD 结构图

3           TDI-CCD驱动时序

3.1 积分级数选择

IL-E2型TDI-CCD共有5种级数可选,分别为6、12、24、48、96级。根据TDI-CCD 的时序关系,TDI-CCD的积分级数控制,就是控制TDI-CCD级数选择时钟CSS6、CSS12、CSS24、CSS48来实现。选中那一级对应CSS驱动信号为-7V,其他CSS驱动信号与CI4相同,选96级时所有CSS驱动信号与CI4相同。   

                               

图2  IL-E2 TDI-CCD总体驱动时序

                          图3  IL-E2 TDI-CCD详细驱动时序

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

图2中,CSS12的驱动信号为-7V,CSS6、 CSS24、 CSS48均与CI4相同,表明此时选中的积分级数为12。

3.2              驱动时序

为了使TDI-CCD完成正常的扫描成像工作,即电荷的积分、转移和读出等,施加在TDI-CCD各个引脚上的时钟脉冲应有着严格的时间关系。

IL-E2 TDI-CCD的像元移位读出时钟为CR1,CR2。CIx(x=1,2,3,4)、TCK、OS分别为成像区时钟、行转移时钟、输出信号。驱动时序分析如下:将各驱动时钟脉冲加到TDI-CCD的相应引脚上,在行转移时钟脉冲TCK为高电平期间,像元感光产生的信号电荷在成像区时钟脉冲CI1、CI2、CI3、CI4的共同作用下,沿着TDI方向积累并转移到输出移位寄存器中。当TCK为低电平时,TDI-CCD在像元移位读出时钟脉冲CR1、CR2的作用下,输出复位时钟脉冲RST每来一个有效的高电平时,TDI-CCD的输出信号OS 端输出一个信号,直到信号输出完为止;与此同时,像元感光(曝光)产生信号电荷。之后TCK由低电平变为高电平,CI1、CI2、CI3、CI4也相应的变为有效电平,开始一个新的周期。

驱动时序如图2和图3所示:临近的CI高电平交叠时间t1不小于1.0us,CI高电平持续时间t3不小于3.0us,TCK的上升沿与CI3的下降沿之间的t4最小为0,TCK的下降沿与CI4的上升沿之间的t5最小为0,CI4的上升沿与CR1的下降沿之间的t6最小为100ns, TCK的下降沿与CR1的下降沿之间的t7最小为100ns,CR1与RST的上升沿和下降沿之间的t8、t9最小为0,RST高电平持续时间t10最小为15ns, CI1的上升沿与CI3的下降沿之间的t11最小为100ns。只有严格的遵循此时序关系,设计出的时序电路才能稳定、可靠的工作。

4           时序电路设计与时序仿真

IL-E2 TDI-CCD的像元数有每行512,1024和2048三种,本文以项目使用的像元数为2048的为例设计时序电路。2048为有效像元数,每行有128个哑像元,设计中使每行输出2288个信号电平,即每个行周期内有2288个CR1、CR2、RST驱动脉冲。除了2048+128=2176个像元驱动脉冲以外,其余为空驱动脉冲。空驱动数越多,CCD曝光积分时间越长,灵敏度提高,但过长的曝光积分时间会使CCD输出饱和失真,故空驱动数目不易过多。

行积分时间和像元移位读出时钟频率是CCD时序电路的设计依据。在工程应用中,我们根据技术指标要求,算出行积分时间即行周期(T)为0.25ms,以此确定合适的系统主时钟。

设计时,先产生CR信号,然后以此为基础,根据周期相位关系产生其它驱动时序信号。

驱动时序用超高速集成电路硬件描述语言(VHDL)编写【3】,程序主要包括:(1)调用所需的库函数和程序包;(2)定义输入和输出端口;(3)用计数器对输入的系统主时钟进行分频。(4)驱动时序信号的产生和输出。部分源代码如下:

process(cr2_s)

    begin

        if cr2_s'event and cr2_s = '1' then

            if cr_count_s < 2288 + CONV_INTEGER(linecycle_s) then    

                cr_count_s <= cr_count_s + 1;

            else cr_count_s <= 0;

            end if;

        end if;

end process;

process(sysclk,cr_count_s,cr1_s,cr2_s)                     ――产生CR信号

    begin

    if sysclk'event and sysclk = '1'then

        if cr_count_s < 64 then

            cr1 <= '0';         cr2 <= '1';

        else

            cr1 <= not cr1_s;   cr2 <= not cr2_s;

        end if;

    end if;

end process;

    process(sysclk,sys_count_s)                        ――产生输出复位信号RST

begin

        if sysclk'event and sysclk = '1' then

            case sys_count_s is

                when 1 => rst_s <= '1';

                when 2 => rst_s <= '1';

                when others => rst_s <= '0';

            end case;

        end if;

end process;

process(cr_count_s,cr2_s)                              ――产生CI和TCK信号

begin

        if cr2_s'event and cr2_s = '1' then

            if cr_count_s < 16 then

                ci1_s <= '1';   ci2_s <= '0';   tck_s <= '1';

            elsif cr_count_s < 24 then

                ci1_s <= '1';   ci2_s <= '1';   tck_s <= '1';

            elsif cr_count_s < 40 then

                ci1_s <= '0';   ci2_s <= '1';   tck_s <= '1';

            else

                ci1_s <= '0';   ci2_s <= '0';   tck_s <= '0';

            end if;

        end if;

end process;【4】

由XILINX公司的设计软件ISE6.2对XQVR300器件进行时序设计,通过时序仿真与工程应用验证了能完成上述所有功能。

结束语

    本文的创新点是完成了对像元数为2048的IL-E2 TDI-CCD的驱动时序的VHDL编写和在可编程器件中的下载实现,时序仿真和硬件电路测试表明该时序电路能够较好地产生器件所需的时序脉冲;使用延迟量小的FPGA使得系统可以工作在百兆赫兹的高频段,可靠性和稳定性得到了很好的保证;程序可移植性强,可作为其它类型的CCD驱动时序设计的参考。

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

图2中,CSS12的驱动信号为-7V,CSS6、 CSS24、 CSS48均与CI4相同,表明此时选中的积分级数为12。

3.2              驱动时序

为了使TDI-CCD完成正常的扫描成像工作,即电荷的积分、转移和读出等,施加在TDI-CCD各个引脚上的时钟脉冲应有着严格的时间关系。

IL-E2 TDI-CCD的像元移位读出时钟为CR1,CR2。CIx(x=1,2,3,4)、TCK、OS分别为成像区时钟、行转移时钟、输出信号。驱动时序分析如下:将各驱动时钟脉冲加到TDI-CCD的相应引脚上,在行转移时钟脉冲TCK为高电平期间,像元感光产生的信号电荷在成像区时钟脉冲CI1、CI2、CI3、CI4的共同作用下,沿着TDI方向积累并转移到输出移位寄存器中。当TCK为低电平时,TDI-CCD在像元移位读出时钟脉冲CR1、CR2的作用下,输出复位时钟脉冲RST每来一个有效的高电平时,TDI-CCD的输出信号OS 端输出一个信号,直到信号输出完为止;与此同时,像元感光(曝光)产生信号电荷。之后TCK由低电平变为高电平,CI1、CI2、CI3、CI4也相应的变为有效电平,开始一个新的周期。

驱动时序如图2和图3所示:临近的CI高电平交叠时间t1不小于1.0us,CI高电平持续时间t3不小于3.0us,TCK的上升沿与CI3的下降沿之间的t4最小为0,TCK的下降沿与CI4的上升沿之间的t5最小为0,CI4的上升沿与CR1的下降沿之间的t6最小为100ns, TCK的下降沿与CR1的下降沿之间的t7最小为100ns,CR1与RST的上升沿和下降沿之间的t8、t9最小为0,RST高电平持续时间t10最小为15ns, CI1的上升沿与CI3的下降沿之间的t11最小为100ns。只有严格的遵循此时序关系,设计出的时序电路才能稳定、可靠的工作。

4           时序电路设计与时序仿真

IL-E2 TDI-CCD的像元数有每行512,1024和2048三种,本文以项目使用的像元数为2048的为例设计时序电路。2048为有效像元数,每行有128个哑像元,设计中使每行输出2288个信号电平,即每个行周期内有2288个CR1、CR2、RST驱动脉冲。除了2048+128=2176个像元驱动脉冲以外,其余为空驱动脉冲。空驱动数越多,CCD曝光积分时间越长,灵敏度提高,但过长的曝光积分时间会使CCD输出饱和失真,故空驱动数目不易过多。

行积分时间和像元移位读出时钟频率是CCD时序电路的设计依据。在工程应用中,我们根据技术指标要求,算出行积分时间即行周期(T)为0.25ms,以此确定合适的系统主时钟。

设计时,先产生CR信号,然后以此为基础,根据周期相位关系产生其它驱动时序信号。

驱动时序用超高速集成电路硬件描述语言(VHDL)编写【3】,程序主要包括:(1)调用所需的库函数和程序包;(2)定义输入和输出端口;(3)用计数器对输入的系统主时钟进行分频。(4)驱动时序信号的产生和输出。部分源代码如下:

process(cr2_s)

    begin

        if cr2_s'event and cr2_s = '1' then

            if cr_count_s < 2288 + CONV_INTEGER(linecycle_s) then    

                cr_count_s <= cr_count_s + 1;

            else cr_count_s <= 0;

            end if;

        end if;

end process;

process(sysclk,cr_count_s,cr1_s,cr2_s)                     ――产生CR信号

    begin

    if sysclk'event and sysclk = '1'then

        if cr_count_s < 64 then

            cr1 <= '0';         cr2 <= '1';

        else

            cr1 <= not cr1_s;   cr2 <= not cr2_s;

        end if;

    end if;

end process;

    process(sysclk,sys_count_s)                        ――产生输出复位信号RST

begin

        if sysclk'event and sysclk = '1' then

            case sys_count_s is

                when 1 => rst_s <= '1';

                when 2 => rst_s <= '1';

                when others => rst_s <= '0';

            end case;

        end if;

end process;

process(cr_count_s,cr2_s)                              ――产生CI和TCK信号

begin

        if cr2_s'event and cr2_s = '1' then

            if cr_count_s < 16 then

                ci1_s <= '1';   ci2_s <= '0';   tck_s <= '1';

            elsif cr_count_s < 24 then

                ci1_s <= '1';   ci2_s <= '1';   tck_s <= '1';

            elsif cr_count_s < 40 then

                ci1_s <= '0';   ci2_s <= '1';   tck_s <= '1';

            else

                ci1_s <= '0';   ci2_s <= '0';   tck_s <= '0';

            end if;

        end if;

end process;【4】

由XILINX公司的设计软件ISE6.2对XQVR300器件进行时序设计,通过时序仿真与工程应用验证了能完成上述所有功能。

结束语

    本文的创新点是完成了对像元数为2048的IL-E2 TDI-CCD的驱动时序的VHDL编写和在可编程器件中的下载实现,时序仿真和硬件电路测试表明该时序电路能够较好地产生器件所需的时序脉冲;使用延迟量小的FPGA使得系统可以工作在百兆赫兹的高频段,可靠性和稳定性得到了很好的保证;程序可移植性强,可作为其它类型的CCD驱动时序设计的参考。

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm
返回列表