关键词:光敏电阻、测试分档、光照强度、USB、动态连接库
1引言
测试分档是光敏电阻生产环节中后期的一个重要工序。因为不同应用领域对光敏电阻有关参数如亮电阻、暗电阻和γ值等的要求也不一样,生产厂家必须能够十分准确地给出自己产品的上述参数值,以满足用户使用的具体要求。生产厂家根据用户对亮电阻、暗电阻和γ值等参数的要求范围,来为生产的光敏电阻分类,这就是光敏电阻的测试分档。
目前国内厂家的测试分档基本以手工操作为主,这样的弊端是显而易见的:光源的光照强度不能准确控制,手工分档速度很慢,人工读数引入了较大误差,测试数据只能人工记录保存,这就大大地影响了分档的精度和产品的一致性。本文借助计算机强大的数据处理与存储功能,采用数据传输率很高且使用方便的USB总线研究和设计了一种用于光敏电阻测试分档的智能化检测装置。从根本上解决了手工分档的一系列问题:如光源光照强度的控制,人工读数带来的误差,测试结果的保存等。
2智能光敏电阻检测装置的硬件设计
智能光敏电阻检测装置的研制涉及光源设计、超大范围的电阻的自动测量、数据的采集与处理、单片机和计算机的USB串行数据传输、分档信号的显示及控制等几大部分。
设计总体框图如图1所示。其中AD574采集模块在来自PC机命令的控制下完成8路光敏电阻亮电阻、暗电阻等参数的采集,采集数据由USB数据传输接口模块传送至PC计算机,由计算机完成参数的后续处理,算出对应光敏电阻的γ值,随后分检显示程序根据亮、暗电阻和γ值确定对应光敏电阻应属哪一档。最后由分检显示电路显示分档信息。
图1智能光敏电阻检测装置设计总体框图
2.1数据采集模块
数据采集模块由数据采集模块单片机AT89C52、锁存器74LS373、A/D芯片AD574、8路模拟开关CD4051、光敏电阻测试电路、与USB数据传输接口模块通信的IDC26接口(CN6)等部分组成。
AD574是美国AD 公司生产的12位高速逐次逼近型模数变换器。片内自备时钟基准源,无需外接元器件就可独立完成A/D转换功能,它的转换时间为15~35μs,转换精度为0.05%,可以并行输出12位,也可以分成8位和4位两次输出。数字量可直接采用双极性模拟信号输入,供电电源为±15V,逻辑电源为+5V。广泛应用在数据采集系统中。
系统的硬件设计在连接上主要考虑了三总线(控制总线、地址总线、数据总线)的连接。由于AD574输出具有三态缓冲器,可直接与微机的总线接口,而无须附加逻辑接口电路。AD574片内有时钟,故无需外加时钟信号。该电路采用单极性输入方式,可对0~10V或0~20V 模拟信号进行转换,本装置采用0~10V输入。转换结果的高8位从DB11~DB4输出,低4位从DB3~DB0 输出,并且直接和单片机的数据总线相连。
在光敏电阻测试电路中,模拟开关4051对应8路输入,一次可测试8个光敏电阻,根据电路硬件连接,8路输入地址分别为0xff18、0xff19、0xff1a、0xff1b、0xff1c、0xff1d、0xff1e、0xff1f。调用一次采样函数ad574(),8路光敏电阻即被测试一遍。
测试系统中光照强度的调节由单片机的P1.1、P1.2和P1.3控制,P1.1、P1.2和P1.3分别控制100lx、10lx和0lx 的光源。P1.4接看门狗电路的输入端WDI,不断输出脉冲信号进行喂狗。
2.2数据采集模块单片机和计算机的USB通信
本系统采用基于PDIUSBD12接口芯片的USB数据传输接口模块[1,2]。用于连接数据采集模块和PC计算机的USB数据传输接口模块在整个系统中地位极其重要,也是本系统设计的重点和难点,这里开发一个通用的USB数据传输接口模块,该模块主要由3个部分组成。
(1)USB总线接口部分,包括B类USB连接线插座和PDIUSBD12接口芯片。
(2)微处理器及逻辑控制部分,包括AT89C52单片机及逻辑控制电路。
(3)双端口数据存储区,包括双端口RAM芯片CY7C136和一个IDC26封装的8位并行数据接口插座CN3。
AT89C52单片机的外部中断INT0用于USB接口芯片PDIUSBD12的中断请求,外部中断INT1用于双端口RAM芯片CY7C136的左侧信箱中断请求,完成数据采集模块单片机采集数据的上传。
3智能光敏电阻检测装置的软件设计
3.1下位机程序的开发
数据采集模块单片机和USB接口单片机程序均使用C语言编写[3],增加了程序的可移植性。数据采集模块通过USB通信模块接收到相应命令后,通过调整光照强度,调用数据采集程序,随后把采集结果通过USB通信模块上传到PC计算机进一步处理。下位机还可通过键盘显示电路显示出被检光敏电阻的分档信息,从而实现了光敏电阻的智能化检测。数据采集程序的部分代码如下:
unint ad574(uchar idata *x) //采样结果放指针中的A/D采样函数
{ uchar i;
uchar xdata *ad_adr;
ad_adr=&ADCOM0;
adhi=&ADHI0;
adlo=&ADLO0;
r=0; //产生CE=1
w=0;
for(i=0;i<8;i++)
{ *ad_adr=0; //启动转换
while(adbusy==1);
x[2*i]=adhi>>4; //存转换结果高位
x[2*i+1]=((adhi<<4)+(adlo&0x0f)); //存转换结果低位
ad_adr++;
adhi++;
adlo++;
}
}
3.2驱动程序的开发
USB设备驱动程序在结构上与其他类型的设备驱动程序基本相同,包括初始化、创建设备、卸载和删除设备、即插即用处理、分发例程处理、电源管理、WMI等部分。驱动程序主要例程如下:
(1)驱动程序入口例程DriverEntry,该例程完成两件事:把注册表项复制到一个全局变量中;告诉系统哪些IRP由哪个例程处理。
(2)驱动程序的初始化例程DataClt_AddDevice
(3)即插即用例程DataClt_DispatchPnp
(4)电源管理例程DataClt_DispatchPower
(5)数据读写例程DataClt_DispatchReadWrite
(6)提交URB 例程DataClt_CallUSBD
3.3 上位机应用程序的开发
在Microsoft Visual Basic 2005环境下编写上位机应用程序,上位机应用程序使用EasyD12.dll API函数。智能光敏电阻检测应用程序中的检测界面如图2所示。检测界面包括测100lx光照下光敏电阻的阻值、测10lx光照下光敏电阻的阻值、测0lx光照下光敏电阻的阻值、计算光敏电阻的γ值以及测试分档等命令。每检测一组8个电阻后,可以点击“保存本次结果”,将本次检测结果保存入数据库;点击“结果送分检电路”,可通过分检电路显示出对应光敏电阻应属分档;待检测现场准备好下一组待检光敏电阻后,点击“检测下一组”,即可继续检测;在检测界面中,可随时通过点击“查看检测记录”进入数据库查看已经检测的光敏电阻的检测信息。程序中将光敏电阻分为26档,其中含 “废品”档。实际应用中可根据情况进行调整。
程序中由PC机通过D12的端点1向下位机发送命令,通过计算校验和保证命令传输的正确性,然后通过读端口2得到返回的检测结果数据,其中读数据的长度可通过对接收数据长度变量nLen的赋值来改变, 本程序因每次仅检测8个光敏电阻,每个电阻采样值共12位,占2个字节,故令nLen= 16即可满足要求,程序的编写具有通用性,可实现对任意长度的采样数据进行读取,因D12的端点2缓存仅为64字节,故需按每帧接收64个数据来多次读取(nFrameLen = 64),最后读取一个小于64字节的剩余帧。
智能光敏电阻检测数据库界面如图3所示,设计的字段有:100lx下电阻值、10lx下电阻值、0lx下电阻值、g值、应属分档、测试时间。应用程序中通过上述几个控件实现与SQL Server数据库的连接,在“检测界面”中每按一次“保存本次结果”命令按钮,即可将检测结果追加到数据库中,并在智能光敏电阻检测数据库界面中动态显示出来。在数据库界面中,可通过相应命令按钮查看某段时间生产的一些指标,如合格率、废品率及某个档位产品的数量等。
图2 检测界面
4结论
基于USB接口的智能光敏电阻检测装置硬件包括负责采集数据的数据采集模块、负责传输采样数据和传输上位机命令及最后分档信息的USB接口通信模块和负责处理采样数据、存储检测结果的PC上位机等。软件包括数据采集模块中的上位机命令分析程序、采样程序及与USB接口模块的数据传输程序,USB接口模块中的USB固件程序以及与数据采集模块通信的数据传输程序,还有计算机端的应用软件设计等。整个装置采用先进的USB总线技术,实现了较高的数据传输率,保证了较高的可靠性。
图3智能光敏电阻检测数据库界面
参考文献:
[1]Philips Semiconductors Company. PDIUSBD12 Data Sheet Philips Semiconductors[DB/OL].http://www.semiconductors.philips.com/pip/PDIUSBD12D.html,2001-08
[2]万利峰,徐晓洁,胡慧铺,张晔晖.基于PDIUSBD12的USB数据采集系统的设计[J]微计算机信息2006,22第5-1期:110- 112
[3]马忠梅,籍顺心,张凯.单片机C语言应用程序设计[M].北京:北京航空航天大学出版社,2003