2011年6月7日 星期二

Chapter 7

註: 本文為中文翻譯,原文請見底下網址:

http://www.mikroe.com/eng/chapters/view/6/chapter-5-ccp-modules/

TOC Introduction Ch. 1 Ch. 2 Ch. 3 Ch 4. Ch. 5 Ch. 6 Ch. 7 Ch. 8 Ch. 9 App. A App. B App. C

Chapter 7: Analog Modules

除了大量的數位  I/O 線路外,PIC16F887 還包含了 14 個 類比輸入 (analog inputs)。不僅可以辨識腳位訊號為邏輯 0 或 1 ( 0 或 +5V),這些腳位使得微控制器也可以精確的測量其電壓,而且可以把它們轉換成數值,亦即數位格式。整個過程發生於 A/D 轉換器模組,該模組具有以下特性:

● 轉換器使用逐次逼近 (successive approximation) 的方法產生一個 10 位元的結果,並且將轉換結果儲存到 ADC 暫存器(ADRESL 和 ADRESH);

● 總共有 14 個獨立的 analog inputs;

● A/D 轉換器可以把 analog inputs 訊號轉換成 10 位元的二進位數值以表示該訊號; 及

● 透過選擇參考電壓 (voltage references) Vref- 和 Vref+,可以根據不同需要調整最小解析度和轉換品質。

ADC 模式與暫存器

雖然 A/D 轉換器的使用好像很複雜,它基本上是很簡單的,至少比計時器和序列通訊模組還簡單。

image
Fig. 7-1 ADC Mode and Registers

 

這個模組受 4 個暫存器控制:

● ADRESH – 含有轉換結果的高位元組;

● ADDRESL – 含有轉換結果的低位元組;

● ADCON0 – 控制暫存器 0; 及

● ADCON1 – 控制暫存器 1。

ADRESH and ADRESL 暫存器

當把一個類比數值轉換成數位數值後,A/D 轉換的 10 位元結果會被儲存在這兩個暫存器中。為了方便處理,轉換結果可以以兩種格式呈現: 向左靠齊 (left justified) 和向右靠齊 (right justified)。ADCON1 暫存器的 ADFM 位元決定轉換結果的格式 (見下圖)。在 A/D 轉換沒在使用的時候,這兩個暫存器可以當作通用暫存器 (general-purpose registers) 使用。

image
Fig. 7-2 ADRESH and ADRESL Registers

A/D 獲取需求 (Acquisition Requirements)

為了讓 ADC 符合特定的準確性,必須在選擇特定 analog input 與測量電壓之間提供一定的延遲時間。這個時間稱為 "獲取時間 (acquisition time)",而且主要取決於來源阻抗 (source impedance)。這個時間的計算有一個公式,在最壞的情況下大約為 20 uS。簡而言之,在選擇 (或改變) 類比輸入後,而且在開始進行轉換之前,必須提供至少 20uS 的延遲時間以啟用 ADC 最大的轉換準確度。

ADC 時脈週期 (Clock Period)

完成 1 個位元的轉換所需的時間定義為 TAD。所需的 TAD 至少必須 1.6uS。一個完整的 10位元 A/D 轉換會比預期長一些,估計約為 11 個 TAD 週期。然而,由於轉換的頻率和來源是由軟體決定的,在對某個 analog input 開始測量電壓之前,必須先從 ADCS1 和 ADCS0 位元的組合中選擇一種組合。這兩個位元儲存在 ADCON0 暫存器。

image

如何使用 A/D 轉換器?

為了啟用 A/D 轉換器,而且為了避免問題與非預期的結果,有必要考慮下列事情:

● A/D 轉換器不會區別數位和類比電壓。為了避免測量中的錯誤或損毀晶片,在轉換開始前腳位應該設置為 analog input。用來設定為 analog input 的位元儲存在 TRIS 和 ANSELH 暫存器裏;

● 當標記為 CH0-CH13 的 analog inputs 的 port 被讀取時,對應的位元將被設定成邏輯 0; 及

● 粗略地說,轉換器裏的電壓測量是基於比較輸入電壓與內部的刻度尺 (internal scale),刻度尺有 1024 個刻度 (2^10=1024)。最低的刻度代表 Vref- 電壓,而最高的刻則代表 Vref+ 電壓。下圖顯示可供選擇的參考電壓,以及它們的最小和最大值。

image
Fig. 7-3 How to Use The A/D Converter

ADCON0 暫存器

image
Fig. 7-4 ADCON0 Register

image

ADCON1 暫存器

image
Fig. 7-5 ADCON1 Register

image

簡單的說:

為了透過 A/D 轉換器測量某個輸入腳位的電壓,應該做下列事情:

步驟 1 – 設置 port:

● 把邏輯 1 (1) 寫到 TRIS 暫存器對應的位元以將 por t設置成輸入; 及

● 把邏輯 1 (1) 寫到 ANSEL 暫存器對應的位元以將 port 設置成類比輸入。

步驟 2 – 設置 ADC 模組:

● 在 ADCON1 暫存器裏設置參考電壓;

● 在 ADCON0 暫存器裏選擇 ADC 轉換時脈;

● 在 ADCON0 暫存器裏選擇 CH0-CH13 其中一個輸入頻道 (input channel);

● 使用 ADCON1 暫存器的 ADFM 位元選擇資料格式; 及

● 設定 ADCON0 暫存器的 ADON 位元以啟用 A/D 轉換器。

步驟 3 – 設置 ADC 中斷 (選擇性的):

● 清除 ADIF 位元; 及

● 設定 ADIE, PEIE 和 GIE 位元。

步驟 4 – 等待所需的獲得時間 (acquisition time, 大約 20uS) 經過。

