太陽(yáng)能電池測試軟件設計
太陽(yáng)能電池性能測試系統由硬件結構與測控軟件兩部分構成。硬件結構主要包括光路系統、樣品室與測量電路三部分,如圖1所示。軟件主要分為上位機軟件與下位機程序兩部分。
太陽(yáng)光模擬光源選用氙燈,因為其具有較寬且連續的光譜范圍,覆蓋紫外光至紅外光,是比較理想的模擬太陽(yáng)光源。光源通過(guò)斬波器變?yōu)榻蛔兊膹蜕庑盘?,再?jīng)光柵單色儀,為測試系統提供交變單色光信號。偏置光源的存在使系統具備了測試多節太陽(yáng)能電池的條件,可選用氙燈、鹵鎢燈作為光源。待測太陽(yáng)能電池樣品與已標定的標準探測器至于樣品室中的運動(dòng)平臺上,通過(guò)數據采集卡與計算機相連。上位機軟件可對硬件系統進(jìn)行狀態(tài)配置并獲取采集卡數據,經(jīng)數據處理后生成標準探測器絕對光譜響應曲線(xiàn)、被測太陽(yáng)能電池絕對光譜響應曲線(xiàn)以及量子效率曲線(xiàn)。
2上位機總體設計及數據處理
2.1 上位機總體設計
上位機軟件作為人機交互的媒介,理應具備界面簡(jiǎn)潔、便于用戶(hù)理解、操作簡(jiǎn)便快捷的特點(diǎn)。鑒于C++ Builder這一高性能可視化集成開(kāi)發(fā)環(huán)境具有大量可重用控件與強大的數據庫處理能力[1-2],本軟件選用其作為開(kāi)發(fā)工具。軟件界面組成如圖2所示。
3.1 HID固件程序設計
上位機檢測USB設備是通過(guò)對集線(xiàn)器接收端的電平信號的變化確定的,這就要求設備端D+或D-接上拉電阻至3.3 V電源,STM32F103單片機并沒(méi)有在此環(huán)節做內部上拉,故搭建一個(gè)軟上拉電路,用I/O口PE0電平變化模擬上拉電阻接通與斷開(kāi)。USB部分硬件實(shí)現如圖5所示。
HID設備與主機間的通信是通過(guò)USB的控制管道(默認管道即端點(diǎn)0)和中斷管道1完成的。HID設備的描述符包括設備描述符、配置描述符、接口描述符、端點(diǎn)描述符、字符串描述符、 HID描述符、報告描述符、實(shí)體描述符,其中前5個(gè)描述符屬于USB設備標準描述符,而后3個(gè)則為HID類(lèi)設備特定描述符。通過(guò)對描述符的配置實(shí)現HID設備屬性的定義,如產(chǎn)品ID: idProduct(PID)、廠(chǎng)商ID: idVendor(VID),包括對端口的定義以及對報文格式的定義。
主機與USB 設備最初的數據交換過(guò)程通過(guò)枚舉完成。USB-HID 類(lèi)設備解析主機的請求,并在枚舉期間向主機發(fā)送描述符響應主機的請求。系統將太陽(yáng)能電池短路電流數據作為一個(gè)報文,當短路電流測量完成后,USB設備將報文發(fā)向上位機,完成信息發(fā)送。HID固件程序流程圖如圖6所示。
3.1.1 USB設備標準描述符
設備標準描述符主要是在usb_desc.c文件中定義,具體操作如下:
(1)編輯CustomHID_DeviceDes-criptor設備描述符,在以小端模式定義設備的實(shí)驗用PID與VID為0×123 4與0×567 8。
(2) 編輯ConfigurationDescriptor
配置描述符,定義接口編號為0、定義端點(diǎn),定義接口協(xié)議為HID自定義設備。
(3) 編輯Endpoint Descriptor端點(diǎn)描述符,定義輸入、輸出端點(diǎn)最大包長(cháng)度為8 B。
(4) 編輯CustomHID_ReportDescriptor報文描述符,設定8 B報文格式。
(5) 編輯StringLangID、 String
Vendor、StringProduct、StringSerial描述符,設置設備廠(chǎng)商ID、產(chǎn)品ID以及產(chǎn)品序列號。
3.1.2 USB端點(diǎn)設置
編輯usb_prop.c文件,配置端點(diǎn),具體操作如下:
(1) 編輯CustomHID_Reset(void)函數,初始化端點(diǎn)0和端點(diǎn)1,調用SetEPType()函數初始化端點(diǎn)0為控制端點(diǎn)類(lèi)型、端點(diǎn)1為中斷端點(diǎn)類(lèi)型。
(2) 調用SetEPRxAddr()、SetEPTxAddr(),設置收發(fā)數據的地址。
(3)調用SetEPTxCount()、SetEPRxCount(),設置收發(fā)數據長(cháng)度為8 B。
3.1.3 主函數框架
編寫(xiě)main.c文件,完成下述內容:
(1) 包含關(guān)鍵頭文件stm32f10x_lib.h、usb_lib.h、hw_
config.h。
(2)調用Set_System()、USB_Interrupts_ConFig()、Set_USBClock()、USB_Init()函數配置系統時(shí)鐘、USB中斷、USB時(shí)鐘與初始化。
(3) 編寫(xiě)CustomHID_Send()數據發(fā)送函數,調用UserToPMABufferCopy(),將數據放入輸出Buffer,調用SetEPTxValid(ENDP1)使端點(diǎn)1有效以發(fā)送數據。
(4) 編寫(xiě)CustomHID_Receive()數據接收函數,調用PMAToUserBufferCopy()函數獲取數據,調用SetEPRxValid(ENDP1)函數使端點(diǎn)1有效以接收數據。
3.2上位機通信模塊設計
C++ Builder集成開(kāi)發(fā)環(huán)境調用Windows API函數開(kāi)發(fā)出USB-HID程序模塊。通過(guò)調用Windows基礎庫函數獲取HID設備的全局唯一標識(GUID)、設備ID、設備接口、緩沖區指針等信息,最終獲取報文信息,解析數據交數據處理模塊進(jìn)一步處理。上位機HID程序流程圖如圖7所示。
上位機實(shí)現與USB-HID設備通信具體調用的函數有:
(1) 使用HidD_GetGuid函數獲取128 bit GUID。
(2) 使用SetupDiGetClassDevs函數獲取設備信息群。
(3) 使用SetupDiEnumDeviceInterfaces函數識別HID接口。
(4) 使用SetupDiGetDeviceInterfaceDetail函數獲取設備路徑。
(5) 使用CreatFile函數開(kāi)啟設備,使用CloseHandle函數釋放資源。
(6) 使用HidD_GetAttributes函數獲取設備ID。
(7) 使用HidD_GetPreparsedData函數與HidD_Free
PreparsedData函數取得緩沖區指針與釋放資源。
(8) 使用WriteData函數、ReadFile函數發(fā)送、讀取報文。
4 軟件測試結果
軟件檢測相關(guān)設備處于連接狀態(tài),將標準太陽(yáng)能電池與待測太陽(yáng)能電池置于樣品室檢測臺上,軟件配置相關(guān)檢測參數,在掃描范圍300 nm~1 200 nm、波長(cháng)間隔10nm、斬波器與鎖相放大器參考頻率為2 Hz、單點(diǎn)測試10次、緩沖時(shí)間10 s的狀態(tài)下,成功獲取USB-HID設備上傳的數據。上位機軟件調用TeeChart控件繪制出待測電池光譜響應曲線(xiàn),測試結果如圖8所示。
USB已經(jīng)逐步取代了串口,成為現階段測試儀器常用的接口與通信方式,使儀器的通用性與易用性大大增強。系統采用USB通信方式,同時(shí)上位機軟件具備穩定準確的數據獲取能力,并以圖像方式準確直觀(guān)地顯示測試結果,具有一定的實(shí)用價(jià)值。
參考文獻
[1] 原雪, 徐朝陽(yáng), 朱春光,等. C++ Builder 6入門(mén)提高[M].長(cháng)沙:國防科技大學(xué)出版社, 2002.
[2] 吳逸賢,吳目誠.精彩C++ Builder 6程序設計[M]. 北京:科學(xué)出版社, 2003.
[3] GB 11009-1989太陽(yáng)能電池光譜響應測試方法[S].中華人民共和國機械電子工業(yè)部1989-03-02批準:1990實(shí)施.
[4] 廖濟林. USB2.0應用系統開(kāi)發(fā)實(shí)例精講[M]. 北京:電子工業(yè)出版社, 2006.
[5] 薛圓圓. USB應用開(kāi)發(fā)技術(shù)大全[M]. 北京: 人民郵電出版社, 2006.
pid控制相關(guān)文章:pid控制原理
c++相關(guān)文章:c++教程
上拉電阻相關(guān)文章:上拉電阻原理 鎖相放大器相關(guān)文章:鎖相放大器原理
評論