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