步驟 5 – 設定 ADCON0 暫存器的 GO/DONE 位元啟動轉換。

步驟 6 – 等待 ADC 轉換完畢。

● 必須在程式迴圈裏檢查 GO/DONE 位元被清除與否,或者等待 A/D 中斷 (必須在之前啟用)。

步驟 7 – 讀取 ADC 結果:

● 讀取 ADRESH 和 ADRESL 暫存器。

類比比較器 (Analog Comparator)

除了 A/D 轉換器,還有一個最近才被嵌入到積體電路的模組,它屬於所謂的類比電子。在複雜的自動設備很難找到不使用這些電路的設備,由於這個事實,兩個高品質的比較器 (comparator) 以及附加的電路已經整合到微控制器,並且連接到微控制器的腳位。

比較器是如何運作的?基本上,類比比較器是一個放大器,它比較兩個輸入電壓的強度。看看它的物理特性,它有兩個輸入一個輸出。取決於哪個輸入有比較高的電壓 (類比值),邏輯 0 或邏輯 1 將會出現在其輸出上:

image
Fig. 7-6 Analog Comparator

● 當 Vin- 的類比電壓高於 Vin+ 的類比電壓,比較器的輸出會是一個數位的低水平; 及

● 當 Vin+ 的類比電壓高於 Vin- 的類比電壓,比較器的輸出會是一個數位的高水平。

PIC16F887 微控制器有兩個這種電壓比較器,其輸入連接到 RA0-RA3 I/O 腳位,而其輸出連接到 RA4 和 RA5 腳位。此外在晶片上還有一個內部參考電壓源 (Voltage Reference Internal Source),這後面會討論。

這兩個電路受下列暫存器的控制:

● CM1CON0 控制比較器 C1;

● CM2CON0 控制比較器 C2; 及

● CM2CON1 控制比較器 C2。

參考電壓內部電壓源(Voltage Reference Internal Source)

比較器上的兩個類比輸入電壓中,其中一個通常是穩定而且不會改變的。由於這些特性,它被稱為 "參考電壓(voltage reference)" (Vref)。要產生它,可以使用外部和特殊的內部電壓源 (voltage source)。在選擇電壓源後,Vref 將從由 16 個電阻組成的梯形網路衍生出來,這個電阻梯形網路形成了一個分壓器 (voltage divider)。電壓源是可以選擇的,從分壓器兩端選擇,透過 VRCON 暫存器的 VRSS 位元來決定。

此外,電阻梯形網路提供的電壓片段 (voltage fraction) 可透過 VR0-VR3 位元來選擇,並作為參考電壓。見下圖。

image
Fig. 7-7 VREF

比較器參考電壓有兩個系列,每個系列有 16 個階層。系列的選擇是受 VRCON 暫存器的 VRR 位元控制。選到的參考電壓可能會輸出到 RA2/AN2 腳位。

雖然主要的想法是取得多樣的參考電壓以供類比模組的運作,簡易的 A/D 轉換器也是以同樣的方式取得。轉換器在某些情況下非常有用。

它的運作受控於 VRCON 暫存器。

比較器與中斷運作 (Comparators and Interrupt Operation)

PIR 暫存器的 CMIF 旗號會在任一個比較器輸出邏輯狀態改變時被設定起來。如果下列位元有設定,同時會產生中斷:

● PIE 暫存器的 CMIE 位元;

● INTCON 暫存器的 PEIE 位元; 及

● INTCON 暫存器的 GIE 位元。

如果有啟用中斷,比較器輸出的任何變化可以把微控制器從睡眠模式中喚醒,如果微控制器被設定在睡眠模式的話。

CM1CON0 暫存器

image
Fig. 7-8 CM1CON0 Regsiter

這個暫存器控制比較器 C1。它主要影響 C1 輸入的設置。要理解它,最好看看下圖,圖中只顯示直接受此暫存器影響的部份電子。

image
Fig. 7-9 Comparator C1 Enable Bit

image

CM2CON0 暫存器

image
Fig. 7-10 CM2CON0 Regsiter

這個暫存器控制比較器 C2。類似前一個暫存器,下圖只顯示直接受此暫存器影響的部份電路。

image
Fig. 7-11 Comparator C2 Schematic Diagram

 

image

CM2CON1 暫存器

image
Fig. 7-12 CM2CON1 Register

image

VRCON 暫存器

image
Fig. 7-13 VRCON Register

image

簡單的說:

為了恰當地的使用內建的比較器,必須做下列事情:

步驟 1 – 設置模組:

● 為了選擇適合的模式,應當設置 CM1CON0 和 CM2CON0 暫存器。在改變任何模式的時候,應該停用中斷。

步驟 2 – 設置內部參考電壓源 Vref (只在使用到的時候)。必須對 VRCON 暫存器做:

● 使用 VRR 位元選擇兩個電壓系列之中的一個;

● 使用 VR3-VR0 設置必要的 Vref;

● 如果需要,設定 VROE 位元; 及

● 透過設定 VREN 位元啟用電壓源 (Vref source)。

用來計算參考電壓的公式:

VRR = 1 (low range)

CVref = ([VR3:VR0]/24)VLADDER

VRR = 0 (high range)

CVref = (VLADDER/4) + ([VR3:VR0]VLADDER/32)

Vladder = Vdd or ([Vref+] - [Vref-]) or Vref+

步驟 3 – 開始運作:

● 透過設定 CMIE (PIE 暫存器), PEIE 和 GIE (都在 INTCON 暫存器裏) 以啟動中斷;

● 讀取 CMCON 暫存器的 C1OUT 和 C2OUT 位元; 及

● 讀取 PIR 暫存器的 CMIF 旗號。如果這個旗號被設定起來,必須在軟體裏把它清除。

0 意見: