基于FPGA的步进电机驱动及自动聚焦的实现
2008-11-18
作者:张文爱,李逢磊,程永强
摘 要:基于Xilinx公司的Spartan-IIE系列FPGA XC2S300E-6-PQ208C完成了一种聚焦马达驱动及自动聚焦" title="自动聚焦" target="_blank">自动聚焦的完整设计。该设计接收CCD图像传感器套件输出的图像信号,采用一种改进的灰度差分" title="差分" target="_blank">差分法作为聚焦评价函数,即将一场图像的所有像素的亮度值与周围像素的亮度值差的绝对值的和作为聚焦评价函数,根据相邻同场的聚焦评价函数的比较结果,配合相应的搜索策略来控制步进电机的转动方向,实现图像的自动聚焦。实际实现的聚焦效果优于改进前的聚焦算法。
关键词:FPGA;步进电机;自动聚焦;聚焦评价函数
自动聚焦是现代光学成像系统必不可少的关键技术。随着科技的迅速发展,数字成像系统的自动聚焦问题受到人们的普遍关注,已广泛应用于数码相机、高分辨率监控摄像机和数字视频展台等产品,且其产品有着广泛的应用领域,如教育、银行、煤矿、交通、医疗等监控领域[1]。
目前自动聚焦技术相对比较成熟,自动聚焦芯片种类也比较多,但其都是基于DSP实现的,基于FPGA的自动聚焦芯片还没有出现。本文采用一种改进的灰度差分法作为焦距评价函数,用FPGA实现自动聚焦功能。
目前市面上聚焦马达步进电机的控制多是以单片机或DSP加步进电机驱动器的方式实现。本文采用FPGA直接输出适用于步进电机的角位移信号驱动聚焦马达,这样可以在一片芯片上完成自动聚焦的全部控制。该方案有很强的价格优势,且利于系统的功能扩展,对于提高系统的集成度和稳定性、减小产品的体积和成本很有意义。
1 聚焦控制系统
聚焦控制系统硬件框图如图1所示。
图像传感器输出像素时钟、行场参考信号和图像亮度信号到FPGA,FPGA在输入像素时钟的同步下,通过对输入图像亮度信号的处理,采用一种改进的灰度差分法作为聚焦评价函数,判断出相邻两场的聚焦评价函数值的比较结果,然后根据一定的搜索策略来控制步进电机转动,从而实现自动聚焦。
系统设计采用模块化设计原则,按照现代EDA工程常用的“自顶向下”的设计思想,进行功能分离并按层次设计,用VHDL语言实现每个模块的功能[2]。该设计主要由自动聚焦算法模块、搜索策略模块、步进电机驱动模块组成。
2 自动聚焦算法
2.1 一种改进的自动聚焦算法
判断图像是否聚焦与图像的高频成分有关,当完全聚焦时,图像清晰,包含边缘信息的高频分量最多。通常,判断图像聚焦与否是通过焦距评价函数衡量的。常用的焦距评价函数有以下几种:高频分量法、平滑法、阈值积分法、灰度差分法、拉普拉斯像能函数等[3]。
灰度差分法是利用图像的相邻像素(左侧及上侧像素)差的绝对值之和作为焦距评价函数,即:
其中,f(x,y)表示第x行、第y列像素的亮度值,像素的相对位置如图2所示。实验中对于亮度比较均匀的图像,其聚焦效果不理想,为此本文提出一种改进的灰度差分法作为焦距评价函数。其算法描述如下:
式(2)中选取了邻近的四个像素(左侧、左上侧、上侧及右上侧像素)作比较,增大了焦距评价函数的绝对值,搜索曲线尖锐,容易找到最佳位置。图3是以简单的文本图像(一张白纸上有几个字)为例,在聚焦点附近测得20组聚焦值绘制的聚焦评价函数曲线。
可以看出,改进算法后在聚焦点附近曲线尖锐,与相邻两个聚焦位置的亮度差更大。通过实验,在同样的搜索策略下,改进后的算法比改进前更能适用于多种画面,尤其是亮度比较均匀的图像,有着更高的精确性。
2.2 搜索策略算法
聚焦评价函数F与镜头位置关系曲线如图4所示。当聚焦评价函数值F最大时,图像最清晰,所以通过相邻两场的聚焦评价函数值的比较,即可判断聚焦马达的驱动方向[4]。
系统的搜索策略算法设计中,电机驱动镜头从初始位置出发先正转一步,并根据聚焦算法模块的输出OUT进行判决。当OUT=1,表示后一场图像比前一场清楚,搜索策略模块则驱动步进电机带动镜头向前走一步,继续比较下一个位置前后两场图像的清晰度;若OUT输出仍为1,则继续向前移动,直到OUT输出为0,则搜索策略模块驱动步进电机向反方向倒退一步,此时镜头所处的位置为图像最清楚的地方,即完成自动聚焦。
3 自动聚焦算法的硬件实现
3.1 改进的聚焦算法的FPGA设计
该模块的FPGA设计内部结构如图5所示。
RAM的大小为1 024×8bit,可以存放一行800个数据。读写选择模块将一帧图像的第一行数据写入RAM1,第二行数据写入RAM2,第三行数据写入RAM3,第四行数据写入RAM4,同时将RAM1、RAM2、RAM3的数据读出到聚焦算法计算模块中;第五行数据则写入RAM1,同时将RAM2、RAM3、RAM4的数据读出。依此循环。聚焦算法计算模块将每次接收的数据根据聚焦算法进行计算,当前这帧计算的结果与前一帧的计算值相比较,将比较结果输出到搜索策略模块。若当前图像的聚焦函数值大于前相同场的聚焦函数值,可表明当前图像比前面相同场清楚,则输出结果OUT为1,反之相反。
3.2 步进电机驱动的实现
系统选用两相双极性步进电机,其励磁" title="励磁" target="_blank">励磁方式有全部励磁和半步励磁两种方式。其中全步励磁又分为一相励磁和二相励磁。半步励磁又称为一二相励磁。本文中变焦电机采用的是二相励磁方式,步距角18°,步长0.02mm。其励磁方式如表1所示,其中A、-A分别代表A相绕组正端和负端功率桥控制信号,B、-B分别代表B相绕组正端和负端功率桥控制信号[5]。
表1中任意一个状态间的变化,步进电机都会转动一个步距角,即移动一步。所以可以通过发状态间变化的个数来精确地控制步进电机移动的步数。而且按照如表1所示的脉冲顺序从左向右变化实现步进电机的反转,反之实现正转。
据此可以在FPGA内部设计四个一步模块,分别实现1-2、2-3、3-4、4-1四个状态间的变化,即实现步进电机旋转最基本的四步。通过使能模块对四个一步模块顺序进行使能,即可实现步进电机的正转和反转。该模块的内部结构如图6所示。
此外由于FPGA输出脉冲信号的驱动电平和电流与步进电机的驱动要求不匹配,因此FPGA输出的脉冲信号需要先经过放大再加载到步进电机上。
具体的放大电路设计如图7所示。由NPN、PNP三极管组成推挽电路实现对输入信号电流的放大。其中小写字母为FPGA的输出信号,大写字母为经过放大后输出到步进电机的驱动信号。
本文所述功能采用VHDL描述,并在Xilinx公司Spartan2E系列FPGA XC2S300E上实现。另外,通过示波器测得步进电机驱动模块的驱动波形如图8所示。由上至下输出的四路信号分别对应表1中的A+、A-、B+、B-,其输出励磁方式也与表1相吻合。
本文实现的各功能模块既可应用于本系统中,也可作为独立的、拥有自主知识产权的IP Core应用于其他系统中。
参考文献
[1] 任四刚,谢利利.自动聚焦自图像测量中的应用[J].重庆邮电学院学报,2002,14(3).
[2] 徐欣,于红旗.基于FPGA的嵌入式系统设计[M].北京:机械工业出版社,2005.
[3] 李奇,冯华君.数字图像清晰度评价函数研究[J].光子学报,2002,31(6):736-738.
[4] 刘义鹏.显微镜自动对焦系统设计与应用.杭州:浙江大学硕士学位论文,2005.
[5] 刘宝廷,程树康.步进电机及其驱动控制系统[M].哈尔滨:哈尔滨工业大学出版社,2003.
[6] E-Ho Lee,Kum,Byung-Deok Nam,et al.Implementation of passive automatic focusing algorithm for digital still camera.IEEE Trans.On Consumer Electronics,2006.