智能车制作

标题: 时序有点乱,,,求解 [打印本页]

作者: abacrya、军    时间: 2015-4-30 02:00
标题: 时序有点乱,,,求解
时序有点乱,CCD采集和直立控制有冲突,
原来时序:
2MS中断,在中断中进行平衡控制和速度,角度控制的平滑输出。//用时560us
并设置20MS与10MS标志位,
并在主函数while(1)中判断;
在10MS,进行角度控制,并开启CCD曝光定时;//用时50US
在20ms,进行速度控制。//用时40US

CCD采集中断,(采集在中断中完成)(曝光定时时间<10ms,现在固定为8MS,)
采集CCD数据,清空寄存器,关曝光中断;

当只对一个CCD进行采集时,//用时650US
一切正常,弯道平滑,

当对两个CCD经行采集时//用时1300US
50CM弯道感觉在走分段直线,布圆滑

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
改进方法:、
(1)中断中只设定标志位,所有计算都在主程序中解决
现象:连直立也不能保持(在重新调节积分时间后),
(2)设定4个中断,pit0_pint3,按标好设置优先级,0最高,3最低。
        0中断中放直立控制。
        1中断放CCD采集
       2 中断放角度控制
        3中断放速度控制
现象:过弯还是存在不圆滑。。。


不知道还有什么解决的方法,,,

作者: 、痕迹    时间: 2015-4-30 03:49
一个PIT,1Ms中断..3Ms直立控制..第1ms采集方向角速度,2ms采集加速度,3ms采集直立角速度滤波输出,,第10Ms采集ccd,第1ms处理ccd图像,每1ms输出一次电机
作者: abacrya、军    时间: 2015-4-30 11:12
、痕迹 发表于 2015-4-30 03:49
一个PIT,1Ms中断..3Ms直立控制..第1ms采集方向角速度,2ms采集加速度,3ms采集直立角速度滤波输出,,第10Ms采 ...

弱弱问一句,,,是放在全部放在中断中还是设定标志位,在主函数中搞,,
作者: 、痕迹    时间: 2015-4-30 20:29
abacrya、军 发表于 2015-4-30 11:12
弱弱问一句,,,是放在全部放在中断中还是设定标志位,在主函数中搞,,

我是全部放中断里面的...因为主函数我又其他事要做
作者: zhifu    时间: 2015-4-30 21:58
、痕迹 发表于 2015-4-30 20:29
我是全部放中断里面的...因为主函数我又其他事要做

敢问是其他什么事要搞?

作者: 、痕迹    时间: 2015-5-1 04:21
zhifu 发表于 2015-4-30 21:58
敢问是其他什么事要搞?

很多事.....但是直立速度方向和保护都在中断里面....ccd图像抖动就表示中断里面的时序溢出了
作者: abacrya、军    时间: 2015-5-1 08:27
、痕迹 发表于 2015-4-30 20:29
我是全部放中断里面的...因为主函数我又其他事要做

我和之前相同的控制周期。。。放在中断里面就乱了。。。直道都两边摆、、
作者: zhifu    时间: 2015-5-1 09:35
、痕迹 发表于 2015-5-1 04:21
很多事.....但是直立速度方向和保护都在中断里面....ccd图像抖动就表示中断里面的时序溢出了

ccd图像抖动就表示中断里面的时序溢出了?why?请详解!

