找回密码
 立即注册
查看: 1899|回复: 31

让CCD图像采样更快!

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-5-20 11:00:04 | 显示全部楼层 |阅读模式
今年的智能车竞赛,STC组别通常使用的是CCD图像传感器。
CCD图像传感器是什么呢?其实就是普通的摄像头只取一行的效果,对于普通的赛道循迹来说,完全是够用的。
截图202405201100007385.jpg

不过随着车友们的速度越来越快,CCD图像的帧率就变得重要起来了,普通的70帧到80帧的速率已经不能满足车友们的控制需求了
那么,应该如何提高单片机读取CCD图像的速度呢?
这里给出一种使用PWM同步触发ADC,通过ADC中断对图像进行保存的思路,这种方法图像曝光间隔稳定,图像质量好,ADC采样点可以调节,并且不会堵塞占用系统资源。
这里给出一个示例程序,其中使用的是PWM1P引脚P2.0和ADC0引脚P1.0,设定的采样频率是300帧左右。
  1. <font size="5">u16 set_period = 1300;//采样周期
  2. u16 set_ccr = 250;//采样时间点
  3. u16 adc_tmp[128] = {0};
  4. u16 ADC_Cnt = 0;    // ADC缓冲计数
  5. bit ADC_Finish = 0; // 成功置1
  6. void PWM_Init(void)
  7. {
  8.     EAXFR = 1; // 使能访问外部XFR
  9.     PWMA_PS = 0x01; // 高级 PWM 通道输出脚选择位
  10.     PWMA_ENO = 0x01;
  11.     PWMA_CNTRH = 0x00;
  12.     PWMA_CNTRL = 0x00;
  13.     PWMA_ARRH = (u8)(set_period >> 8); // 设置周期时间
  14.     PWMA_ARRL = (u8)set_period;
  15.     PWMA_CCR1H = (u8)(set_ccr >> 8);
  16.     PWMA_CCR1L = (u8)(set_ccr);
  17.     PWMA_CR2 = 0x30; // 设置比较捕获打开ADC
  18.     PWMA_CCER1 = 0x00; // 写 CCMRx 前必须先清零 CCxE 关闭通道
  19.     PWMA_CCMR1 = 0x60; // 通道模式配置
  20.     PWMA_CCER1 = 0x01; // 配置通道输出使能和极性
  21.     PWMA_BKR = 0x80;  // 使能主输出
  22.     PWMA_CR1 |= 0x01; // 使能计数器
  23.     ADC_CONTR = 0; // 固定打开0通道
  24.     ADC_POWER = 1;
  25.     ADC_EPWMT = 1;
  26.     ADC_FLAG = 0;
  27.     ADCCFG = 0x20; // 调整为右对齐,ADC时钟速度最快
  28.     ADCTIM = 0x9f; // 最大采样时间
  29.     EADC = 1;
  30.     PWMA_IER = 0x01;
  31. }
  32. void ADC_Isr(void) interrupt 5
  33. {
  34.     ADC_FLAG = 0;
  35.     if (ADC_Cnt >= 128)
  36.     {
  37.         PWMA_CR1 &= ~0x01; // 暂时关闭PWMA
  38.         ADC_Finish = 1;
  39.     }
  40.     else
  41.     {
  42.         adc_tmp[ADC_Cnt] = ((u16)ADC_RES << 8 | ADC_RESL);
  43.         ADC_Cnt++;
  44.     }
  45. }
  46. void Start_Get_Image(void)
  47. {
  48.     PWMA_CR1 &= ~0x01; // 暂时关闭PWMA
  49.     PWMA_CNTRH = 0x00;
  50.     PWMA_CNTRL = 0x00; // 计数清零
  51.     PWMA_ENO = 0x00;   // 关闭PWMA端口输出
  52.     CCD_CLK = 1;
  53.     CCD_SI = 0;
  54.     CCD_CLK = 0;
  55.     CCD_SI = 1;
  56.     CCD_CLK = 1;
  57.     CCD_SI = 0;
  58.     CCD_CLK = 0;
  59.     ADC_START = 1;
  60.     PWMA_ENO = 0x01;  // 使能输出,小脉冲
  61.     ADC_Cnt = 0;      // 从零开始计数
  62.     PWMA_CR1 |= 0x01; // 启动PWMA定时器计数
  63.     ADC_Finish = 0;
  64. }</font>
