#百人创作先锋团# 基于STM32倒车雷达设计 原创

发布于 2023-2-8 17:41
浏览
0收藏

一、项目背景

汽车高科技产品家族中,专为倒车泊位设置的“倒车雷达”应运而生,倒车雷达的加装可以解决驾驶人员的后顾之忧,大大降低到车事故的发生。汽车倒车雷达全称为“倒车防撞雷达”,也叫“泊车辅助装置”,是汽车泊车安全辅助装置,能以声音或者更为直观的显示来告知驾驶人员周围的障碍物的情况,解除驾驶人员泊车和启动车辆时因前后左右视线死角所引起的困扰,并帮助驾驶人员克服视野盲区和视线模糊的缺陷,提高驾驶的安全性。倒车雷达的原理与普通雷达一样,是根据蝙蝠在黑夜里高速飞行而不会与任何障碍物相撞的原理实际开发出来的。通过感应装置发出的超声波,然后通过反射回来的超声波来判断前方是否有障碍物,以及障碍物的距离、大小、方向、形状等。只不过由于倒车雷达体积的大小以及使用的限制,目前其主要功能仅为判断障碍物与车的距离,并做出提示。

#百人创作先锋团# 基于STM32倒车雷达设计-汽车开发者社区

#百人创作先锋团# 基于STM32倒车雷达设计-汽车开发者社区

二、倒车雷达功能介绍

2.1 倒车雷达的作用

在高科技产品系列中,已经出现了一种专门为方便驾驶员停车的一种科技产品,它的名称为:倒车雷达。由于有了倒车雷达的安装,可以在很大的程度上解决了驾驶员的担心后方发生问题,并且可以在很大的程度上避免了车祸的发生。 该汽车的倒车雷达被叫做“反向碰撞雷达”,也被称之为“停车帮助系统”。 这个装置是一种对于停车进行安全辅助的一种设备,可以通过仪器的报警的声音或者是在液晶显示器上来显示,借这种方式来通知驾驶员附近的障碍物的方位或者是距离。由于驾驶员在驾驶的时候会因为各种的原因,从而带来的安全性的一些问题,该装置在驾驶员停放和发动车辆的时候,会帮助驾驶员解决驾驶员的自身的视力问题或者是在驾驶员看不到的地方并因此带来的问题,全方面的大大的增加了车辆的安全问题。 这个就是利用了蝙蝠在夜间快速的移动,却没有一次碰撞的道理。然后再使用由检测装置发射的超声波来确定前方是否存在障碍物。 然而,由于这一类装置的大小和它再使用的时候的某一些限制的原因,该装置目前最大的作用就是用来判断障碍物,以及障碍物与车辆之间的距离,并且对此作出各种的提示。

2.2 倒车雷达发的发展过程

在1980年和2005年的这段时间里面,有关于倒车防撞装置的这类雷达已经开始了急速发展。在随后的几年内,伴随着科技水平的发展,和高端客户的需求的演变,该装置大致经过了五代的演变。

第一代:倒车时通过喇叭提醒。“请倒车,小心”我们可以假设很多人还记得这种声音,它是第一代辅助驾驶员倒车的装置,只要它的声音开始响起,附近的人群的注意力就会被它所吸引,人们也会纷纷 的主动避让,但是在驾驶员视野的盲区,驾驶员还是看不到那个方位的情况,所以这类装置并不是很完善。

第二代:采用蜂鸣器不同声音提示驾驶员。这就是倒车雷达系统的真正的开始。再驾驶人员开始挂上倒挡的时候,如果车后1.2M -2.0M处有人或者是其它的东西,报警器就会开始报警,而且距离的远近与报警器的声音成正比,如果距离越远,声音也就越小,但这类装置并没有语音提示,驾驶员也不知道具体的距离有多远,所以这类产品对驾驶员帮助不大,而且比起第一代产品也没有特别显著的提升。

