STM32 ADC工作原理與配置詳解

文章目錄

  • 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)
      1. 初始猜測中間值 128(0x80),比較 DAC 輸出電壓與輸入電壓。
      2. 若輸入電壓更高,保留最高位 1,下次猜測 192(0xC0,128+64);若更低,最高位 0,下次猜測 64(0x40)。
      3. 重復 8 次,確定所有位,最終得到 8 位二進制編碼。
  • STM32 內部實現

    • 集成 12 位逐次逼近寄存器(SAR),配合模擬多路開關選擇通道。

    • 轉換結果存儲在 16 位數據寄存器中,支持右對齊(低 12 位有效)和左對齊(高 12 位有效)。

    • ADC0809工作流程

      1. 輸入通道選擇
        • 通道結構:具備 8 路輸入通道(IN0-IN7),可通過 3 位地址線(A、B、C)選擇具體通道。
        • 地址鎖存:地址信號經 “地址鎖存與譯碼電路” 鎖存,控制 “通道選擇開關” 接通對應輸入通道,將模擬信號送至電壓比較器。
      2. 逐次逼近轉換
        • 核心部件:由 “逐次逼近寄存器(SAR)”、“數模轉換器(DAC)” 和 “電壓比較器” 構成閉環反饋系統。
        • 二分法比較
          • 轉換開始時,SAR 從最高位(D7)開始逐位試探,先置 D7=1,其余位 = 0,經 DAC 輸出半滿量程電壓(如 5V 參考電壓下為 2.5V),與輸入電壓比較。
          • 若輸入電壓≥DAC 輸出電壓,保留該位(D7=1);否則清零(D7=0)。
          • 依次對 D6-D0 重復上述過程,經 8 次比較后確定 8 位二進制編碼。
      3. 時鐘與控制信號
        • 時鐘(CLK):驅動內部邏輯電路,典型頻率為 500kHz,決定轉換速度(約 100μs / 次)。
        • 啟動信號(START):脈沖觸發轉換,上升沿復位 SAR,下降沿啟動轉換。
        • 轉換結束信號(EOC):轉換完成時變為高電平,可作為中斷請求或查詢信號。
      4. 數據輸出
        • 轉換結果存入 8 位數據寄存器,通過三態輸出緩沖器與單片機數據總線連接,可直接讀取數字信號(D7-D0)。
      5. 參考電壓(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_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 左右),用于校準外部供電偏差。
通道ADC1ADC2ADC3
通道0PA0PA0PA0
通道1PA1PA1PA1
通道2PA2PA2PA2
通道3PA3PA3PA3
通道4PA4PA4PF6
通道5PA5PA5PF7
通道6PA6PA6PF8
通道7PA7PA7PF9
通道8PB0PB0PF10
通道9PB1PB1
通道10PC0PC0PC0
通道11PC1PC1PC1
通道12PC2PC2PC2
通道13PC3PC3PC3
通道14PC4PC4
通道15PC5PC5
通道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
        在這里插入圖片描述

ADC 與 DAC/PWM 對比

模塊功能典型應用優勢
ADC模擬信號轉數字信號傳感器數據采集、電壓監測精度高、支持多通道
DAC數字信號轉模擬信號波形生成、音頻解碼線性度好
PWM數字信號等效模擬信號(脈沖)電機調速、LED 亮度控制功耗低、電路簡單
  • 注意:STM32F103C8T6 無內置 DAC,需通過 PWM 模擬 DAC 功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82192.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82192.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82192.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1、Pytorch介紹與安裝

1、Pytorch介紹 PyTorch 是由 Facebook AI Research (FAIR) 團隊開發并維護的一款開源深度學習框架,于 2016 年首次發布。它因其直觀的設計、卓越的靈活性以及強大的動態計算圖功能,迅速在學術界和工業界獲得了廣泛認可,成為當前深度學習研究…

RedisTemplate查詢不到redis中的數據問題(序列化)

