//Logo Image
作者:陳明周(2002-02-01),推薦:徐業良(2002-02-04)

單晶片實習—類比數位轉換

一般做類比數位轉換,多為使用A/D卡或微處理器擷取訊號。A/D卡價格昂貴,使用界面不易,且需要固定PC為後援;早期的微處理器如8051,無法直接偵測類比訊號,需透過外加類比∕數位轉換器(A/D converter),均不甚方便。本文介紹使用內崁A/D converter的單晶片PIC16F877擷取類比訊號的方法,提供一個不同的選擇。

1.     PIC16F877A/D Channel簡介

PIC16F877可允許8channel的類比訊號輸入,同一時間只能輸入一組,輸入範圍為0~5V,精確度為10位元,可解析至4.9mV,輸入類比信號經過轉換後可得0~1023的數值,透過公式(1)即可得正確電壓。輸入的類比信號的參考準位電壓可以選擇是單晶片的供應電壓VDD為準,或是從RA2/AN2/VREF-RA3/AN3/VREF+接腳輸入外部提供的電壓準位。

        (V)                                                                                     (1)

類比訊號進入PIC後,會對一個電容器充電,電容充飽至其電壓等於輸入電壓,再利用電容上的電壓作為A/D轉換電路的輸入電壓,電容器充電須要一段時間稱為“要求擷取時間(acquisition time)”,在PIC16F877上約為80ms,進行A/D轉換也須時約20ms,稱為“A/D轉換時間(A/D Convert Time)”,相加得知最快取樣時間為100ms,即擷取頻率最快可到10MHz

PIC16F877可做類比輸入之接腳為PORTARA0~3, 5PORTERE0~2Port A的接腳亦可做普通的數位輸出輸入,但在微處理器被重置(main clear)後,會自動成為類比輸入狀態,RA4跳過是因為並沒有連接到PIC16F877內崁的A/D converterPORTE可做為雙向I/O埠,其週邊模組包括A/D converter和平行從屬埠控制位元,在做為A/D轉換通道時須設定為輸入接腳。

2.     A/D轉換程式說明

1為以C語言撰寫之A/D轉換程式,使用CCS-C編譯器轉成組合語言並燒入PIC,將欲測量之電壓如圖2接於RA0PIC就會每隔100ms透過RS232傳回電壓值。以下說明此A/D轉換程式,已於“單晶片實習—數位輸出”一文介紹過的指令則不再說明。

1. A/D轉換程式

2. 測電壓電路圖

#device  ADC=10

此為CCS Compiler內建函式數指令,表精確度為十位元,意指每為一刻度,電壓在(0~4.9)mV之間會顯示0(4.9~9.8)mV會顯示1…,餘類推。

setup_adc_ports(ALL_ANALOG);

設定RA0~3, 5RE0~2等八個腳位為analog input,此八個腳位也亦可做為digital input

set_adc_channel(0);

此為CCS Compiler內建函式數指令,由括號內之數值設定read_adc()所傳回之值與腳位的對應關係,其關係如表1

1. acd channel 與腳位對應表

set_adc channel( )

0

1

2

3

4

5

6

7

腳位

RA0

RA1

RA2

RA3

RA5

RE0

RE1

RE2

delay_us(80);

此為CCS Compiler內建函數指令,讀取腳位確定後,取樣電容須要一段時間充電至與外部電壓相同,括號內之數值為取樣延遲時間,80ms為一保守值,最低可降至55ms,但所取得數值精確性亦降低。

ad_data=read_adc();

此為CCS Compiler內建函數指令,此指令會由set_adc_channel(0-7)所指定的腳位讀入數值,並放入變數“ad-data”,亦可利用公式(1)換算為一般電壓。A/D轉換模組在運作時須要一段時間,不過此行之後不須連接delay_us(time)指令,因為CCS Compiler已將此考慮進去,執行“ad_data= read_adc();”須時20ms,故其後可直接使用列印指令。

3.     讀取多筆類比訊號

在同一時間A/D轉換器只能處理一個通道的A/D轉換,欲讀取多筆類比訊號時,就必須在一筆A/D轉換完成後,重新設定新的A/D通道,圖3為同時讀取兩組訊號的程式範例,圖4則說明程式流程及類比信號進入PIC後的處理過程與程式的關係。

3. 同時讀取兩組訊號的程式範例

4. 程式流程圖

參考資料

*盧春林編著,PIC16F877微處理器技術精解,國科出版社,2001

*何信龍、李雪銀編著,PIC16F877快速上手,全華科技,2000