第三代:第三代的产品就比前两代的产品在技术方面有了很大的提升,最明显的变化就是第三代产品可以在显示器上直观的告诉驾驶人员车辆与附近的物体的距离。如果是物体会在1.8M处开始提示,如果是人的话就会在0.9M处开始提示。并且这个会分分为两种颜色,一种是警告距离,警告距离就是用黄色来显示,那么危险距离的距离就用醒目的深红色来代替。第三代的产品在很大程度上帮助了驾驶人员。

第四代液晶屏动态显示。完全不需要驾驶人员倒车,如果驾驶人员打着车辆,在汽车中控上的液晶显示器上就会主动的显示出汽车周围的物体,如果物体近的话也会提醒驾驶人员车辆与物体之间的距离,色彩明显而且很醒目,第四代产品可以直接装在驾驶人员方便看到的位置,该装置的安装不仅便捷而且很好看,但是由于这代产品拥有抵抗外界不良因素影响的实力不是特别的好,因此也会存在一些误差。

第五代:魔幻镜倒车雷达。结合前四代产品的优势和最新的仿生超声波雷达技术,结合计算机控制,可以在全天不间断的24小时准确得到装置的提示,基本上在三米以内的物体都可以知道,并且会用不同级别的提示来告知驾驶人员示,甚至是直接在液晶显示屏幕上来显示出附近的一草一木。 第五代产品装置把车内各种高科技功能结合在一起,并且为此设计了语音功能。 因为它的形状就像是一面后视镜,它可以直接安装在镜子的位置,并且不会占用车内的任何多余空间,而且可以根据驾驶人员自己的喜好来装饰该产品。

2.3 论文主要研究内容

以stm32为核心的开发板作为控制系统,组合摄像头模块和倒车雷达模块,最后结合液晶显示屏完成图像和距离的显示。要求通过摄像头采集到显示屏的图像清晰,检测到车子离障碍物的距离较为精确。

(1) 介绍倒车雷达的实现方案。

(2) 说明倒车雷达的雷达系统组成构造。

(3) 为了完成预期的硬件设备功能,现在需要表述改设备的构成和各部分硬件之间的联系,还有软件是如何同硬件一起协同工作。这些东西接下来都会介绍。

(4) 介绍整个系统的调试结果。

(5) 系统框图

#百人创作先锋团# 基于STM32倒车雷达设计-汽车开发者社区

图2.3.1系统框图

3 测距方案

3.1 测距方案实现比较和选择

目前在已知的众多测距方法中主要有以下几种测距方法:1.红外测距是以红外线为媒介的测量系统。针对于环境恶劣的场景下,通常是夜晚或者光线很暗的场景,传感器通过探测到物体反射出来的光线通过具体的算法来进行判断两者之间的距离大小,通过接收红外线的强度来判断信号的强度,红外线的强度又受到了距离的影响与限制。也就是说,只要我们通过对信号的大小进行探测,就可以来推测出大体的距离长度。

为了达到测量值的可靠与精准,常规方案都是采用激光传感器,因为其良好的性能,在发射出的激光能够准确的测量出我们要的距离值,在很多测量的方面激光传感器测距都可以成功的测出距离。测距的原理其实非常简单,就是根据光的传播速度配合所对应的的传感器获取到的数值进行各种复杂计算,来确定距离。

超声波测距是用谐振高于20千赫兹的声波即超声波为测量介质的测量方式。超声波具有反射的物理性质,能够反射回去从而得到我们需要的距离数值。超声波在自然界中的应用非常广泛,我们知道的蝙蝠就是使用超声波来探测距离,蝙蝠在飞行的过程中发出的超声波遇到了其他物理,超声波就会立刻反射会来。与其他声波相比,超声波散发的方向非常集中,不论在什么介质当中传播,都可以反射回来。超声波可以满足方方面面的需求。超声波的优点很多,不仅功耗低,而且穿透性能强,可以满足不同场景的传播。

