北航计控实验--飞思卡尔小车实验报告 - 图文 下载本文

首先需要明确的是HREF和HSYNC均为行中断信号,它们共用一个管脚,由寄存器配置HREF在上升沿就会马上输出图像数据,而HSYNC则需要等待一段时间再输出,如果行中断里需要处理事情再开始采集,则显然用HREF的上升沿是很容易来不及采集第一个像素。PCLK是整个控制摄像头指令的时序,在上升沿时MCU会采集图像,下降沿时摄像头输出图像。行消隐区:如果不按照时序来采集,便会采集到值为0的消隐区,即黑色。行与行之间,场与场之间,都是存在消隐区的。 (2)场中断时序

图4.2 场中断时序图

场中断信号VSYNC来了,便可以开始采集每帧的数据,可以在程序里选择上升沿或者下降沿触发中断。场中断和行中断的时序关系必须处理好,否则将出现异常。

(3) DMA简要介绍

DMA是直接内存存取技术,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。DMA 传输将数据从一个地址空间复制到另外一个地址空间。

当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。

(4)图像采集

由于图像处理是路径识别的基础,也是控制策略能否发挥作用的重要影响因素,因此,本文将对此部分进行详细介绍。ov7725数字摄像头在硬件上做了二值化处理,所以阈值作为程序底层中一个十六进制的数值来体现。如果想要获得效果明显清晰的图像,当环境改变时,阈值要做相应的调整来适应光线场地,这个是运行上层采线函数获得正确赛道信息的首要条件。采集图像思路如下,图像采集的方案是不使用行中断信号,直接DMA模块计数来完成一场结束的判断。需要采集图像时,开场中断,场中断来了,初始化 DMA 传输,并启动 DMA 传输,每个 PCLK 上升沿来了都触发 DMA 传输,把摄像头输出的值读取到内存数组里。当触发 n 次(n=图像像素数目)后就停止 DMA 传输。场中断服务程序如下:

DMA 停止传输时触发中断,中断里关闭场中断,图像采集完毕。DMA中断服务程序如下:

(5)图像处理

图像处理采用了赛道边沿提取的方法,基本思想如下:多扫描得到的二值化数据解压后数据进行逐行扫描原始图像,根据设定的阈值提取黑白跳变点;赛道宽度有一个范围,在确定的赛道宽度范围内提取有效赛道边沿,这样可以滤除不在宽度范围内的干扰;利用赛道的连续性,根据上一行白块的位置和边沿的位置来确定本行的边沿点;在弯道的时候赛道有回拐的情况,所以提取本行边沿之前还要向前搜索回拐的边沿点;在弯道行进过程中,保持系统搜索最远有效行,为未来进一步打角做出判断,尤其是在速度比较快的时候,获取较远赛道信息变的非常重要。

解压函数如下:

把得到的二值化数组由十六进制转化为二进制程序如下:

获取赛道边界和中心线的算法如下:

由摄像头数据计算出舵机所需打角的算法如下:

4.2.2 舵机模块控制程序

舵机采用FTM1的CH0通道来驱动。在PWM的占空比为15%时,舵机保持中立,占空比在10%-20%之间变动时,舵机摆角在最左到最有来回摆动。实际中需要根据具体情况修正舵机中立时的占空比。测试后我们发现当占空比为14%时舵机保持中立。具体的舵机初始化和驱动程序如下所示:

程序中为了防止舵机摆角过大烧坏舵机,我们对其输出进行了限制,可以防止其