智能车制作

标题: K60+DMA+DSP对摄像头数据的采集---每秒60帧 [打印本页]

作者: laoylhuli    时间: 2012-6-5 14:47
标题: K60+DMA+DSP对摄像头数据的采集---每秒60帧
本帖最后由 laoylhuli 于 2012-6-5 14:47 编辑

闲来无聊写一下关于我对摄像头数据采集处理的设计
      K60的内核是Cortex-M4,不得不说这个内核比M3有了很大的长进,特别是核心对dsp内核的支持。玩过STM32的朋友知道32上也有dsp库,但最大的缺点是M3内核模拟的,速度算不上快,但比一般自己写代码快很多。
      下面来讲一下怎么读取摄像头数据,这个是关键只有获得了有效的数据才能处理啊。我用的摄像头是OV7620,买来的时候基本是出厂设置。OV7620视频输出格式通过YCrCb格式,这里我们只用Y通道,里面输出的是灰度。
      摄像头输出通过VS(场同步信号)、HS(行同步信号)、PCLK(像素时钟同步信号),和Y0~Y7组成。用示波器观察PCLK的时间是74ns,也就是13.5M的速度(用杜邦线小心,摄像头架的很高,线很长衰减很厉害)。这里我采用了中断和DMA相结合(有DMA这么好的资源干嘛不用呢),没接触过的人可能不知道那时什么功能,其实很简单只要你给它设置好相应的参数,它就会不通过CPU直接将你的数据从外设和内存之间相互搬运,或者内存到内存的搬运,什么时候搬运你就要告诉他。在程序开始的时候我们设置两个中断(为了保证必要的速度最好设置在两个不同的中断号中),一个是VS中断,一个是HS中断,并且配置DMA(建立外设和内存的搬运过程,搬运次数,触发方式)触发采用PCLK,并且使能VS中断,失能掉HS和DMA中断。
      (1)当一帧图像开始传输时VS触发中断(这里不判断奇偶场),在中断中我们初始化一些行计数之类的变量,并且失能VS开启HS中断。
      (2)当VS之后的第一个HS的到来表示第一行触发HS中断,在此你就要判断这一行的数据你是否需要(如果我们把一幅图像的所有数据都读进来RAM不够吧)。之后没来一个HS触发一次中断判断这一行你是否需要,如果需要就使能DMA传输和中断。当判断行计数大于你要的行数后,失能HS,来一个标志位说明一帧图像已经接收完毕。
      (3)DMA中断中其实很简单,开启一次DMA的传输和中断后,摄像头每来一个PCLK就会搬运一次数据到指定的RAM中,当一次搬运完你所设置的搬运次数后进入DMA中断,在中断中你要及时的将RAM中的数据移走,防止被覆盖,这里需要注意一下为了尽可能的快速移走数据你要好好考虑下你要搬运的次数。
      (4)上面提到的那个标志位就要用在主函数中,当判断标志位被标志后,我们要开始进行处理,滤波、黑线的判断、十字路口、停车是必不可少的。
       滤波和黑线的判断我们可以使用自带的DSP内核来完成,关于cortex-M4中的dsp内核,可以登入arm的官网下载相关资料  http://www.onarm.com/cmsis/download/   里面的库提供很丰富的处理方法。


作者: 上善の若水    时间: 2012-6-6 19:40
思路很清晰,我开始也想用DSP处理滤波和图像,但是后来发现DSP专攻音频
对图像的数据处理貌似没什么作用,用不上。。
作者: Horizon3261    时间: 2012-6-6 21:06
你的K60 的具体型号是多少?定点型的K60没有DSP吧?
作者: laoylhuli    时间: 2012-6-6 22:20
Horizon3261 发表于 2012-6-6 21:06
你的K60 的具体型号是多少?定点型的K60没有DSP吧?

M4内置dsp内核的  详细的可以百度百科对cortex-m4的介绍很详细


