侯志偉, 杜青青, 包理群
(1.蘭州石化職業(yè)技術(shù)學(xué)院 電子電氣工程學(xué)院,甘肅 蘭州 730060;2.蘭州工業(yè)學(xué)院 電子信息工程學(xué)院,甘肅 蘭州 730050)
隨著新興技術(shù)領(lǐng)域的迅速發(fā)展,電容式傳感器檢測技術(shù)具有結(jié)構(gòu)簡單、分辨率高、動態(tài)響應(yīng)特性好等優(yōu)點,廣泛應(yīng)用于智慧農(nóng)業(yè)、環(huán)境保護、醫(yī)療設(shè)備等諸多相關(guān)應(yīng)用領(lǐng)域位移、壓力、角度、振動、速度等常見物理量的高精度測量[1],例如藜麥水分快速檢測[2]、機油品質(zhì)[3]、密閉管道人體掉入探測[4]、肥箱料位[5]等。微小電容的檢測方法主要有直流電源開關(guān)充放電式、運算放大器式、交流激勵式、調(diào)頻式[6-8]等,將常見物理量的變化量轉(zhuǎn)化為微小電容的變化量,采用信號調(diào)理電路轉(zhuǎn)化為電流、電壓和頻率的變化量,其中電流和電壓信號可采用ADC轉(zhuǎn)換來實現(xiàn)檢測,頻率信號可在時域中采用直接測頻法、間接測頻法及等精度測頻法,也可在頻域中采用FFT蝶形運算實現(xiàn)頻率測量。
對于電容式傳感器間接測量位移、壓力、速度等物理量的實際問題,本文設(shè)計了一種基于恩智浦i.MX RT1052處理器的微小電容測量系統(tǒng),采用方波振蕩電路將電容的變化量轉(zhuǎn)換為頻率的變化量,被測電容調(diào)理電路輸出的信號經(jīng)過ADC采樣,利用快速傅里葉蝶形運算,計算最大幅度值對應(yīng)的主要頻率成分值,達到了微小電容值檢測的實際應(yīng)用需求。
微小電容測量系統(tǒng)總體結(jié)構(gòu)框圖如圖1所示。
圖1 系統(tǒng)總體結(jié)構(gòu)框圖
該微小電容測量系統(tǒng)主要由恩智浦i.MX RT1052處理器組成最小系統(tǒng)、被測電容信號調(diào)理電路、片內(nèi)ADC外部GPIO(General Purpose I/O Ports, 通用輸入/輸出端口)為接口、UART串口、TFT-LCD顯示、機械按鍵、SDRAM(Synchronous Dynamic Random Access Memory,同步動態(tài)隨機存儲器)、數(shù)據(jù)存儲器E2PROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲器)、JTAG接口等構(gòu)成。其中,被測電容通過信號調(diào)理電路將電容的變化量轉(zhuǎn)換為頻率的變化量,其輸出信號連接至外部GPIO接口,采用定時器PIT(Periodic Interrupt Timer, 周期中斷計數(shù)/定時器)產(chǎn)生周期性觸發(fā)信號來實現(xiàn)設(shè)定采樣頻率,利用XBAR(one or more inter-peripheral crossbar switch, 一個或多個外設(shè)交錯開關(guān))連接到ADC_ETC(ADC External Trigger Control, ADC外部觸發(fā)控制)觸發(fā)請求輸入,采樣被測電容通過信號調(diào)理電路輸出電壓,利用快速傅里葉變換,計算最大幅度值對應(yīng)的主要頻率成分值,從而得出微小電容值。機械按鍵用來標定標稱電容,將標定值存放至數(shù)據(jù)存儲器E2PROM。UART接口用來打印程序運行過程信息,TFT-LCD顯示屏用來顯示電容值,JTAG接口用來調(diào)試、下載軟件程序。
被測電容調(diào)理電路由方波振蕩電路、同相滯回比較電路和分壓電路構(gòu)成,如圖2所示。方波振蕩電路由反向輸入的滯回比較器和RC充放電回路組成,滯回比較器引入正反饋,RC充放電回路既作為延遲環(huán)節(jié),又作為負反饋網(wǎng)絡(luò),以實現(xiàn)輸出狀態(tài)的翻轉(zhuǎn)。同相滯回比較電路采用正反饋截取方波振蕩電路的正半周,采用分壓電路輸出0~3.3V的方波信號。其中DZ1、DZ2為雙向穩(wěn)壓管,穩(wěn)壓值為5~6V。
圖2 方波振蕩電路
當UO輸出為UZ時,UO通過R1、R2對Cin(為Cx和C1并聯(lián))充電,直到C上的電壓UC上升到門限電壓UT,輸出UO反轉(zhuǎn)為-UZ,電容Cin通過R1、R2放電,當Cin上的電壓UC下降到門限電壓-UT,輸出UO再次反轉(zhuǎn)為UZ,此過程周而復(fù)始輸出方波。
根據(jù)電容充放電過程,振蕩頻率計算如下:
式(1)中,Cin=C1+Cx。
為校準寄生電容和雜散電容的影響誤差,測量校準點0pF和47pF時的頻率值,記錄對應(yīng)的結(jié)果為f0和f47,則實際電容值可由下面的公式計算得到:
本文微小電容測量系統(tǒng)軟件部分主要包括系統(tǒng)初始化模塊、標稱電容標定模塊、ADC采樣模塊、SDRAM數(shù)據(jù)緩存模塊、按鍵模塊、TFT-LCD顯示模塊、E2PROM讀寫模塊,系統(tǒng)主程序流程圖如圖3所示。
圖3 系統(tǒng)主程序流程圖
電容校準模塊采用跳線短路帽接入標稱電容,按下按鍵將測量值存儲至E2PROM,TFT-LCD顯示模塊采用STemWin圖形界面庫。
ADC采樣程序主要為ADC寄存器初始化,設(shè)置轉(zhuǎn)換通道號及啟動定時器PIT轉(zhuǎn)換。其中ADC采樣初始化主要為ADC模塊初始化、XBARA交錯開關(guān)配置、定時器PIT配置、ADC外部觸發(fā)控制的配置。i.MX RT1052處理器具有ADC的硬件求平均值、自動硬件校準功能,主要配置如下:
/* Initialize the ADC module. */
ADC_GetDefaultConfig(&k_adcConfig);
k_adcConfig.resolution = kADC_Resolution12Bit;
ADC_Init(IMXRT_ADC_BASE, &k_adcConfig);
ADC_EnableHardwareTrigger(IMXRT_ADC_BASE, true);
adcChannelConfigStruct.enableInterruptOnConversionCompleted = false;
ADC_SetChannelConfig(IMXRT_ADC_BASE, IMXRT_ADC_CHANNEL_GROUP, &adcChannelConfigStruct);
ADC_SetHardwareAverageConfig(IMXRT_ADC_BASE, kADC_HardwareAverageCount32);
/* Do auto hardware calibration. */
ADC_DoAutoCalibration(IMXRT_ADC_BASE) ;
/* Init xbara module. */
XBARA_Init(IMXRT_XBARA_BASE);
/* Configure the XBARA signal connections. */
XBARA_SetSignalsConnection(IMXRT_XBARA_BASE, IMXRT_XBARA_INPUT_PITCH0, IMXRT_XBARA_OUTPUT_ADC_ETC);
/* Init pit module */
PIT_GetDefaultConfig(&pitConfig);
PIT_Init(PIT, &pitConfig);
PIT_SetTimerPeriod(PIT, kPIT_Chnl_0, USEC_TO_COUNT(10U, PIT_SOURCE_CLOCK));
NVIC_SetPriority(ADC_ETC_IRQ0_IRQn, 2);
EnableIRQ(ADC_ETC_IRQ0_IRQn);
為了便于靈活轉(zhuǎn)換通道號,采用DC1HC0_ADCH設(shè)置需要轉(zhuǎn)換的通道,啟動定時器PIT開始轉(zhuǎn)換,設(shè)置如下:
// 數(shù)據(jù)緩存清0
memset((void *)p->ADC_BUF, 0, p->ADC_SIZE);
// 設(shè)置ADC轉(zhuǎn)換通道
DC1HC0_ADCH = IMXRT_ADC1_IN12_CHNL;
// 啟動定時器PIT
PIT_StartTimer(PIT, kPIT_Chnl_0);
式(4)中,X(k)有N個點,以N為周期;X1(k)、X2(k)有N/2個點,以N/2為周期。
將式(4)寫為前半部分和后半部分,則為如下形式:
按時間抽取DFT,以奇偶序列逐級分解,得出N點FFT運算蝶形流圖,如圖4所示。
圖4 N=8點FFT運算蝶形流圖
圖4中,蝶形運算符左邊兩路為輸入,右邊兩路為輸出,中間以一個小圓點表示加、減運算,其中右上路為相加后輸出、左下路為相減后輸出,1個蝶形運算需1次復(fù)乘,2次復(fù)加。
從FFT運算蝶形流圖可找出碼位順序、旋轉(zhuǎn)因子、蝶形間距的變化規(guī)律,設(shè)序列x(n)經(jīng)時域抽選(倒序)后,存入數(shù)組X中,若蝶形運算的兩個輸入數(shù)據(jù)相距B(B=2L-1)個點,則蝶形運算可表示成如下形式:
式(6)中,p=J·2M-L,J=0,1,…,2L-1-1,L=1,2,…,M,L表示第L級運算,為同一旋轉(zhuǎn)因子p=J·2M-L的蝶形間距,XL(J)表示第L級運算后數(shù)組元素X(J)的值。
DIT-FFT運算流程如圖5所示。
圖5 FFT算法流程圖
圖5中,輸入自然順序序列x(n),以倒位序規(guī)律進行碼位倒序處理輸出自然序,確定運算的級數(shù)L=1,2,…,M(N=2M),蝶形兩個輸入數(shù)據(jù)的間距為B=2L-1,第L級旋轉(zhuǎn)因子指數(shù)為p=J·2M-L,其中J=0,1,…,B-1。同一旋轉(zhuǎn)因子,同一級2M-L個蝶形運算中k的取值范圍從J到N-1,步長值為2L。
采用反向輸入的滯回比較器和RC回路組成的方波振蕩電路,將電容的變化量轉(zhuǎn)換為頻率的變化量,被測電容調(diào)理電路輸出的信號經(jīng)過恩智浦i.MX RT1052處理器片內(nèi)ADC采樣16*1024個點,將ADC轉(zhuǎn)換數(shù)據(jù)利用快速傅里葉蝶形運算,計算最大幅度值對應(yīng)的主要頻率成分值,從而得出微小電容值,其實驗測量結(jié)果如表1所示。
表1 實驗測量結(jié)果
從表1可以得出,該微小電容測量系統(tǒng)的最大測量誤差為0.46pF。
本文設(shè)計了一種基于恩智浦i.MX RT1052處理器的微小電容測量系統(tǒng),并將該技術(shù)方案多次反復(fù)測試,實驗結(jié)果表明,該微小電容測量系統(tǒng)的最大測量誤差為0.46pF,具有抗干擾強、可靠性高、穩(wěn)定性好等優(yōu)勢,能夠有效滿足微小電容值檢測的實際應(yīng)用需求,具有較高的實用價值和較好的應(yīng)用前景。