求线阵CCD TCD1254数据手册
实在是找不到,请各位帮忙!谢谢! 如果搞开发的话,建议楼主换流行一点的。 http://www.stmfans.com/html/08/t-2408.html[原创]用豆皮驱动CCD
发布: 2009-2-18 01:23 | 作者: duqiong | 来源: StmFans思蜕盟 OPELC 自由电子联盟
折腾好几天了,总算出来了 (有不对的地方请大家指正!)
CCD是东芝的TCD1254GFG,2500像素的线阵CCD。用stm32芯片产生CCD需要的三路驱动ICG(Integration clear gate),SH(Shift gate),ΦM(Master clock)。
CCD的1个工作周期分为2个阶段:光积分阶段和电荷转移阶段,光积分阶段实现光电荷的积累,与此同时将上一帧转移到移位寄存器中的电荷向输出放大器移位输出并清空移位寄存器中的无效电荷;电荷转移阶段实现光电荷向移位寄存器中的转移。(这些废话就不说了,看下面时序图,其中ΦM的典型值是2MHz。)
图被我画得有点乱了,将就看吧
CCD驱动时序1.jpg
CCD驱动时序2.jpg
1个SH时钟周期即为CCD的光积分时间,它控制着线阵CCD的整行转移时间,由上图看出其周期应大于等于2546个主时钟周期,只有这样才能保证SH在转移第2行信号时第1行信号能全部转移出器件。(反正就是完全按照上图的时序写,CCD的OS管脚就能输出光电转换后的信号了)
这里我假设SH周期为2575个M时钟,即2575*500ns=1287500ns。ICG和SH的周期是一样的。
使用stm32的内部时钟HSI,16倍频,SYSCLK=8/2*16=64MHz。
TIMxCLK=64MHz,三个信号都使用了PWM输出模式。
1、ΦM信号
由ΦM频率=2MHz可推算出ARR值,由占空比=50%可推算出CRR1值
/* -----------------------------------------------------------------------
TIM3 Configuration: generate 1 PWM signal:
TIM3CLK = 64 MHz, Prescaler = 0x0, TIM3 counter clock = 64 MHz
TIM3 ARR Register = 31 => TIM3 Frequency = TIM3 counter clock/(ARR + 1)
TIM3 Frequency = 2 MHz.
TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR+1)* 100 = 50%
----------------------------------------------------------------------- */
/* Time base configuration: TIM3 */
TIM_TimeBaseStructure.TIM_Period = 31;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
/* PWM1 Mode configuration: TIM3 Channel1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR1_Val;//TIM3 CCR1 value:16
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
2、ICG信号
由周期1287500ns推算出ARR值,再由ICG的负脉冲=t2+t3+t1=500+7062.5+5000=12562.5(假设三者均为典型值附近)推算出占空比,从而得到CCR2值。
/* -----------------------------------------------------------------------
TIM2 Configuration: generate 1 PWM signal:
TIM2CLK = 64 MHz, Prescaler = 0x3, TIM2 counter clock = 16 MHz
TIM2 ARR Register = 20599 => TIM2 Frequency = TIM2 counter clock/(ARR + 1)
TIM2 Frequency = 1/(1287500ns) Hz.
TIM2 Channel2 duty cycle = (TIM2_CCR2/ TIM2_ARR+1)* 100 = (201/20600) %
----------------------------------------------------------------------- */
/* Time base configuration: TIM2 */
TIM_TimeBaseStructure.TIM_Period = 20599;
TIM_TimeBaseStructure.TIM_Prescaler = 3;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* PWM2 Mode configuration: TIM2 Channel2 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//用PWM2模式使得输出极性反向
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR2_Val;//TIM2 CCR2 value:201
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM2, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
3、SH信号
由周期1287500ns推算出ARR值,再由SH的正脉冲=7000(以t3附近作的假设)推算出占空比,从而得到CCR3值。
/* -----------------------------------------------------------------------
TIM4 Configuration: generate 1 PWM signals:
TIM4CLK = 64 MHz, Prescaler = 0x3, TIM4 counter clock = 16 MHz
TIM4 ARR Register = 20599 => TIM4 Frequency = TIM4 counter clock/(ARR + 1)
TIM4 Frequency = 1/(1287500ns) Hz.
TIM4 Channel3 duty cycle = (TIM4_CCR3/ TIM4_ARR+1)* 100 = (112/20600)%
----------------------------------------------------------------------- */
/* Time base configuration: TIM4 */
TIM_TimeBaseStructure.TIM_Period = 20599;
TIM_TimeBaseStructure.TIM_Prescaler = 3;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
/* PWM1 Mode configuration: TIM4 Channel3 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR3_Val;//TIM4 CCR3 value:112
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC3Init(TIM4, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
4、使能输出
/* TIM3 enable counter */
TIM_Cmd(TIM3, ENABLE);
delay(6);//调整延时以满足驱动时序的t4要求
/* TIM2 enable counter */
TIM_Cmd(TIM2, ENABLE);
/* TIM4 enable counter */
TIM_Cmd(TIM4, ENABLE);
5、延时
void delay(u32 time)
{
int i;
for (i=time; i>0; i--);
}
OK了!PA6输出Mclock,PA1输出ICG,PB8输出SH。
用示波器看看驱动时序对不对。(这里顺便赞一下炳哥哥推荐的示波器,真不错!)
1、ΦM频率=2MHz
2、ICG周期=1.288ms
3、SH周期=1.288ms
M时钟.jpg
ICG周期.jpg
SH周期.jpg
4、ICG负脉宽=12.56us
5、SH正脉宽=t3=7.000us
6、SH和ICG
ICG负脉宽.jpg
SH正脉宽.jpg
SH和ICG.jpg
7、t1=5.20us
8、t2=472ns
9、t4=96ns
t1.jpg
t2.jpg
t4.jpg
与数据手册对照一下,全都符合!(太兴奋了)
现在CCD还没到,过几天到了打算把CCD和豆皮连上,放个条码图像看看CCD 爱死你们了,天助我也。。。 回复【4楼】mcu131368
爱死你们了,天助我也。。。
-----------------------------------------------------------------------
那还不赶快以身相许? 还没有数据手册哦,谁好心传一个上来啊 MARK!!! mark {:lol:}
激动mark 不知楼主有没有研究过TCD1304AP,可以谈谈经验吗?
楼主可否告之QQ,我有TCD1254项目,是否愿意承接? mcu131368 发表于 2011-4-14 16:48
爱死你们了,天助我也。。。
有TCD1254项目外发,您愿意承接么?
页:
[1]