向 前
(銅陵學院 電氣工程學院,安徽 銅陵 244000)
微弱電流信號檢測廣泛應(yīng)用在于會生活的各個方面。以光電傳感器為例,輸出電流數(shù)量級在nA甚至pA。微弱信號極易受到環(huán)境干擾影響,為實現(xiàn)pA級別微弱電流信號的檢測,以STM32F103為核心,應(yīng)用低偏置高靈敏度的運算放大器AD,輔以H2數(shù)據(jù)庫、LabVIEW,設(shè)計了電流檢測系統(tǒng)[1-3]。帶數(shù)字隔離的通信電路提高了硬件可靠性,基于labsql的數(shù)據(jù)庫存儲和java云端上傳提高了軟件可靠性。上述技術(shù)均具備較好的跨平臺特性,進一步完善了微弱電流檢測的設(shè)計方法。
檢測系統(tǒng)設(shè)計包括電流檢測硬件與功能軟件兩部分,如圖1所示。硬件包括電流轉(zhuǎn)換模塊、數(shù)據(jù)處理和通信模塊。電流轉(zhuǎn)換模塊包括運算放大器(ADA4530、ADA4522)組成的IV轉(zhuǎn)換和電壓緩沖電路,IV轉(zhuǎn)換+緩沖電路把微弱的電流信號轉(zhuǎn)換成適合AD輸入采樣的電壓信號。數(shù)據(jù)處理和通信模塊包括核心微處理器(STM32F103)、數(shù)字隔離器(ADUM5211、ADUM1281)、ADC(AD7172)、RS232驅(qū)動器/接收器 (ADM3232E)、USB(MCP2200)和無線WIFI(預(yù)留,用于未來的拓展應(yīng)用)等。用戶可根據(jù)應(yīng)用場所和應(yīng)用需求選擇不同的通信方式。軟件包括上位機與下位機兩部分,如圖2所示。下位機運行在電流檢測硬件上,移植RTOS系統(tǒng),執(zhí)行采樣和傳輸功能。上位機運行在客戶端(普通PC,運行WINXP 32位系統(tǒng)),包括存儲、上傳和顯示3種功能,客戶端運行H2數(shù)據(jù)庫,存儲功能通過labsql插件完成。考慮到檢測硬件提供了多種通信接口,基于LabVIEW+VISA實現(xiàn)了串口+USB的上位機顯示界面。H2數(shù)據(jù)庫采用java編寫了云端上傳程序?qū)崿F(xiàn)上傳功能。應(yīng)用暫時沒有用到無線網(wǎng)絡(luò),本文暫不討論。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖 圖2 系統(tǒng)軟件結(jié)構(gòu)圖
電流轉(zhuǎn)換模塊包括IV轉(zhuǎn)換電路和電壓跟隨電路。為了實現(xiàn)pA級別的電流檢測,需要選用超低輸入偏置電流的運算放大器,本文選擇ADA4530,這是一款fA級別輸入偏置電流的運算放大器,失調(diào)電壓和失調(diào)漂移很低,適合作為pA級微弱電流的跨阻放大器(TIA)。同時集成了保護環(huán)緩沖器,實現(xiàn)了隔離輸入引腳避免受到PCB漏電流影響的效果,也減少了設(shè)計時電路元件的使用。以光電二極管為例,如圖3所示,產(chǎn)生的輸出電流IPD與光照水平成正比,IV轉(zhuǎn)換電路將信號電流IPD根據(jù)公式VOUT=IPD×RF轉(zhuǎn)換成輸出電壓。CSHUNT是分流電容,RSHUNT是分流電阻,RF是反饋電阻,RF與CSHUNT的作用會在反饋環(huán)路中產(chǎn)生一個低頻極點,考慮到環(huán)路穩(wěn)定,TIA電路還需要外部補償,添加一個反饋電容CF在反饋系數(shù)中產(chǎn)生一個零點,使得電路在達到交越頻率前還原該低頻極點引起的相移。
增大反饋電阻RF可以實現(xiàn)信噪比(SNR)最大化和直流誤差最小化的TIA電路設(shè)計目標。隨著RF的增大,信號增益增大,噪聲以平方根式增大,輸出信號相對于輸出電壓誤差更大。但RF也不能一味地增大,需要考慮如下因素:① 運放的輸出擺幅,IPD_MAX×RF應(yīng)當小于擺幅限制;② 光電二極管的熱噪聲,當RF?RSHUNT,總的噪聲以光電二極管為主,SNR不隨著RF的提高而提高;③RSHUNT的低頻噪聲增益,當RF>RSHUNT,信號誤差比不再提高。反饋電容CF會影響信號帶寬,CF的選擇要考慮如下因素:①CF的最小值限制在50 fF~100 fF;② 為了在環(huán)路交越前還原足夠的相移實現(xiàn)穩(wěn)定運行,CF取值需要足夠大。如果RF采用大于1 GΩ的大阻值電阻,可以通過寄生反饋電容實現(xiàn)自我補償。本文采用正負5 V電源供電,RF取值10 GΩ,CF取值300 fF。
圖3 IV轉(zhuǎn)換電路 圖4 AD采樣電路
2.2.1 ADC
AD7172模擬輸入上集成了單位增益緩沖器,提供了高輸入阻抗,典型輸入電流5 nA,采樣輸入可以直接連接,簡化了模擬前端的電路要求。集成緩沖器的典型功耗僅0.87 mA,均完全斬波,能夠使失調(diào)誤差漂移和1/f噪聲最小。具有3個獨立電源:AVDD1、AVDD2和IOVDD,第1個是多路復(fù)用器和集成的模擬與基準輸入緩沖器供電,第2個是ADC內(nèi)核供電,基準都是AVSS,AVDD1-AVSS=3.3-5 V,AVDD2-AVSS=2-5.5 V,第3個是ADC的數(shù)字邏輯供電,以DGND為基準,IOVDD-DGND=2-5.5 V。AD7172通過SPI接口與STM32F103連接,輸入峰值是5 V,電路如圖4所示。ADC配置包含3個部分:① 通道配置:AD7172有4個獨立通道,通過通道寄存器COMMS選擇輸入通道,對片內(nèi)寄存器的所有訪問必須以對COMMS的寫操作開始,決定接下來要訪問的寄存器,比如選擇AIN0,則設(shè)置為0×10;② 設(shè)置配置:有4種配置設(shè)置0到設(shè)置3,每種設(shè)置均包括4個寄存器,以設(shè)置0為例包括設(shè)置配置寄存器0(SETUPCON0)、濾波器配置寄存器0(FILTCON0)、增益寄存器0(GAIN0)和失調(diào)寄存器0(OFFSET0),其中前兩個寄存器是必須要設(shè)置的,增益和失調(diào)寄存器的設(shè)置則是可選的,SETUPCON(0-3)選擇單極性或雙極性模式,單極性下ADC支持正差分電壓,輸出標準二進制,雙極性下支持負差分電壓,輸出偏移二進制;③ ADC模式和接口模式:前者用于設(shè)置ADC的轉(zhuǎn)換模式,還包括內(nèi)部基準電壓源使能和時鐘源選擇,后者用于配置數(shù)字接口的工作模式,可以控制數(shù)據(jù)字長度、CRC使能等,配置流程如圖5所示,提供了2個單端輸入接口,選擇AIN4為公共引腳,AIN2/AIN4傳入CH1,AIN3/AIN4傳入CH2,共享設(shè)置1,對SETUPCON1、FILTCON1、ADCMODE1和IFMODE1編程,并根據(jù)需要配置GAIN1和OFFSET1。AD7172的輸入引腳均連接到交叉點多路復(fù)用器,多個通道時,各個導(dǎo)通能按編號最小到編號最大自動處理。因為輸入通道用到了CH1和CH2,設(shè)置這些寄存器中每一個的MSB,CH_EN1至CH_EN2位通過交叉點多路復(fù)用器,使AD7172轉(zhuǎn)換時,序列器能以升序從CH1轉(zhuǎn)到CH2,再回到CH1,重復(fù)整個序列。
圖5 配置流程
2.2.2 數(shù)字隔離
引入隔離是為了盡可能降低接地環(huán)路噪聲的影響,傳統(tǒng)的隔離多采用光耦合器,它的問題在于功耗高,因為光耦合器使用LED光把數(shù)據(jù)傳輸?shù)礁綦x柵的另一端,要消耗電能。對于低功耗應(yīng)用不是一個合適的選擇,且速率一般低于1 Mbps,在對速率有要求的場合可以選擇高速光耦合器,但會極大地增加設(shè)計成本。數(shù)字隔離器的基本原理是通過電容或變壓器將數(shù)據(jù)以容性或磁性方式耦合到隔離柵的另一端[4-5]。以變壓器結(jié)構(gòu)為例,流過變壓器線圈的電流脈沖會形成一個微小局部磁場,根據(jù)電磁感應(yīng)原理在另一個線圈產(chǎn)生感應(yīng)電流,實現(xiàn)信號隔離。變壓器線圈的電流脈沖時間很短,因此平均電流很低。變壓器采用差分的結(jié)構(gòu)方式,共模瞬變抗擾度能夠達到100 kV/μs,優(yōu)于光耦合器的15 kV/μs,加厚變壓器線圈間的絕緣層可以獲得更大的隔離值。串口通信采用ADuM5211,USB通信采用ADuM1281,在通信模塊與MCU間采用數(shù)字隔離,提高系統(tǒng)的可靠性。
2.2.3 串口和USB通信
ADuM5211集成了isoPower隔離DC/DC轉(zhuǎn)換器,采用了iCouple技術(shù),能夠提供3.15 V和5.25 V之間調(diào)節(jié)的穩(wěn)壓隔離電源,無需使用單獨的隔離DC/DC轉(zhuǎn)換器,降低了功耗和設(shè)計成本。如圖6所示。VDDP是isoPower供電電源,VDD1是器件第1側(cè)隔邏輯電路的電源,獨立于VDDP,需要單獨提供。VDD2是器件第2側(cè)邏輯電路的電源,VISO是副邊的輸出電壓,具體數(shù)值可根據(jù)公式VISO=1.25×(R1+R2)/R1設(shè)定。VSEL用于輸出電壓VISO選擇,在VISO和GNDISO間提供了熱匹配電阻網(wǎng)絡(luò),對需要的輸出電壓進行分壓。把VISO供給VDD2實現(xiàn)了電源隔離。ADuM5211的干擾主要來自噪聲和紋波,前者需要低電感高頻電容,后者需要數(shù)值較大的體電容,以VDD1為例,并聯(lián)0.1μF +10 μF的電容對,前者可采用NPO或X5R陶瓷電容,后者推薦使用陶瓷電容。也可以采用0.1 μF+10 μF+10 nF的組合,可以進一步降低EMI。在繪制PCB時0.1 μF ESR電容到電源的走線長度不要超過2 mm??紤]到USB通信速率,采用ADuM1281+MCP2200搭建帶隔離的USB通信電路,如圖7所示。ADuM1281是獨立雙通道數(shù)字隔離器,提供了2種配置選擇,3種不同數(shù)據(jù)速率,最高可到100 Mbps。輸入和輸出供電引腳VDD1和VDD2上并聯(lián)旁路電容,數(shù)值在0.01 μF和0.1 μF之間,繪制PCB時電容兩端到輸入電源引腳的走線總長應(yīng)該小于20 mm。
(1)下載源碼:在freertos官網(wǎng)下載安裝程序,選擇保存目錄等待下載完成[6]。
(2)建立STM32工程并添加源碼:新建freertos目錄,把源碼Source文件夾下的所有文件復(fù)制到freertos中;在Keil工程中添加freertos目錄和頭文件(freertosinclude和freertosportable vdsarm_cm3),把port.c、heap_4.c(內(nèi)存管理方案)和freertos文件夾下的7個.c文件添加到freertos目錄中;復(fù)制源碼的freertosconfig.h(在源碼freertosdemocortex_stm32f103_keil中,沒有這個文件會導(dǎo)致編譯錯誤)到Keil工程freertosinclude文件夾中,同時把該文件的INCLUDE_xTaskGetSchedulerState和INCLUDE_xTaskGetCurrentTaskHandle兩個宏定義改成1,添加#define xPortPendSVHandler PendSV_Handler和#define vPortSVCHandler SVC_Handler。
圖6 帶隔離的串口通信電路 圖7 帶隔離的USB通信電路
(3)在main.c主程序添加#include AD7172_2_regs.h、#define AD7172_2_INIT:新建開始任務(wù)、采樣任務(wù)和傳輸任務(wù),定義任務(wù)優(yōu)先級、堆棧大小、任務(wù)句柄和任務(wù)函數(shù);實現(xiàn)3個任務(wù)函數(shù),其中開始任務(wù)函數(shù)調(diào)用xTaskCreate創(chuàng)建采樣和傳輸任務(wù),之后在main函數(shù)初始化AD7172,調(diào)用xTaskCreate創(chuàng)建開始任務(wù),開啟任務(wù)調(diào)度。ADI提供了與AD7172有關(guān)的驅(qū)動,包括Generic Platform Driver和ADI Driver兩部分,前者包括通信相關(guān)的函數(shù),本文采用SPI通信,如spi_init、spi_write_and_read等,后者包括AD的寄存器設(shè)置、讀寫等函數(shù),如AD7172_Init、AD7172_ReadData等,官網(wǎng)下載后導(dǎo)入工程,要根據(jù)硬件連接和軟件功能對驅(qū)動做些許修改。
3.2.1 H2數(shù)據(jù)庫
考慮到應(yīng)用的數(shù)據(jù)存儲需求較為簡單,沒有大數(shù)據(jù)集合、高并發(fā)高流量等操作,且PC機硬件配置一般,采用java編寫的輕量級H2數(shù)據(jù)庫。H2具備優(yōu)秀的跨平臺特性,本身是一個java的類庫,只有一個jar文件,應(yīng)用簡單,可以直接嵌入項目。H2支持遠程(服務(wù)器)、嵌入式和內(nèi)存3種連接模式:嵌入式模式下可實現(xiàn)JDBC的本地連接,此時應(yīng)用程序通過JDBC從同一個JVM中打開數(shù)據(jù)庫,該模式的連接速度最快。遠程模式下可以使用TCP/IP實現(xiàn)數(shù)據(jù)庫連接,速度比嵌入式模式要慢,但是對數(shù)據(jù)庫的并發(fā)連接數(shù)量沒有限制。H2數(shù)據(jù)庫因為支持內(nèi)存模式又被成為內(nèi)存數(shù)據(jù)庫,該模式下的數(shù)據(jù)庫和表都保存在內(nèi)存中,一旦機器重啟所有數(shù)據(jù)都會丟失,本文采用服務(wù)器模式。
H2安裝配置流程如下:① 數(shù)據(jù)庫安裝:在h2database官網(wǎng)下載壓縮包,解壓后即完成安裝。目錄結(jié)構(gòu)包括bin、docs、service、src、build.bat和build.sh。其中h2的jar包和驅(qū)動在bin下的h2-XXXX.jar中。h2.bat/sh分別是Windows和Linux下的啟動腳本。service文件夾里是通過wrapper包裝的服務(wù),src里是h2的源代碼。② 數(shù)據(jù)庫啟動:windows下可直接運行h2.bat或h2w.bat,其中后者是在后臺運行的。如果是Linux環(huán)境,要先修改h2.bat的內(nèi)容,添加允許遠程機通過TCP(-tcpAllowOthers)、瀏覽器(-webAllowOthers)的訪問,默認端口是8082,根據(jù)需要進行修改。之后chmod h2.bat文件的權(quán)限并運行./h2.sh。③ 數(shù)據(jù)庫配置:執(zhí)行h2.bat/sh后會自動進入H2的webconsole,也可以通過URL:localhost:端口號登錄。webconsole提供了對H2數(shù)據(jù)庫的各種操作,驅(qū)動類和JDBC URL是默認的,如果要創(chuàng)建一個新的數(shù)據(jù)庫,直接修改jdbc:h2:[要創(chuàng)建數(shù)據(jù)庫文件的路徑]。④ 數(shù)據(jù)庫操作,測試連接成功后,連接登錄到某數(shù)據(jù)庫的webConsole,執(zhí)行SQL語句進行各種數(shù)據(jù)庫操作。
3.2.2 上位機界面
應(yīng)用LabVIEW開發(fā)串口和USB上位機界面, LabVIEW串口通信需要安裝VISA驅(qū)動,NI官網(wǎng)提供下載。串口通信包括3個部分:① 設(shè)置串口參數(shù),應(yīng)用VISA配置串口.vi。② 讀串口數(shù)據(jù),應(yīng)用VISA讀取.vi,Read=T并且沒有出錯的條件下讀取串口數(shù)據(jù)。VISA 讀取最關(guān)鍵的參數(shù)是要讀取的字節(jié)總數(shù),如果緩沖區(qū)的數(shù)據(jù)沒有達到要讀取的個數(shù),程序會停在這里直到發(fā)生超時錯誤。可以在編程時事先約定好,也可以采用串口屬性節(jié)點bytes at port解決,它表示緩沖區(qū)有多少字節(jié)就讀取多少字節(jié),避免等待超時問題。③ 關(guān)閉串口,應(yīng)用VISA關(guān)閉.vi,考慮到可能會出現(xiàn)的措施,在VISA關(guān)閉.vi后連接Simple Error Handler.vi用于顯示錯誤信息。
3.2.3 數(shù)據(jù)存儲
LabVIEW不具備讀寫數(shù)據(jù)庫功能,需要額外的輔助工具,常用的有NI官方的sqltoolkit(要付費),調(diào)用.dll庫文件(如sqlite3提供的sqlite3.dll,工作量較大),SQL語句調(diào)用ActiveX功能與ADO控件(涉及到的技術(shù)較多)和第三方插件(直接調(diào)用vi)等方式,本文采用第三方插件labsql實現(xiàn)串口數(shù)據(jù)的存儲功能。labsql支持windows下基于ODBC的數(shù)據(jù)庫操作,安裝簡單,把解壓后的文件夾放到LabVIEW安裝目錄下的user.lib目錄下即可。操作流程如下:ADO Create Conn.vi創(chuàng)建connection對象,ADO Open Conn.vi實現(xiàn)與數(shù)據(jù)庫的連接,ADO SQL Execute.vi執(zhí)行insert語句,把從端口讀取的數(shù)據(jù)插入到數(shù)據(jù)庫中,ADO Connection Close.vi關(guān)閉連接。這里最關(guān)鍵的是ADO Open Conn.vi的參數(shù)DSN,在配置ODBC數(shù)據(jù)源時指定。H2沒有提供ODBC的驅(qū)動,查閱官方資料H2支持PostgreSQL的ODBC驅(qū)動,推薦安裝psqlodbc-08_02*或更新的版本。ODBC驅(qū)動安裝完成后,執(zhí)行java-cp h2*.jar org.h2.tools.Server啟動H2服務(wù)器功能。之后打開數(shù)據(jù)源配置,添加PostgreSQL Unicode驅(qū)動,進入配置界面配置參數(shù)(DSN、服務(wù)器、端口號、用戶名、密碼、數(shù)據(jù)庫等),測試通過后把DSN參數(shù)傳遞給ADO Open Conn.vi就可以打開數(shù)據(jù)庫了。如果是64位系統(tǒng),運行c:/windows/syswow64/odbcad32.exe打開數(shù)據(jù)源配置,之后的操作都是一樣的。
3.2.4 自動云端存儲
考慮到學校服務(wù)器的硬件性能較差且使用時間較久,基于java編寫數(shù)據(jù)自動騰訊云端存儲程序connectcloud.java,提高存儲的可靠性。為了避免上傳失敗,事先要把存儲桶的權(quán)限設(shè)置為讀公有、寫私有。IDE開發(fā)環(huán)境需要JDK1.7及以上版本,可以在maven的pom.xml添加依賴,也可以直接下載官方源碼,再通過maven導(dǎo)入。
(1)導(dǎo)入COS Java SDK包(com.qcloud.cos.*),為了調(diào)用COS的 API 接口,要實例化COSClient,實例具備線程安全和可重復(fù)性的特點。定義connectcloud類,包括騰訊云的用戶、密碼、存儲桶名稱和所在區(qū)域等變量。構(gòu)造方法初始化騰訊云客戶端:首先初始化用戶身份信息,其次設(shè)置bucket的區(qū)域,最后生成一個COSClient對象。
(2)本地文件上傳到COS很適合小文件上傳(20 M以下),最大不超過5 G。實現(xiàn)核心上傳函數(shù)upload,包含要上傳的文件(file)和COS上對象鍵(key)兩個參數(shù)。根據(jù)官方提供的javaSdk API參考文檔,采用try catch結(jié)構(gòu),捕捉CosServiceException serverException和CosClientException clientException異常,關(guān)鍵代碼如下:
public PutObjectResult upload(String file, String key)
{try{
File localfile = new File(file);
PutObjectRequest putObjectRequest = new PutObjectRequest(存儲桶名稱, key, localfile);
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
連鎖藥店承接基層醫(yī)療衛(wèi)生機構(gòu)藥房職能可行性的調(diào)查分析 ……………………………………………… 周梅梅等(19):2699
return putObjectResult;
}catch(CosServiceException serverException)
{ 異常處理 }
catch(CosClientException clientException)
{ 異常處理 }}
(3)實現(xiàn)確認文件上傳成功的查詢函數(shù)queryfilelist(),如果是自己的存儲桶,可以直接登錄查看,但考慮到普遍性,采用查詢函數(shù)的方法更方便,關(guān)鍵代碼如下:
public List
{
List
try {
buckets = cosClient.listBuckets();
System.out.println(buckets);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
return buckets;
}
采用S1226光電二極管 + 串口通信進行系統(tǒng)測試,頻率響應(yīng)范圍從紫外光到可見光,分流電阻RSHUNT為5 G,分流電容CSHUNT是35 pF,輸入共模電壓0 V,能支持的最大光電流約500 pA??紤]到環(huán)境溫度情況,最大值不超過60 ℃,如表1所示,總誤差RTI不超過150 fA,是滿量程的3,滿足檢測需求,檢測上位機界面如圖8所示。
表1 直流誤差預(yù)算
圖8 上位機界面
本文設(shè)計了pA級電流檢測系統(tǒng),詳細介紹了IV轉(zhuǎn)換電路關(guān)鍵參數(shù)選擇、AD采樣電路的配置流程、數(shù)字隔離電路的基本原理和應(yīng)用注意事項?;贚abVIEW+ VISA+labsql+H2實現(xiàn)了不同的上位機程序和數(shù)據(jù)存儲功能,應(yīng)用java提供了數(shù)據(jù)庫文件的云端上傳。測試表明系統(tǒng)可以檢測到pA級微弱電流信號,具有良好的穩(wěn)定性和可靠性,滿足應(yīng)用需求。