摘要:为了提高机器视觉中照明系统的质量,获得优质稳定的图像,设计了一种基于USB通信协议的LED光源控制器。该控制器采用基于ARMCortex-M3内核的STM32F107作为微控制器,应用PWM调光技术以避免模拟调光中的色偏现象,并实现了普通、频闪、外部触发三种照明模式。在机器视觉检测系统的应用表明该控制器不但能够降低成本,而且能够实现PWM数字化精确调光,改善所提取图像质量。
关键词:STM32 USB2.0协议 光源控制器 机器视觉 PWM调光
在现代自动化生产过程中,机器视觉系统广泛应用于工况监视、成品检验和质量控制等领域。机器视觉系统主要由照明系统、镜头、摄像机、图像采集卡和图像处理系统组成,通过光源、镜头及CCD等成像器件匹配图像采集及处理系统来进行产品的检查、识别等,此技术可大大减轻人工目检产品质量的负担,有效地提高检测效率,并有利于生产管理。照明系统是机器视觉系统的重要组成部分,是保证采集图像质量和应用效果的关键,而光源控制器是照明系统的核心,其主要作用就是针对具体应用场合提供不同的照明亮度和照明方式,从而提高照明光源的品质,获得高质量的图像。当前国内多数厂商生产的光源控制器是手动调节或通过RS232与PC机通信进行调节,使用较为不方便,效率低,且成本较高。本文设计了一种新型光源控制器,该控制器以ST公司基于ARMCortex-M3内核的STM32微控制器STM32F107VCT6[1]为核心,通过即插即用,传输速度高[2]的USB接口与PC机进行通信,实现PC端应用软件对光源控制器参数的实时设定。利用STM32片内定时器实现PWM数字调光,以及脉冲频率,占空比的大范围调节,并通过定时器之间的协同工作保证精确定时。此外,该控制器实现了三种照明模式,分别是普通模式、频闪模式和外部触发模式。这种设计能够灵活适应机器视觉检测系统在不同场合应用中的需要。
1总体方案设计
简单地说,光源控制器的主要功能是接收PC主机发来的预先定义好的各种命令和设置参数,经过主控制器处理,然后通过驱动电路控制LED光源按照设定实现数字PWM调光。
光源控制器按照体系架构可以划分为软件部分和硬件部分,其中软件部分又可以分为PC端用户界面应用程序,USB驱动程序,控制器硬件固件。硬件部分可以分为主控模块和LED驱动模块。主控模块主要负责完成与PC机的通信,命令响应,以及事物管理,它是整个控制器的核心部分。LED驱动模块主要为LED光源提供合适的驱动方式。LED光源常用的驱动方式有电感式驱动和电荷泵式驱动,其中电感式驱动电路适合驱动若干个相串联的LED。LED亮度控制方法可分为模拟调光和数字PWM调光[3]两种。模拟调光通过改变LED电流来调整亮度。其缺点在于LED会随着正向电流改变而产生色偏现象,无法满足精度的要求。PWM调光通过开启和关闭LED来改变正向电流导通时间以达到亮度调整效果。由于LED都是以恒定的电流导通,因此不会出现模拟调光技术的色偏移问题。故本设计采用电感式驱动、PWM恒流调光。光源控制器内部结构如图1所示。
本光源控制器实现了三种照明模式,分别是普通模式、频闪模式和外部触发模式。其中普通模式可以单独设置每个通道的亮度值,适用于持续照明场合;外部触发模式可以指定触发时间,即每次触发信号来后,LED光源持续点亮的时间,适用于同机器视觉系统其它部分配合使用场合;频闪模式用于单独设置每个通道的亮度值,频闪时间,频闪周期和频闪总时间,能够大大延长光源的寿命。
2控制器硬件实现
本光源控制器采用STM32F107VCT6作为主控制器。STM32系列微控制器基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCor-tex-M3内核。本设计所选用的STM32F107VCT6属于STM32互联型系列,具有72MHz的时钟频率,片上外设极为丰富。
在光源控制器中,MCU的定时器工作于PWM模式,四个捕获比较通道分别产生PWM信号,经过光源驱动模块后,可以分别用于控制四个不同的LED光源,实现PWM恒流调光。
通过利用Cortex-M3内核中的嵌套向量中断控制器以及外部中断/事件控制器,每个通用IO都可以方便地触发中断。本控制器设计了四路外部光电隔离触发通道,提高了系统可靠性。外部触发脉冲信号可以手动输入,也可以由机器视觉系统中其他部分输入,从而和相机等其他部件协同工作。
USB具有即插即用,传输速度快,抗干扰能力强,兼容性良好等优点,故本控制器利用STM32F107VCT6内置的USB-OTG全速设备[4]同PC机进行数据通信,并进行了严格的测试,符合工业用控制器要求。硬件电路框图如图2所示。
3系统软件实现
本设计中使用Keil公司针对ARM硬件平台推出的RealViewMDK对STM32进行软件开发[5]。
3.1用户界面应用程序
用户界面应用程序将对光源的设定参数按照数据帧格式封装成数据包,然后通过全局唯一标识符GUID访问对应的设备驱动程序,并调用windows系统提供的API函数:WriteFile,ReadFile,CreateFile等同设备驱动程序进行通信[6],最终将数据传递给控制器固件程序处理。
3.2USB驱动程序
本光源控制器为海量存储设备类,采用USB协议中的Bulk-Only传输协议,设置端点1为IN端点,端点2为OUT端点。
USB驱动程序基于WDM的驱动程序模型,主要包括功能驱动程序和总线驱动程序。总线驱动程序由操作系统提供,负责管理硬件与计算机的连接,因此只有功能驱动程序需要根据不同的应用目的进行开发。
DriverEntry是整个设备驱动程序的入口函数,完成一些初始化工作并注册IRP的派遣函数。当应用程序在和驱动程序通信时,会发出IO请求。操作系统将IO请求转化为相应的IRP,即输入输出请求包。不同类型的IRP被传递到不同的派遣函数内,比如应用程序调用CreatFile创建设备时,将派遣到BulkUsb_DispatchCreate()例程[7]。这些调度例程将IRP进行相应处理后,传递给总线驱动。各派遣函数的调用关系如图3所示。
3.3控制器固件程序
固件程序是烧写到STM32中的下位机程序。目前大多数优秀的实时操作系统都需要商用授权费,所以固件程序设计为前后台系统。本控制器充分利用ST免费提供的标准外设固件库和USB设备固件库,大大缩短了设计周期。整个固件程序的流程如图4所示。
固件程序对接收到的上位机指令进行解析,然后根据解析的结果操作相应的片上外设。
硬件复位后,首先产生复位中断,然后在中断向量表中取出复位中断向量,再跳入其所指向的中断响应函数。在复位中断响应函数中先初始化系统然后调用main函数。在main函数中首先对用到的各个片上外设进行配置和初始化,包括各个外设的时钟配置,GPIO配置,中断配置,独立型看门狗的配置,定时器的配置,以及USB的配置。硬件平台配置完成后,进入死循环中,不断复位独立型看门狗计数器,等待中断打断它的运行,这部分属于前台程序。
当上位机通过USB发送数据到端点EP2后,产生中断,程序进入中断服务子程序EP2_OUT_Call-back中。在中断服务子程序中,中断响应时间应尽可能短,只是调用相关函数对接收到的数据按照自定义的数据格式进行解析,然后根据解析到的结果分发到相关子程序中做进一步的处理,这部分属于后台程序。子程序运行完后,重新回到前台程序中,继续等待新的中断。
TIM1是实现光源控制器设计功能的核心之一,工作在PWM模式下,同时它是16位的定时器,因此能够产生高分辨率的PWM信号输出给led驱动模块,从而实现数字化调光。
PWM信号的频率由定时器的时钟频率和TIM1的16位自动重装载寄存器(TIM_ARR)共同确定。
fpwm=fTIM_clock/(TIM_ARR+1)(1)
占空比由TIM1的16位捕获比较寄存器(TIM_CCR)和TIM_ARR共同确定。
fduty=TIM_CCR/(TIM_ARR+1)×100%(2)
同时还可以通过设置控制寄存器的相应位来设置计数器的计数方向,时钟分频数等,以产生所需要的PWM波形。
在频闪模式和外部触发模式中均需要利用其余的定时器实现定时功能,TIM2,TIM3,TIM4,TIM5分别用于控制光源控制器的四个通道。根据上位机选择的通道号,时间参数,将相应的定时器配置为输出比较模式,可以实现各个时间参数的精确控制。
4实验结果
本光源控制器已应用于干电池质量检测系统中,由于电池的运动速度较快,为了获得清晰的图像必须把相机的曝光时间设为较小的值,需要很大的光照度,且需要与检测系统其它部件同步工作。控制器采用外部触发模式,将相机的对比度设为300,曝光时间设置为0.192ms,光源的触发点亮时间设为1ms,不同亮度值下的实验结果如图5所示,其中图a)为采用常规光源控制器在最大亮度下拍摄的图像,图b)、c)、d)为采用本光源控制器在亮度分别为20%,60%,100%下拍摄的图像。
通过对实验结果的分析表明,与其他常规的光源控制器相比,通过调节本光源控制器的设定参数,能够显著改善曝光情况,获得更为清晰稳定的图像,达到了预期设计目标。
5结束语
本文针对当前LED光源控制器普遍采用手动调整或采用PC通过RS232接口进行通信,使用不方便、效率低,成本较高的不足,设计了一种采用STM32F107VCT6为核心,采用USB进实时数据传输的光源控制器。该控制器通过PWM对光源进行精确的数字调节,同时具有多种功能和控制模式,能够灵活应用于机器视觉系统的各种工作场合。在干电池检测系统中的应用表明,该光源控制器能够很好地配合机器视觉系统中其他部分协同工作,调整效果稳定,效率高,成本低,具有较高的实际应用价值。