基于ARM9的便携式内窥镜系统设计与实现
1921年,以色列人George S.Crampton在美国加利福尼亚研制出世界上第一台工业内窥镜,用来检测蒸汽涡轮转子的内部裂缝。从此,内窥技术逐渐被工业界所重视,并得到不断发展。1990年以来,工业内窥镜经历了第一代硬杆式、第二代软管式和第三代电子镜式的逐步发展过程,内窥技术也逐步发展成为一门崭新的科学技术,成为远距离可视监测RVI(Remote Visual Inspection)技术的重要分支。
目前,工业内窥镜广泛应用于工业制造和维修领域。它延长了人眼的距离,拓宽了人类观察的视野,可以在不拆除或不破坏机器设备的前提下清晰准确地观察内部人眼无法到达的位置,实现机器设备或零件内部的无损检测,尽可能节省维修时间,这在武器装备外场检修应用中相当重要。为了实现内窥镜系统的小型化和便携性,本文设计实现了一种基于ARM9的便携式內窥镜系统。
1 ARM嵌入式系统及其摄像头接口
嵌入式系统是以应用为中心,以计算机技术为基础,且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。通常由嵌入式CPU、外围硬件设备、嵌入式操作系统及应用程序四部分组成,用于实现对其他设备的控制、监视或管理等功能。该系统是将先进的计算机技术、半导体技术和电子技术结合后应用到各个具体行业的产物。IP 级、芯片级和模块级是嵌入式系统的三种主要的体系结构形式。其中,模块级的形式就是把已成熟的X86处理器构成的计算机系统模块嵌入到应用系统中, 充分利用目前常用的PC架构的通用性和便利性。
SAMSUNG S3C2440嵌入式微处理器的内核采用ARM公司的ARM920T处理器核。它是目前世界上主频最快的嵌入式移动CPU之一,内核电压为1.3V,采用16/32位ARM920T RISC核心,提供的接口支持数码摄像头、TFT/STN液晶屏、USB、HOST/DEVICE、SD/MMC/SDIO存储卡以及触摸屏等。
S3C2440嵌入式微处理器的摄像头接口(CAMIF)支持ITU-RBT.601/656 YCbCr8比特标准的图像数据输入,最大可采样4 096×4 096像素的图像。摄像头接口可以有两种模式与DMA控制器进行数据传输:一种是P端口模式,把从摄像头接口采样到的图像数据转为RGB数据,并在DMA控制下传输到SDRAM(一般这种模式用来提供图像预览功能);另一种是C端口模式,把图像数据按照YCbCr4:2:0或4:2:2的格式传输到SDRAM(这种模式主要为MPEG4、H.263等编码器提供图像数据的输入)。上述两种工作模式都允许设置一个剪辑窗口,只有进入这个窗口的图像数据才能够传输到SDRAM。摄像头工作模块如图1所示。
2 基于ARM9的便携式内窥镜系统设计
2.1 总体框架设计
工业内窥镜系统主要包括CMOS(CCD)传感器、传导纤维、导光束、光源、电源和监视器等,结构如图2所示。由于监视器和冷光源体积及其对电源的要求导致了整个系统体积大、不便携带,且不能将图像按要求保存,不便于后期缺陷信号处理。基于ARM9的便携式内窥镜系统在工业内窥镜检测系统的基础上,引入嵌入式系统,充分发挥嵌入式系统体积小、输入电压低、触摸屏显示、利用编程可以实现图像处理和存储的优点,很好地满足了检测系统对微型化、易携带的要求。其结构如图3所示。
2.2 便携式内窥镜系统组成
该系统装置分为照明系统、CMOS 摄像头、嵌入式系统三部分。所设计的传感器探头结构如图4所示。
2.2.1 照明系统
一般内窥镜均采用独立冷光源,并由光纤把光线传至检查位置上。为达到较好的照明效果,对光源和光纤的要求都很高。由于基于ARM9嵌入式系统及对体积的要求,不能再按照以前采用独立冷光源。在便携式内窥镜系统设计过程中,巧妙应用一种功率较低的高亮度发光二极管(LED)进行照明,以解决光源问题。该高亮度发光二极管工作电压3.3V,光色白色,亮度很强,与电位器相连,实现亮度可调,端部上下各固定一只,保证视场内光照均匀。试验证明完全可行。
2.2.2 CMOS摄像头
便携式内窥镜系统所采用的摄像头为OmniVision公司生产的OV7660。该类型CMOS sensor目前广泛应用于便携式手持设备。其特点是:灵敏度高,低电压工作,标准串行摄像头控制总线(SCCB)控制,可输出窗口尺寸可调的UXGA/SVGA/VGA/QVGA等不同像素的图像、且图像格式可以是原始RGB/RGB(4:2:2)/YUV(4:2:2)/YCbCr(4:2:2),图像处理可编程等。
嵌入式开发没有通用的驱动程序。具体针对OV7660,需要进行相应驱动设计。对摄像头进行驱动程序设计,除了实现设备的注册注销外, 按照功能还应分为实现摄像头打开模块、摄像头控制模块(初始化在该模块中实现)和摄像头关闭模块。在WinCE系统启动的过程中即调用摄像头驱动程序,实现摄像头与2440摄像头接口参数设置及一系列初始化。下面就驱动的各个模块做具体介绍。
(1)摄像头打开模块
在应用程序中,通过调用CreateFile()打开CIS1口。
hCam=CreateFile(TEXT("CIS1:"),GENERIC_WRITE |
GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
if(hCam==INVALID_HANDLE_VALUE)
{
AfxMessageBox(L"无法打开!");
}
else
{
AfxMessageBox(L"摄像头已打开!");
}
(2)摄像头控制模块
调用Cam_Init()实现摄像头接口以及摄像头模块的初始化,为本驱动程序的主要部分。在正确执行这个函数后,摄像头就可以正常工作,开始采集数据。
摄像头接口的初始化包括五个方面:①设置寄存器CIGCTRL软件重启;②设置寄存器CISRCFMT确定输入源格式;③设置寄存器CIWDOFST溢出标识位复位并使能窗口偏移;④设置寄存器CIGCTRL,反转CAMVSYNC极性与摄像头保持一致;⑤设置YCBCR开始地址寄存器。
Cam_Init()函数如下:
BOOL Cam_Init()
{
CamGpioInit();//camera IO初始化
CAM_IF_Reset();//camera接口初始化
CamClockOn(TRUE);//设置camera时钟
Camera_Module_Reset();//camera模块重启
Camera_Initialize();//通过I2C总线设置
//camera模块的寄存器
s2440IOP->rGPGCON &=~(0x3<<24);
s2440IOP->rGPGCON |=(0x1<<24);
if(image_size==1)
{
CamInit(QCIF_XSIZE,QCIF_YSIZE,QCIF_XSIZE,
QCIF_YSIZE,0,0,COPIFRAMEBUFFER_B,
COPIFRAMEBUFFER_A);
//设置输出图像格式、起始位置
}
else
{
CamInit(CIF_XSIZE,CIF_YSIZE,QCIF_XSIZE,
QCIF_YSIZE,0,0,COPIFRAMEBUFFER_B,
COPIFRAMEBUFFER_A);
}
RETAILMSG(1,(_T("CamInit().. donern")));
return TRUE;
}
在摄像头驱动设计中,对OV7660寄存器组的设置至关重要。通过函数void Wr_CamIIC(U32 slvAddr,U32 addr,U8 data)对OV7660寄存器组进行写操作,其中slvAddr为OV公司的SCCB总线写地址(默认值为0x42),addr为寄存器偏移地址,data为设置值。具体参数设置请参考OmniVision公司提供的OV7660 Setting文献。
2.2.3 嵌入式系统模块
嵌入式系统模块预装系统为Windows CE.net 4.2,驱动程序形式为流接口驱动,基本框架是dll动态链接库,使用Embedded Visual C++ 4.0或者Platform Builder 4.2编译。推荐使用EVC(Embedded Visual C++),因为EVC速度比较快。在便携式内窥镜系统中该模块主要功能为接收camera图像信号,并通过触摸屏同步显示图像。为实现该功能,要利用EVC编程,通过USB同步下载至嵌入式系统,实现对视频图像信号的处理,主要包括图像处理去噪、特征提取、缺陷尺寸估计、腐蚀缺陷成像等。其结构示意图如图5。
3 试验验证
用本系统装置检测零件内部孔径为φ5.2mm的孔,在孔的边缘有一微小裂纹。图6为图像信号在采集到嵌入式系统后未经过图像处理的视频截图,图7为采集到嵌入式系统后经过图像处理的视频截图。
由图7可见,处理后的图像清晰,裂纹明显,较好地实现了原定目标。试验证明该系统完全可以用于仪器装备内表面微小缺陷的检测判定。
本文主要针对目前通用工业内窥镜存在的体积大、重量重、不便于外场检测的缺点,在基于ARM9嵌入式系统的基础上,设计实现了便携式内窥镜系统。系统在检测零件上做了试验,结果表明该装置系统在彻底解决通用工业内窥镜缺点的基础上,还具有高清晰、高保真的特点,完全可以用于仪器装备内表面微小缺陷的检测判定。
- 便携式应用中的有源电源管理(11-07)
- 基于MSP430的便携式心率计的设计(03-28)
- 基于BQ27210的便携设备电池监测系统设计(03-23)
- 宏芯科技选用MIPS科技处理器IP开发新一代多媒体IC(03-03)
- 便携式设备的EMC和ESD设计(09-08)
- 便携式设备用超低功耗编码解码器(02-23)