作者: fuchouzhe    时间: 2012-6-7 17:38
孩子们哪!科普一下,cortex的dsp只是加了几条专用的指令而已,不是包治百病的良药!
作者: 马精明123    时间: 2012-6-7 18:10
高手们,K60采样时候,用DMA中断时候,可是为什么把pclk 连接到c0 ,程序就死在dma里了,看了一下pclk大致的周期是74ns !!DMA怎么采样啊??跪求详解啊???
作者: 深海·    时间: 2012-6-7 18:39
laoylhuli 发表于 2012-6-6 22:20
M4内置dsp内核的  详细的可以百度百科对cortex-m4的介绍很详细

你们用的是这个芯片吗?
我们用的是MCP,32位的,发现图像处理得很乱。
我们学校另一组用的是K60的,也是图像很乱。

作者: laoylhuli    时间: 2012-6-7 19:17
深海· 发表于 2012-6-7 18:39
你们用的是这个芯片吗?
我们用的是MCP,32位的,发现图像处理得很乱。
我们学校另一组用的是K60的, ...

我用的是这个芯片  图像采集出来很好啊  最重要的是对摄像头时序的问题,里面用到了两个中断你什么时候去清除中断标志位是个非常关键的问题。清不好中断标志位会出现模糊的现象


作者: 深海·    时间: 2012-6-7 19:22
laoylhuli 发表于 2012-6-7 19:17
我用的是这个芯片  图像采集出来很好啊  最重要的是对摄像头时序的问题,里面用到了两个中断你什么时候去 ...

你们的那个芯片,AD转换后的接受信号口的电压是多少?
就是没有接AD芯片是的电压,我的这个芯片有2.9V左右。而128的芯片是0V。


作者: 深海·    时间: 2012-6-7 19:24
laoylhuli 发表于 2012-6-7 19:17
我用的是这个芯片  图像采集出来很好啊  最重要的是对摄像头时序的问题,里面用到了两个中断你什么时候去 ...

你的芯片那几个口是多少V?
这个要编程设置吗?

作者: 小顺子    时间: 2012-6-20 22:11
请问一下,中断的值是怎么设置的或者说中断怎么设置?有没有什么手册之类的。
作者: 追寻,足迹    时间: 2012-6-21 22:35
lz你qq多少,能加你请教一线吗,我的摄像头采集的数据一致不对,不知道该怎么改了现在
作者: SHIYOULAN    时间: 2012-8-2 02:26
很不错的方案。
作者: 那年_夏天    时间: 2012-8-22 21:31
lz k60子带的DSP怎么用,用什么开发软件,代码怎么写,能教教我妈,看了还几天都不明白。能加下你QQ吗?
作者: aleanking    时间: 2012-9-25 21:43

作者: を圣邪む    时间: 2012-9-26 10:32
楼主,k60的ccd采集程序也是这个过程吗?谢谢哈
作者: fn654    时间: 2012-10-20 16:24
虽然不是很懂,但应该值得研究
作者: dragonzard    时间: 2012-12-23 18:48
朋友,思路很清晰,但是你那个失能是指禁止的意思吗?
作者: cqhb小麦    时间: 2013-1-20 18:56

作者: Tiphone    时间: 2013-1-20 22:57
此贴要顶起。
作者: 六个柚子    时间: 2013-2-24 21:41
求参考程序啊!
作者: 心殇,逝不去    时间: 2013-3-16 15:41
求K60 DMA参考程序啊!
作者: 冫水·臨城下    时间: 2013-4-12 18:39
我也在搞这个摄像头,有些问题想向你请教,可以留qq给我么?
作者: 我飞故我在    时间: 2013-7-23 16:26
我想知道K60+CCD摄像头怎么用DMA传输数据的,CCD摄像头需要外围电路,没有像素信号PCLK啊
作者: wanglijie201209    时间: 2014-2-17 12:17
学习了
作者: 开明    时间: 2014-4-8 21:22

作者: wgw5820974944    时间: 2014-8-10 11:36

作者: Stupid__Bai    时间: 2014-11-20 19:04
fn654 发表于 2012-10-20 16:24
{:soso_e179:}虽然不是很懂,但应该值得研究

大爱你头像里的妹子

作者: lylylyly    时间: 2019-2-21 20:34
哪个资料打不开了,能在发一下吗,谢谢





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2