对于摄像头程序的时序优化(ov7725)


对于摄像头程序的时序优化(ov7725)

想法产生:我想写一写自己对调摄像头时的的一点小心得,刚开始调摄像头时候,就对PIT定时和摄像头的场中断了解的不太清楚,似乎发现有问题但不知道是什么。比如把处理图像的程序是放在主函数里好呢,还是放在PIT中好呢,场中断和PIT让谁的优先级更高一点好呢,场中断时间和我自己程序运行的时间都是多少呢?

校内赛过后,从郭兆裕学长哪里学到可以利用改变一个引脚的高低电平和利用示波器来测量出来时间。这是很好的想法。

想法探索东北赛过后,在硬件已经没有多大变动的时候,我又重新开始想这个问题,我那时候的程序是借鉴以前学长的那种PIT和场中断都有的那种。我首先想到的是PIT时间从30ms缩小到20ms,本以为控制频率增加了肯定会对车有好处,但结果是车子跑的更差了。于是我用示波器测量一个单片机的引脚,这个引脚在场中断服务函数开始时候为高电平结束时为低电平,示波器的显示结果是图像上有许多尖尖的脉冲,一个尖尖的脉冲即为一次场中断,因为场中断服务函数作用就是打开dma,所以持续时间并不长。但是这些尖尖的脉冲周期并不一致,有的是16ms来一次,有的是16的二倍32ms来一次。

我比较了PIT时间从10ms30ms时间里所有的情况,发现PIT时间越长16ms的尖尖的脉冲越多,证明固定时间内场中断的次数越多。分析原因是:摄像头的场中断优先级并没有PIT高因此在执行pit中断时来的场中断并不会被响应,若缩短pit时间会导致固定时间内有效场中断次数减少,即处理新图像次数减少,致使车跑的并不好。

那你可能会想把场中断设成优先级比PIT高的不就行了吗。但是也会有问题,因为在处理场中断服务函数时候,PIT来了不会执行,会导致PIT定时不准。然而PIT里有采集编码器的返回值的量,这个量需要固定时间返回才有意义,所以这种方法也是不可取的。

那么有没有一种非常好的方法能让程序执行的非常有周期性,而且没有谁打断谁这种方法呢?解决这个问题首先要了解几个时间:摄像头场中断时间每8ms来一次,就是说每8ms摄像头就采集完一帧图像了;摄像头把图像传给单片机需要8ms多一点点,因此单片机采集图像的时序是这样的:来场中断,经过8ms多一点图像传给单片机,此时已经略过下一次场中断了,需要再等一次场中断才能进行下一次传输图像。因此采集一次图像的最短周期是16ms(两次场中断的时间)。也就是说每两次场中断利用一次图像控制一次效率是最高的。我们现在就可以想出来优化的时序是什么样子的了。如下图:

对于摄像头程序的时序优化(ov7725)_第1张图片

这样就可以完全实现一次采集图像一次控制,若自己写的程序时间较长,往后延长至三个场中断一次采集一次控制。时间为24ms,以此类推。

实现方法1

对于摄像头程序的时序优化(ov7725)_第2张图片

注意:不用PIT中断。

 

2)设置PIT中断高于场中断,把PIT时间调成很小,小于所要执行函数的时间,它会把自己的程序执行完后马上进入下一次中断,(相当于在主函数里while1))。注意:PIT时间要小。

对于摄像头程序的时序优化(ov7725)_第3张图片

重要的事最后说:我所使用的场中断时间、传输时间基于KL26芯片和鹰眼摄像头,你需要根据自己的实际情况来确定自己的时间,比如K60的运行速度比kl26快,而且鹰眼的场中断时间也可以自己配置;我介绍的事一种处理场中断和PIT中断时序的方法,要具体情况具体分析。


你可能感兴趣的:(对于摄像头程序的时序优化(ov7725))