复制代码
这里,使用的是PWM1P的CCR比较事件触发的ADC采样,adc_tmp[128]是用于缓存一帧图像的数组,每次读取完成以后会给ADC_Finish标志位置1。
程序内只需要启动Start_Get_Image()函数,然后等待ADC_Finish标志位变成1,处理完图像后,再次将ADC_Finish标志位变成0后,重新开始获取图像流程即可。
当然,如果追求更快的速度,可以加入双缓冲机制,使得图像采样可以不用等待图像处理完成。
以上程序仅供交流,确保是能用的。如果想要更改为其他的引脚,可以参考技术手册进行更改。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:449
  • 最近打卡:2025-04-30 10:57:37

17

主题

533

回帖

1326

积分

金牌会员

积分
1326
发表于 2024-7-7 07:44:28 | 显示全部楼层
请问一下楼主, 这个CCD的具体型号有吗? 没有参赛主要是想研究下这个图像处理循迹的这一方面

点评

是tsl1401 128个像素的图像传感器  详情 回复 发表于 2024-7-7 11:47
自信就会温和,温和就会坚定!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:503
  • 最近打卡:2025-05-02 08:06:55
已绑定手机

1

主题

834

回帖

1447

积分

金牌会员

积分
1447
发表于 2024-7-7 08:17:37 | 显示全部楼层
感谢分享,还没接触过CCD图像传感器
靡不有初,鲜克有终
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-01 21:04:13
已绑定手机

21

主题

487

回帖

1027

积分

金牌会员

积分
1027
发表于 2024-7-7 10:04:13 | 显示全部楼层
这个ccd循迹的功能要好好学学,能多点资料吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-7-7 11:47:04 | 显示全部楼层
嵌入*** 发表于 2024-7-7 07:44
请问一下楼主, 这个CCD的具体型号有吗? 没有参赛主要是想研究下这个图像处理循迹的这一方面 ...

是tsl1401
128个像素的图像传感器
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:449
  • 最近打卡:2025-04-30 10:57:37

17

主题

533

回帖

1326

积分

金牌会员

积分
1326
发表于 2024-7-7 17:28:48 | 显示全部楼层
王*** 发表于 2024-7-7 11:47
是tsl1401
128个像素的图像传感器

这玩意有点贵啊

点评

直接买传感器价格在25左右,还是可以接受的。 成品模块因为比赛溢价有点严重  详情 回复 发表于 2024-7-7 18:27
自信就会温和,温和就会坚定!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-7-7 18:27:18 | 显示全部楼层

直接买传感器价格在25左右,还是可以接受的。
成品模块因为比赛溢价有点严重
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:449
  • 最近打卡:2025-04-30 10:57:37

17

主题

533

回帖

1326

积分

金牌会员

积分
1326
发表于 2024-7-7 23:58:20 | 显示全部楼层
王*** 发表于 2024-7-7 18:27
直接买传感器价格在25左右,还是可以接受的。
成品模块因为比赛溢价有点严重 ...

那倒是可以 可以买个研究下
自信就会温和,温和就会坚定!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-04-30 10:02:32
已绑定手机

23

主题

175

回帖

878

积分

高级会员

积分
878
发表于 2024-7-10 11:03:37 | 显示全部楼层
王*** 发表于 2024-7-7 11:47
是tsl1401
128个像素的图像传感器

能发个具体的购买链接吗

点评

[attachimg]50882[/attachimg] 可以按照关键词和店铺名称来搜索,这个是淘宝的  详情 回复 发表于 2024-7-10 11:14
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-7-10 11:14:08 | 显示全部楼层
欢迎哈*** 发表于 2024-7-10 11:03
能发个具体的购买链接吗

截图202407101113495610.jpg

可以按照关键词和店铺名称来搜索,这个是淘宝的
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 08:31 , Processed in 0.295684 second(s), 125 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表