MicrocomputerApplicationsVol.28,No.1,2012开发应用微型电脑应用2012年第28卷第1期·51·文章编号:1007-757X(2012)1-0051-04机器视觉中的LED光源控制器摘要:LEDAT89S51LED12A/DMAX19712D/AMAX532,LED关键词:中图分类号:TP311文献标志码:A0引言本课题来源于一家医疗器械厂家,研究的大课题是:药用安瓿瓶质量在线检测系统。安瓿是药品生产中的重要制剂之一,在临床医学上有着广泛的应用。但由于生产工艺或生产环境等方面的原因,安瓿产品中可能含有玻璃碎屑、纤维、毛发、蚊虫、药渣等异物,如不能及时发现,将会对使用者造成了极大的危害。根据《中国药典》规定,安瓿生产过程中需要对安瓿中的可见异物进行检测[1]。目前,国内的普遍采用暗室人工灯检,检测结果主观因数很大、效率低、精度低、检测范围窄;外加工作强度大、容易疲劳等因数,一直不能达到一个良好的检测效果。随着计算机及图像处理技术的不断发展,人类开始讲计算机的高速度、高精度、高可靠性、结果的可重复性与人类的智能化抽象能力相结合,形成了一门新的科学——机器视觉[2]。1系统的总体设计方案我们一般使用的LED灯的工作电流一般只有十几毫安到几十毫安,电压为十几伏;然而在检测一些液体产品(尤其是医药产品)是否含有杂质的时候,我们对LED背光源要求特别高。因为在拍摄图片的时候要求亮度特别亮,它的工作电流必须要达到数3安培或者更大。这样LED灯在摄像机拍摄瞬间才具有足够的亮度,拍摄到的照片效果才好,从而利于机器对药品合格与否做出正确的判断。现在的摄像机的拍摄速度都是非常快的,可以达到几十幅甚至几百幅相片每秒。所以我们要求光源的反应精度也能跟上摄像机的拍摄速度,并且在拍摄的瞬间亮度足够量,以免拍摄得到的照片出现灰度,影响计算机对药品合格与否的误判,造成不必要的损失和医疗是事故。由于亮度上的要求和电流在频闪的过程中要求达到3A左右的电流。所以我们选用了大功率的LED灯,这样才能保证我们的拍摄效果。根据以上要求,我们提出了基于单片机控制的恒流源控制的光源控制器方案。主要由单片机系统、A/D转换部分、D/A转换部分、恒流源部分、电源部分、单稳态部分、短路保护部分、过流保护部分、负载、显示以及报警部分组成。它的系统结构框图如图1所示。图1系统结构框图该控制器的工作原理为:以恒流源作为负载的驱动电路,通过D/A转换得到基准电压,以便得到我们预期差不多大小的电流,A/D转换部分采集电路的实际电流并反馈回单片机中并显示出来,然后通过键盘对电流进行微调,直至得到相对应的电流。单稳态部分电路主要用于实现控制器的频闪与常量的控制,并达到硬件保护的功能。2主要硬件设计2.1恒流源模块恒流源作为负载(LED背光源)的驱动电源。不选择使用恒压源而使用恒流源驱动的好处就是恒流源在整个系统工作过程中电流不会改变。因此负载功率很稳定,不会出现大跳动,这对整个系统的稳定和精度起到了很大的作用。即为恒流源的电路图,如图2所示:——————————————作者简介:林兴旺(1987-),四川大学制造科学与工程系,硕士研究生,研究方向:机械电子工程,成都,610065任德均(1972-),副教授,研究方向:实时嵌入式控制系统、机电一体化技术、智能信息处理及智能控制,成都,610065MicrocomputerApplicationsVol.28,No.1,2012开发应用微型电脑应用2012年第28卷第1期·52·图2双场效应管恒流源从图中我们可以看出此恒流源有两个相同的电路部分并联组成,主要是由于本系统中要求的电流比较大,正常工作大概要求在3A左右,在某些特殊情况下甚至要求电流达到5A左右。由于单个场效应管所能承担的额定电流和功率有限,且发热情况比较严重,这很容易会烧化场效应管。它主要由运算放大器、电阻、电容和场效应管组成。此电路中,SR不能取得太大也不能取得过小,太大的话,在SR两端的压降就越大,那么用于驱动负载的有效电压就会越小。运算放大器的输出电流一般都不大,都是作为反馈之路引入的。所以SR过小的话,这样的话会使环增益减小。所以我们的电路采用两个运算放大器。2A将采样电阻SR反馈的电压进行放大后反馈给1A的反相输入端。这样就解决了SR过小的问题。上面我们提到运放放大器的输出电流很小,所以我们在电路中加上功率场效应管,通过它的电压-电流机制,从而获得较大的电流,而不受运算放大器的限制。由于在电源模块中我们会对电源进行滤波,所以以上的电容我们也可以不要。下面我们就计算一下恒流源得到的电流。图中单边电路:rV-----------基准电压0I-----------输出的恒定电流1A,2A---集成运放放大器SR----------采样电阻恒流源电路中,运算放大器工作在线性区[3]。则0u和(uu)是线性关系,即uuAuu00(1)其中:0u---------运算放大器输出端u---------运算放大器同相输入端u---------运算放大器反相输入端0uA--------开环电压放大倍数运算放大器是一个线性放大元件。由于运算放大器的开环电压放大倍数0uA很高,即使输入毫伏级以下的信号,也足以使输入电压饱和,其饱和电压值达到接近正电源电压或负电源的电压值;当然,由于干扰,使工作难以稳定。所以本电路也引入了深度负反馈。运算放大器工作在线性区时,其分析依据有两条:⑴由于运算放大器的差模输入电阻值趋于无穷大,故我们可以认为两个输入端的电流为零。⑵由于运算放大器的开环电压放大倍数也趋于无穷大,而输出电压是一个有限的数值,故由上面的式子可知,000uAuuu式(2)即uu式(3)由以上关系我们就可以计算出此恒流源的电流、基准电压和电阻之间的关系,我们很容易得出:SRIu00(4)rfVV(5)2210RRRVVf(6)由上面三个式子,解得2120RRRRVISr(7)由此整个恒流源的电流等于单个场效应管时的两倍,为21202RRRRVISr。由此我们可以看出这个恒流源主要是以基准电压rV控制的恒流源。因为电阻1R和2R在整个电路中是固定值,不会发生变化。所以基准电压rV的稳定性在恒流源使用的过程中很重要,基准电压rV将会通过D/A模块得到。2.2单片机模块(CPU)本系统我们的单片机作为整个光源控制系统的控制中心,它接收通过A/D转化采集数据,然后进行处理,通过D/A转化反作用于我们的恒流源,是恒流源封闭反馈回路的反馈处理中心。同时它还可以控制着LED数码管的显示,并发送脉冲等。本设计我们选用的CPU为美国ATMEL公司生产的低功耗AT89S51,它属于高性能CMOS8位单片机,片内含4kbytes的可系统编程的Flash程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器既可以在线编程也可以用传统方法编程及通用8位微处理器于单片芯片中,ATMELMicrocomputerApplicationsVol.28,No.1,2012开发应用微型电脑应用2012年第28卷第1期·53·公司功能强大、低价位的AT89S51单片机可灵活应用于各种控制场合。2.3A/D转换和D/A转换A/D转化是将模拟信号转换为数字信号,它主要用于对恒流源的数据采集,并发送到单片中进行处理。D/A转换主要是将数字信号转换为模拟信号,本系统的基准电压rV主要是通过D/A转换得到的,如图3、图4所示:图3A/D转换电路图4D/A转换电路设计分别为A/D模块与D/A模块的电路设计图。A/D芯片MAX197是美国美信(MAXIM)公司生产的多量程、8通道、12位数据采集系统(ADC),所以其转换精度可以达到昀大负载电流峰值的40961,精度非常高,足够系统的使用。D/A芯片MAX532是一种带有输出放大器的双路串行12位电压输出数字-模拟转换器(DAC),其接口能与标准的SPI、QSPI和MICROWIRE接口标准兼容,采用12-15V之间的电源供电,所有输入端口与TTL和CMOS兼容。电路中在正电源VDD和负电源VSS上也加上了两个滤波电容,一个10μF的电解电容和一个0.1μF的独石电容,目的是稳压。可以使电源纹波小,使芯片工作时性能好,输出的波形更加稳定。为之后稳定电流的输出奠定了良好的基础。由于D/A转换输出的模拟电压不是很稳定,我们在模拟输出口加上一个电容C5来稳定电压。3系统的软件设计3.1主程序流程图本系统的主要是实现对恒流源的控制,就是在确保恒流源电流与设定值偏差很小的情况下去控制LED灯的频闪和常亮两种功能。本系统的恒流源在刚刚开始的时候,我们首先要检测的就是恒流源实际电流大小,就要进行A/D转化进行数据的采集,同时通过LED数码管显示出来。这样我们操作人员和单片机都对采集到的数据进行判断,如果实际电流大于设定值,就按“步进-”键,使电流减小;如果实际电流小于设定值,就按“步进+”键,增大电流;如果实际工作电流等于设置电流,单片机就开始执行我们对恒流源的闭环控制,即控制恒流源的常量和频闪的闭环控制。主程序的流程图,如图5所示:图5主程序流程图3.2电流调节子程序电流调节子程序目的就是为了调节恒流源的电流,使实际电流大小等于设定的电流值。前面分析恒流源的时候,我们知道恒流源电流的大小主要与基准电压有关,本系统的恒流源的基准电压是通过D/A转换得到,所以电流调节子程序主要是通过单片机控制D/A芯片,输出模拟电压,从而得到设定的电流值。其流程图,如图6所示:图6A/D转换流程图MicrocomputerApplicationsVol.28,No.1,2012开发应用微型电脑应用2012年第28卷第1期·54·3.3常亮和频闪流程图常亮的流程图很简单,只要单片机输出接口一直置高电平,就可以实现常亮功能,所以我们就不写出其流程图。频闪主要是利用定时器按我们预先设定的值定时发送脉冲,从而实现频闪功能。频闪程序流程图如图7、图8所示:图7中断服务子程序图8主程序流程图4结束语本文主要论述了一种基于单片机控制的机器视觉中的LED光源控制器的硬件和软件设计方案。现在我们已经做成了成品,并已用与机器视觉的实验中。实验证明,本系统具有精度高、安全稳定、响应速率快等优点,完全可以达到机器视觉对光源控制器的要求,具有很高的实用价值。参考文献:[1],[j]31620106[2][D]20023[3][M]200759(2011.10.09)(上接第50页)printf(%d,%d,%d,%d\n,p,q,i,j);}此程序在VC++6.0环境下输出结果为18,25,9,9;而在TC2.0环境下输出结果为18,27,9,9。因为无论前置运算还是后置运算,运算后变量的值都会改变,所以i,j结果都是增加了3的结果。从理论上分析第4行语句中表达式(i++)+(i++)+(i++)的值应为6+7+8,实际却是不论何种编译器执行结果都是6+6+6,这说明后置自增自减运算符的“先使用后加减”的“加减”是指在下一条语句执行前统一加1或者减1,而不是刚用完就加1或者减1,故第4行语句等价于:p=i+i+i;i=i+1;i=i+1;i=i+1;结果为18。第5行语句执行结果涉及到前置运算,和所用的编译器有关,因此该语句在TC2.0环境下等价于:j=j+1;j=j+1;j=j+1;q=j+j+j;在VC++6.0环境下等价于:j=j+1;j=j+1;q=j+j;j=j+1;q=q+j;造成这种结果是因为高级语言的一条语句经编译解释成若干条机器指令,这若干条机器指令的顺序昀终决定该等价高级语言语句的执行结果。4结束语自增、自减运算符是C程序设计语言中特有的,在编程过程中也经常用到,灵活的使用它,可以简化编程语句。但对于初学者而言,往往感到难以理解这两个运算符的运算实质,希望通过对此所作的探讨,能够使初学者正确理解自增、自减运算符的作用和意义。参考文献:[1].C[M].