为了更好地完成倒车雷达的性能,需要满足一下几个条件。首先要做的就是测量精度,在我们平常倒车的情况下,不仅需要倒车雷达有较好的分辨率,它的测量误差率还要小。其次就是在倒车雷达有效范围能够帮助驾驶员完成倒车,从而达到把盲区降到最低。最后就是采集数据到它在显示器上显示出来的这个过程的时间要短,即便倒车时汽车的行驶速度已经很慢了,如果不能探测出距离计时告知,那么就会造成严重的后果。当然超声波测距也有一定的条件,不同的条件会造成不同的影响,超声波的传播途径主要是以空气为主,根据超声波的公式C=33102+0.6t我们可以得出以下结论,当温度发生改变时,C也就是随着温度的变化而产生相对应的变化。

3.2 超声波传感器的种类

超声波传感器的原理非常简单,它是通过传感器获取到的反射超声波信号,通过计算转换成电信号。超声波传感器应用范围基本分4种。常见的超声波传感器:超声波传感器的带宽为几千赫兹,这类传感器的特点之一是它的选频特性。泛用型的超声波它的灵敏度相对于别的种类的传感其较高,即便它的频带比较窄,但是它还有很强的抗干扰能力。利用超声波物位传感器测量物位有许多优越性。当在危险场所非接触检测物位的时候,就可以用到超声波物位传感器,因为它可以准确的测量出任何物体所在的位置,它可以不间断的测量,遥控所需要的信号它都能够在很短的时间内传输到。不仅测量的准确度高,而且其寿命也相当的长。超声波也不会受其他因素的影响,而且传播速度不会受到媒介的各种因素的影响,所以超声传感器可以广泛的用于测量具有腐蚀性的物体所在的位置。

3.3 超声波

3.3 .1 超声波主要参数

超声波有两个最为主要的参数,当声波的频率≥15千赫兹的时候,就可以称之为超声波。超声波的功率的密度P=w/发射面积,w就是发射的功率,发射面积的单位是平方厘米,基本上P≥0.35CM2。

3.3.2 超声波的干扰

有两个最大因素可以影响到超声波。1::外界存在的高频信号或者是电源对它的干扰,2:超生波传感器在谐振时影响到了空气的振动,如果接收传感器的距离比较近,那么就会产生很大的误差,从而影响到这段距离,这就是探测盲区的形成。

3.3.3 超声波测距原理

超声波测距原理就是发射出去的超声波,在碰撞到物体之后会发生反射或者类似返回的路径,当传感器再次接受到这个波段时,然后利用计时器计算出中间的这段时间差,就像蝙蝠在夜里飞行不会撞到障碍物的原理一样。当超声波发射装置对准任何一个方向发射出一段超声波,在发射装置发出的同时开始计时,然后超声波在空气中传播的途中碰到障碍物就立即返回,当超声波接收器接收到反射波就停止计时器计时。

超声波在空气中的传播速度与光的传播速度相差无几,通过距离等于速度乘以时间除以2我们可以得出所需要的距离值。根据超声波的特性–反射,送发射端发出的超声波一直到接收到超声波遇到障碍物反射回来的能量。从发射超声波时到接收到遇到障碍物反射回来的这一段声波,这个过程所需要用的时间超声波传感器会记录。常温下的超声波传输速度为340m/s。

超声波测距所选择的频率也有一定的要求,当频率值低于一定程度时,我们的传感器会因为能量的衰减,导致信号无法正常的传输。所以超声波的模块通常会发射出高频率的超声波,以保证能够正常的接受到,为了把传感器的抗干扰能力提高,所以超声波传感器的收发都会使用固定的频率值。

功放和振荡这两个部分组成了超声波的发射端,发射器具有超声波,它们的主要功能是传感器的输出为特定的高压脉冲,转换成由传感器发出的声能然后由相应的反射信号接收器接受 最重要的是避免将信号传输到接收端。

3.4 US-100 超声波模块

本次设计采用的超声波模块为US-100,这个模块不仅功耗低,而且测量精准,能够有效的探测出距离。电压的输入范围在2.2-5.3V。

主要参数

