为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

【DEMOK原创】智能车数字摄像头使用详解(1)

2011-10-27 9页 pdf 309KB 55阅读

用户头像

is_157956

暂无简介

举报
【DEMOK原创】智能车数字摄像头使用详解(1) DEMOK 的小店 http://shop60443799.taobao.com 1 / 9 智能车数字摄像头使用详解 图像传感器工作原理 图像传感器即摄像头,是组成机器视觉系统的非常重要的元器件。根据其原 理不同分摄像头主要分为两种:CCD(Charge Coupled Device)摄像头,CMOS 摄像 头。CCD 也称电耦合器件,其工作原理是:被摄物体反射光线到摄像头上,经过 镜头聚焦到 CCD 感光芯片上,感光芯片根据光线的强弱积聚相应电荷,经周期 性放电而产生表示图像的电信号。CMOS 摄像...
【DEMOK原创】智能车数字摄像头使用详解(1)
DEMOK 的小店 http://shop60443799.taobao.com 1 / 9 智能车数字摄像头使用详解 图像传感器工作原理 图像传感器即摄像头,是组成机器视觉系统的非常重要的元器件。根据其原 理不同分摄像头主要分为两种:CCD(Charge Coupled Device)摄像头,CMOS 摄像 头。CCD 也称电耦合器件,其工作原理是:被摄物体反射光线到摄像头上,经过 镜头聚焦到 CCD 感光芯片上,感光芯片根据光线的强弱积聚相应电荷,经周期 性放电而产生示图像的电信号。CMOS 摄像头其实跟 CCD 差不多,也是将光转 换成电信号的器件。它们的差异之处就是图像的扫描方式不同,CCD 是采用连续 扫描方式,即它只有等到最后一个像素扫描完成后才进行放大;CMOS 传感器的 每个像素都有一个将电荷放大为电信号的转换器。 CMOS 传感器的图像采集方式为主动式, 感光二极管所产生的电荷直接由 晶体管放大输出,不需要外加电压,5V 的电压就可以工作,所以 CMOS 的功耗 比 CCD 要小。由于 CMOS 功耗小,较 CCD 要便宜,而且图像质量满足要求。 本文也从 CMOS 数字摄像头 OV6620 的采集方法展开论述。 OV6620 与单片机硬件连接图 OV6620 时序 OV6620 的同步信号时序如下:场同步信号 VSYN 为两个正脉冲之间扫描一帧的定时,即 完整的一帧图像在两个正脉冲之间;行同步信号 HREF 扫描该帧图像中各行像素的定时, 即高电平时为扫描一行像素的有效时间;像素同步信号 PCLK 为读取有效像素值提供同步信 号,高电平时输出有效图像数据。下图为 OV6620 VSYN、HREF、PCLK 三个同步信号之 间的时序关系: Y0 . . Y7 OV6620 HREF VSYN PA0 . . PA7 XS128 PT0 PT1 DEMOK 的小店 http://shop60443799.taobao.com 2 / 9 VSYN HREF PCLK VYNSC 是判断是否一幅图像开始,周期是 20ms, 其中高电平持续时间很短;HREF 是判 断是否一行图像的开始,周期是 63us 左右,其中高电平持续时间为 40US,低电平持续 时间 23US,那么我们对照时序图可以计算一下 OV6620 的分辨率:20ms/63us=317, 当然实际上没有这么多,消隐和无效信号去掉之后只有 292 行;有效的灰度数据是在行中 断之后的上升沿内,所以不要在行中断后的 23US 后采集。计算一下一行 OV6620 有多 少个点: 40us/110ns=363, 消隐和无效信号去掉之后只有 356 个点。足以证明 OV6620 的分辨率为 356*292。通过示波器观察,PCLK 的周期只有 150ns,依照单片 机的总线,根本无法捕捉到这个信号,此时 PCLK 的波形已经变为尖波,完全没有意义捕捉 这个信号,采集图像时尽快地一个点一个点的取就行了。 OV6620中断采样系统概述 为了提高系统的实时性,视频采集采用输入捕捉的采样方式采样图像数据。 行中断? 场中断? 行中断服务函数 清除行中断标志 场中断服务函数 清除场中断标志 出口 场中断 行中断 中断入口 DEMOK 的小店 http://shop60443799.taobao.com 3 / 9 OV6620 图像采集参考代码 #include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ #define ROW 36 #define COLUMN 85 #define ROW_START 10 #define ROW_MAX 280 #define THRESHOLD 0x20 unsigned char Buffer[ROW][COLUMN]={0}; unsigned char Buffer_Temp[ROW][COLUMN]={0}; unsigned char SampleFlag=0 ; unsigned char Interval; unsigned int m=0; unsigned int n=0; unsigned int Line=0; /*************************************************** ** 函数名称: PLL_Init ** 功能描述: 时钟初始化函数 ** : ****************************************************/ void PLL_Init(void) { CLKSEL=0x00; //48mhz PLLCTL_PLLON=1; SYNR=0XC0 | 0X05; REFDV=0X80 | 0X01; POSTDIV=0X00; _asm(nop); _asm(nop); while(0==CRGFLG_LOCK);//锁相环锁定 CLKSEL_PLLSEL=1;//选定外部时钟 } /*************************************************** DEMOK 的小店 http://shop60443799.taobao.com 4 / 9 ** 函数名称: TIM_Init ** 功能描述: 行场中断初始化函数 ** 说明: ****************************************************/ void TIM_Init(void) { TIOS=0x00; //外部输入捕捉 0,1 通道 TCTL4=0x09; //通道 0 上升沿触发,通道 1 下降沿触发 TSCR1=0x80; //使能 TIE=0x03; //通道 0,1 中断使能 TFLG1=0xFF; //清中断标志位 } /*************************************************** ** 函数名称: IO_Init ** 功能描述: IO 口初始化函数 ** 说明: ****************************************************/ void IO_Init(void) { DDRB=0X00; } /*************************************************** ** 函数名称: SCI_Init ** 功能描述: 串口初始化函数 ** 说明: ****************************************************/ void SCI_Init() { SCI0BD=312; //9600bps Baud Rate=BusClock/(16*SCIBD) SCI0CR1=0; //正常 8 位模式,无奇偶校验 SCI0CR2=0X2C; //发送允许 接受中断允许 } /************************************************** ** 函数名称: SCI_Write ** 功能描述: 给串行口写一个字符数据 ** 输 入: SendChar 为写入字符 ** 输 出: 无 ** 说明: ***************************************************/ void SCI_Write(unsigned char SendChar) { DEMOK 的小店 http://shop60443799.taobao.com 5 / 9 while (!(SCI0SR1&0x80)); SCI0DRH=0; SCI0DRL=SendChar; } /************************************************** ** 函数名称: Image_Binaryzation ** 功能描述: 图像数据二值化 ** 输 入: row ** 输 出: 无 ** 说明: ***************************************************/ void Image_Binaryzation(unsigned int row) //二值化程序 { unsigned char *p_Image; unsigned char *q_Image; q_Image=&Buffer_Temp[row][0]; for(p_Image=&Buffer[row][0];p_Image<=&Buffer[row][COLUMN-1];p_Image++) {*(q_Image++)=*p_Image; } } /************************************************** ** 函数名称: Process ** 功能描述: 图像数据处理 ** 输 入: 无 ** 输 出: 无 ** 说明: ***************************************************/ void Process() { unsigned char i,j; for(i=0;iTHRESHOLD) SCI_Write('1') ; else SCI_Write('0') ; } SCI_Write(0x0D); SCI_Write(0X0A); } } DEMOK 的小店 http://shop60443799.taobao.com 6 / 9 /*************************************************** ** 函数名称: main ** 功能描述: 主函数 ** 说明: ****************************************************/ void main(void) { /* put your own code here */ PLL_Init(); TIM_Init(); IO_Init(); SCI_Init(); EnableInterrupts; for(;;) { Process(); // _FEED_COP(); /* feeds the dog */ } /* loop forever */ /* please make sure that you never leave main */ } /************************************************** ** 函数名称: 中断处理函数 ** 功能描述: 行中断处理函数 ** 输 入: 无 ** 输 出: 无 ** 说明: ***************************************************/ #pragma CODE_SEG __NEAR_SEG NON_BANKED void interrupt 8 PT0_Interrupt() { TFLG1_C0F=1; Line++; if ( SampleFlag == 0 || LineROW_MAX ) { return; } if(Line<=132) Interval=12; else if(Line>132&&Line<=200) Interval=8; DEMOK 的小店 http://shop60443799.taobao.com 7 / 9 else if(Line>200&&Line<=248) Interval=6; else Interval=4; if(Line%Interval==0) { Buffer[m][0]=PORTB; Buffer[m][n+0]=PORTB; Buffer[m][1]=PORTB; Buffer[m][n+1]=PORTB; Buffer[m][2]=PORTB; //Buffer[m][n+2]=PORTB; Buffer[m][3]=PORTB; Buffer[m][n+3]=PORTB; Buffer[m][4]=PORTB; Buffer[m][n+4]=PORTB; Buffer[m][5]=PORTB; //Buffer[m][n+5]=PORTB; Buffer[m][6]=PORTB; Buffer[m][n+6]=PORTB; Buffer[m][7]=PORTB; Buffer[m][n+7]=PORTB; Buffer[m][8]=PORTB; //Buffer[m][n+8]=PORTB; Buffer[m][9]=PORTB; Buffer[m][n+9]=PORTB; Buffer[m][10]=PORTB; Buffer[m][n+10]=PORTB; Buffer[m][11]=PORTB; //Buffer[m][n+11]=PORTB; Buffer[m][12]=PORTB; Buffer[m][n+12]=PORTB; Buffer[m][13]=PORTB; Buffer[m][n+13]=PORTB; Buffer[m][14]=PORTB; //Buffer[m][n+14]=PORTB; Buffer[m][15]=PORTB; Buffer[m][n+15]=PORTB; Buffer[m][16]=PORTB; Buffer[m][n+16]=PORTB; Buffer[m][17]=PORTB; //Buffer[m][n+17]=PORTB; Buffer[m][18]=PORTB; Buffer[m][n+18]=PORTB; Buffer[m][19]=PORTB; Buffer[m][n+19]=PORTB; Buffer[m][20]=PORTB; //Buffer[m][n+20]=PORTB; Buffer[m][21]=PORTB; Buffer[m][n+21]=PORTB; Buffer[m][22]=PORTB; Buffer[m][n+22]=PORTB; Buffer[m][23]=PORTB; //Buffer[m][n+23]=PORTB; Buffer[m][24]=PORTB; Buffer[m][n+24]=PORTB; Buffer[m][25]=PORTB; Buffer[m][n+25]=PORTB; Buffer[m][26]=PORTB; //Buffer[m][n+26]=PORTB; Buffer[m][27]=PORTB; Buffer[m][n+27]=PORTB; Buffer[m][28]=PORTB; Buffer[m][n+28]=PORTB; Buffer[m][29]=PORTB; //Buffer[m][n+29]=PORTB; Buffer[m][30]=PORTB; Buffer[m][n+30]=PORTB; Buffer[m][31]=PORTB; Buffer[m][n+31]=PORTB; Buffer[m][32]=PORTB; //Buffer[m][n+32]=PORTB; Buffer[m][33]=PORTB; Buffer[m][n+33]=PORTB; Buffer[m][34]=PORTB; Buffer[m][n+34]=PORTB; Buffer[m][35]=PORTB; //Buffer[m][n+35]=PORTB; Buffer[m][36]=PORTB; Buffer[m][n+36]=PORTB; Buffer[m][37]=PORTB; Buffer[m][n+37]=PORTB; Buffer[m][38]=PORTB; //Buffer[m][n+38]=PORTB; DEMOK 的小店 http://shop60443799.taobao.com 8 / 9 Buffer[m][39]=PORTB; Buffer[m][n+39]=PORTB; Buffer[m][40]=PORTB; Buffer[m][n+40]=PORTB; Buffer[m][41]=PORTB; //Buffer[m][n+41]=PORTB; Buffer[m][42]=PORTB; Buffer[m][n+42]=PORTB; Buffer[m][43]=PORTB; Buffer[m][n+43]=PORTB; Buffer[m][44]=PORTB; //Buffer[m][n+44]=PORTB; Buffer[m][45]=PORTB; Buffer[m][n+45]=PORTB; Buffer[m][46]=PORTB; Buffer[m][n+46]=PORTB; Buffer[m][47]=PORTB; //Buffer[m][n+47]=PORTB; Buffer[m][48]=PORTB; Buffer[m][n+48]=PORTB; Buffer[m][49]=PORTB; Buffer[m][n+49]=PORTB; Buffer[m][50]=PORTB; //Buffer[m][n+50]=PORTB; Buffer[m][51]=PORTB; Buffer[m][n+51]=PORTB; Buffer[m][52]=PORTB; Buffer[m][n+52]=PORTB; Buffer[m][53]=PORTB; //Buffer[m][n+53]=PORTB; Buffer[m][54]=PORTB; Buffer[m][n+54]=PORTB; Buffer[m][55]=PORTB; Buffer[m][n+55]=PORTB; Buffer[m][56]=PORTB; //Buffer[m][n+56]=PORTB; Buffer[m][57]=PORTB; Buffer[m][n+57]=PORTB; Buffer[m][58]=PORTB; Buffer[m][n+58]=PORTB; Buffer[m][59]=PORTB; //Buffer[m][n+59]=PORTB; Buffer[m][60]=PORTB; Buffer[m][n+60]=PORTB; Buffer[m][61]=PORTB; Buffer[m][n+61]=PORTB; Buffer[m][62]=PORTB; //Buffer[m][n+62]=PORTB; Buffer[m][63]=PORTB; Buffer[m][n+63]=PORTB; Buffer[m][64]=PORTB; Buffer[m][n+64]=PORTB; Buffer[m][65]=PORTB; //Buffer[m][n+65]=PORTB; Buffer[m][66]=PORTB; Buffer[m][n+66]=PORTB; Buffer[m][67]=PORTB; Buffer[m][n+67]=PORTB; Buffer[m][68]=PORTB; //Buffer[m][n+68]=PORTB; Buffer[m][69]=PORTB; Buffer[m][n+69]=PORTB; Buffer[m][70]=PORTB; Buffer[m][n+70]=PORTB; Buffer[m][71]=PORTB; //Buffer[m][n+71]=PORTB; Buffer[m][72]=PORTB; Buffer[m][n+72]=PORTB; Buffer[m][73]=PORTB; Buffer[m][n+73]=PORTB; Buffer[m][74]=PORTB; //Buffer[m][n+74]=PORTB; Buffer[m][75]=PORTB; Buffer[m][n+75]=PORTB; Buffer[m][76]=PORTB; Buffer[m][n+76]=PORTB; Buffer[m][77]=PORTB; //Buffer[m][n+77]=PORTB; Buffer[m][78]=PORTB; Buffer[m][n+78]=PORTB; Buffer[m][79]=PORTB; Buffer[m][n+79]=PORTB; Buffer[m][80]=PORTB; //Buffer[m][n+80]=PORTB; Buffer[m][81]=PORTB; Buffer[m][n+81]=PORTB; DEMOK 的小店 http://shop60443799.taobao.com 9 / 9 Buffer[m][82]=PORTB; Buffer[m][n+82]=PORTB; Buffer[m][83]=PORTB; //Buffer[m][n+83]=PORTB; Buffer[m][84]=PORTB; Buffer[m][n+84]=PORTB; /*Buffer[m][85]=PORTB; Buffer[m][n+85]=PORTB;*/ m++; } Image_Binaryzation(m); } /************************************************** ** 函数名称: 中断处理函数 ** 功能描述: 场中断处理函数 ** 输 入: 无 ** 输 出: 无 ** 说明: ***************************************************/ #pragma CODE_SEG __NEAR_SEG NON_BANKED void interrupt 9 PT1_Interrupt() { TFLG1_C1F=1; TFLG1_C0F=1; m=0; Line=0; SampleFlag=1; } //----------------------------------------------我是专业的分割线-----------------------------------------------// DEMOK 小铺:提供摄像头、最小系统、下载器、电机驱动板 供应 OV6620、OV7620 等数字摄像头,价格从优,提供图像处理技术支持 http://shop60443799.taobao.com/ //-----------------------------------------------感谢大家的支持--------------------------------------------------//
/
本文档为【【DEMOK原创】智能车数字摄像头使用详解(1)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索