jk36125 发表于 2009-2-16 08:41:04

做自己的摄像头模块

如果想好一些的页面格式或者下载源代码可以到我的个人网站:http://sites.google.com/site/jk36125/Home/wo-deov7640she-xiang-tou-mo-kuai

做这个摄像头本来也很无奈.
因为买不到好的模块啊.
不是太贵就是质量太差,要不就是又贵又差.
所以就想,不如自己做一个好了.
事情就这样定下来了.

从淘宝寄来OV7640的当天就把硬件完成了.
麻烦的其实是软件.OV官方说"为了给第三方开发者空间,所以不提供例程".
所以我只好抱着一个标记着"preliminary"的OV7640文档.看着含糊不清的说明慢慢的尝试.


电路原理图:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_418124.gif
(原文件名:OV7640电路原理图.gif)


做完的实物:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_418127.JPG
(原文件名:实物图.JPG)


在Linux上编写了上位机的程序来采集图象,采用串口 115200,n,8,1 进行通信.


OV7640拍摄的图象:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_418128.jpg
(原文件名:样片.jpg)


左图为RGB565,QVGA,右图为255级灰度.


关于SCCB的总线协议:

SCCB协议充分展现了产商的协议不统一是一件多么麻烦的事情.
SCCB协议就是 Serial Camera Control Bus. 不晓得它和I2C哪个先出生.
这里只说明单字节操作.

SCCB的单字节写操作协议完全和I2C一样:

起始位 ---> 器件地址(0x42) ---> ACK ---> 内部寄存器地址 ---> ACK ---> 写入数据 ---> ACK ---> 结束位

在I2C总线当中,器件地址的最后一位为 0 时表示为写操作的开始,最后一位为 1 时表示读操作的开始.
所以在使用ARM9例如 AT91系列的TWI总线接口时,器件地址应该等于 0x21(7位),再根据读写操作的选择补充最后一位为1或者为0.

SCCB协议的单字节随机地址读协议比I2C的多出了一个停止位:

起始位 --> 器件地址(0x42) --> ACK --> 内部寄存器地址 --> ACK --> 结束位 --> 起始位 --> 器件地址(0x43) -->ACK --> 数据 --> NOACK --> 停止位

而I2C的单字节随机地址读操作为:

起始位 --> 器件地址(0x42) --> ACK --> 内部寄存器地址 --> ACK --> 起始位 --> 器件地址(0x43) -->ACK --> 数据 --> NOACK --> 停止位

红色标记的读协议就是SCCB总线所特有的.
不管怎样,如果用现成的ARM9外设的I2C接口,只能执行写操作.如果需要读操作需要自己编写SCCB的模拟总线,加上SCCB多生出来的一个停止位.




关于OV系列的寄存器设置:

这个要怪OV,你说不给例程也就罢了吧,连个寄存器的使用说明都没有.许多设置含含糊糊的让人不知所错.
我只好一一尝试.不管怎样,下面的这些寄存器对于采集图象来说是常用的(针对OV7640):

            地址                                          主要用途                                                                  范例值
            0x11               OV器件时钟分频                                                      0x3f时钟分频到最大,其余选项为默认
            0x28               选择黑白模式(OV7141)或者彩色模式(OV7640)            0x60 选择黑白模式,其余选项为默认(系统默认为彩色模式)
            0x14               QVGA格式或者VGA格式选择                                    0x24 QVGA输出, 0x04 VGA输出
            0x1F               RGB565或者RGB555格式选择                                  0x11 RGB565输出
            0x12               自动白平衡,RGB和YUV设置                                    0x18 关闭自动白平衡,其余默认

如果在OV7141~黑白模式下设置OV7640彩色模式用到的寄存器会造成图象黑屏.
有一些寄存器的功能有重叠,例如在0x1F设置了RGB565或者RGB55输出,就不需要在0x12中选择RGB输出.




