1. 程式人生 > >PIC微控制器入門_8位AD轉換器

PIC微控制器入門_8位AD轉換器

1.前言

PIC16F876的模數轉換器 (A/D) 模組有多達 8 個模擬輸入通道。如果選擇8位A/D 轉換器,那麼晶片可以將能將一個模擬輸入訊號轉換成相應的 8 位數字訊號。取樣保持輸出是轉換器的輸入,A/D 轉換器採用逐次逼近法產生轉換結果。通過軟體設定,模擬參考電壓可以選擇為器件的正向電源電壓 (VDD) 或 VREF 引腳上的電平。 A/D 轉換器具備可在休眠狀態下工作的獨特特性。

2.AD控制原理

與A/D 轉換器相關連得有 3 個暫存器,它們分別是:
• A/D 結果暫存器 (ADRES)      

• A/D 控制暫存器 0 (ADCON0)  
控制 A/D 模組的操作
• A/D 控制暫存器 1 (ADCON1)   
埠的引腳功能進行配置I/O 引腳可被配置成模擬輸入 ( 其中一個 I/O 也可作為模擬參考電壓 ) 或數字 I/O 口。 
A/D 模組結構框圖如圖 所示:

2.1 AD控制暫存器0:控制A/D模組操作


bit [7:6] ADCS1:ADCS0:A/D 轉換時鐘選擇位;00 = FOSC/2;01 = FOSC/8;10 = FOSC/32;11 = FRC ( 來自內部 A/D 的 RC 振盪器的時鐘 ) bit [5:3] CHS2:CHS0:模擬通道選擇位;000 = channel 0, (AN0);001 = channel 1, (AN1);010 = channel 2, (AN2);011 = channel 3, (AN3);100 = channel 4, (AN4);101 = channel 5, (AN5);110 = channel 6, (AN6);111 = channel 7, (AN7)。
注:PIC16F876A僅提供AN0~AN4模擬通道選擇位。 bit 2 GO/DONE:A/D 轉換狀態位;當 ADON = 1 時,1 = A/D 轉換正在進行;( 該位置 1 啟動 A/D 轉換。 A/D 轉換結束後該位由硬體自動清零 );0 = 未進行 A/D 轉換
bit 1 保留 : 總是保持該位為 0。
bit 0 ADON: A/D 模組開啟位;1 = A/D 轉換器模組工作;0 = A/D 轉換器關閉,不消耗工作電流。

2.2 控制暫存器 1 (ADCON1):引腳功能配置


bit 7     ADFM: A/D轉換結果格式選擇位  1 = 右對齊  0 = 左對齊 bit6      ADCS2:A/D轉換時鐘選擇位

bit 3:0 PCFG2:PCFG0:A/D 埠配置控制位;其埠配置效果圖如下所示:

注 : 當 AN3 被選作 VREF 時, A/D 的參考電壓為 AN3 引腳的電壓。當 AN3 被選作模擬輸入 (A) 時, A/D 的參考電壓為器件的 VDD。

3.AD操作細則

A/D轉換完成之後,轉換結果被載入ADRES暫存器GO/DONE (ADCON0<2>)位被清零A/D中斷標誌位 ADIF 1
當配置好
A/D 模組後,在啟動轉換前必須先選擇A/D轉換的通道模擬輸入通道的相應TRIS
必須設定為輸入
。採集時間 ( acquisition time) 的確定我們要詳細說明。在這一採集時間過去之後,A/D轉換即可開始。

3.1 AD採集需要遵循的步驟 

1. 配置 A/D 模組:對模擬引腳 / 參考電壓 / 數字 I/O (ADCON1) 進行配置;選擇 A/D 輸入通道 (ADCON0);選擇 A/D 轉換時鐘 (ADCON0);開啟 A/D 轉換模組 (ADCON0)
2. 需要時,設定 A/D 中斷: 將 ADIF 位清零;將 ADIE 位置 1;將 GIE 位置 1
3. 等待所需的採集時間
4. 啟動 A/D 轉換將 GO/DONE 置 1 (ADCON0)
5. 等待 A/D 轉換完成,通過以下兩種方法之一可判斷轉換是否完成:輪詢 GO/DONE 位是否被清零;等待 A/D 轉換的中斷。
6. 讀取 A/D 結果暫存器 (ADRES),需要時將 ADIF 位清零。
7. 要再次進行 A/D 轉換,根據要求轉入步驟 1 或步驟 2。每一位的 A/D 轉換時間定義為 TAD。在下一次採集開始前至少需要等待 2TAD。
A/D 轉換時序如下:

3.2 AD採集時間要求

