基于单片机ATmega16的CCD驱动电路的设计
扫描二维码
随时随地手机看文章
CCD是一种固体成像器件[1],应用广泛。CCD工作需要多路脉冲驱动,并且各路脉冲在时序上要严格对应。对于CCD时序的设计,通常采用CPLD和FPGA技术,CPLD在低频CCD时序设计中使用[2-4],FPGA则用在更为复杂的时序设计中[5]。对于驱动比较简单的线阵CCD没有必要用这种成本比较高的电路。本文针对东芝公司的线阵CCD芯片TCD1304设计了基于单片机ATmega16的驱动电路。采用ATmega16的定时器/计数器timer0的CTC(比较匹配时清零定时器)模式和timer1的相位与频率修正PWM模式产生所需要的基本波形,可通过修改单片机程序中的参数来改变输出波形的频率和占空比,使得波形调整便捷。
1 ATmega16的CTC模式及相位与频率修正PWM模式
ATmega16的timer0的CTC模式可通过令控制寄存器TCCR0的WGM01=1和WGM00=0来设定。寄存器OCR0用于调节计数器的分辨率,当计数器的数值TCNT0等于OCR0中的值时计数器清零,即OCR0定义了计数器的TOP值,亦即分辨率。这个模式使得用户可以很容易地控制比较匹配输出的频率。CTC模式的时序图如图1所示。计数器数值TCNT0一直累加到TCNT0与OCR0匹配,然后TCNT0清零。
为了在CTC模式下得到波形输出,可以设置输出脚OC0在每次比较匹配发生时改变逻辑电平,这可以通过设置COM01:0=1来完成。在期望获得OC0输出之前,首先要将其端口设置为输出。波形发生器能够产生的最大频率由公式fOC0=fclk_I/O/2·N·(1+OCR0)来确定,变量N代表预分频因子(1、8、64或1 024)。
ATmega16的timer1的相位与频率修正模式可通过令控制寄存器TCCR1A和TCCR1B中的WGM13:0=8或9来设定。该种模式可以产生高精度的、相位与频率都准确的PWM波形,其工作时序图如图2所示。这是一种双斜坡操作的模式,计数器重复地从BOTTOM计数到TOP,然后又从TOP倒退回到BOTTOM。TOP的值可由ICR1(WGM13:0=8)或OCR1A(WGM13:0=9)来确定。在一般比较输出模式下,当TCNT1向TOP计数时,若TCNT1与OCR1A相匹配,输出脚OC1A(B)清零,并置为低电平;当TCNT1向BOTTOM计数时,若TCNT1与OCR1A相匹配时,输出脚OC1A(B)置为高电平,工作于反向输出比较时正好相反。输出的PWM波形的频率由公式fOC1A(B)=fclk_I/O/2·N·TOP来确定,变量N代表预分频因子(1、8、64或1 024)。通过改变ICR1及OCR1A两个寄存器的值就可完成PWM波形占空比的调整。
2 线阵图像传感器TCD1304的时序分析
CCD芯片TCD1304是一款高灵敏度、低暗电流的线阵图像传感器,其光电灵敏度的典型值可达到160 V/lx.s,可用于条码扫描、光谱测量等场合。TCD1304有两种工作方式:普通工作方式和电子快门工作方式,图3为在普通工作方式下的时序图。
TCD1304工作时需要SH、ICG和ФM 3路驱动信号。SH的周期表示光信号积累时间,即积分时间,ICG和SH是同步的,ФM是主脉冲,其典型值为2 MHz。OS表示信号输出,每4个ФM脉冲周期对应1位信号周期。可以看出,TCD1304工作时需要的驱动信号比较简单,完全可以用ATmega16来产生。
3 电路设计及实验结果
3.1 电路设计
基于ATmega16的TCD1304的驱动电路如图4所示。
使用ATmega16的timer0的CTC工作模式产生2 MHz的方波,并由输出脚OC0输出,然后经过施密特反向器整形后输出作为ФM(即图4中的FM);使用timer1的相位与频率修正PWM模式产生一定周期的波形,由OC1A脚输出,同样经过施密特反向器整形后输出作为ICG;将ICG波形经过延时和变窄处理后得到SH信号。图4中还给出了ATmega16的复位电路。单片机工作时使用系统内部时钟8MHz,timer1采用8分频(即1 MHz)作为时钟输入。部分的单片机程序如下:
初始化部分:
LDI TEMP, $00
OUT TCCR0, TEMP
OUT TCNT0, TEMP
OUT TCNT1L, TEMP
OUT TCNT1H, TEMP
OUT TIMSK, TEMP
设置timer1和timer0的相关寄存器:
LDI TEMP, $80
OUT TCCR1A, TEMP
LDI TEMP, $00
OUT OCR1AH, TEMP
LDI TEMP, $04
OUT OCR1AL, TEMP
LDI TEMP, $0e
OUT ICR1H, TEMP
LDI TEMP, $74;
OUT ICR1L, TEMP
LDI TEMP, $02;
OUT OCR0, TEMP
启动输出:
LDI TEMP, $71
OUT TCCR0, TEMP
NOP
LDI TEMP, $12
OUT TCCR1B, TEMP
在程序中,由输出脚OC0输出的是2 MHz方波,通过寄存器OCR0和TCCR0来确定。输出脚OC1A输出的波形周期为T=7.4 ms(ICR1·2·1 μs),对应CCD的最短积分时间。改变timer1的寄存器的设置就可以调整积分时间。
3.2 实验结果
用示波器测量图4所示电路产生的SH和ICG波形如图5所示。通道1为SH波形,通道2为ICG波形,SH的高电平相对于ICG的低电平有一定的延时且宽度较窄。图6为ICG和ФM的波形图,通道1为ICG波形,图中显示出了上升沿部分,通道2为ФM波形。CCD的输出信号波形和ICG如图7所示,通道1为ICG波形,通道2为CCD波形。
基于单片机ATmega16的CTC模式和相位与频率修正的PWM工作模式,设计了CCD时序驱动电路,结构简单,调试方便。另外两种工作模式只使用了单片机很少一部分资源,后续的CCD信号处理部分(模数转换、数据存储等)可以充分利用单片机的现有资源。
参考文献
[1] 王庆有,王晋疆,张存林,等. 光电技术[M]. 北京:电子工业出版社,2008.
[2] 许秀贞,李自田. 基于CPLD的可选输出CCD驱动时序设计[J]. 光子学报,2004,33(12):1504-1507.
[3] 冉晓强,汶德胜. 基于CPLD的空间面阵CCD相机驱动时序发生器的设计与硬件实现[J]. 光子学报,2007,36(2):364-367.
[4] 谷林,胡晓东,罗长州. 基于CPLD的线阵CCD光积分时间的自适应调节[J]. 光子学报,2003,31(12):1533-1537.
[5] 周建康,陈新华,周望,等.积分时间可调的CCD相机驱动时序设计与实现[J]. 光子学报,2008,37(11):2300-2304.