关于硬件的连接方法(for ARM):

   输入线:         HREF   VSYNC   PCLK   Y
   输出线:         PWDNRESET
   外部时钟:      CLK
   SCCB总线:   TWI等I2C总线(只能写),或者模拟SCCB总线(读写)




关于图象采集:

对于图象的采集需要用到 HREF   VSYNC   PCLK   Y
其中HREF 为行同步, VSYNC为帧同步,PCLK为数据输出的时钟,Y为数据总线.
VSYNC出现一次正脉冲说明一帧图象已经准备好,HREF由0-->1说明1行图象数据已经准备好.
采集顺序为:

等待VSNYC的正脉冲 ---> (循环)等待HREF由 0 到 1 ---> (循环)当PCLK由 0--->1的时候采集Y上的数据 --> HREF由 1 到 0(一行结束)



关于采集图象的质量:

CMOS的30万摄像头,我本来也不对图象质量报太高期望.
不管怎么说,问题出现在两个方面:

1. 所用的镜头滤镜
2. 图象采集的频率

很难找到和手头芯片一致符合的镜头,某些不合适的镜头的滤镜可能会造成图象的色彩失真.
采集的频率决定了自动白平衡和自动增益的参数设定,如果采集的频率很小,例如1秒钟只采集一幅图象,那么自动白平衡有可能得不到足够的参数而使得图象失 真.这个时候关闭自动白平衡反而会比较好.




关于输出图象格式:

采集到的图象通常有几种格式:黑白,RGB565,RGB555,RGB原始图象

黑白图象为 255 级灰度,每一个字节的数据对应一个象素.不需要转换.
RGB565的输出顺序为:                           第一字节                     第二字节               
                                          R4 R3 R2 R1 R0 G5 G4 G3      G2 G1 G0 B4 B3 B2 B1 B0

转换为RGB24:                         R                              G                               B
                            (R4 R3 R2 R1 R0) * 8      (G5 G4 G3G2 G1 G0) * 4          (B4 B3 B2 B1 B0) * 8

也就是说RGB565的两个字节数据对应一个象素.

RGB555的输出顺序为:                              第一字节                     第二字节               
                                             X R4 R3 R2 R1 R0 G4 G3      G2 G1 G0 B4 B3 B2 B1 B0



例程:

图象采集:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_418129.GIF
(原文件名:图象读取代码.GIF)


后记:81楼有代码

jk36125 发表于 2009-2-16 08:44:42

发完帖子好像不能修改的样子

likedev 发表于 2009-2-16 08:48:01

不错啊,可以做自己的监控系统了!

jk36125 发表于 2009-2-16 08:56:43

就是串口太慢了

oet-oet 发表于 2009-2-16 22:47:44

usb转串口(pl2301),能到900多k,可以试试

foshan_lcy 发表于 2009-2-18 12:45:12

漂亮

yyzz20022001 发表于 2009-2-18 13:07:13

不错

asdasd 发表于 2009-2-18 13:34:44

ding

zc3909 发表于 2009-2-18 13:45:22

顶一个

jeoge 发表于 2009-2-18 14:12:09

不錯,頂一個

af00 发表于 2009-2-18 15:43:52

非常不错
电压=?V
电流=?mA

hynwind 发表于 2009-2-18 22:53:57

不错啊!

loves123 发表于 2009-2-18 23:24:04

不错,不知道你这个模块是在哪里买的啊。

KANGYD 发表于 2009-2-20 22:03:00

厉害啊!

252177861 发表于 2009-2-20 23:00:11

刚在淘宝上搜了下,45块钱但没把握自己能玩转,所以不敢下手啊! 真羡慕楼主

jk36125 发表于 2009-2-20 23:16:19

toaf00
电压用5V OV7640的功耗是40mw左右






