智能车制作

标题: 摄像头图像采集问题 [打印本页]

作者: zjt    时间: 2011-3-9 22:49
标题: 摄像头图像采集问题
我们加入了控制算法以后,摄像头采集的图像质量下降严重。不管怎么改行消隐信号等待时间,总是无法减弱行消隐信号产生黑块的宽度,以至于将干扰当成了跑道,谁知道该怎么办?我们的总线时钟是48M,要采一个70乘80的矩阵。是哪个时间设置的不合适?还是摄像头焦距没调好?还是AD的频率没调好?
这是AD模块的初始化代码:
  1. ATD0CTL0=0x00;   //单通道转换
  2.   ATD0CTL1=0x0F;   //7:1-外部触发,65:00-8位精度,4:放电,3210:通道15
  3.   ATD0CTL2=0x40;   //禁止外部触发, 中断禁止   
  4.   ATD0CTL3=0x08;   //左对齐无符号,每次转换1个序列, No FIFO, Freeze模式下继续转   
  5.   ATD0CTL4=0x00;   //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1]
  6.   ATD0CTL5=0x0F;   //通道15
  7.   ATD0DIEN=0x00;   //禁止数字输入
复制代码
附主函数代码:

  1. void main(void)
  2. {
  3.   LAST_PWMDTY01=6300;
  4.   PRE1_PWMDTY01=6300;
  5.   PRE2_PWMDTY01=6300;
  6.   k=0;
  7.   PORTB=0xFF;
  8.   
  9.   for(;;)
  10.   {
  11. // PWMDTY01=6200;
  12.   PORTB=0xf0;
  13.   PWMDTY23=0;
  14.   PWMDTY45=0;   
  15.   row=0;
  16.   gpline=0;                          //一场中行计数清零
  17.   gpflag=0;                          //清除场采集结束标志
  18.   while((PTH&0x02)!=0) ;             //等待场同步信号到来
  19.   PORTB=0xff;
  20.   EnableInterrupts;                  //开中断
  21.   TC0=TCNT+0x0CCC;                   //等待场消隐结束
  22.   TFLG1=0xFF;                        //清楚计数完成标志
  23.    
  24.   TIE=0x01;                          //开启TC0中断(interrupt 8)
  25.   while(gpflag==0);
  26.   DisableInterrupts;
  27.   
  28.                      
  29. //此处可添加信息处理、舵机和电机控制程序
  30.   draw_blackline_1();//提取有效的首行
  31.         draw_blackline_2();//对剩余的图像,提取黑线;
  32. //////////////////////////////////////////////////
  33.   get_steer(end_hang,start_hang);
  34.   duoji_control(steer);
  35.   PathIdentifier();
  36. startline_detect();
  37.   if(startline==1) {
  38.     stopline++;
  39.   }
  40.   motor_control();  
  41.   }
  42. //////////////////////////
  43.   }

  44. // Vector 6 Interrupt:start get a line
  45. interrupt 6 void line_start(void)
  46. //interrupt 2054 void line_start(void)
  47. {
  48.   IRQCR=0;                             //关闭行中断
  49.   
  50.   if(gpline==70) {
  51.     gpflag=1;                          //场结束标志位
  52.     //DisableInterrupts;
  53.   }
  54.   else {
  55.     gppoint=0;                         //一行中点计数清零
  56.     TC1=TCNT+0x004E;                  //等待行消隐结束
  57.     TFLG1=0xFF;                        //清除计数完成标志
  58.     TIE=0x02;                          //开启TC1局部中断(interrupt 9)
  59.   }
  60. }

  61. // Vector 8 Interrupt:Timer0
  62. interrupt 8 void timer0(void)
  63. //interrupt 2056 void timer0(void)
  64. {
  65.   TIE=0;                            //关闭定时器局部中断
  66.   IRQCR=0x40;                       //开启行同步中断(interrupt 6)
  67. }


  68. // Vector 9 Interrupt:Timer1
  69. //interrupt 2057 void timer1(void)
  70. interrupt 9 void timer1(void)
  71. {
  72.   unsigned char *p;
  73.   TIE=0;                             //关闭定时器局部中断
  74.   p=&(pic[gpline][0]);
  75.   ATD0CTL2=0x40;
  76.   ATD0CTL5=0x2F;
  77.   while(gppoint!=80)
  78.   {
  79.     while(!ATD0STAT2_CCF0);         //等待通道15转换结束
  80.     *p=ATD0DR0H;
  81.     p++;
  82.     gppoint++;
  83.   }
  84.     row=gpline;

  85.   TC2=TCNT+0x009c;   //隔数行采一次 ,已改
  86.   TFLG1=0xFF;        //清除计时完成标志
  87.   TIE=0x04;          //开启TC2局部中断(interrupt 10)
  88.   gpline++;
  89. }


  90. // Vector 10 Interrupt:Timer2
  91. interrupt 10 void timer2(void)
  92. //interrupt 2058 void timer2(void)
  93. {
  94.   TIE=0;           //关闭定时器局部中断
  95.   IRQCR=0x40;      //开启行同步中断(interrupt 6)
  96. }
复制代码

作者: 悲疏轻风    时间: 2011-3-10 13:12
我知道怎么办,底下私聊!
作者: as1093368889    时间: 2011-3-16 00:10
求经验啊,急!!
作者: zzdzdq    时间: 2011-3-16 13:31
你试着不接电机,用手推推看。。
作者: zzdzdq    时间: 2011-3-16 13:32
我的车只要不接电机,用手推就是跑得很好。。一但接上了。就over了图像采集出来看到的就是很多行无语的黑线
作者: 梦逍遥    时间: 2011-3-16 20:50
电机干扰?
作者: iven    时间: 2011-3-17 10:43
回复 1# zjt


    楼主解决了没有?什么问题?不接电机看看推车跑看看
作者: wenziheni    时间: 2011-10-30 21:42
怎么用BDM看ov7620呀
作者: 黑夜,香烟    时间: 2012-7-5 20:44
二楼能和我私聊吗?623770364




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2