0-1-视频传输,监控,直播方案-摄像头如何采集的图像,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