to loves123
这个就是我自己做的模块啊```汗

xiaozhiyong 发表于 2009-2-21 08:50:16

这个好,有时间也要做一个,到时还得多多请教楼主,

superyongzhe 发表于 2009-2-21 11:49:24

佩服

wswh2o 发表于 2009-2-22 00:14:49

镜头啥的咋办的?

jk36125 发表于 2009-2-22 20:23:53

【18楼】 wswh2o 水之影

用电脑摄像头的那种就可以

robinyuan 发表于 2009-3-2 22:00:09

用单片机驱动数字摄像头
作者:xlander   发表时间:2008-3-1   阅读次数:9074
http://www.getproject.com.cn/Article/Show/73.aspx


眼下,视频监控已经渗透到各个领域,几乎已经无所不在了,前段时间盛传的地铁情侣拥吻,再次掀起有关公共场合的隐私保护的讨论。不管讨论的结果怎样,那都是社会学层面的讨论,从技术层面来看,就跟枪和炮一样,技术在给社会带来科学进步的同时,也不可避免的给社会带来潜在的威胁。

如果你想在视频监控这个热门领域里捞一把,这里收录的三篇文章会指导你很好的完成入门试验。
./bbs_upload34876/files_12/ourdev_422862.jpg
( (原文件名:用单片机驱动数字摄像头1.jpg))



先从简单的开始,有关如何驱动数字摄像头,这里有一篇文章《数字摄像头的驱动和接口》,作者采用的单片机是ATmega16,至于摄像头,则采用了ETC公司的摄像头模块C3088,C3088采用的CMOS传感器是Omnivision公司的OV6620,OV6620的分辨率是356*292,适合运算能力较低的单片机使用。作者共享了实验报告和实现代码。不过,作者只读取了传感器的Y通道,所以采集到的图像是黑白的。不过,对于个人试验来说,C3088既然号称是国外进口,价格肯定不会便宜,所以还是从轮子做起好了,既能锻炼自己,又能节省成本,一举两得。

视频采集在视频领域技术难度并不大,所以想凭视频采集在视频领域里混饭吃,是非常难的,基本属于温饱,饿不死,但也不会暴富。要想发财,就得下功夫,给视频采集来个“粗加工”,也就是图象处理和图像识别,比方说车牌识别、人脸识别、或者车站门口的行李扫描,这些产品都需要用到图像处理和识别技术,所以,我们再来看这个稍微复杂一点的,AVR摄像头是基于GNU GPL的开源项目,采用ATMega8单片机,通过图像处理技术,摄像头最多可以跟踪8个不同的物体,这个摄像头最物尽其用的场合非机器人足球莫属。这个摄像头识别物体的方法是颜色识别,属于图像识别的入门阶段,拿来学习刚刚好。下载原理图和代码。

掌握了图像识别,你过上了小康生活了,比起出手阔绰的富豪们,你还需要继续努力,这一次算是“深加工”好了。接下来的这一个就非常复杂了,来自康奈尔大学的自动搜索机器人,他们采用的摄像头模块也是C3088,这个机器人既可以通过无线遥控,也可以自动寻找和收集红色的小球。这是一个非常复杂的项目,除了车辆的组装以外,还涉及机器视觉、运动控制、无线通讯等等,具体的内容不是几句话可以说清楚地,不过,他们共享了所有的设计材料,这些材料都可以在这里下载得到。如果你看到这样的项目后,产生一种发自肺腑的绝望,感觉自己永远没有出头之日的话,那就大可不必了,其实老天爷对人是公平的,像这样的工程不是一个人做得了的,就像长城不是一个人修的一样。假如可以在视频采集领域赚1块钱,只需要你一个人就够了,而在机器人领域可以赚100块钱,但是你需要与另外的99个人合作才行,你的所得也还是1块钱。所以,你所得到的,永远都是你所付出的,踏踏实实做好、做强自己擅长的工作就足够了。

最后来看看自动搜索机器人的工作成果:


(原文件名:用单片机驱动数字摄像头2.jpg)




(原文件名:用单片机驱动数字摄像头3.jpg)

有关cmucam3实际采集到的图像见,http://robotdevices.blogspot.com/

robinyuan 发表于 2009-3-2 22:00:46

另一个开源摄像头
作者:xlander   发表时间:2008-3-11   阅读次数:3166



(原文件名:数字摄像头4.jpg)


用单片机驱动数字摄像头里提到的AVR摄像头是基于ATMega8的,今天收录的CMUcam则是基于NXP LPC2106的,这个摄像头已经升级到第三代了。

CMUcam3在硬件上并不开源,而是软件开源,而且还提供了丰富的实例,比方说颜色跟踪、移动探测、以及一些基本的图像压缩和处理算法等等。

CMUcam3虽然在硬件上并不开源,但是保留了重新烧写固件的接口,用户可以修改代码并升级新的固件。网站上还提供了相关软件(包括编译器、烧写器、实例代码等),供用户下载。http://www.cmucam.org/wiki/Downloads

xbq1001 发表于 2009-3-3 22:26:20

mark

fu2008 发表于 2009-3-16 08:32:41

顶啊

lsw0136 发表于 2009-3-16 09:09:05

mark

jswk 发表于 2009-3-16 09:22:31

Mark~~~

sunny1500 发表于 2009-3-16 09:22:43

终于有人玩摄像头了,顶顶

443799600 发表于 2009-3-20 11:12:58

mark,真的很强大,我项目完成有空好好看。

DIZHUWANG2008 发表于 2009-5-25 23:36:57

mark很强大,有没考虑输出AV信号,缩小体积,出售模块

DIZHUWANG2008 发表于 2009-5-25 23:40:50

楼主的网页打不开,能否重新给过

Totry 发表于 2009-5-25 23:51:08

mark很强大,有没考虑输出AV信号,缩小体积,出售模块
-----
只要AV输出就没那么麻烦了,监控市场上输出AV信号的模块多的是

loongsuns 发表于 2009-6-1 12:07:30

mark

fy024 发表于 2009-6-1 13:00:03

佩服,高高手啊!!!!

摄像头都热转印,佩服,佩服

shushu 发表于 2009-8-24 22:57:30

好文章 帮了我大忙啊 本人最近也在弄摄像头做识别的 顶了

155107149 发表于 2009-8-25 09:58:13

mark 想问一下楼主电路照片中间正方形那个是不是CCD元件啊?

mcucool 发表于 2009-9-26 00:28:58

不用镜头就可以吗?

ndust 发表于 2009-9-26 21:18:05

jh

homemyc 发表于 2009-9-26 21:29:37

mark

vipeinstein 发表于 2009-9-29 12:59:56

不错

z7926573 发表于 2009-9-29 13:48:49

mark

wangguanfu 发表于 2009-9-29 13:51:42

帮顶,

daemon 发表于 2009-9-29 19:44:15

mark

wcm_e 发表于 2009-9-29 20:10:47

mark

forever_wzx 发表于 2009-9-30 11:27:26

mark

xbeethoven 发表于 2009-11-19 11:03:21

好呀

mslmcu 发表于 2009-12-3 23:58:17

mark

cmyldd 发表于 2009-12-4 00:08:49

mark

disheng 发表于 2009-12-4 07:56:32

不错

a1z26 发表于 2009-12-4 08:06:17

很好很强大。

armfans 发表于 2009-12-4 11:27:58

mark

scat-01 发表于 2010-1-2 13:48:13

mark

xiaolei0428 发表于 2010-1-2 22:15:54

关注一下

ysyin 发表于 2010-1-3 00:29:25

呵呵,顶一下

hooao 发表于 2010-1-3 11:00:53

mark,有谁能把上面的资料打包一下方便大家下载啊,我都不知道下那个

sunzhaod 发表于 2010-4-17 17:35:17

mark

justbegin 发表于 2010-4-18 10:16:14

不错啊

taoyeah 发表于 2010-4-18 12:46:26

mark

yusufu 发表于 2010-4-18 15:04:53

mark

popppig 发表于 2010-4-19 16:13:01

很不错哦
mark之!

chen20061084 发表于 2010-4-22 14:25:18

mark

pkk007 发表于 2010-4-22 14:38:12

mark

顺便问一下有人推荐一下具有Global Shutter功能的摄像头模块么?

ingenic 发表于 2010-4-22 14:59:08

记号

hxke 发表于 2010-4-22 15:07:19

备份

xiaomage_2000 发表于 2010-4-22 15:38:29

不错记号~

shaoyifeng 发表于 2010-5-15 21:47:07

楼主您好,我现在也想做一个摄像头,您能不能给点指导,QQ519349341

boy364100 发表于 2010-7-9 15:48:50

写得非常的好,顶~

dubu 发表于 2010-7-11 07:19:47

mark 摄像头

bingo_xl 发表于 2010-7-29 15:05:08

写得确实很不错!

55660728 发表于 2010-8-17 02:49:25

mark

ITOP 发表于 2010-8-17 08:51:29

MARK!!

papa123 发表于 2010-8-17 09:12:02

牛X

liangtao 发表于 2010-8-17 09:25:04

mark

xiangye 发表于 2010-8-17 12:54:54

mark

andrew_dj 发表于 2010-8-17 14:01:46

顶一个

fanwt 发表于 2010-8-17 14:08:52

mark

rclsq 发表于 2010-9-14 17:02:35

顶一个

gxy508 发表于 2010-9-14 22:08:40

mark

yaya001 发表于 2010-9-14 23:21:27

mark

orange2348 发表于 2010-9-15 08:24:49

mark

zxycba 发表于 2010-9-15 09:17:51

mark

jk36125 发表于 2010-9-15 09:45:27

1年前的老帖子居然被顶到首页了······

那楼主我再小挖一下坟好了。嘿嘿。

jk36125 发表于 2010-9-16 09:07:42

一年后看到自己发的贴子,感触颇多,补上迟到的源代码:

SCCB总线驱动:
点击此处下载 ourdev_583519EWE4PO.rar(文件大小:2K) (原文件名:SCCB.rar)

AT91RM9200通用IO读取图像源代码(汇编):
点击此处下载 ourdev_583520UIEZGI.rar(文件大小:978字节) (原文件名:vison.rar)

lininglive 发表于 2010-9-16 09:48:39

赞一个 lz 辛苦

yulri 发表于 2010-9-16 14:27:43

mark一下

dgtg 发表于 2010-9-17 16:47:44

这种封装如何焊接啊????
楼主给点意见来啊....
MASK!~

shiruizhu 发表于 2010-9-20 15:59:16

mask

jk36125 发表于 2010-9-21 22:18:20

回复【84楼】dgtg
-----------------------------------------------------------------------
非常好焊接,只要用稍细的烙铁在每个焊盘处轻触一下就可以。不需要用拖焊。但是要注意静电防护,最好待个静电手环。

joni 发表于 2010-9-22 01:08:15

mark

lwbjun 发表于 2010-10-8 12:51:48

mark

afei8856 发表于 2010-10-8 12:59:47

mark

kneken 发表于 2010-10-8 13:00:54

MARK

micheal0311 发表于 2010-10-8 15:26:56

向你学习

lgnq 发表于 2010-10-8 15:38:18

mark

j491424570 发表于 2010-10-10 19:59:43

mark

YanGaruruga 发表于 2010-11-29 11:13:53

记号!ov7640

BINGSHUIHUO 发表于 2010-12-24 03:11:01

20V2A

yuqilala 发表于 2011-1-11 14:16:44

ov7640

flag!!

zlj2008 发表于 2011-1-12 00:22:05

再顶

happywolf999 发表于 2011-1-19 18:39:43

mark

happywolf999 发表于 2011-1-19 18:40:10

mark
页: [1] 2
查看完整版本: 做自己的摄像头模块