01视频传输,监控,直播方案摄像头如何采集的图像,MCU如何读取的图像数据

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/video_transmission" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

说明

首先能够使用MCU读取摄像头数据并不是什么高端和困难的事情!

摄像头如何采集的图像,MCU如何读取的图像数据

1.摄像头都是集成了感光片和感光片采集芯片的.

感光片就是有很多采集点

如果说一个摄像头是 240*320的

就是说横着有240个采集点,竖着有320个采集点,共76800个采集点

2.以OV7670为例

假设使用单片机控制感光采集芯片采集240*320个像素点,模式输出是RGB422

3.3V和GNG  -- 摄像头供电

-------------------------------------------------------------------------

SDA和SCL为IIC配置摄像头的引脚

可以设置摄像头具体横竖采集的像素点个数

可以设置采集模式,列如:RGB 422(就是说一个像素点用 8位数据表示 ,前面4位代表红色,中间2位代表蓝色,最后2位代表绿色)

列如: 采集的数据是  0xF0 (1111 0000)  就是纯绿色

采集的数据是  0x00 (0000 1100)  就是纯蓝色

采集的数据是  0x00 (0000 1000)  就是不怎么蓝的颜色

有可能有人会问这颜色识别的有点不好呀,分辨率有点低.其实有RGB565,但是呢为了方便叙述,咱先按照RGB422来讲解.

-------------------------------------------------------------------------

VS (VSYNC) ----摄像头工作的时候,这个引脚来一个高脉冲说明摄像头开始采集一副图像了(采集240*320个像素点)

 

 

注意哈,一般咱们把开始采集一副图像就做开始采集一帧图像

一般摄像头采集是从左到右 从上到下采集,当然也可以使用IIC发送命令给感光片采集芯片控制它采集的模式

-------------------------------------------------------------------------

HS (HREF) ---- 当这个引脚变为高电平,说明摄像头正在输出某一行像素点

假设是刚开始采集,那么这个引脚第一次变为高电平,说明摄像头正在输出第一行的像素点(从左到右 240个)

第一行的像素点采集完了,就会变为低电平,然后开始采集第二行,这个引脚又会主动变为高电平

然后就是这样子循环.

-------------------------------------------------------------------------

PLK ---- 当这个引脚变为高电平,说明摄像头正在输出一个像素点的数据

假设是刚开始采集,那么这个引脚第一次变为来一个高脉冲,说明摄像头正在输出第一行的第一个像素点的数据

-------------------------------------------------------------------------

D0 - D7引脚  ---- 这个是输出实际像素点采集的数据的引脚

配合上面的 PLK引脚,当PLK引脚来一个高脉冲以后,读取D0 - D7引脚的值

便可获取采集的像素点的数据.假设是刚开始采集采集的数据是 1111 0000  (0xF0)

就说明采集的第一行的第一个像素点的数据是 0xF0 纯绿色

3.最后总结

假设是 240*320

VS (VSYNC)  ,  HS (HREF) 和 PLK  引脚都接到单片机的中断引脚上

D0 - D7 接到单片机的随意8个引脚上

当检测到 VS (VSYNC) 来了一个高脉冲说明开始采集一帧图像了

然后检测 HS (HREF) 引脚变为了高电平

说明开始采集一行图像了,然后只要PLK引脚来一个高脉冲,说明摄像头输出了

一个像素点的数据,然后单片机读取 D0 - D7 就获取了数据了

然后通过 PLK 和  D0 - D7就可以获取第一行的 240个数据

第一行输出完成 HS (HREF) 引脚变为了低电平

开始输出第二行的时候 HS (HREF) 引脚变为了高电平

然后只要PLK引脚来一个高脉冲,说明摄像头输出了

一个像素点的数据,然后单片机读取 D0 - D7 就获取了数据了

然后通过 PLK 和  D0 - D7就可以获取第二行的 240个数据

然后就是循环采集320行数据.

4.难在哪里呢?

从上面的介绍可以看出好像挺简单的

那难在哪里呢?

 

1.难点1

大部分人的基础知识不够,就是说连基本的IIC通信,中断采集都不会

注意哈,我说的是会!!!

列如我问下: 等待芯片应答具体是啥?

发送非应答具体是啥??

 

2.难点2

摄像头输出的频率实在是太快了

真的是太快了!!!!一般的单片机达不到这种速度

咱们只看 PCLK 的输出速度哈

下图中大概是 PCLK的高电平时间 大概是8ns

整个周期才16ns .....这是普通单片机做不到的

一般情况下就是72M主频的STM32F103 执行中断的时间也是约1us

即使是关闭所有的其它外设,中断时间也只能达到 400ns

5,速度达不到的单片机可以选择带FIFO芯片的摄像头模组

FIFO的作用是啥?

FIFO芯片是和摄像头的感光芯片直接通信,然后把图像缓存到FIFO芯片里面.

单片机读取数据的时候是和FIFO芯片通信, 单片机还是需要连接VSYNC引脚

发现该引脚有个下降沿之后,给FIFO_RCK引脚持续的脉冲,数据就从D0-D7输出了.

注意一个事情:当VSYNC来了下降沿之后一般需要延时一会再去读取, 就是等图像数据确实已经存储到了FIFO.

一般单片机的主频赶不上摄像头采集图像的速度,所以一直给脉冲读取数据就可以,但是你这个需要自己测试哈

如果单片机的主频特别快.....你可以再去检测下HREF引脚, 然后也许需要加点延时以后再去读取.

补充

1.关于模拟摄像头

模拟摄像头就是采集到数据以后变为模拟信号输出在一根线上,具体可百度PAL

原文地址:https://www.cnblogs.com/yangfengwu/p/15611250.html