电气参数 us-100超声波测距模块
工作电压 2.2-5.3V
静态电流 3mA
工作温度 -15度+55度
输出方式 串口
感应角度 小于13度
探测距离 1.8cm-45cm
探测精度 0.23cm+1.5%
模式 串口模式

表3,4,1 US-100参数表

#百人创作先锋团# 基于STM32倒车雷达设计-汽车开发者社区

对引脚从右至左编号一至五,分别的功能为:

一号接VCC电源

二号接在串口模式

三号在串口模式

四号接外部电路的地GND

3.4.1 串口模式工作原理

只有用跳线帽触发串口模式才可以使用串口模式。

在串口模式下,我们将通信协议代码发送到对应管脚,然后超声波模块发射出不同的超声波脉冲,同时接收端会检测出回波信号。由于运用了US 100超声波测距模块,因此模块的温度校准功能也能正常运行,它会自动对所收的超声波接收端数据进行校准,同时将最后获得的准确数据从RX脚输出。

#百人创作先锋团# 基于STM32倒车雷达设计-汽车开发者社区

#百人创作先锋团# 基于STM32倒车雷达设计-汽车开发者社区图 3.4.1.2

3.4.2 串口触发测温原理

串口触发的原理是先让模块处于串口模式,然后在管脚输入特定的代码值,然后超声波模块就能将温度传感器使能,获取温度的物理值,然后通过管脚来获取传感器的温度值,将其转换成物理值,然后通过一系列的算法来进行校准。

3.4.3 电平模式工作原理

如果不选择使用跳线帽,则模块在打开后将以电平触发模式运行。 在此模式下,您必须在tx引脚上输入大于10US的高电平,并发送超声波发送端口。 超声波脉冲40千赫兹由接收者返回并被检测。最后的工作是从输出引脚输出最终温度校准结果。在获取到的结果还要除以2以保证是一次的传输。

四、图像采集方案的比较和选择

拥有一双明亮的“眼睛”是备用雷达捕获图像的一个非常重要的部分。各种品牌的传感器都一样,通常对相机命名是根据自己的喜好或者传输类型

模拟摄像机通过名称知道这种类型的摄像机收集的信号是模拟信号。我们知道,模拟信号由于传输距离很容易导致数据丢失,在数据丢失之后又无法找回,因此图像的质量和清晰度。有不同程度的损失。芯片要对获取到的数值进行模拟信号转为数字信号,才能得到我们真正需要的值,所以在非常不安的地方和长距离使用这种相机。例如说,工业信息的传输和运输。
由数码相机捕获并由信号发送的图像与模拟相机不同。它只是一个数字信号,传输距离相对较近。然而在杂波和易失真的环境中,具有相对稳定的稳定性的数字信号处理相对简单并且电路相对简单又稳定的工作。

4.1 OV7725功能

我选择的相机模块使用7725OV系列的传感器。它的优点在于能支持多种多样分辨率。它有许多模式,可以在窗口模式下进行下采样。它的数据格式还有RGB,RAW等多种。它的尺寸优势是体积小,工作电压和功耗小。它还可以对图像进行各种各样的修改,调整,比如图像的曝光图,色域等等。
OV7725的有效像素大约为300,000像素,其像素大于此值。为了防止图像的失真,导致图像发生模糊,不清晰等情况,此时需要外加一个像素。 当模块激活时,OV7725传感器将收集的数据传输到模数转换器,并将其转换为数字信号,以便进行下一次处理。

我们还需要一个模块将获取到的图片数据进行转换与控制。该处理器是DSP模块。其功能包括空间颜色转换,色度和白平衡等。该模块还可以提高图像质量。这些功能的完成取决于缓冲区的支持,后者将引入FIFO,因为我们通常需要在短时间内收集大量数据,但传输速率不如比采集的速度更快,因为速度很快所以就需要有一个缓冲区。所以非常重要,否则很多中间数据都无法放置。

