打印

嵌入式系统的数字图像采集接口电路设计

[复制链接]
1242|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bairan168|  楼主 | 2010-11-22 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、图像信号介绍
PLCK存在时,图像数据端口连续不断地输出数据。由于行之间以及场之间输出数据无效,在采集图像数据必须考虑同步信号,读取有效数据才能保证图像的完整性。
二、I/O接口设计
对于MCU、DSP处理器,I/O是最方便的访问方式之一。以I/O方式读取图像数据不仅可以简化电路设计,而且程序也很简单。但由于读取每一个像素都要检测状态,在处理器速度低的情况下,读取图像慢。在处理器速度快或图像采集速度要求不高的应用中,I/O接口方式是一个较好的选择。
1、电路原理和结构
在图像传感器和处理器之间,利用两个锁存器分别锁存状态和图像数据,处理器通过两个I/O端口分别读取。在数据锁存器保存图像数据的同时,状态锁存器产生Ready信号(从‘0’到‘1’)。处理器读取图像数据时, Ready信号自动清除(从‘1’到‘0’)。处理器读取状态时锁存器驱动总线,其他情况下输出处于高阻状态。
2、图像读取流程
要保证图像的完整性就必须从一场图像的第一行开始读取,对于隔行扫描输出的图像则必须从一帧的第一行开始读取。读取每行图像数据时,则从该行的第一个像素开始。因此,在读取图像数据前应先判断场和行的起始位置。
3、同步信号检测
为了简化电路设计,用处理器直接读取同步信号,然后找出场和行的起始位置。
处理器读取同步信号时,信号可能处在同步脉冲状态(‘1’)或正常状态(‘0‘)。对于那些同步信号反向的器件,则分别为 ‘0’和‘1’。如果信号处于同步脉冲状态,第一次检测到的正常状态就起始位置。如果信号处于正常状态,则首先检测到脉冲状态,然后用同样的方法确定起始位置。
通过上述方法可以检测出场的起始位置和行起始位置。
4、用VHDL设计锁存器
在应用中,以上两个锁存器的功能和其他逻辑集中在一起,用可编程逻辑器件实现。下面分别为它们的VHDL表示。
设DO(0-7)是锁存器输出端,DI(0-7)是锁存器输入端,DM(0-7)是中间状态,Data_R是数据读信号(低电平时有效),则数据锁存器的VHDL描述为:
Process (reset, PCLK) -- 锁存图像数据
Begin
If reset='0' then
DM<="00000000"; -- 清除数据
Else if PCLK'event and PCLK='1' then
DM<=DI; -- 锁存数据
End if;
End process;
Process (DM, Data_R) -- 读取图像数据
Begin
If Data_R='0' then
DO<=DM; -- 输出图像数据
Else
DO<="ZZZZZZZZ" -- 输出高阻
End if;
End process;
进一步设数据有效状态为Dstatus, 状态读写信号为Status_R (低点平时有效),则状态锁存器的VHDL描述为:
Process (reset, PCLK,Data_R) -- 数据有效状态控制
Begin
If reset='0' or Data_R='0' then
Dstatus<='0'; -- 清除状态
Else if PCLK'enent and PCLK='1' then
Dstatus<='1'; -- 设置状态
End if;
End process;
Process (Dstatus, Status_R) --读取状态和同步信号
Begin
If Status_R='0' then
DO0<=Dstatus;
DO1<=VSYNC;
DO2<=HSYNC;
DO3<=FRAME;
Else
DO<="ZZZZZZZZ"; -- 高阻状态
End if;
End process;
三、存直接写入接口设计
在处理器速度较慢且图像数据输出的频率不能降低的情况下,采用上述I/O接口方法不能得到完整的图像。另外,有些应用中要求能够实时采集图像。为此,我们设计了高速数据图像采集方法―内存直接写入法。由于SRAM访问控制简单,电路设计方便,被大量嵌入式系统采用,本文以SRAM作为存储器。
1、电路原理和结构
内存直接写入方法通过设计的图像采集控制器(以下简称控制器)不需处理器参与,直接将图像数据写入系统中的内存中,实现高速图像采集。

2、SRAM写控制时序
采集图像过程中,控制器自动将数据写入到硬件设定的内存中。写内存时,控制器产生RAM地址(A)、片选信号(/CS)、读信号(/RD) 和写信号(/WD),同时锁存传感器输出的数据并送到数据总线(D)上。每写入一个数据后,地址(A)自动增1。采集时/CS保持有效(‘0’)状态而 /RD处于无效状态(‘1’)。地址A的变化必须与/WD和数据锁存器协调好才能保证图像数据的有效性。

3、控制器主要功能的VHDL描述
描述控制器中全部功能的VHDL代码较长,而且有些部分是常用的(如计数器等)。图像采集状态产生和同步信号的检测是其中重要的部分。下面介绍这两部分的VHDL描述。
图像采集状态 capture_s:
处理器的采集请求信号capture_r使capture_s从‘0’到‘1’,场地址发生器(计数器)的溢出位vcount_o,清除capture_s。
process (capture_r, reset, vcount_o)
begin
if reset='0' or vcount_o='1' then
capture_s<='0'; -- 清除
else if capture_r'event and capture_r='0' then
capture_s<='1'; -- 置状态位
end if;
end process;
同步信号检测:
只有在采集状态capture_s有效时(‘1’)才检测场同步信号,场同步信号下降沿置场有效状态(vsync_s),场地址发生器溢出位vcount_o清除场有效状态。只有在vsync_s有效情况下才检测行同步信号,行同步信号下降沿置行有效状态(hsync_s),行计数器溢出信号hcount_o清除行状态。只有在行状态有效的情况下计数器才工作,且将数据写入RAM。
Process (capture_s,reset,vcount_o, vsync)
Begin
If reset='0' or vcount_o='1' or capture_s='0' then
Vsync_s<='0'; -- 清除
Else if vsync'event and vsync='0' then
Vsync_s<='1'; -- 置状态位
End if;
End process;
Process (vsync_s, reset, hcount_o, hsync)
Begin
If vsync_s='0' or reset='0' or hcount_o='1' then
Hsync_s<='0'; -- 清除
Else if hsync'event and hsync='0' then
Hsync_s<='1'; -- 置状态位
End if;
End process;

相关帖子

沙发
amini| | 2010-11-22 15:53 | 只看该作者
顶。

使用特权

评论回复
板凳
foreverly| | 2010-12-10 14:23 | 只看该作者
谢谢。 终于找到了。

使用特权

评论回复
地板
msp430ing| | 2010-12-11 16:07 | 只看该作者
楼主的资料在哪找的啊,我怎么找不到这样的资料!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

776

帖子

2

粉丝