盧秀和, 陳 楠, 王艷雙
(長春工業大學 電氣與電子工程學院,吉林 長春 130012)
A/D轉換是PIC18F4520單片機一個主要的組成模塊,由于單片機只能對數字量進行識別,這時就需要設置一種模擬接口,用于把連續不斷的模擬量轉換成一系列不連續的、離散的數字信號,以方便對所需監控的狀態進行讀取[1]。
PIC18F4520單片機的A/D模塊為10位A/D,占用兩個數據存儲器,即低地址的8位和高地址的低2位[2]。
這樣看來,如果所采集的信號為直流信號時,就會轉換出相同的數字量,反之,當采集的信號為非直流信號時,就會轉換出不同的數字量。由于一些系統需要對一些非直流信號進行實時的監控,這樣就無形中加大了對單片機的工作約束。文中提出一種相對于傳統對順序多路非直流信號采集時的方法——循環中斷式采集。這種方法相對于傳統的方法,降低了單片機對執行程序時間的要求,同時提高了采集精度。
A/D采集運用到剩余電流探測器(電器火災監控探測器的一種,通常含有四路A/D采集信號)中,如果采用常規順序A/D采集方法,不僅加大了PIC18F4520單片機對程序執行時間的要求,同時還降低了系統的精度。采用循環中斷式采集方法時,相對于常規方法來說,不僅降低了程序執行的時間,同時加大了系統的精度。
通過分立式剩余電流探頭分別檢測出四路剩余電流,接入機器的四路輸入,然后對每路電流進行整流,運用單項橋式整流電路,去掉四路信號中小于0的波形,然后送入運算放大器中進行放大,同時完成了把電流信號轉換成電壓信號進行采集,將輸出的電壓信號傳入PIC18F4520單片機中進行采集。放大電路如圖1所示[3-4]。

圖1 模擬輸入信號處理電路
由于PIC18F4520單片機內部的A/D模塊供電電壓為5V,因此,在設計此電路時必須保證運算放大器輸出到A/D接口的波形最大值不得超于5V,否則導致單片機燒毀。
搭建硬件電路的系統框圖如圖2所示。

圖2 系統框圖
通過示波器測量,四路波形如圖3和圖4所示。

圖3 第一路A/D波形

圖4 后三路A/D波形
從圖中可以看出,所采集的波形周期為20ms,四路 A/D 的平均值分別為230,73,73,73mV。為了提高精度,設置一周期采集的點數為64點,這樣要求系統在完成一次完整的循環時間(包括四路A/D數據處理時間與系統其它程序執行時間)為20ms/64=312μs,系統要求對四路模擬量進行采集,而且要求必須是實時監控。
PIC18F4520采用的A/D電壓為內部電壓,即5V,為10位 A/D,A/D數據換算公式[5]:

分別把230mV,73mV代入式(1),得到四路 A/D采集數據為:47,14,14,14,轉化成十六進制數為0x002F,0x000E,0x000E,0x000E。
主要介紹用到的兩種濾波程序。為了進一步提高A/D采集精度,運用了3點去壞值和滑動平均值濾波兩種濾波程序[6]。
3點去壞值:在定時器定時312μs的時間內,對所采集的模擬信號連續采集3個數據,然后進行3個數據的比較,去掉最大值與最小值,留下中間值作為本次采集所得值,然后將此數據送入滑動平均值濾波區,進行滑動平均值濾波[7]。
滑動平均值濾波:對四路A/D分別在數據存儲器中開啟占有64個12位的數據存儲區,把經過3點去壞值的數據放入此存儲區內,當放滿64個數據后,算出此時的平均值,作為模擬輸入量的平均值,然后當下一個經過3點去壞值的數據來之前,對濾波存儲區內的數據進行循環左移,即把第1個數據去除,第2個數據賦值給第1個,以此類推,最終把第64個數據賦值給63,然后把此時經過3點去壞值的數據賦值給第64位,以后當每次采集得到數據時,都經過此方法進行循環左移。算出每次濾波區的平均值即可[8]。
為了更加準確地證明相對于常規順序采集方法,文中提出的循環中斷式采集方法能夠更加準確地采集模擬信號,對兩種方法都進行了編寫相應的實驗程序。
簡單的理解方法就是,當采集完第一路A/D模擬量時,馬上開始對第二路A/D數據進行采集,依次類推第三路與第四路。系統采集流程圖如圖5所示。

