stm32學習之ADC入門

小兜兜me發表於2024-07-11

ADC_SampleTime

用途:在ADC通道配置(ADC_RegularChannelConfig)需要傳輸的引數。

含義:指兩個取樣階段之間的延遲週期數,該引數會影響ADC在取樣過程中的效能和準確性。

選取不同引數的異同:

週期越多 週期越少
取樣精度和穩定性
速度和響應時間
抗噪聲和抗干擾能力

在實際應用中,選擇合適的ADC_SampleTime週期數通常需要根據具體的系統需求進行權衡。如果系統對精度和穩定性要求較高,可以考慮增加延遲週期數;而如果需要更快的響應速度,可以適當減少延遲週期數。

問:為什麼是1.5個週期,而在程式碼中是ADC_SampleTime_1Cycles5

答:ADC_SampleTime_1Cycles5,cycles後面的5表示0.5週期,故改值表示1.5週期而不是一個週期

問:ADC取樣週期為1.5週期是不是每1.5週期取樣一次的意思?

答:不是,1.5週期的意思是對資料取樣的動作持續1.5個週期的意思。以stm32f10x為例,1.5個取樣週期還要再加上12.5週期作為資料轉換,也就是每一次取樣的開始間隔1.5(取樣週期)+12.5(轉換週期)= 14週期。故當ADC的時鐘為14Mhz,取樣週期為1.5時,每次取樣就需要1us。

不同取樣週期對應的總轉換時間(以14Mhz晶振為例)

取樣週期 總轉換時間
1.5 1us
7.5 1.4us
13.5 1.9us
28.5 2.9us
41.5 3.9us
55.5 4.9us
71.5 6us
239.5 18us

規則通道和注入通道

規則通道:用於常規的資料採集,通常用於採集主要的輸入訊號
注入通道:是一種特殊的輸入通道,比規則通道有著更高的優先順序

給我的感覺,規則通道就像是main的主程式,注入通道就像是中斷程式。

異同點

  • 同:都是ADC的輸入通道配置,用於資料採集。
  • 異:
    1. 規則通道用於常規的、定期的資料採集;注入通道用於臨時、優先順序更高的事件響應採集。
    2. 注入通道的優先順序通常高於規則通道,可以在規則通道採集過程中,立刻插入取樣操作。
    3. 兩者在程式碼層面上的區別就在於使能的函式名不一樣,初始化的結構體是一樣的。
    4. 規則通道共用一個資料暫存器(ADC_DR)暫存資料,每個注入通道有獨立的資料暫存器(ADC_DRJx)暫存資料

ADC轉換流程

單次轉換模式的規則通道

  • 轉換資料被儲存在ADC_DR暫存器中
  • EOC(轉換結束)標誌位被標誌
  • 如果設定了EOCIE,則產生中斷

單次轉換模式的注入通道

  • 儲存特定的ADC_DRJx暫存器中(每一個通道單獨分配了一個暫存器)
  • 轉換結束的標誌位為JEOC
  • 中斷標誌位為JEOCIE

迴圈轉換模式

迴圈轉換模式則在這一次轉換結束後立馬啟動下一次轉換

模擬看門狗

用途:用於保證adc執行的穩定,是一個檢測系統

還沒看如何使用

DMA請求

用途:因為規則通道共用一個公共的規則通道資料暫存器(ADC_DR),故需要使用DMA來暫存資料,以防止多規則通道轉換資料時,ADC_DR暫存器的暫存資料被覆蓋掉

好處:

  1. 防止ADC_DR暫存器的資料被覆蓋掉
  2. DMA操作無需CPU干預,節省了CPU資源來做其他操作

ADC轉換時序

  1. adon給高電平脈衝,ADC上電
  2. 等待tSTAB時間,使ADC穩定
  3. adon給高電平脈衝,ADC開始轉換
  4. 等待轉換結束後,EOC位被設定,資料儲存在對應的資料暫存器中
  5. 軟體清除EOC位
  6. 開始下一次ADC轉換

ADC的低功耗

見文(還沒看):https://www.elecfans.com/d/897318.html

資料對齊

規則通道:

  • 左對齊(右邊4位,置0)
  • 右對齊(左邊4位,置0)

注入通道:

  • 左對齊(左邊第一位SEXT;右邊3位,置0)

  • 右對齊(左邊四位,SEXT位)

  1. SEXT位是擴充的符號位(怎麼用還不知道)
  2. 一般用右對齊吧,兩種通道的資料存放都是一樣的(除了0和SEXT位)

掃描模式

啟用掃描模式則可以按順序自動對所有的通道進行adc轉換(不需要cpu參與)

問:多個規則通道共用一個ADC_DR暫存器,那資料不會出現被覆蓋的情況嗎?

答:會的,但是可以透過使用DMA請求來避免資料被覆蓋的情況,每次EOC後,DMA控制器會把規則通道的轉換資料傳輸到SRAM中,注入通道則還是留在資料通道的暫存暫存器(ADC_JDRx)

校準

流程:

  1. 軟體設定ADC_CR2暫存器的CAL位
  2. tCAL時間過後,校準結束,CAL位硬體復位
  3. 校準碼被暫存ADC_DR中,然後被用於消除誤差

建議:

  1. 每次上電後進行一次校準
  2. 校準前,ADC處於關電狀態(ADON=‘0’)超過兩個ADC時鐘週期

注入通道管理

觸發注入:

  1. 觸發方式:透過外部觸發設定ADC_CR2暫存器的ADON位
  2. 轉換流程:在規則通道轉換期間,外部觸發注入產生,則規則通道轉換被複位,進入注入通道序列;注入通道轉換完成後,回到剛剛被中斷的規則通道繼續轉換
  3. 注意點:觸發事件的間隔必須長於注入序列(防止注入通道沒轉換完,又產生一次觸發注入)
  4. 優點:實時性高(類中斷機制)

自動注入:

感覺有種把注入通道當成規則通道來用的感覺,因為沒用到注入通道的核心功能中斷

  1. 觸發方式:設定JAUTO位
  2. 轉換流程:規則通道轉換完成後,注入通道被自動轉換(規則通道和注入通道之間的轉換會有1~2個ADC時鐘間隔,具體看ADC時鐘預分頻係數,詳見手冊)
  3. 注意點:
    • 此模式下禁止外部觸發
    • 不能同時使用自動注入和間斷模式
  4. 優點:不需要外部觸發,使用簡單

雙ADC模式

雙adc模式可以使用兩個adc採集有關聯的資料(沒關聯直接用獨立模式就行咯)

注意點: 轉換配置為外部觸發時,一般只設定主adc為外部事件觸發,而從adc設定為軟體觸發

這樣的好處是可以的讓從adc在需要的時候觸發(因為兩個adc是有關聯的,主adc觸發可以聯動從adc觸發)

同步注入模式 && 同步規則模式

  1. 來自ADC1的外部觸發會同時給ADC2提供同步觸發
  2. 雙通道轉換結束,產生中斷
  3. 必須等兩個ADC的轉化都結束了才能進行下一次觸發,否則較短序列的ADC轉換可能會被重啟

快速交叉模式 && 慢速交叉模式

  1. ADC2先啟動,ADC1在 7 or 14 個週期後啟動
  2. 快速交叉模式需要設定CONT位,慢速交叉模式無需設定CONT位,因為它將連續轉換所選擇的規則通道
  3. 注意點:
    • 應用程式必須確保使用交叉模式時,不能有注入通道的外部觸發產生
    • 交叉模式只適用於規則通道,且通常為單通道

相關文章