摘要:利用C++Builder开发环境设计上位机软件来测试太阳能电池光谱响应、绘制测试曲线、输出测试结果。下位机采用STM32F103VET单片机以USB人机接口类方式与上位机通信。实验证明,软件操作简便,能够稳定获取数据并输出结果。
关键词:太阳能电池;C++Builder;USB-HID;测试软件
1 系统总体结构及功能
太阳能电池性能测试系统由硬件结构与测控软件两部分构成。硬件结构主要包括光路系统、样品室与测量电路三部分,如图1所示。软件主要分为上位机软件与下位机程序两部分。
太阳光模拟光源选用氙灯,因为其具有较宽且连续的光谱范围,覆盖紫外光至红外光,是比较理想的模拟太阳光源。光源通过斩波器变为交变的复色光信号,再经光栅单色仪,为测试系统提供交变单色光信号。偏置光源的存在使系统具备了测试多节太阳能电池的条件,可选用氙灯、卤钨灯作为光源。待测太阳能电池样品与已标定的标准探测器至于样品室中的运动平台上,通过数据采集卡与计算机相连。上位机软件可对硬件系统进行状态配置并获取采集卡数据,经数据处理后生成标准探测器绝对光谱响应曲线、被测太阳能电池绝对光谱响应曲线以及量子效率曲线。
2上位机总体设计及数据处理
2.1 上位机总体设计
上位机软件作为人机交互的媒介,理应具备界面简洁、便于用户理解、操作简便快捷的特点。鉴于C++ Builder这一高性能可视化集成开发环境具有大量可重用控件与强大的数据库处理能力[1-2],本软件选用其作为开发工具。软件界面组成如图2所示。
3.1 HID固件程序设计
上位机检测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所示。
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()数据发送函数,调用UserToPMABufferCopy(),将数据放入输出Buffer,调用SetEPTxValid(ENDP1)使端点1有效以发送数据。
(4) 编写CustomHID_Receive()数据接收函数,调用PMAToUserBufferCopy()函数获取数据,调用SetEPRxValid(ENDP1)函数使端点1有效以接收数据。
3.2上位机通信模块设计
C++ Builder集成开发环境调用Windows API函数开发出USB-HID程序模块。通过调用Windows基础库函数获取HID设备的全局唯一标识(GUID)、设备ID、设备接口、缓冲区指针等信息,最终获取报文信息,解析数据交数据处理模块进一步处理。上位机HID程序流程图如图7所示。
上位机实现与USB-HID设备通信具体调用的函数有:
(1) 使用HidD_GetGuid函数获取128 bit GUID。
(2) 使用SetupDiGetClassDevs函数获取设备信息群。
(3) 使用SetupDiEnumDeviceInterfaces函数识别HID接口。
(4) 使用SetupDiGetDeviceInterfaceDetail函数获取设备路径。
(5) 使用CreatFile函数开启设备,使用CloseHandle函数释放资源。
(6) 使用HidD_GetAttributes函数获取设备ID。
(7) 使用HidD_GetPreparsedData函数与HidD_Free
PreparsedData函数取得缓冲区指针与释放资源。
(8) 使用WriteData函数、ReadFile函数发送、读取报文。
4 软件测试结果
软件检测相关设备处于连接状态,将标准太阳能电池与待测太阳能电池置于样品室检测台上,软件配置相关检测参数,在扫描范围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.
[5] 薛圆圆. USB应用开发技术大全[M]. 北京: 人民邮电出版社, 2006.