不带fifo的OV7670 用20块的摄像头做WiFi实时传图小车

博客地址 用20块的摄像头(不带fifo的)做WiFi实时传图小车 – ’s Blog
零、导读
在这篇文章中,你将看到如下内容:
QVGA配置的注意事项;将FPGA做成一个FIFO驱动不带FIFO的;阉割库的使用;传图给上位机的简单实现 。传图给,微信小程序的方案在开头的博客里有整个工程的链接(仅供参考)一、项目背景与吐槽
该项目是大三下的嵌入式短学期,因为一些的原因做的不太一样,正常做的是一个的WiFi上位机的项目,但为了玩地快乐我做了一个FPGA控制的小车,并且还兼备了WIFI传图,上位机/微信小程序显示与控制地功能 。
我在老师发布项目之后的三天内,使用战舰开发板进行了测试(毕竟一下子玩的太大,怕失手),确定了初步方案,当时感觉是捡了一个大便宜,做了一个简单的任务,但当我看到FPGA的RTL图的时候,我自闭了 。
?编辑
还有许多小模块没全部展现出来,特别是在sdram ip中,害,自闭
要往上面这个FPGA中动手脚是比较困难的 。特别是在我对整个sdram存储的运用还不太熟练的情况下 。
吐槽:本来没打算做微信小程序的,结果在最后的实验验收要求上看到了安卓手机控制 。阿这,这是我没想到的,只得硬着头皮做完 。。。
二、项目设计方案
回归正题,这次的任务的要求如下:
基于FPGA小车、STM32最小系统、摄像头、无线模块等常用电子模块,实现一个远程可视的遥控小车 。
对此我的设计方案如下:
?编辑
系统框图
系统设计方案
由系统框图所示,整个系统设计方案分成三个部分,分别是FPGA部分,STM32部分以及上位机/云端部分 。
1、FPGA部分
使用黑金的AX301来进行设计,FPGA在系统中的作用是获取图像、存储图像、传输图像以及控制小车 。
获取图像 图像存储 图像的传输 小车控制2、STM32部分
使用自制的最小系统板,STM32在系统中的作用是与FPGA进行交互,对图像数据进行处理,与上位机/云端进行交互,是连接云端与底层的通道 。
与FPGA进行交互 对图像数据进行处理 与上位机/云端进行交互3、上位机/云端部分三、项目具体实现与难点攻克1、有关FPGA的方案设计
借助黑金的的例程,进行修改 。
1、 QVGA的配置
根据的,就会发现有上百个寄存器(阿这),一一地去配置显然过于复杂,不过我使用的程序是黑金官方的一个例程,黑金官方已经给了的寄存器的配置,而我们要做的是修改他的寄存器配置,因为一般来说FPGA驱动都是为了VGA的传输,所以基本都是配置了VGA的模式,但VGA模式对于这个项目来说是在是太大了,我们需要将他修改到QVGA模式,并且设置输出的窗口,这里借鉴了STM32驱动时的配置(详细可以参考这个摄像头分辨率设置方法详解 - STM32/8),以下的代码给出了QVGA的输出以及设置输出窗口的相应寄存器的配置 。

不带fifo的OV7670  用20块的摄像头做WiFi实时传图小车

文章插图
这里我给出了三个输出窗口的配置,分别是128*64、320*240和256*128
但需要注意的时,将配置成QVGA时,根据给出的波形图 。
不带fifo的OV7670  用20块的摄像头做WiFi实时传图小车

文章插图
我们可以看到他的输出速率是VGA模式的一半,表现在应用中,我发线他的PCLK输出变为原来的一半,即原来我是25M的PCLK,但我设置位QVGA时,他的输出变成了12.5M 。
这里必须安利一波,我本来没有注意这一点,然后他的输出数据一支不对,然后我就将的全部引脚全部放到上,然后就发现了他的PCLK变为原来的一半,这时候我才想到这个时序图的含义......他的这个时钟是会影响到后续的fifo等一系列操作 。