图像被发送给用户,并且功能的实现需要图像缩放模块。用户还可以根据自己的需要定义缩放模块。然后,模块再正常操作之后将接收的RGB数据减少到适当的大小,然后将其发送到图像。此过程往往会产生多种类型的信号;可通过SCCB接口访问图像传感器的内部寄存器。

该框图显示,在XCLK时钟读取器下,光敏元件对该模式进行采样和采样,并产生640×480的初始数据,即模拟信号。相关的图像处理由DSP执行,最后获得10比特的视频数据流。

4.2 SCCB

SCCB是一种总线协议,通常用来对接摄像机来使能其工作。其工作模式类似于I2C。这是由OV定义的3线串行摄像机控制总线。它能够控制大多数OV系列图像传感器。可以在SCCB总线下安装多个从设备。SCCB还具有扩展性,可以外置一个设备系统。

4.2.1 SCCB接口的定义

SCCB-E,作为一种输出型信号。它是芯片选择信号。当总线空闲时,主机必须将其逻辑电平设置为1; 信号从高电平转变成为低电平。从0到1的转换标志着终止信号。
SIO-C,输出信号类型。时钟信号。它表示有点传输。当主机仍处于空闲状态时,其逻辑电平设置为1.当SCCB_E电平为0时,将生成引脚的0和1转换标志位。
SIO_D,数据信号。当在空闲信号状态下设置为浮动状态时,仅在SIO_C为低电平时触发逻辑电平转换。

4.2.2 SCCB时序描述

#百人创作先锋团# 基于STM32倒车雷达设计-汽车开发者社区

相机捕获的图像(OV7725芯片的输出)使用VGA同步通过线路同步,场同步和PCLK引脚输出图像。

VGA是现在广泛流行且应用的视频接口。 它的显示模式包括逐行扫描图像的像素,使其大气和线框的同步为240像素。如图所示

#百人创作先锋团# 基于STM32倒车雷达设计-汽车开发者社区

行同步输出就是每行像素的输出要同步。它使用PCLK时钟作为像素输出的参考,像素数据从D0-D9串行端口输出。最后HREF会发送开始信号和线路来结束信号。只要HREF高,相机数据终端就跟随着PCLK像素时钟并且连续发射像素数据线。只要这一行的像素数据传输完成了,HREF就会自动变为低电平。如果HREF处于高电平状态,那么基本数据单元将会以PCLK时钟输出,并且在这种状下的数据的输出也会非常稳定。

图像同步是指带有图像的VGA显示图像; 我们正在谈论图像的同步。它还由几行同步组成。不同之处主要就是在于帧同步具有额外的信号线VSYNC,用于指示帧的开始,帧结束时的信号。如果说VSYNC为低,那么就表示正在传输图像。如果VSYNC从低电平变为高电平,则该现象表明已经进行了图像传输。虽然VSYNC很弱,但它是以HREF为依据的。

信号如果被转换了,而且HREF的状态从高电平变为低电平,那么就意味着数据线将会终止。只要HREF级别很高,摄像机传输的数据那就是有效的。但是HSYNC是高水平的话,其次是暂时没有实际用途。这些状态转换就是利用了FIFO的性质。FIFO用作缓冲器来响应图像采集以及传输速率。

4.3 FIFO时序

在相机上收集的数据假定我们将其配置为240x320.每个像素以RGB565格式表示。 因此,计算出每个像素占用两个字节。带有FIFO摄像头的OV7725型号为AL422B,容量高达384K。就可以满足我们对数据缓存的要求。FIFO(AL422B)操作的几个方面是最重要的:读取和写入以及重置读指针和重置写指针。
一旦相机的模块被激活,那么在读取序列期间,模块的FIFO硬件的RE引脚将会设置为低电平,从而就会激活读取的操作。只要OE引脚处于低电平的状态,输出同时就会进入ON状态,数据输出引脚也将作为具有RCK读时钟的轴,D7-D0将输出数据增加地址。只要OE引脚处于高电平,就会禁用输出。当RCK播放时钟运行时,输出引脚将处于高阻态。因此,此时,MCU读取的数据不稳定且无效,但读指针始终伴随着递增RCK操作。
在写序列中,当WE引脚为低电平时,FIFO被使能进入激活状态。运行WCK写时钟时,电平值将逐步存储在FIFO中。