圖5 常規順序A/D采集方法流程圖
從圖中可以看出,此方法要求四路A/D的采集時間與數據處理時間要求在一次定時器定時之內完成,這樣就可能出現程序執行過程時間過長,大于定時器定時時間,導致不能正確采集四路模擬量,從而不能得到正確的數字量。
經過編寫相應的實驗程序發現,如果采集點數為64點系統無法得到正確的平均值,為了能得到正確的平均值,只好減少點數,這樣才能在規定的時間內完成系統程序,直到減少到16點后,才得以成功,這樣就要求定時器定時為20ms/16=1.25ms。系統采集數據見表1。
從數據的變化可以看出,完全符合波形變化。但是此種方法由于采樣點數的減少,從而加大了誤差,而且對時間的要求非常嚴格。
通過采集的數據可以得到平均值為0x002A,0x000B,0x000B,0x000A,對應的十進制為42,11,11,10,相對于測得的數據47,14,14,14,可以算出誤差比例為10%,21%,21%,38%。

表1 常規順序A/D采集所得數據
本方法是在系統采集完一路A/D模擬量之后,進行A/D數據處理程序與系統其它程序的執行,在第二次進入定時器中斷后,開始對第二路A/D模擬量的采集,以此類推第三路與第四路。系統采集流程如圖6所示。

圖6 循環中斷式采集流程圖
從圖中可以看出,此方法只需要求對一路A/D采集時間與數據處理時間在一次定時器定時之內完成,不管采集的模擬量為四路或者更多,都不會影響系統對時間的嚴格要求。
經過編寫相應的實驗程序,可以得到正確的平均值,由于采集點數為64點,從而加大了精確度。系統采集數據見表2。

表2 循環中斷采集所得數據
通過采集的數據可以得到平均值為0x002E,0x000E,0x000E,0x000D,對應的十進制為46,14,14,13,相對于測得的數據47,14,14,14,可以算出誤差比例為2%,0,0,7%。
通過兩種實驗對比,可以得到一些性能指標參數的對比數據,見表3[8]。

表3 兩種方法參數對比
經過實驗驗證,相比于傳統的實驗方法,文中提出的循環中斷式采集方法在占機時間上為常規方法的1/4,為系統執行其它程序釋放了相當大的時間,在使用PIC18F4520單片的程序存儲器少于常規方法,同時提高了系統的采集精度[9]。運用到剩余電流檢測器中,保證了機器本身更加準確的運行、及時的報警以及相應的處理工作。
[1] 宋大維,崔友,孫鵬遠,等.基于 RS-485總線的高壓設備智能試驗臺[J].長春工業大學學報:自然科學版,2003,24(4):56-58.
[2] 劉啟中,李榮正,王力生,等.PIC單片機原理及應用[M].北京:北京航空航天大學出版社,2003.
[3] 勒孝峰.模擬電子技術[M].北京:北京航空航天大學出版社,2009.
[4] 林渭勛.現代電力電子技術[M].北京:機械工業出版社,2006.
[5] W·H·高斯曼.數字電子學[M].李昔.譯.北京:國防工業出版社,1985.
[6] 劉和平.PIC18Fxxx單片機程序設計及應用[M].北京:北京航空航天大學出版社,2005.
[7] 明日科技,王娣,安劍,等.C語言程序開發范例寶典[M].北京:人民郵電出版社,2010.
[8] 龍宏波,葉曉慧,譚思煒.歸一化加權平均值算法在測量中的應用[J].電光與控制,2010,17(12):2-3.
[9] 李頡,呂強中.PIC單片機A/D轉換數據存儲及串口效率[J].機械工程與自動化,2006(3):5-6.