TCD1304的驱动电路

0 阅读5分钟

CCD驱动程序

摘要:这部分内容便是CCD的开端,写的是这个CCD的驱动程序,按理来说这个的东西的驱动,用FPGA驱动能更好,笔者这边使用的是C8T6,比较亲民的,并且基本大家学嵌入式的入门也是这款,所以使用这个去驱动可以降低部分的门槛

1.CCD1304时序图分析

image-20260624210503631.png

image-20260624210659507.png

1.1三大信号的关系

1.按照ØM的典型频率为2MKZ 也就是周期为0.5us

这个的东西你结合我上边放置的具体的电路图,便可以看出来这个ICG的低电平宽度该为这个SH高电平的宽度+5us

SH高电平只要大于这个1us即可,同时其拉高的时间比这个ICG慢500ns

那么在这个时候该如何做呢?

直接先忽视这个SH和ICG的初始,这么假设这个东西是开始都是高电平,同时设这个SH为A信号,ICG为B信号

那么很显然就能列出来他们两个的关系式,如下图所示

A信号:高电平x μs,低电平y μs,y最少为1us B信号:高电平x-0.5 μs,低电平y+5 μs

1.2周期信号的呈现

然后咱们在分析这个波的完整图

image-20260626124129291.png

前边的波形好说,那么后续的波该如何弄呢?

这个时候就要使用定时器当中的单脉冲模式

咱们使用这个单脉冲模式去输出前边的波,因为他是重复的,那么咱们要把这个的开关,放到这个while当中去

没有所谓的周期的事情,因为使用这个while循环去模拟了这个周期

只需要管这个低电平的持续时间,以及这个延迟即可

image-20260626124342779.png

也就是图片当中的这个绿色,后续的这个电平,直接用一个Delay去阻塞即可,

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    __HAL_TIM_ENABLE(&htim1);  // 等价于 TIM1->CR1 |= TIM_CR1_CEN
    __HAL_TIM_ENABLE(&htim3);  // 等价于 TIM3->CR1 |= TIM_CR1_CEN
    HAL_Delay(35);
  }

就是用这个代码,来构成了所需要的周期,因为单脉冲模式下这个,只能被触发一次

1.3整体的分析

然后结合咱们要求的这个 主控板对应的这个时钟频率,以及上边的关系式子,那么咱们直接发给AI,让他去算这个CCR和ARR

条件:STM32定时器时钟72MHz,PSC=0,开启单脉冲OPM,向上计数,PWM1输出模式,输出极性高;初始电平高,0~CCR为高电平,CCR~ARR为低电平,1μs对应72个计数tick。
A信号:高电平x μs,低电平y μs
B信号:高电平x-0.5 μs,低电平y+5 μs
限制:x必须大于0.5,y大于1us,输出CCR_A、ARR_A、CCR_B、ARR_B,并校验两路高低电平实际时长。输入x、y。

结果

A:CCR_A=144,ARR_A=432
B:CCR_B=108,ARR_B=756
校验:A2μs 低 4μs;B1.5μs 低 9μs,全部整数无误差。

2.C8T6的定时器配置

前边算出来这个ARR和CCR,计算的结果是假设是高电平的时候,那么咱们回归本来的,该如何配置?

我的建议就是参考下边的表格选择适合咱们的

2.1前提条件

  1. 定时器:向上 UP / 向下 DOWN 二选一;输出模式 PWM1 / PWM2;输出极性固定 HIGH(有效电平 = 高,静止初始电平高)
  2. OPM 单脉冲开启,CNT 走完一次 ARR 后停机
  3. 有效电平 = 高,无效电平 = 低
  4. 总计数区间:0 ~ ARR

表格:计数方向(UP/DOWN)× PWM1/PWM2 四组搭配时序

序号计数方向输出模式电平判定规则完整波形时序(初始静止:高电平)
1UP 向上PWM1CNT <CCR → 有效 (高)CNT ≥ CCR → 无效 (低)0CCR-1:高电平(时长 CCR)CCRARR:低电平(时长 ARR-CCR)结束回到高电平
2UP 向上PWM2CNT <CCR → 无效 (低)CNT ≥ CCR → 有效 (高)ARR:高电平结束回到低电平
3DOWN 向下PWM1CNT > CCR → 有效 (高)CNT ≤ CCR → 无效 (低)ARRCCR+1:高电平(时长 ARR-CCR)CCR0:低电平(时长 CCR)结束回到高电平
4DOWN 向下PWM2CNT > CCR → 无效 (低)CNT ≤ CCR → 有效 (高)ARRCCR+1:低电平CCR0:高电平(时长 CCR)结束回到高电平

补充:如果极性改为 LOW(有效电平 = 低,静止初始电平低)

规律整体取反:

  1. UP+PWM1:0CCR 低,CCRARR 高,静止低
  2. UP+PWM2:0CCR 高,CCRARR 低,静止低
  3. DOWN+PWM1:ARRCCR 低,CCR0 高,静止低
  4. DOWN+PWM2:ARRCCR 高,CCR0 低,静止低

2.2结合表格分析

2.2.1SH信号

先低xus,然后高yus,结束之后依旧为低,使用通用定时器

PWM2 + 极性高(有效 = 高)+UP

  1. (CNT < CCR):输出无效电平 = 低
  2. (CNT \ge CCR):输出有效电平 = 高
  3. 计数跑完 ARR、OPM 硬件关定时器后,引脚维持无效电平(低)
  4. CCR_A=144,ARR_A=432
2.2.2ICG信号

先高x-0.5us,然后低这个y+5us,结束之后依旧为高,使用高级定时器

配置:UP + PWM2 + OCPolarity_LOW + OCIdleState_SET + OPM 单脉冲

  • 计数中:CNT<CCR 高,CNT≥CCR 低
  • 脉冲结束停机:OCIdleState 强制输出高,覆盖默认无效电平
  • 表现:延时阻塞全程高,脉冲波形符合需求

也可以使用这个

UP 向上 + PWM 模式 1+极性高

CCR_B=108,ARR_B=756

2.3总结

TIM1/TIM2/TIM3:核心是生成 CCD 传感器的 SH、ICG 等控制脉冲(φM是TIM2,SH是TIM3,ICG是TIM1

while循环当中的Delay就是延时多少时间开始重复,也就是电荷的积累时间