4.4 摄像头的连接

在连接电源这一步骤完成之后,一定要进行的步骤是初始化相机模块。在完成了对相机模块的初始化成功之后,我们就可以利用这个相机模块了。接下来的部分主要是介绍了摄像头模块与STM32迷你型号开发板之间的硬件连接方式。
相机模块的D0 D1 D2 D3 D4 D5 D6 D7这八个接口必须连接到STM32迷你型号开发板的PB0PB1PB2PB3PB4PB5PB6PB7端口,连接WRST和PA0,连接PA1和RCLK,连接SCL和PC4,连接的DID和PC4,连接RRST和PA4,在以下PA11,VSYNC PA15连接,连接WEN和PA12。

从上面的描述中,您可以从相机的数据线连接开发板获取PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7。

同时,开发板上的这些串行端口也连接到,TFT_LCD液晶显示屏模块的输出输入的端口。用来表现这两个模块是能够被及时复用的。

4.5 摄像头的驱动原理

当芯片从摄像机接收到中断信号时,WEN管理级别正处于高状态,然后FIFO接收图像数据并临时存储。当它再次捕获信号的时候,WEN引脚的电平就会再次升高,摄像机数据同时会存储在FIFO中,完成采集,回放和操作等。

作为WEN,HREF输入NAND门的端子。它们的输出端口必须是要连接到FIFO的WE端口。如果WEN和HREF的引脚正处于高电平的状态,则FIFO的WE将进入低电平状态。结果像素数据进入FIFO进行缓冲,摄像机的WE和HREF必须置于高电平,FIFO的WE处于低电平,像素数据可以在FIFO中传输,和PCLK可以用作像素传输时间的参考。

如果上面的端口的级别状态正在处于相反的状态,则数据就不会传输到FIFO,因此也就不会收集到没有必要的数据。

4.6 摄像头模块的软件实现

首先需在HARDWARE文件夹下新建OV7725文件夹。里面要含了ov7725.c、ov7725.h、sccb.c、sccb.h文件。

在ov7725.c中其函数代码主要如下:

u8 OV7725_Init(void)
{
u16 i=0;
u16 reg=0;
//设置 IO
RCC->APB2ENR|=1<<2; //先使能外设 PORTA 时钟
RCC->APB2ENR|=1<<3; //先使能外设 PORTB 时钟
GPIOA->CRL&=0XFFF0FF00;
GPIOA->CRL|=0X00030033; //PA0/1/4 输出
GPIOA->ODR|=1<<4;
GPIOA->ODR|=3<<0;
GPIOA->CRH&=0X00F00FFF;
GPIOA->CRH|=0X83033000; //PA15 输入、 PA11/12/14 输出
GPIOA->ODR|=3<<14;
GPIOA->ODR|=3<<11;
JTAG_Set(SWD_ENABLE);
SCCB_Init(); //初始化 SCCB 的 IO 口
if(SCCB_WR_Reg(0x12,0x80))return 1; //复位 SCCB
delay_ms(50);
reg=SCCB_RD_Reg(0X1c); //读取厂家 ID 高八位
reg<<=8;
reg|=SCCB_RD_Reg(0X1d); //读取厂家 ID 低八位
if(reg!=OV7725_MID)

{
printf("MID:%d\r\n",reg);
return 1;
}
reg=SCCB_RD_Reg(0X0a); //读取厂家 ID 高八位
reg<<=8;
reg|=SCCB_RD_Reg(0X0b); //读取厂家 ID 低八位
if(reg!=OV7725_PID)
{
printf("HID:%d\r\n",reg);
return 2;
}
//初始化 OV7725,采用 QVGA 分辨率(320*240)
for(i=0;i<sizeof(ov7725_init_reg_tb1)/sizeof(ov7725_init_reg_tb1[0]);i++)
{
SCCB_WR_Reg(ov7725_init_reg_tb1[i][0],ov7725_init_reg_tb1[i][1]);
}
return 0x00; //ok
}
  上述代码是初始化模块的IO口,最主要的功能是去要去完成。
