基于CPLD的CCD驱动电路自动增益调整
扫描二维码
随时随地手机看文章
ccd(charge couple device)是一种电荷藕合式光电转换器件。在物体位移测量系统中,常常以ccd作为位移传感器。当一束曝光器发出的激光照射到被测物体上并发生漫反射时,反射光将经透镜聚焦后成像在ccd上,以使ccd光敏单元感光,从而产生转移电荷。这样ccd驱动电路就会产生一定频率的驱动脉冲以反映物体位移信息,输出的信号为模拟信号。经a/d转换后,便可由后续处理电路采集和运算。
实际测量工作中,由于工作环境、光照强度或被测物体的不同,会使得照射到被测物体表面的激光束的反射率变化比较大,因此,ccd上成像点的光强就会时强时弱。ccd光敏单元在过强或过弱光线照射下,会产生过饱和或不饱和的电荷,从而使输出的模拟信号不能满足数据采集要求,因而不能真实反映被测物体的位移信息,影响最后计算结果的准确性,而产生了较大的误差。鉴于以上原因,为了能够得到准确的被测物体的位移结果,应使ccd测量系统输出的模拟信号峰值尽量稳定在某一范围内。
cpld复杂可编程逻辑器件具有集成度高,体积小,速度快等特点。通过cpld能够以厂家提供的cad工具为开发平台,结合原理图编辑与vhdl语言软件编程,以在cpld中实现数字硬件中的大多数逻辑电路[1]。因此,本文所设计的ccd自动增益系统的核心部分选用cpld来实现。
ccd信号的自动增益调整
ccd传感器输出的模拟信号与入射光光强、帧转移频率有关。其大小随入射光光强的增大而增大,随帧转移频率的增大而减小,因此,通过改变入射光的光强或帧转移频率就可以调整输出的模拟信号峰值。本系统就是采用调节帧转移频率来达到自动增益调整的目的。
一般情况下,帧转移脉冲由ccd驱动电路输出,其频率大小直接影响ccd传感器的积分时间。帧转移频率越小,传感器积分时间越长,相应地,ccd传感器曝光时间也越长,光敏单元捕捉到的光量也越多。当帧转移频率过小时,光敏单元所产生的光电电荷就会达到过饱和状态,输出的模拟电压峰值将会超过所要求的范围。反之,输出的模拟电压峰值将会低于所要求的范围。因此,可设计一个ccd输出电压峰值的采样、保持电路,再对此峰值进行a/d转换,同时与所要求的范围进行比较。当其超出范围值时,可增大帧转移频率;而当其值低于范围时,则可减小帧转移频率[2]。
系统整体结构
这种基于cpld的ccd自动增益调整驱动电路的整体结构如图1所示,该系统共分为两部分。第一部分为模拟/数字转换电路,该部分采用一个转换精度为8位的a/d转换器来将ccd输出的模拟电压值转换为数字量。第二部分为可自动调整增益的ccd驱动电路,此部分采用cpld进行配置,可自动完成增益调整及ccd驱动信号的输出,并可为a/d转换器提供转换控制脉冲。
a/d转换部分
ccd的输出信号为模拟量,故须经a/d将其转换成数字量,以便cpld进行处理。在本设计中,a/d转换器采用的ad9048可工作在35msps的高速上,由cpld产生的单位转移脉冲sp可为其提供转换控制脉冲convert。在convert的上升沿到来后,a/d9048对ccd相应象素点上输出的模拟电压值进行采样,并在convert下降沿到来之前输出转换结果,该结果由cpld寄存并最终得到一帧中ccd输出的模拟电压峰值的大小。
可自动增益的ccd驱动电路设计
此电路利用cpld设计,其内部可划分为四个模块(如图2所示),整个芯片所需的时钟由外部晶振或振荡电路提供。
第一个分频模块dispart用于对外部时钟进行一到八倍的分频。第二个模块mul tiplexer是一个多选一模块,由compare控制。第三个模块compare用于对a/d转换的结果进行寄存,并将一帧结束后得到的ccd输出电压峰值与所设定的阈值进行比较,若超出阈值上限则输出结果减一,multiplexer选出频率较高的一路时钟作为driver的输入时钟脉冲;反之,则对compare的输出结果加一,multiplexer选出频率较低的一路时钟作为driver的输入时钟脉冲。第四个模块driver用来产生驱动ccd的信号及一位单位转移信号。
当multiplexer选出频率较高的一路脉冲作为driver的输入时钟,再由driver产生ccd驱动信号时,驱动信号中的帧转移脉冲sh频率就会增加,从而使ccd传感器的曝光时间变短,ccd输出的模拟电压峰值降低;反之,sh频率减小,曝光时间变长,ccd输出的模拟电压峰值升高。这样,通过以上过程,便可调节ccd模拟电压峰值的范围。
本设计应用的ccd器件为tcd1201d,采用二相驱动脉冲工作,驱动电路要产生六路工作脉冲,其中五路用作ccd提供工作脉冲,分别为帧转移脉冲sh、电荷转移脉冲t1、t2、复位脉冲rs、补偿脉冲bt;另一路为单元转移脉冲sp。此六路脉冲由cpld中的driver部分产生,此部分可用硬件描述语言vhdl进行设计。
产生补偿脉冲bt和单元转移脉冲sp时,由于bt占空比为2:1,因此应对输入的时钟脉冲三分频,低电平占时钟脉冲一个周期,高电平占时钟脉冲两个周期,其具体的程序部分如下:
process(clk)
begin
if(clk’event and clk=‘1’)then
counter1<=counter1+1;
if counter1=2 then
mbt<=‘0’;
counter1<=0;
[!--empirenews.page--]
else mbt<=‘1’;
end if;
end if;
bt<=mbt;
sp<=mbt and(not msh2);
end process;
该器件有2048位有效像元,工作时还要有46位哑像元输出,一个扫描周期至少应有2094个像元时钟周期,由于该器件两并行输出,因此,一个帧转移周期内的t1、t2至少分别有1047个脉冲。由于t1、t2的周期相等,方向相反且周期为bt周期的二倍,因此,产生sh、t1、t2的程序进程如下:
process(mbt,clk)
begin
if (mbtevent and mbt=‘1’)then
mt<=not mt;
end if;
if(clk’event and clk=‘1’)then
t1<=mt and (not msh2);
t2<=(not mt)or msh2;
end if;
end process;
process(mt)
begin
if(mt’event and mt=‘1’)
then
counter2<=counter2+1;
if counter2=1100 then
counter2<=0;
msh1<=‘1’;
msh2<=‘1’;
elsif(counter2<=3)then
msh1<=‘1’;
msh2<=‘1’;
elsif(counter2>3 and counter2<=5)then
msh1<=‘0’;
msh2<=‘1’;
else
msh1<=‘0’;
msh2<=‘0’;
end if;
end if;
sh<=msh1;
end process;
产生rs的程序进程如下:
process(mbt,clk)
begin
if(clk’event and clk=‘0’)then
rs<=not mbt;
ned if;
end process;
至此,这样ccd驱动电路的六路信号均产生完毕,可以进行仿真,其结果如图3所示。
[!--empirenews.page--]
由图3可看出,所产生的驱动信号满足tcd1201d所需驱动时序关系。
dispart模块是用来对外部时钟进行分频的,可应用vhdl语言描述。其中二、三分频的程序如下:
process(clk)
begin
if(clk’event and clk=‘1’)then
mf1<=not mf1;
end if;
f1<=mf1;
end process;
process(clk)
begin
if(clk’event and clk=‘1’)
then
counter2<=counter2+1;
if counter2=2 then
mf2<=‘1’;
counter2<=0;
else
mf2<=‘0’;
end if;
end if;
f2<=mf2;
end process;
其他分频数与之类似,这里不再赘述。
compare模块是用来对a/d的转换结果进行寄存,并在一帧结束后,对得到的电压峰值进行判断以确定其是否在所规定的阈值范围内,从而控制多选一模块multiplexer。应用vhdl语言描述时,其程序的主要部分如下:
process(clk)
begin
if(clk’event and clk=‘0’)then
if data>reg_data then
reg_data<=data;
end if;
end if;
end process
process(sh)
begin
if(sh’event and sh=‘1’)
then
if(reg_data>200)then
if(reg_q(2)or reg_q(1)or reg_q(0)=‘1’ then
reg_q<=reg_q-1;
end if;
elsif(reg_data<150)then
if(reg_q(2)and reg_q(1)
and reg_q(0)=‘0’ then
reg_q<=reg_q+1;
end if;
else reg_q<=reg_q;
end if;
end if;
q<=reg_q;
end process;
这里,第一个进程的作用是得到ccd输出电压的峰值,data为a/d转换的结果。第二个进程的作用是判断峰值是否在阈值范围内,以调整输出q,去控制多选一模块选择相应的时钟脉冲来作为driver的输入。
将设计好的各个模块应用原理图进行连接,然后进行器件选择,本设计选cpld芯片为epm7128slc84-15,然后编译,再进行仿真,即可所得,如图4所示的时序图。
观察该时序图中可以看到,如cpld的工作与最初的设计意图相符,即可将程序下载到epm7128slc-15芯片中。
实验结果
进行电路的原理图设计,制成电路板,与ccd传感器连接。将光束打在一反射物体上,反射光为ccd传感器所接受,然后调节光照强度,利用示波器观察sh,可以看到sh的频率随光强的增大而增大。
结束语
本文所设计的带的ccd驱动电路,可集成于一片cpld芯片中,较过去的由几十片芯片组成的驱动电路,其面积大大减小了,而且带有自动增益调整功能,对频率的选出采用逐次逼近的方式。因此,采用适当的步长,就可以将sh的变化控制在比较合适的范围内,从而使峰值的收敛达到较好的效果。此外,自动增益调整也避免了人工调整的麻烦和误差,提高了精度,降低了劳动强度。