文章目錄
- ADC
- ADC簡介
- 逐次逼近型ADC
- ADC框圖
- ADC框圖的工作流程(以規則組為例)
- 1. 輸入通道選擇與信號接入
- 2. 觸發轉換:軟件或硬件觸發
- 3. 采樣保持與量化編碼
- 4. 轉換結果處理與存儲
- 5. 狀態標志與中斷
- 6. 參考電壓與時鐘驅動
- 7. 輔助功能:模擬看門狗
- 關鍵流程總結
- 與多通道模式的差異
- ADC基本結構
- 輸入通道
- 轉換模式
- 單次轉換,非掃描模式
- 連續轉換,非掃描模式
- 單次轉換,掃描模式
- 連續轉換,掃描模式
- 觸發控制
- 數據對齊
- 數據右對齊
- 數據左對齊
- 轉換時間
- 校準
- 硬件電路
- ADC 與 DAC/PWM 對比
ADC
ADC簡介
ADC(Analog-Digital Converter)模擬-數字轉換器
ADC可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量,建立模擬電路到數字電路的橋梁
12位逐次逼近型ADC,1us轉換時間
輸入電壓范圍:03.3V,轉換結果范圍:04095
18個輸入通道,可測量16個外部和2個內部信號源
規則組和注入組兩個轉換單元
模擬看門狗自動監測輸入電壓范圍
STM32F103C8T6 ADC資源:ADC1、ADC2,10個外部輸入通道
ADC 基礎定義
-
全稱:Analog to Digital Converter(模擬數字轉換器)。
-
功能:將連續變化的模擬電壓(如 0~3.3V)轉換為離散的數字信號(如 0~4095 的整數),實現模擬電路與數字電路的交互。
-
對比 GPIO
- GPIO 僅能識別高電平(3.3V)或低電平(0V),無法測量中間電壓。
- ADC 可量化中間電壓,例如 1.65V 對應原始數據 2048(即 3.31.65×4095=2047.5≈2048)。
STM32 ADC 關鍵參數
參數 說明 分辨率 12 位,可表示 2^12=4096 個量化等級,精度為 3.3V / 4095 ≈ 0.805mV。 轉換時間 最快 1μs(當 ADC 時鐘為 14MHz 且采樣時間最短時)。 輸入范圍 0~3.3V(由參考電壓 VREF+ 決定,通常與 VDDA 3.3V 綁定)。 通道數量 18 個(16 個外部 GPIO 通道 + 2 個內部通道:溫度傳感器、參考電壓)。 轉換單元 - 規則組:處理常規轉換(最多 16 個通道,需配合 DMA 防止數據覆蓋)。 - 注入組:處理緊急中斷轉換(最多 4 個通道,獨立數據寄存器)。
逐次逼近型ADC
逐次逼近型 ADC 工作原理
-
核心邏輯:通過二分法逐次比較,從最高位到最低位確定每一位的二進制值。
- 示例(8 位 ADC)
- 初始猜測中間值 128(0x80),比較 DAC 輸出電壓與輸入電壓。
- 若輸入電壓更高,保留最高位 1,下次猜測 192(0xC0,128+64);若更低,最高位 0,下次猜測 64(0x40)。
- 重復 8 次,確定所有位,最終得到 8 位二進制編碼。
- 示例(8 位 ADC)
-
STM32 內部實現
-
集成 12 位逐次逼近寄存器(SAR),配合模擬多路開關選擇通道。
-
轉換結果存儲在 16 位數據寄存器中,支持右對齊(低 12 位有效)和左對齊(高 12 位有效)。
-
ADC0809工作流程
- 輸入通道選擇
- 通道結構:具備 8 路輸入通道(IN0-IN7),可通過 3 位地址線(A、B、C)選擇具體通道。
- 地址鎖存:地址信號經 “地址鎖存與譯碼電路” 鎖存,控制 “通道選擇開關” 接通對應輸入通道,將模擬信號送至電壓比較器。
- 逐次逼近轉換
- 核心部件:由 “逐次逼近寄存器(SAR)”、“數模轉換器(DAC)” 和 “電壓比較器” 構成閉環反饋系統。
- 二分法比較
- 轉換開始時,SAR 從最高位(D7)開始逐位試探,先置 D7=1,其余位 = 0,經 DAC 輸出半滿量程電壓(如 5V 參考電壓下為 2.5V),與輸入電壓比較。
- 若輸入電壓≥DAC 輸出電壓,保留該位(D7=1);否則清零(D7=0)。
- 依次對 D6-D0 重復上述過程,經 8 次比較后確定 8 位二進制編碼。
- 時鐘與控制信號
- 時鐘(CLK):驅動內部邏輯電路,典型頻率為 500kHz,決定轉換速度(約 100μs / 次)。
- 啟動信號(START):脈沖觸發轉換,上升沿復位 SAR,下降沿啟動轉換。
- 轉換結束信號(EOC):轉換完成時變為高電平,可作為中斷請求或查詢信號。
- 數據輸出
- 轉換結果存入 8 位數據寄存器,通過三態輸出緩沖器與單片機數據總線連接,可直接讀取數字信號(D7-D0)。
- 參考電壓(VREF)
- 決定輸入電壓范圍,通常接 5V,此時輸入范圍為 0-5V;也可外接可調參考電壓,靈活調整量程。
總結:ADC0809 通過 “地址選擇→逐次比較→時鐘驅動→數據輸出” 的流程,實現模擬信號到數字信號的轉換,其逐次逼近原理和多通道選擇能力使其在早期單片機系統中廣泛應用,尤其適合低速、多通道數據采集場景。
- 輸入通道選擇
-
ADC框圖
ADC框圖的工作流程(以規則組為例)
1. 輸入通道選擇與信號接入
- 通道類型
- 外部通道:16 個 GPIO 引腳(如 PA0-PA15),可直接接入模擬電壓信號(0~3.3V)。
- 內部通道:2 個(溫度傳感器、內部參考電壓 VREFINT),無需外部接線。
- 選擇邏輯
- 通過 模擬多路開關(Analog Multiplexer) 選中目標通道(如規則組序列中的通道)。
- 掃描模式下:按序列依次切換通道(如序列 1 到序列 16),非掃描模式僅固定選擇單個通道。
2. 觸發轉換:軟件或硬件觸發
- 觸發源
- 軟件觸發:程序調用函數(如
ADC_SoftwareStartConv()
)發送START
信號。 - 硬件觸發:來自定時器(如 TIM3 的 TRGO 事件)或外部中斷引腳,通過配置
ADC_CR2
寄存器選擇。
- 軟件觸發:程序調用函數(如
- 觸發流程
- 觸發信號激活后,ADC 進入 采樣階段,通過采樣保持電路對輸入電壓進行采樣。
3. 采樣保持與量化編碼
- 采樣階段
- 采樣開關閉合:采樣電路,就記錄此時的輸入電壓,防止電壓的不斷變化造成后期量化的不準確,電容充電至輸入電壓值,持續時間由 采樣時間寄存器(ADC_SMPR) 配置(如 1.5~239.5 個 ADC 周期)。
- 抗干擾作用:較長采樣時間可抑制高頻噪聲,但會延長轉換周期。
- 量化編碼階段
- 逐次逼近寄存器(SAR):從最高位(第 11 位)開始,通過二分法逐位確定每一位的二進制值。
- 數模轉換器(DAC):根據 SAR 的當前值生成參考電壓,與采樣保持的電壓在 電壓比較器 中對比。
- 比較反饋:若輸入電壓 ≥ DAC 電壓,該位保留為 1;否則為 0,直至最低位(第 0 位)確定,完成 12 位編碼。
4. 轉換結果處理與存儲
- 數據寄存器
- 規則組:僅 1 個數據寄存器(ADC_DR),掃描模式下若未使用 DMA,僅保留最后一個通道的結果。如果不進行處理就出現數據覆蓋。
- 存儲格式:支持 右對齊(默認) 或 左對齊,右對齊時低 12 位為有效數據,左對齊時高 12 位為有效數據。
- DMA 搬運(可選)
- 在掃描模式下,通過 DMA 請求 將轉換結果自動搬運至內存,避免數據覆蓋(需提前配置 DMA 通道)。
5. 狀態標志與中斷
- 轉換完成標志(EOC)
- 轉換結束后,狀態寄存器(ADC_SR)中的
EOC
位自動置 1,可通過輪詢或中斷方式檢測。轉化完成后就可以讀取數據,或者使能中斷,申請中斷。
- 轉換結束后,狀態寄存器(ADC_SR)中的
- 中斷響應
- 若使能 中斷功能(配置
ADC_IT_EOC
),EOC
信號會觸發 NVIC 中斷,在中斷服務函數中讀取結果。
- 若使能 中斷功能(配置
6. 參考電壓與時鐘驅動
- 參考電壓(VREF+)
- 決定輸入電壓范圍(通常為 0~VREF+),STM32 內部默認與 VDDA(3.3V)綁定,無需外接。
- 校準作用:通過內部參考電壓通道(VREFINT)可校準外部供電偏差。
- 時鐘(ADC_CLK)
- 來源:由系統時鐘(APB2,72MHz)經預分頻器分頻得到,最大允許頻率為 14MHz(需配置 RCC 寄存器)。
- 轉換時間計算:Tconvert=采樣時間+12.5×TADC_CLK
例如:ADC_CLK=14MHz(周期≈71.4ns),采樣時間 = 1.5 周期,則總轉換時間 = (1.5+12.5)×71.4ns≈1μs。
7. 輔助功能:模擬看門狗
- 閾值監測
- 預先設置 上限閾值(THR) 和 下限閾值(TLR),實時監測轉換結果。
- 若結果超出閾值范圍,觸發 模擬看門狗中斷,可用于異常信號報警(如溫度超限)。
關鍵流程總結
輸入信號通道選擇采樣保持觸發信號逐次逼近轉換結果存儲數據輸出/中斷響應
與多通道模式的差異
- 單通道模式(非掃描):僅轉換單個通道,無需配置序列,適合簡單電壓監測。
- 多通道模式(掃描):需配置規則組序列(最多 16 通道),依賴 DMA 搬運數據,適合復雜數據采集場景。
ADC基本結構
后面會根據這張圖寫程序,進行代碼中參數配置等操作。
輸入通道
輸入通道與引腳映射
- 外部通道
- PA0PA7、PB0PB1、PC0~PC5(共 16 個),但 STM32F103C8T6 僅引出 10 個(PA0~PA9)。
- 內部通道
- 通道 16:內部溫度傳感器,用于測量 CPU 溫度,計算公式:溫度(°C)=A**vg_SlopeVTS?V25+25
(其中 VTS? 為傳感器電壓,V25? 為 25℃ 時電壓,Avg_Slope 為溫度系數)。 - 通道 17:內部參考電壓(1.2V 左右),用于校準外部供電偏差。
- 通道 16:內部溫度傳感器,用于測量 CPU 溫度,計算公式:溫度(°C)=A**vg_SlopeVTS?V25+25
通道 | ADC1 | ADC2 | ADC3 |
---|---|---|---|
通道0 | PA0 | PA0 | PA0 |
通道1 | PA1 | PA1 | PA1 |
通道2 | PA2 | PA2 | PA2 |
通道3 | PA3 | PA3 | PA3 |
通道4 | PA4 | PA4 | PF6 |
通道5 | PA5 | PA5 | PF7 |
通道6 | PA6 | PA6 | PF8 |
通道7 | PA7 | PA7 | PF9 |
通道8 | PB0 | PB0 | PF10 |
通道9 | PB1 | PB1 | |
通道10 | PC0 | PC0 | PC0 |
通道11 | PC1 | PC1 | PC1 |
通道12 | PC2 | PC2 | PC2 |
通道13 | PC3 | PC3 | PC3 |
通道14 | PC4 | PC4 | |
通道15 | PC5 | PC5 | |
通道16 | 溫度傳感器 | ||
通道17 | 內部參考電壓 |
轉換模式
模式分類 | 具體模式 | 特點 |
---|---|---|
按轉換次數 | 單次轉換 | 觸發一次,轉換一個通道或一組通道,完成后停止。 |
連續轉換 | 觸發一次后循環轉換,無需重復觸發。 | |
按通道數量 | 非掃描模式 | 每次僅轉換單個通道(規則組序列 1)。 |
掃描模式 | 按序列依次轉換多個通道(規則組最多 16 個,需 DMA 搬運數據)。 |
單次轉換,非掃描模式
連續轉換,非掃描模式
單次轉換,掃描模式
連續轉換,掃描模式
觸發控制
觸發方式
- 軟件觸發:程序中調用函數啟動轉換(如
ADC_SoftwareStartConvCmd()
)。 - 硬件觸發:通過定時器(如 TIM3 更新事件)或外部中斷引腳自動觸發,減少 CPU 干預。
數據對齊
數據對齊
- 右對齊:12 位數據存放在寄存器低 12 位(默認方式),直接讀取即可得到原始值。
- 左對齊:12 位數據存放在寄存器高 12 位,低 4 位補 0,適用于需要降低分辨率的場景(如轉換為 8 位數據)。
數據右對齊
數據左對齊
轉換時間
AD轉換的步驟:采樣,保持,量化,編碼
STM32 ADC的總轉換時間為: TCONV = 采樣時間 + 12.5個ADC周期
例如:當ADCCLK=14MHz,采樣時間為1.5個ADC周期
? TCONV = 1.5 + 12.5 = 14個ADC周期 = 1μs
校準
自校準功能
- 目的:消除內部電容誤差,提高轉換精度。
- 操作:每次上電后執行一次校準,通過庫函數
ADC_ResetCalibration()
和ADC_StartCalibration()
實現。
硬件電路
三種形式:分壓電阻的形式,上下拉電阻的形式(一般上下拉電阻的阻值相近一點,這樣會是PA1 輸出較為中間值),最后一個想要實現3.3v的輸出,也是通過分壓來實現的。
傳感器接口電路
- 分壓電路
- 光敏電阻、熱敏電阻等傳感器需與固定電阻串聯,通過分壓得到 ADC 可接收的電壓。
- 示例:光敏電阻(暗電阻 100kΩ)與固定電阻(10kΩ)串聯,電源 3.3V:
- 無光照時,光敏電阻阻值高,輸出電壓接近 3.3V(如 3.0V);
- 有光照時,光敏電阻阻值低,輸出電壓接近 0V(如 0.3V)。
- 電壓轉換電路
- 若輸入電壓超過 3.3V(如 5V),需用電阻分壓衰減,例如 17kΩ 與 33kΩ 串聯,將 5V 分壓為:
- Vout = 5V×(17kΩ+33kΩ)/33kΩ = 3.3V
- Vout = 5V×(17kΩ+33kΩ)/33kΩ = 3.3V
- 若輸入電壓超過 3.3V(如 5V),需用電阻分壓衰減,例如 17kΩ 與 33kΩ 串聯,將 5V 分壓為:
ADC 與 DAC/PWM 對比
模塊 | 功能 | 典型應用 | 優勢 |
---|---|---|---|
ADC | 模擬信號轉數字信號 | 傳感器數據采集、電壓監測 | 精度高、支持多通道 |
DAC | 數字信號轉模擬信號 | 波形生成、音頻解碼 | 線性度好 |
PWM | 數字信號等效模擬信號(脈沖) | 電機調速、LED 亮度控制 | 功耗低、電路簡單 |
- 注意:STM32F103C8T6 無內置 DAC,需通過 PWM 模擬 DAC 功能。