作者: 海纳百川1    时间: 2015-5-1 15:43
我也遇到过相同的问题 我单片机KL26  加速度计和陀螺仪都是I2C读的 分别耗时1.2ms左右 所以我就配了一个1.5ms pit0中断 分四个周期 1 读加速度 2 读角速度 角度合成 角度控制 电机输出 3方向周期控制 4速度周期控制 之前我也是CCD采集在主函数里面踩 在pit0里面给6ms标志位 两个CCD采集(第二个CCD数据还没用 用单片机两个端口作为两个CCD的同样的SI CLK 两个AD口 一次时序AD采集就完了)但昨天一想这样采集会被1.5ms中断打断 影响图像 也确实出现了波动 所以又额外配置了一个pit1中断 200ns 每次进去翻转一下电平(SI CLK)还有ad_once 采集的还算可以 不过我没设置中断优先级 用的野火KL26库 KL26又是pit0和pit1共用一个中断号 所以我在pit0中置的6ms标志位用来作为pit1的使能(同时也是优先级吧) 采集结束完标志位清零 不知道我这样行不行
作者: abacrya、军    时间: 2015-5-1 17:00
、痕迹 发表于 2015-5-1 04:21
很多事.....但是直立速度方向和保护都在中断里面....ccd图像抖动就表示中断里面的时序溢出了

中断时序溢出?   我现在的CCD采集图像就在抖动,,是那种曝光时间不一样而引起的抖动

作者: abacrya、军    时间: 2015-5-1 17:33
本帖最后由 abacrya、军 于 2015-5-1 17:36 编辑
、痕迹 发表于 2015-4-30 03:49
一个PIT,1Ms中断..3Ms直立控制..第1ms采集方向角速度,2ms采集加速度,3ms采集直立角速度滤波输出,,第10Ms采 ...

现在的问题就是。。。把程序改了之后。但是控制周期不变的情况下。。。出弯乱晃,,,减小P值直接过不了弯,,,而且采集CCD的图像发送到上位机,,会看到跳动,,曝光时间不同引起的跳动
void pit0_incident(void)
{


    time_2++;
    time_10++;
    time_20++;
    /**每2MS进行姿态控制**/
    if(time_2>2)
    {
      time_2=1;
      balance_pwm=balance_control(0);
    }
    L_PWM=balance_pwm;
    R_PWM=balance_pwm;
    switch(time_10)
    {
      /**1MS进行CCD复位,曝光时间=采集时间-复位时间**/  
      case 2:
        {
          ccd_restet(2);
          break;
        }

      /**2MS进行CCD复位,曝光时间=采集时间-复位时间**/  
      case 3:
        {
          ccd_restet(1);
          break;
        }
      /**7MS进行CCD采集**/
      case 8:
        {
          ccd_gather(ccd2_daat,2);
          //uart_putstr (UART0,ccd1_daat);
          break;
        }

      /**8MS进行CCD采集**/
      case 9:
        {
          ccd_gather(ccd1_daat,1);
          //uart_putstr (UART0,ccd1_daat);
          break;
        }
      /**9MS进行CCD数据处理**/
      case 10:
        {
          zz= ccd_data_dispose(ccd1_daat,80);
              //ccd_data_dispose(ccd2_daat,80);
          break;
        }
      /**10MS进行方向控制**/
      case 11:
        {
          time_10=1;
          angle_control(zz);
          //VisualScope_Output(zz,i/100,0,0);
          break;
        }
    }
    /*每20MS进行速度控制*/
    if(time_20>20)
    {
      time_20=1;
      speed_control(sudu);
      //speed_sign=1;
      if(beep_time)
      {
        beep_time++;
        if(beep_time>5)
        {
          beep_time=0;
          beep=1;
        }
      }
    }

    //进行速度控制后加上速度控制PWM值
    speed_pwm=speed_smoothness_out(time_20);
    L_PWM-=speed_pwm;
    R_PWM-=speed_pwm;
    //进行角度控制后加上角度控制PWM值
    angle_pwm=angle_smoothness_out(time_10);
    L_PWM+=angle_pwm;
    R_PWM-=angle_pwm;


    //VisualScope_Output(L_PWM,R_PWM,speed_pwm,angle_pwm);

    L_motor_pwm(L_PWM);
    R_motor_pwm(R_PWM);

/************************************************/   
    PIT_Flag_Clear(PIT0);           //清除中断标志位

}



作者: abacrya、军    时间: 2015-5-1 18:32
本帖最后由 abacrya、军 于 2015-5-1 18:49 编辑
、痕迹 发表于 2015-5-1 04:21
很多事.....但是直立速度方向和保护都在中断里面....ccd图像抖动就表示中断里面的时序溢出了