OV7725 的寄存器序列初始化。模块的寄存器数量庞大,配置繁琐,为了简化操作,我们只要配置一下序列,让序列保存在reg_tbl 数组当中,直接操作数组。

ov7725cfg.h 里存放了需要用到的数组。然后分析并理解ov7725cfg.h 里面 ov7725_init_reg_tbl 的内容,ov7725cfg.h 文件的代码如下:
2//初始化寄存器序列及其对应的值
const u8 ov7725_init_reg_tbl[][2]=
{
/*输出窗口设置*/
{CLKRC, 0x00}, //clock config
{COM7, 0x46}, //QVGA RGB565
{HSTART, 0x3f}, //水平起始位置
……省略部分设置 
{COM3, 0x10},
{COM5, 0xf5},
};

上述代码是整体架构,针对于各个寄存器的功能。第一个字节寄存器地址号,第二个字节就是要设置的值,比如{CLKRC,0x00} ,就表示在 CLKRC(地址宏定义)地址,写入 0X00 这个值。 通过这么一长串寄存器的配置,我们做好了 OV7725 的初始化,这次实验的方案配置我们配置 OV7725工作在 QVGA 模式, RGB565 格式输出。 在结束初始化之后,我们既可以开始读取 OV7725的数据了。

因为我们还用到了帧率(LCD 显示的帧率)统计和中断处理,所以我们还需要修改 timer.c、 exti.c 及 exti.h 这几个文件。timer.c 里面所表达的内里, TIM3_IRQHandler 这个函数,部分关键代码如下:

u8 ov_frame=0;
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
printf("frame:%dfps\r\n",ov_frame);
ov_frame=0;
}
TIM3->SR&=~(1<<0);//清除中断标志位

TIM3是定时器名称,这个定时器的功能用于统计,工作方式为每秒中断一次,要返回组织的数值,而这个数值的内容及时显示屏的帧率。

FIFO这个模块的驱动依靠2个函数,函数的内容都存在EXTI.c中。写控制, Exti.c 文件部分代码 下文所示:
//中断服务函数
u8 ov_sta;
void EXTI15_10_IRQHandler(void)
{
if(EXTI->PR&(1<<15))//是 15 线的中断
{
if(ov_sta<2)
{
if(ov_sta==0)
{
OV7725_WRST=0; //复位写指针
OV7725_WRST=1;
OV7725_WREN=1; //允许写入 FIFO
}else OV7725_WREN=0; //禁止写入 FIFO
ov_sta++;
}
}
EXTI->PR=1<<15; //清除 LINE15 上的中断标志位
}
//外部中断初始化程序
//初始化 PA15 为中断输入.
void EXTI15_Init(void)
{
RCC->APB2ENR|=1<<2; //使能 PORTA 时钟
JTAG_Set(SWD_ENABLE); //关闭 JTAG
GPIOA->CRH&=0X0FFFFFFF; //PA15 设置成输入
GPIOA->CRH|=0X80000000;

GPIOA->ODR|=1<<15; //PA15 上拉
Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发
MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占 2,子优先级 1,组 2
}

由于OV7725帧同步信号(OV_VSYNC)连接在PA15内部,因此PA15配置为中频输入。中间服务功能(EXTI9_5_IRQHandler)用于控制外部中断引脚。因此,在这种情况下,其功能是确定中断是否来自中断线15,然后执行处理。Ov_sta不会使中断处理部分复杂化,以控制OV7725模块的FIFO写操作。 如果为起始变量分配了0,则结果表明摄像机收集的数据存储在FIFO中并从FIFO中读取。初始设置为0是成功读取数据的设置。要在显示器上显示图像,必须触发场同步信号,写指针也将复位,启动指示器将设置为1,因为FIFO发送的数据已被复位。 已被读取,由传感器收集。它可以存储在FIFO中并临时缓冲以供下次读取。在这一点上,ov_sta递增2的另一种方案,如ov_sta被读取为2指示数据帧准备就绪,可以将数据读出并读取数据后,将ov_sta 在0.并且将存储FIFO数据。再次开始工作。同时,在exti.h中,必须修改短期线15的功能定义。

