STM32玩百万象素摄像头,分享经验

2019-12-14 12:37发布

本帖最后由 chunxx 于 2012-9-25 17:12 编辑

在STM32上做了一个平台,搞定了130万象素的MT9M111 CMOS Sensor接口,后来又分离出来做成一个独立模块,有时间就在上面玩玩图像算法,可以LCD预览显示,OSD叠加,压缩存储,二值化,特征提取,目标识别。。。。 广阔天地呀!呵呵,先上图:
平台:
IMG0001.JPG (389.92 KB, 下载次数: 19) 下载附件 2012-9-25 17:04 上传

1280x1024这个JPEG图,就是由MT9M111捕捉、STM32压缩写到SD卡上的,4mm的小镜头,没有背光随手拍的,虽然比较暗淡没艺术感,但分辨率是硬道理啊!一直只是玩玩,看到这个图,感觉可以用来做点东西,虽然还没想好做什么。
用这个平台做过了一些USB Video Class的探索,在论坛上发过的:
http://www.amobbs.com/thread-5262477-1-1.html
程序是相通的,JPEG编码源程序也在那里。那个开始用的是OV7670,STM32 firewware还是v2.02的,后来改成MT9M111,fireware懒得升级了。
先贡献MT9M111的驱动源程序,带注释无码版本,不是原装但绝对是原创的。
MT9M1111.rar (12.13 KB, 下载次数: 684) 2012-9-25 17:08 上传 点击文件名下载附件
这个程序,代码以外的文字总结,在我的博客上:
chunxx.21ic.org

其他的一些算法移植也小有成绩(不是成就),不过还属于玩家,也就是玩物丧志的家伙,如果打开门,有人围观起哄的话,还比较容易想起自己远大的理想,所以决定,有时间的话就上传一些源程序,分享一下心得,希望能遇到同道。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
98条回答
chunxx
2019-12-17 01:55
是用了SDRAM。有人支持就多罗唆几句。
用STM32玩摄像头,是从OV7670开始的,用BL422 FIFO的方式基本上没什么好玩的,也就能够丢到LCD显示,单帧存储,640x480的图像只能用320x240,MCU基本上没时间做其他事。不过比起模拟视频信号输出的摄像头来,它是并行数字口输出,时钟速度可调,有很大扩展的空间。模拟摄像头只能通过SAA7113之类解码,按死死板板的ITU656,27M时钟输出,不用DSP的话基本上没什么操作空间。
    不过DSP也不是天生就能上图像的,象DM642,应用板是要FPGA扩展的。自然的思路就是用CPLD扩展STM32子系统,扩大内存。STM32单以运算速度而言,应该可以达到80386的水平吧?很多经典的图像处理算法都是在386时代就有了,有了足够的内存就有玩头。SRAM大容量太贵,理想的是SDRAM,不过,现实中没有STM32接口SDRAM的例子可以参考,一切靠自己,硬来!
    在STM32上扩展8M SDRAM,FSMC接口;摄像头输出直接存入SDRAM,1280x1024的图像也足可以放上2帧;MCU直接在内存中读已经组成帧的图像,不用管象素和行怎么来的;读写分离,同时进行,这样MCU处理再慢也不影响图像捕捉;另外的冗余资源,做了一个抽取器,不管是640还是1280的图像,抽取成320x240的小图像,直接送给LCD小屏显示。
    摄像头最初还是用OV7670调试,640x480模式。通过之后改用MT9M111,接口基本相同。基本定型之后,觉得摄像头部分可以固定,MCU周边电路需要根据应用不同而修改,所以把这个扩展部分分离出来,做成一个独立模块,提供给MCU一个简单的FSMC接口,就起名叫fsmc-Camera吧!

调试平台2-分解.jpg (239.01 KB, 下载次数: 2)

下载附件

2012-9-27 11:27 上传



(数码相机拍的,不是自己拍自己)
    玩这个的目的,是想把PC上用的一些图像算法移植到单片机上来,看看是否有可能做一些简单的目标识别、图像定位之类应用。JPEG编码是附带做的,反而没耗费多大精力。现在虽然没什么成就,回过头来看,路线应该是正确的。以前对CVBS图像玩得可谓精熟(06年的时候曾经做过一个STC51单片机实现的汉字OSD模块,现在还有朋友要货),但模拟视频的时代无可奈何的要消失,如果还执着于CVBS,只能离开图像这个邻域了;CMOS摄像头这一块,刚开始玩这个的时候,30万象素算高级,现在连起步价都不够了,应该是发展的方向。

一周热门 更多>