http://www.znczz.com/thread-120487-1-1.html   按照这个帖子里的意见。。。我在中断中加入了IO口反转,用示波器测的频率是500HZ(1ms中断),之后我在中断中加入2MS延时,频率变为了125HZ,,。。这表示定时器实是在程序执行完之后才开始计时,,就说我中断里的程序一定会执行完。。。
在20MS判断中加入时,测得频率为22.73HZ(则速度控制频率为45.46HZ,21.9ms)(还是比较正常的)。
在10MS判断中加入时,测得频率为45.45HZ(则角度控制频率为90.90HZ,11ms)(还是比较正常的)。


但是我的CCD图像还是抖动,,发送程序放在主函数中的。。

作者: 飞思卡尔.呆萌    时间: 2015-5-1 19:47
abacrya、军 发表于 2015-5-1 18:32
http://www.znczz.com/thread-120487-1-1.html   按照这个帖子里的意见。。。我在中断中加入了IO口反转, ...

你的采集中断是不是处理的费时间了,可以再压缩一下,采集1.2都放在一个里处理也可以放在一个里面,时间不会超的,尽量合并处理周期,试一下

作者: abacrya、军    时间: 2015-5-1 20:23
飞思卡尔.呆萌 发表于 2015-5-1 19:47
你的采集中断是不是处理的费时间了,可以再压缩一下,采集1.2都放在一个里处理也可以放在一个里面,时间 ...

嗯嗯,,我的采集需要645us,,,直立控制需要560us,为了能让中断里面的运行时间少于1ms,所以我分开采集,这样改变后,ccd图像跳动好转了,但是转弯控制有了点问题,在ccd前瞻不变,控制周期不变的情况下,相同的控制参数,效果完全不一样,而且速度控制也是

作者: 飞思卡尔.呆萌    时间: 2015-5-1 21:07
abacrya、军 发表于 2015-5-1 20:23
嗯嗯,,我的采集需要645us,,,直立控制需要560us,为了能让中断里面的运行时间少于1ms,所以我分开采集, ...

试着给控制输出做一下平滑处理,将控制量分成多次累加

作者: 、痕迹    时间: 2015-5-1 22:18
abacrya、军 发表于 2015-5-1 18:32
http://www.znczz.com/thread-120487-1-1.html   按照这个帖子里的意见。。。我在中断中加入了IO口反转, ...

ccd图像抖动..把你的ccd曝光和采集周期改成10ms的整数倍...不然日光灯工频50Hz会让ccd抖动

作者: abacrya、军    时间: 2015-5-2 06:36
飞思卡尔.呆萌 发表于 2015-5-1 21:07
试着给控制输出做一下平滑处理,将控制量分成多次累加

是的,,这个我之前就在使用,,,速度分为20次累加,,角度分为10次,,,我在吧以前的和现在的作对比,希望能找到问题所在,,

作者: abacrya、军    时间: 2015-5-2 06:39
、痕迹 发表于 2015-5-1 22:18
ccd图像抖动..把你的ccd曝光和采集周期改成10ms的整数倍...不然日光灯工频50Hz会让ccd抖动

嗯嗯,,好,那就固定10ms,然后调放大倍数,,,对于比赛时的灯光,好像有余辉效应,不会出现日光灯这种问题,,,

作者: up_and_up    时间: 2015-5-2 11:54
楼主,你有没有测过ccd_gather(ccd2_daat,2);这个函数执行需要多长时间?也就是ccd  AD转换需要多长时间?我测量的是9MS,所以我采集函数必须被打断
作者: abacrya、军    时间: 2015-5-2 12:10
up_and_up 发表于 2015-5-2 11:54
楼主,你有没有测过ccd_gather(ccd2_daat,2);这个函数执行需要多长时间?也就是ccd  AD转换需要多长时间? ...

你这个太长了把,,我的才645us





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