主要内容如下:

#define OV7725 1
#define OV7670 2
OV7725_WINDOW_HEIGHT 相当于 LCD 的宽度
//注意:此宏定义只对 OV7725 有效
#define OV7725_WINDOW_WIDTH 320 // <=320
#define OV7725_WINDOW_HEIGHT 240 // <=240
extern u8 ov_sta; //在 exit.c 里面定义
extern u8 ov_frame; //在 timer.c 里面定义
//更新 LCD 显示(OV7725)
void OV7725_camera_refresh(void)
{
u32 i,j;
u16 color;
if(ov_sta==2)
{
LCD_Scan_Dir(U2D_L2R); //从上到下,从左到右
LCD_Set_Window((lcddev.width-OV7725_WINDOW_WIDTH)/2,
(lcddev.height-OV7725_WINDOW_HEIGHT)/2,OV7725_WINDOW_WIDTH,
OV7725_WINDOW_HEIGHT);//将显示区域设置到屏幕中央
if(lcddev.id==0X1963)
LCD_Set_Window((lcddev.width-OV7725_WINDOW_WIDTH)/2,
(lcddev.height-OV7725_WINDOW_HEIGHT)/2,OV7725_WINDOW_HEIGHT
,OV7725_WINDOW_WIDTH);//将显示区域设置到屏幕中央
LCD_WriteRAM_Prepare(); //开始写入 GRAM
OV7725_CS=0;
OV7725_RRST=0; //开始复位读指针
OV7725_RCK=0;

OV7725_RCK=1;
OV7725_RCK=0;
OV7725_RRST=1; //复位读指针结束
OV7725_RCK=1;
for(i=0;i<OV7725_WINDOW_HEIGHT;i++)
{
	for(j=0;j<OV7725_WINDOW_WIDTH;j++)
	{
		GPIOB->CRL=0X88888888;
		OV7725_RCK=0;
		color=OV7725_DATA; //读数据
		OV7725_RCK=1;
		color<<=8;
		OV7725_RCK=0;
		color|=OV7725_DATA; //读数据
		OV7725_RCK=1;
		GPIOB->CRL=0X33333333;
		LCD_WR_DATA(color);
	}
}
OV7725_CS=1;
OV7725_RCK=0;
OV7725_RCK=1;
EXTI->PR=1<<15;
ov_sta=0; //清零帧中断标记
ov_frame++;
LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认扫描方向
}
//注意:此宏定义只对 OV7725 有效
#define OV7725_WINDOW_WIDTH 320 // <=320
#define OV7725_WINDOW_HEIGHT 240 // <=240

4.7 最终实现结果

因为摄像头模块不能直接与开发板相连接要用线作为中间传输媒介,导致LCD显示屏显示的图像受到干扰。在最后的调试结果把数据传输的线用锡纸胶带包裹,从而减小了外界因素的干扰隔绝电磁波对图像传输使得图像花屏、不清晰。

五、总结

这次设计的倒车雷达系统满足了所需的设计要求,有利于人们享受可以便捷驾驶的生活。帮助人们掌控车子周边环境的具体状况,加强了倒车的安全性能和倒车速度。而且块速刷新的车子与障碍物的实时距离,因为有较高的精确度,给予了驾驶者对车子的操纵的活动空间。结果显示硬件的结合和软件对硬件的驱动都体现了方案的有效。随着人们对生活的要求不断提高,新的技术终将取代老的技术,倒车雷达技术随时一起推进,使得倒车更加智能、快捷、安全。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
1
收藏
回复
举报
回复
相关推荐