金牌会员
- 积分
- 2327
- 威望
- 2305
- 贡献
- 22
- 兑换币
- 0
- 注册时间
- 2008-1-6
- 在线时间
- 0 小时
|
< style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">平时比较忙,好久都没有到这里了,呵呵,写一点关于图像的吧,既然来了。</SPAN></P><P style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">有很多网友比较关注图像采集的问题,下面我将我BLOG上的一些关地图像采集的情况转载到此地,与大家一起学习,欢迎大家指出错误并提出建议</SPAN></P><P style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">下面为我的BLOG的直接转载,其实关于图像还有许多需要注意的地方,下面我说的只是其中的很小的一部分,也是比较重要的。我还没有写完,呵呵,得慢慢说才行。</SPAN></P><P style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">BLOG:<A target=_blank href="http://blog.eccn.com/u/107300/index.htm">http://blog.eccn.com/u/107300/index.htm</A></SPAN></P><P style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">模拟的优势比较地明显:便宜,程序有现成的。缺点:消耗<SPAN lang=EN-US>MCU</SPAN>资源,取点个数少,需要<SPAN lang=EN-US> </SPAN>做<SPAN lang=EN-US>12V</SPAN>的供电模块,外围处理电路多,还要<SPAN lang=EN-US>1881</SPAN>。</SPAN></P><P style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">数字的优点就是避免了模拟的缺点<SPAN lang=EN-US>,</SPAN>另外功耗低<SPAN lang=EN-US>,</SPAN>刷新率也比模拟的摄像头高。最大的缺点是抗干挠能力非常差,在图像处理算法层面要下一定的功夫。</SPAN></P><P style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">对于<SPAN lang=EN-US>CCD</SPAN>的采集系统我不想多说<SPAN lang=EN-US>,</SPAN>网上很多关于<SPAN lang=EN-US>CCD</SPAN>采集的例子<SPAN lang=EN-US>,</SPAN>有百度上收索<SPAN lang=EN-US>”</SPAN>全电视信号<SPAN lang=EN-US>”</SPAN>就有一大堆了。</SPAN></P><P style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">下面只给出参考图的接法:<IMG onmousewheel="return bbimg(this)" style="CURSOR: pointer" onclick=javascript:window.open(this.src); src="http://blog.eccn.com/0/2008-6/152114330929.jpg" onload=rsimg(this,665)></SPAN></P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><P style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0">上图中有两种方案:<SPAN lang=EN-US>AD</SPAN>,比较器。</P><P style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0">对于<SPAN lang=EN-US>AD</SPAN>而言,可以动态的设置阀值,但是单片机的内部<SPAN lang=EN-US>AD</SPAN>速度有限,可能采集到的点数不够,不过此种方式可以通过外扩高速<SPAN lang=EN-US>AD</SPAN>的方案来实现,可以使用<SPAN lang=EN-US>TLC5510</SPAN>解决。</P><P style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0">对于比较器,采集速度快,直接读取<SPAN lang=EN-US>IO</SPAN>口就行了,但是阀值是固定的,不过可以使用数字电位器调节阀值,但是数字电位器的调节速度是有限的。</P><P style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0">对于<SPAN lang=EN-US>COMS</SPAN>的摄像头就有很多优点了,首先一点,功耗低;其次,不用<SPAN lang=EN-US>LM1881</SPAN>,其行场信号自动分离。</P><P style="WORD-BREAK: break-all; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0">对于OV6620的一些接法与程序的处理,期待下一篇日志。</P><P>一直以来OV6620的采集电路困扰了很多网友,还有就是如何保证采集的不失真性,与图像的真实性等问题,都有很多讲究。</P><P>下面给出下在认为比较好的一种采集电路,就此电路而言展开讨论:</P><P><IMG onmousewheel="return bbimg(this)" style="CURSOR: pointer; ZOOM: 30%" onclick=javascript:window.open(this.src); height=328 src="http://blog.eccn.com/0/2008-6/162246177876.jpg" width=665 onload=rsimg(this,665) resized="true"></P><P>一定要保证行中断的优先性,不早了,得明天写才行了,呵呵.</P><P>上篇日志给出了采集电路,下面就采集电路而展开讨论。</P><P>电路图中CD40106的作用:将行信号反向,原因是单片要贩IRQ中断只能捕捉下跳变,而对行信号而已,其下跳变是行扫描的结束,上跳变以行扫描的开始,用CD40106后,将信号反向,使得单片机捕捉到下跳变后,正好是行扫描的开始,这样就可以一进入中断就进行采集了。</P><P>对于场信号接PJ0,主要是用于图像的刷新,一副图像的开始。</P><P>下面给出运用些电路图的一种采集程序结构图与程序思想:</P><P>#define VIDEO_SAMPLE INTCR_IRQEN=1<BR>#define NO_SAMPLE INTCR_IRQEN=0<BR> <BR>void PLL_Init(void);<BR>void Video_Init(void);</P><P>void main()<BR>{<BR> DisableInterrupts;<BR> PLL_Init(); //PLL<BR> Video_Init(); //采集的初使化<BR> EnableInterrupts; //开中断<BR> VIDEO_SAMPLE; //开始采集图像<BR> for(;;);<BR>}</P><P>void PLL_Init(void)<BR>{<BR> ///PLL<BR>}</P><P>void Video_Init(void)<BR>{<BR> //开行中断,开场中断<BR>}</P><P>#pragma CODE_SEG NON_BANKED<BR>void interrupt 6 IRQ_ISR()<BR>{<BR> //判断是否是采集的行,不是就跳出,<BR> //采集<BR>}<BR>#pragma CODE_SEG DEFAULT_ROM<BR> <BR>#pragma CODE_SEG NON_BANKED<BR>void interrupt x PORTJ_ISR()<BR>{<BR> //一融图像采集完<BR> //图像矩阵清零<BR>}<BR>#pragma CODE_SEG DEFAULT_ROM</P><P>当然上述只是很多种采集程序中的一种架构,但是万变不离其中,其目的是一样的,就是图像采集。</P><P><SPAN style="FONT-SIZE: 14pt">前几篇日志,给出了COMS的采集电路与采集思路,下面给出一些注意事项,以及选择那些引脚的原因。</SPAN></P><P><SPAN style="FONT-SIZE: 14pt">首先一点,必须保证行中断为本系统中的最高优先级中断,当然这是在系统没有问题的前提下进行的,系统都有问题了,还保证中断也没有用,呵呵。</SPAN></P><P><SPAN style="FONT-SIZE: 14pt">保证行中断优先级有两点问题可以解决:一,保证执行行中断的时候不被其它的高优先级的中断打断,从而保证了采集时序的严密性与正确性;二,当行信号来时,如果其它的中断正在执行,可以打断其它的中断,而跳转执行行中断,保证采集的及时性,原因是:COMS摄像头的行描扫描不等人,如果你正在执行其它的中断,而此时行中断来了,但是却不能及时进行行中断,行中断处于等待状态,说极限一点,当你执行完其它中断后进行行中断可能已经过去了几十微秒,早已经没有有效的图像信息,再去采集,如果图像信息是对的,那么肯定是你的系统出了问题,即使只错过了几微秒,采集到的图像也是错位的,因为在几微秒中已经错过了一些图像,这一点也是有些人常说的图像变形的情况,用上位机软件看,总有图像移位的情况。有人会问,在执行行中断的时候可以关用DisableInterrupts关闭所有的中断,当采集完后用<SPAN style="FONT-SIZE: 10pt">EnableInterrupts</SPAN>开启所有中断,这样确实可以保证在行中断的时候不被其它高优先级的中断所打断,但是对于第于种情况呢,行中断到来的时候必须即时进入行中断程序,保证采集的即时性,如果行中断的优先级不高,就做不到这一点了。</SPAN></P><P><SPAN style="FONT-SIZE: 14pt">对于我的BLOG给出的原理图,行信号接的是IRQ中断,IRQ中断在S12单片机中是中断优先级比较高的中断,如果此时你的行中断优先级不是你的系统中最高的优先级,建议你设置HPRIO寄存器,将行中断设置为最高优先级中断。</SPAN></P><P><SPAN style="FONT-SIZE: 14pt">对于场信号,对于这一个信号,还是用中断处理,当然也可以用等待,但是等待,会消耗很多时间,不是好的选择,建议用中断处理场信号。</SPAN></P><P><SPAN style="FONT-SIZE: 14pt">至于场信号的中断优先级的问题,我认为高一点会好一点,但是对场中断的优先级要求不是很高,因为一帧图像完后,有一个场恢复时间,这个时间比较长,足够处理其它中断了,场信号中断可以等待。</SPAN></P><P><SPAN style="FONT-SIZE: 14pt">对于中断程序,中断程序应该越简洁越好,在中断里面执行的时间不应该过长。</SPAN></P></SPAN> |
|