RedisTemplate查詢不到redis中的數據問題(序列化) 一.問題描述 存入Redis中的值取出來卻為null,問題根本原因就是RedisTemplate和StringRedisTemplate的序列化問題、代碼示例: SpringBootTest class Redis02SpringbootApplicationTests {Autowiredprivate RedisTe…

【Net】TCP粘包與半包

文章目錄 TCP粘包與半包1 背景2 粘包(packet stick)3 半包(packet split)4 為什么會出現粘包/半包?5 如何解決?6 示例7 總結 TCP粘包與半包 在網絡編程中,粘包和半包問題是常見的 TCP 協議特有…

Leetcode 3566. Partition Array into Two Equal Product Subsets

Leetcode 3566. Partition Array into Two Equal Product Subsets 1. 解題思路2. 代碼實現 題目鏈接:3566. Partition Array into Two Equal Product Subsets 1. 解題思路 這一題我的實現還是比較暴力的,首先顯而易見的,若要滿足題目要求&…

QT中更新或添加組件時出現“”qt操作至少需要一個處于啟用狀態的有效資料檔案庫“解決方法”

在MaintenanceTool.exe中點擊下一步 第一個: 第二個: 第三個: 以上任意一個放入資料庫中

52. N-Queens II

題目描述 52. N-Queens II 回溯法 這道題與第51題是一樣的。51. N-Queens-CSDN博客 class Solution {int columns; //從低位到高位起算,第i位為0表示棋盤第i列可以放置皇后,第i位為1表示棋盤第i列不能放置皇后//邊長為n的棋盤分別有2n-1條正斜線和反…

解鎖AI智能Agent的“風格基因”

從“黑箱”到“智能Agent”:LangChain的架構哲學革新 在LangChain出現之前,開發者直接調用LLM API的方式,充滿了“黑箱”操作的挑戰: 緊耦合的業務邏輯與模型調用: 所有的業務邏輯、API調用、記憶管理、錯誤處理等都可能混雜在同一個代碼塊中。這導致代碼脆弱、難以測試,…

大數據運維過程中常見的一些操作

大數據運維是確保大數據系統穩定運行、高效處理數據的關鍵環節。以下是大數據運維過程中常見的一些操作和任務: 1. 集群部署與配置 基礎設施搭建:部署服務器、網絡設備、存儲系統,配置虛擬化環境(如 Docker、Kubernetes)。分布式系統安裝:安裝 Hadoop、Spark、Hive、Kaf…

STM32中,如何理解看門狗

在STM32微控制器中,看門狗(Watchdog)是一種硬件計時器,用于監控系統運行狀態,防止軟件死鎖或跑飛。其核心機制是:系統需定期“喂狗”(復位看門狗計數器),若未及時喂狗&am…

[AI算法] LLM中的gradient checkpoint機制

文章目錄 什么是gradient checkpoint原理使用場景 注意事項 什么是gradient checkpoint gradient checkpoint是一種優化深度學習模型內存使用的技術,尤其在訓練大型模型時非常有用。它通過犧牲計算時間為代價來減少顯存占用。大多數情況下,transformers…

船舶二階非線性響應方程的EKF與UKF參數辨識

船舶二階非線性響應方程的EKF與UKF參數辨識 本文將詳細闡述使用Python實現擴展卡爾曼濾波(EKF)和無跡卡爾曼濾波(UKF)對船舶二階非線性響應方程進行參數辨識的過程。全文包含理論推導、算法實現、仿真驗證及結果分析。—### 1. 船舶二階非線性響應方程建模船舶運動可表示為&am…

【ARM AMBA APB 入門 1.1 -- APB 讀寫寄存器 RTL 實現】

請閱讀【ARM AMBA 總線 文章專欄導讀】 文章目錄 APB 寄存器訪問APB 讀寄存器 RTL 代碼實現APB 寫寄存器 RTL 代碼實現 APB 寄存器訪問 APB 讀寄存器 RTL 代碼實現 APB 總線讀寄存器操作代碼實現: wire [31:0] SOC_PLL_CFG_REG; wire [31:0] SOC_PLL_LOCK_REG; wi…

C++修煉:位圖和布隆過濾器

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《題海拾貝》、《C修煉之路》 1、引言 在計算機科學…

Java大廠后端技術棧故障排查實戰:Spring Boot、Redis、Kafka、JVM典型問題與解決方案

Java大廠后端技術棧故障排查實戰&#xff1a;Spring Boot、Redis、Kafka、JVM典型問題與解決方案 引言 在互聯網大廠&#xff0c;Java后端系統往往承載著高并發、高可用和復雜業務需求。系統架構日益復雜&#xff0c;涵蓋微服務、緩存、消息隊列、數據庫等多種組件&#xff0…

交叉編譯tcpdump工具

1.導出交叉編譯工具鏈 export PATH$PATH:/opt/rockchip/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin 下載源碼包libpcap-1.10.5&#xff0c;配置、并編譯安裝。 github倉庫地址 ./configure --hostarm-linux CCarm-linux-gnueabihf-gcc --prefix$PWD/install …

Pytest Fixture 是什么?

Fixture 是什么&#xff1f; Fixture 是 Pytest 測試框架的核心功能之一&#xff0c;用于為測試函數提供所需的依賴資源或環境。它的核心目標是&#xff1a; ? 提供測試數據&#xff08;如模擬對象、數據庫記錄&#xff09; ? 初始化系統狀態&#xff08;如配置、臨時文件&a…

【深度剖析】流處理系統性能優化:解決維表JOIN、數據傾斜與數據膨脹問題

目錄 前言:為什么你的流處理作業總是慢? 一、維表JOIN優化:從普通連接到高性能查詢 1.1 時態表的雙面性 1.2 Lookup Join 優化 1.3 多表JOIN優化策略 二、數據傾斜:單分區也會遇到的隱形殺手 2.1 單分區數據傾斜 2.2 熱點鍵打散技術 2.3 時間窗口預聚合 三、數據…

Codeforces Round 1028 (Div. 2)(ABC)

A. Gellyfish and Tricolor Pansy 翻譯&#xff1a; 水母和小花在玩一個叫 “決斗 ”的游戲。 水母有 a HP&#xff0c;花花有 b HP。 它們各有一個騎士。水母的騎士有 c HP&#xff0c;而花花的騎士有 d HP。 他們將進行一輪游戲&#xff0c;直到其中一方獲勝。對于 k1、2、.…

數字創新智慧園區建設及運維方案

該文檔是 “數字創新智慧園區” 建設及運維方案,指出傳統產業園區存在管理粗放等問題,“數字創新園區” 通過大數據、AI、物聯網、云計算等數字化技術,旨在提升園區產業服務、運營管理水平,增強競爭力,實現綠色節能、高效管理等目標。建設內容包括智能設施、核心支撐平臺、…

緩存一致性協議的影響

在操作系統中&#xff0c;線程切換相比進程切換更輕量級的關鍵原因之一是 緩存&#xff08;Cache&#xff09;的有效性&#xff0c;尤其是對 CPU 緩存&#xff08;如 L1/L2/L3&#xff09;和 TLB&#xff08;Translation Lookaside Buffer&#xff09;的影響。以下從緩存角度詳…