纪 浩,谷玉海,徐小力
(北京信息科技大学 机电系统测控北京市重点实验室,北京 100192)
太阳能电池性能测试系统由硬件结构与测控软件两部分构成。硬件结构主要包括光路系统、样品室与测量电路三部分,如图1所示。软件主要分为上位机软件与下位机程序两部分。
太阳光模拟光源选用氙灯,因为其具有较宽且连续的光谱范围,覆盖紫外光至红外光,是比较理想的模拟太阳光源。光源通过斩波器变为交变的复色光信号,再经光栅单色仪,为测试系统提供交变单色光信号。偏置光源的存在使系统具备了测试多节太阳能电池的条件,可选用氙灯、卤钨灯作为光源。待测太阳能电池样品与已标定的标准探测器至于样品室中的运动平台上,通过数据采集卡与计算机相连。上位机软件可对硬件系统进行状态配置并获取采集卡数据,经数据处理后生成标准探测器绝对光谱响应曲线、被测太阳能电池绝对光谱响应曲线以及量子效率曲线。
上位机软件作为人机交互的媒介,理应具备界面简洁、便于用户理解、操作简便快捷的特点。鉴于C++Builder这一高性能可视化集成开发环境具有大量可重用控件与强大的数据库处理能力[1-2],本软件选用其作为开发工具。软件界面组成如图2所示。
程序主界面由大量控件组成,包括标签、文本框、命令按钮、复选框、单选按钮、列表框等。主窗体调用TeeChart控件依据测量数据生成一条或多条测量曲线,方便用户更直观地了解测试结果。同时,提供跟随鼠标的十字光标,便于用户跟踪曲线各点数值。用户可以在此界面设置太阳光谱扫描范围、扫描步长与扫描速度等相关检测参数,并且允许用户在设备监测窗口中查看各下位机设备参数以及运行状态。程序在扫描进行中提示用户测试进度。程序主界面与标准探测器绝对光谱响应曲线及数据如图3所示。
太阳能电池绝对光谱响应SR(λ)是指在某一特定波长处,太阳能电池输出的短路电流ISC(λ)与入射光功率P(λ)的比值(单位:A/W):
将已标定标准探测器的绝对光谱响应SRs(λ)作为参照数据[2],上位机软件解析USB-HID设备上传的报文信息,获得在相同入射光功率P(λ)条件下标准探测器在特定波长λ处输出的短路电流IS(λ)和待测太阳能电池在特定波长λ处输出的短路电流IC(λ)。则待测太阳能电池的绝对光谱响应 SRC(λ)可以表示为(单位:A/W):
量子效率η(λ)是指在某一特定波长λ处,太阳能电池输出的电子数目与入射光子数目的比值:
其中,e 为电子电荷(单位:C),e=1.602 2×10-19;E(λ)为波长 λ 的光子的能量,E(λ)=h×c/λ;h为普朗克常数(单位:J·s), h=6.6261×10-24,c 为光速(单位:m/s): c =2.997 9×109。 故可求得量子效率 η(λ)为:
依据上述公式计算出则待测太阳能电池的绝对光谱响应 SRC(λ)与量子效率 η(λ),调用 TeeChart控件绘制出相应曲线。
USB通信协议具有灵活易用、应用广泛等特性[4]。其中HID设备类属于人机交互操作设备,Windows操作系统为此类设备提供了通用的驱动程序,用户只需编写符合HID设备类规范的固件程序即可让Windows自动识别[5],而且HID没有限制设备类型,只要求交换数据存放在报文结构内,设备只需支持报文格式即可。鉴于此类设备这一免驱的优势,本系统将下位机STM32F103VET单片机的USB模块枚举成HID设备,上位机软件调取Windows API函数与HID设备交换数据。USB通信系统层次结构如图4所示。
上位机检测USB设备是通过对集线器接收端的电平信号的变化确定的,这就要求设备端D+或D-接上拉电阻至3.3 V电源,STM32F103单片机并没有在此环节做内部上拉,故搭建一个软上拉电路,用I/O口PE0电平变化模拟上拉电阻接通与断开。USB部分硬件实现如图5所示。
HID设备与主机间的通信是通过USB的控制管道(默认管道即端点0)和中断管道1完成的。HID设备的描述符包括设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符、HID描述符、报告描述符、实体描述符,其中前5个描述符属于USB设备标准描述符,而后3个则为HID类设备特定描述符。通过对描述符的配置实现HID设备属性的定义,如产品ID:idProduct(PID)、厂商 ID:idVendor(VID),包括对端口的定义以及对报文格式的定义。
主机与USB设备最初的数据交换过程通过枚举完成。USB-HID类设备解析主机的请求,并在枚举期间向主机发送描述符响应主机的请求。系统将太阳能电池短路电流数据作为一个报文,当短路电流测量完成后,USB设备将报文发向上位机,完成信息发送。HID固件程序流程图如图6所示。
图6 HID固件程序流程图
3.1.1 USB设备标准描述符
设备标准描述符主要是在usb_desc.c文件中定义,具体操作如下:
(1)编辑CustomHID_DeviceDes-criptor设备描述符,在以小端模式定义设备的实验用PID与 VID 为 0×123 4与 0×567 8。
(2)编辑ConfigurationDescriptor配置描述符,定义接口编号为0、定义端点,定义接口协议为HID自定义设备。
(3)编辑Endpoint Descriptor端点描述符,定义输入、输出端点最大包长度为8 B。
(4)编辑CustomHID_ReportDescriptor报文描述符,设定8 B报文格式。
(5)编辑StringLangID、String Vendor、StringProduct、StringSerial 描述符,设置设备厂商ID、产品ID以及产品序列号。
3.1.2 USB端点设置
编辑usb_prop.c文件,配置端点,具体操作如下:
(1)编辑 CustomHID_Reset(void)函数,初始化端点 0和端点1,调用SetEPType()函数初始化端点 0为控制端点类型、端点1为中断端点类型。
(2)调用 SetEPRxAddr()、SetEPTxAddr(),设 置收 发 数据的地址。
(3)调 用 SetEPTxCount()、SetEPRxCount(),设 置 收 发 数据长度为8 B。
3.1.3 主函数框架
编写main.c文件,完成下述内容:
(1)包含关键头文件 stm32f10x_lib.h、usb_lib.h、hw_config.h。
(2)调用 Set_System()、USB_Interrupts_ConFig()、Set_USBClock()、USB_Init()函 数 配 置 系 统 时 钟 、USB 中 断 、USB时钟与初始化。
(3)编写CustomHID_Send()数据发送函数,调用User-ToPMABufferCopy(),将数据放入输出 Buffer,调用 SetEPTxValid(ENDP1)使端点1有效以发送数据。
(4)编写 CustomHID_Receive()数据接收函数,调用PMAToUserBufferCopy()函数获取数据,调用 SetEPRxValid(ENDP1)函数使端点1有效以接收数据。
C++Builder集成开发环境调用Windows API函数开发出USB-HID程序模块。通过调用Windows基础库函数获取HID设备的全局唯一标识(GUID)、设备 ID、设备接口、缓冲区指针等信息,最终获取报文信息,解析数据交数据处理模块进一步处理。上位机HID程序流程图如图7所示。
上位机实现与USB-HID设备通信具体调用的函数有:
(1)使用HidD_GetGuid函数获取128 bit GUID。
(2)使用SetupDiGetClassDevs函数获取设备信息群。
图7 上位机HID程序流程图
(3)使用SetupDiEnumDeviceInterfaces函数识别HID接口。
(4)使用SetupDiGetDeviceInterfaceDetail函数获取设备路径。
(5)使用CreatFile函数开启设备,使用CloseHandle函数释放资源。
(6)使用HidD_GetAttributes函数获取设备ID。
(7)使用HidD_GetPreparsedData函数与HidD_Free PreparsedData函数取得缓冲区指针与释放资源。
(8)使用 WriteData函数、ReadFile函数发送、读取报文。
软件检测相关设备处于连接状态,将标准太阳能电池与待测太阳能电池置于样品室检测台上,软件配置相关检测参数,在扫描范围300 nm~1 200 nm、波长间隔10nm、斩波器与锁相放大器参考频率为2 Hz、单点测试10次、缓冲时间10 s的状态下,成功获取 USB-HID设备上传的数据。上位机软件调用TeeChart控件绘制出待测电池光谱响应曲线,测试结果如图8所示。
USB已经逐步取代了串口,成为现阶段测试仪器常用的接口与通信方式,使仪器的通用性与易用性大大增强。系统采用USB通信方式,同时上位机软件具备稳定准确的数据获取能力,并以图像方式准确直观地显示测试结果,具有一定的实用价值。
[1]原雪,徐朝阳,朱春光,等.C++Builder 6入门提高[M].长沙:国防科技大学出版社,2002.
[2]吴逸贤,吴目诚.精彩 C++Builder 6程序设计[M].北京:科学出版社,2003.
[3]GB 11009-1989太阳能电池光谱响应测试方法[S].中华人民共和国机械电子工业部1989-03-02批准:1990实施.
[4]廖济林.USB2.0应用系统开发实例精讲[M].北京:电子工业出版社,2006.