TACQ = 放大器的建立時間 + 保持電容充電時間 +溫度係數 = TAMP + TC + TCOFF
PIC為中檔微控制器提供了最小採集時間計算參考;由於這一部分我只是工程上的應用,沒有進行晶片原理探究;只給出一個參考公式,其餘的不做涉獵: TACQ = TAMP + TC + TCOFF
TACQ = 5 µs + Tc + [(Temp - 25°C)(0.05 µs/°C)]
TC = -CHOLD (RIC + RSS + RS) ln(1/512)-51.2 pF (1 kΩ + 7 kΩ + 10 kΩ) ln(0.0020)-51.2 pF (18 kΩ) ln(0.0020)-0.921 µs (-6.2146) =5.724 µs
TACQ = 5 µs + 5.724 µs + [(50°C - 25°C)(0.05 µs/°C)]=10.724 µs + 1.25 µs=11.974 µs

3.3 AD採集過程中時鐘的選擇

每一位的 A/D 轉換時間被定義為 TAD。每完成一次 8 位 A/D 轉換需要 9.5 TAD。 A/D 轉換的時鐘
源可用軟體進行選擇。 TAD 的 4 種選項為:2TOSC;8TOSC;32TOSC;內部 RC 振盪器
為了確保 A/D 轉換正確,所有器件的 A/D 轉換時鐘 (TAD) 的選擇必須滿足
最小 1.6 µs 的 TAD
間。下表 顯示了器件在不同工作頻率下以及所選的不同A/D時鐘源下得到的TAD結果。

陰影部分不在推薦工作範圍內。1: RC 時鐘源的典型 TAD 為 4 µs。2: 這些值違反了所需最小 TAD 時間。3: 要加快轉換時間,建議選擇另一時鐘源。4: 器件工作頻率高於 1 MHz 時,整個轉換過程應在休眠模式下進行,否則 A/D 轉換精度可能超出允許範圍。

3.4 配置模擬輸入埠

ADCON1 和相應的 TRIS 暫存器用來控制 A/D 埠引腳的執行。若希望埠引腳為模擬輸入,則必須將其相應的 TRIS 位置 1( 輸入 ) ;A/D 轉換與 CHS2:CHS0 位及 TRIS 位的狀態無關。

3.5 正式進行AD轉換

下面一步一步介紹如何進行 A/D 轉換。I/O 引腳被配置成模擬輸入模擬參考電壓 (VREF) 為器件電壓 VDD使能 A/D 中斷A/D 轉換時鐘設為 FRC該轉換在 AN0 通道上進行
注:由於所需採集時間的要求, 不應在開啟 A/D 模組的同一指令中將 GO/DONE 位置 1(喚醒AD採集模組與開始進行AD採集必須分開)!!! 在轉換期間將 GO/DONE 位清零將中止當前 A/D 轉換。 ADRES 暫存器中的內容不會被部分完成的 A/D 轉換樣本所更新, ADRES 暫存器仍然保持上一次轉換完成後的結果 ( 或上一次寫入ADRES 暫存器中的值 )。 A/D 轉換被中止後,在下一次採集開始前,需要等待 2TAD 時間。 等待 2TAD 之後,採集將在所選通道上自動開始。
例項:
BSF   STATUS, RP0 ;STATUS的PRO置1
CLRF  ADCON1      ;配置AD控制暫存器1,即進行埠配置
BSF   PIE1, ADIE  ;PIE1的中斷暫存器ADIE使能位置1
BCF   STATUS, RP0 ;STATUE的PRO位清零
MOVLW 0xC1        ;RC時鐘, A/D被開啟,選擇了通道0
MOVWF ADCON0      ;配置AD控制暫存器0,C1=1100 0001 喚醒了AD 卻不能讓他工作!
BCF   PIR1, ADIF  ;A/D中斷標誌位清零
BSF   INTCON, PEIE;開啟外圍中斷使能,置1
BSF   INTCON, GIE ;開啟全域性中斷使能,置1

BSF ADCON0, GO ;在此處才正式開啟 A/D 裝換功能
: ; The ADIF bit will be set and the GO/DONE
: ; bit is cleared upon completion of the
: ; 
AD工作流程圖具體如下所示:

4.討論一下復位對AD取樣的影響

器件復位迫使所有暫存器進入復位狀態,同時迫使 A/D 模組關閉並中止任何正在進行的轉換。上電覆位時, ADRES 暫存器中的值保持不變。上電覆位後 ADRES 暫存器中的值不確定。

5.同學問的一個小問題

早晨,同學問我,我程式碼中重複出現BSF,BCF,是不是資料和程式的差別? NO!NO!NO!先看英文  BSF = Bit Set; BCF:Bit Clear   BSF  f,b     給f 的第b位置1
BCF  f,b     給f 的第b位清0

參考:PIC英文技術手冊