1
摘要
本應用筆記主要介紹 HC32F460 系列 MCU 的模數轉換器(以下簡稱 ADC)的特點及使用方法,包括掃描模式、轉換數據平均功能、模擬看門狗、可編程增益放大器和協同模式等。
2
ADC 簡介
2.1
功能簡介
HC32F460 系列 MCU 內部集成 ADC1 和 ADC2 兩個 ADC 模塊(系統框圖如圖 2-1),掛載于AHB-APB(APB3)總線,可配置 12 位、10 位和 8 位分辨率,支持最多 16 個外部模擬輸入通道和 1 個內部基準電壓/8bitDAC 輸出的檢測通道。這些模擬輸入通道可以任意組合成一個序 列(序列 A 或序列 B),一個序列可以進行單次掃描(包括兩個動作:采樣和轉換),或連續掃描。支持對任意通道進行連續多次掃描,并對轉換結果進行平均。ADC 模塊還搭載模擬看門狗(以下簡稱 AWD)功能,可對任意通道的轉換結果進行監視,檢測是否超出設定的閥值。
2.2 主要特性
HC32F460 系列 MCU 的 ADC 具有如下主要特性:
1) 高性能
?
可配置 12 位、10 位和 8 位分辨率
?
周邊時鐘(數字時鐘)PCLK4 和 A/D 轉換時鐘 ADCLK 的頻率比可選擇:
?
PCLK4 : ADCLK = 1 : 1,2 : 1,4 : 1,8 : 1,1 : 2,1 : 4
?
ADCLK 可選與系統時鐘 HCLK 異步的 PLL 時鐘,此時 PCLK4 : ADCLK = 1:1
?
采樣率:2.5MSPS(PCLK4 = ADCLK = 60MHz,12 位分辨率,采樣 11 周期)
?
各通道可獨立設置采樣時間
?
各通道獨立數據寄存器
?
數據寄存器可配置數據對齊方式
?
連續多次轉換平均功能
?
模擬看門狗,監視轉換結果
?
不使用時可將 ADC 模塊設定為停止狀態
2) 模擬輸入通道
?
最多有 16 個外部模擬輸入采樣通道
?
1 個內部基準電壓/8bitDAC 輸出的檢測通道
?
最多有 16 個外部模擬輸入引腳,外部模擬輸入引腳可與采樣通道自由映射
3) 轉換開始條件
?
軟件啟動開始轉換(只支持序列 A)
?
外設事件觸發開始轉換(支持序列 A 和序列 B)
?
外部引腳觸發開始轉換(支持序列 A 和序列 B)
4) 轉換模式
?
序列 A 單次掃描
?
序列 A 連續掃描
?
雙序列掃描
?
協同模式
5)
?
序列 A 掃描結束中斷和事件 ADC_EOCA
?
序列 A 掃描結束中斷和事件 ADC_EOCB
?
模擬看門狗通道比較中斷和事件 ADC_CHCMP,序列比較中斷和事件 ADC_SEQCMP
?
上述 4 個事件輸出都可啟動 DMA
2.3 引腳配置
HC32F460 系列 MCU 的 ADC1 有 17 個采樣通道,最多支持 16 個外部模擬輸入引腳,通道0~15 可與外部模擬輸入引腳自由映射,通道 16 用于內部基準電壓/8bitDAC 的輸出檢測。ADC2 有 9 個采樣通道,最多支持 8 個外部模擬輸入引腳,通道 0~7 可與外部模擬輸入引腳自由映射,通道 8 用于內部基準電壓/8bitDAC 的輸出檢測。
3
ADC 應用
3.1
模擬輸入引腳與通道
HC32F460 系列 MCU 的 ADC 模塊模擬輸入引腳等配置,
默認情況下,ADC1 的 CH0(通道 0)對應模擬輸入引腳 ADC1_IN0,CH1 對應
ADC1_IN1……,CH16 為內部模擬通道,只能用于檢測內部基準電壓、8bitDAC1 或
8bitDAC2。也就是,默認情況下,ADC1 序列 A 的通道選擇寄存器 ADC1_CHSELRA0(或序列 B 的通道選擇寄存器 ADC1_CHSELRB0)的 bit0 置 1,即選擇了模擬輸入引腳 ADC1_IN0,bit1 置 1,即選擇模擬輸入引腳ADC1_IN1;序列 A 的通道選擇寄存器ADC1_CHSELRA1(或序列 B 的通道選擇寄存器 ADC1_CHSELRB1)的 bit0 置 1,即選擇了內部模擬輸入,用于檢測內部基準電壓、8bitDAC1 或 8bitDAC2。但是,HC32F460 系列的 ADC 模塊具有模擬輸入引腳與通道自由映射(除用于檢測內部模擬輸入的通道外)的功能,可滿足用戶不同的應用需求。例如,可將引腳 ADC12_IN10 映射到ADC1 的一個通道(如 CH0,不能映射到 CH16),或同時映射到多個通道(如 CH0、CH2 和 CH3)。
ADC2 通道與引腳的默認對應關系和通道重映射與 ADC1 的類似。
關于通道重映射,固件例程 adc_11_channel_remap 給出了其具體用法。
3.2 模擬輸入的采樣時間和轉換時間
關于 ADC 時間的詳細說明,請參考用戶手冊“模擬輸入的采樣時間和轉換時間”一節中,寄存器 ADC_SSTR 和 ADC 電氣特性部分,請嚴格按照手冊要求設置采樣時間。在滿足應用需求的情況下,請盡量將采樣時間設置得大一些,尤其在對多個通道采樣時,如果通道的采樣時間設 置偏小,可能會導致相鄰通道(如序列 A 配置了 CH0、CH5、CH7,那么 CH0 和 CH5、CH5 和 CH7 都是相鄰通道)之間透過采樣電容發生耦合,而使轉換結果不準確。
3.3 模式和功能
ADC 的通道可配置為序列 A 或序列 B,序列 A 和序列 B 可單獨設置不同的觸發源。兩個序列共有四種掃描方式:
?
序列 A 單次掃描;
?
序列 A 連續掃描;
?
序列 A 單次掃描,序列 B 單次掃描;
?
序列 A 連續掃描,序列 B 單次掃描。
各通道還可設置平均功能,可連續掃描設定次數后,計算轉換的平均值,并將平均值保存到數據寄存器中;模擬看門狗 AWD 在通道轉換結束后對轉換結果進行比較,可生成通道比較中斷和事件 ADC_CHCMP,在整個序列掃描結束后,根據各通道比較結果生成序列比較中斷和事件 ADC_SEQCMP;可編程增益放大器 PGA,可對模擬輸入信號放大后再轉換;協同工作模式下,ADC1 和 ADC2 可同時轉換或連續交替轉換;模擬輸入引腳可與 ADC 通道的自由映射,再結合協同模式,可實現對模擬輸入的高頻掃描。
3.4 序列 A 單次掃描模式
3.4.1 說明
在此模式下,ADC 執行單個或多個通道的單次掃描,并在轉換完成后停止.
3.4.2 應用
該模式可以設置單個或多個通道。設置多個通道時,可實現對多個通道進行依次掃描,這些通道可設置不同的采樣時間,用戶不必在掃描過程中停止 ADC,即可以不同的采樣時間重新掃描下一個通道,可避免額外的 CPU 負載以及繁重的軟件開發。
該模式是簡單的 ADC 模式,應用方式靈活。如在系統啟動前,可以用這種模式檢測系統的一些狀態信息,如電壓、壓力、溫度等,以確定系統是否可以正常啟動;在系統運行中,可用 這種模式,按需檢測系統狀態,以獲取系統實時狀態。
應用例程 adc_01_sa_base 給出了該模式的具體用法。
3.5 序列 A 連續掃描模式
3.5.1 說明
連續掃描模式可對單個通道或多個通道進行連續不斷的掃描。連續掃描模式允許
ADC 在后臺工作。因此,ADC 可在沒有任何 CPU 干預的情況下對通道進行連續(循環)掃描通道。此外,還可以在連續掃描模式下使用 DMA,從而降低 CPU 負載。
3.5.2 應用
此模式設置單個通道時,可用于監視電池電壓、測量和調節烤箱溫度等應用。在用于調節烤箱溫度時,系統將讀取溫度并與用戶設置的溫度進行比較。當烤箱溫度達到所需溫度時,關閉加熱電阻器的電源。
設置多個通道時,與多通道單次掃描模式類似,只是在完成序列的一個通道后不會停止掃描,而是從一個通道重新開始掃描并無限循環下去。多通道連續掃描模式,可用于監視多電池充電器中的多個電壓和溫度。系統在充電過程中讀取每節電池的電壓和溫度。當電壓或溫度達到大值時,將切斷相應電池與充電器的連接。
應用例程 adc_01_sa_base 中有該模式的設置以及簡單的應用方法。
3.6 雙序列掃描模式
3.6.1 說明
此處將“序列 A 單次掃描、序列 B 單次掃描”和“序列 A 連續掃描、序列 B 單次掃描”兩種模式整合為雙序列掃描模式進行介紹。雙序列掃描模式,只是在前兩種模式中增加了序列 B 的掃描。雙序列掃描模式下,序列 B 必須由外部引腳或內部事件觸發轉換,軟件啟動對序列 B 無 效,序列 A 可由軟件啟動掃描,也可由外部引腳或內部事件觸發掃描。序列 B 的優先級高于 序列 A. 配置 ADC_CR1.RSCHSEL 為 0 時,當序列 A 被中斷后,恢復時,從被中斷通道繼續掃描.
3.6.2 應用
可在前兩種模式的應用中,加入需要實時響應(更高優先級)掃描的通道,將其配置為序列B。例程 adc_04_sa_sb_event_trigger 實現了雙序列掃描的基本用法。
3.7 轉換數據平均功能
3.7.1 說明
轉換數據平均功能,可設置連續掃描 2、4、8、16、32、64、128 或 256 次后,將轉換結果平均后,保存到數據寄存器。該功能可去除一定的噪聲成分,使結果更加準確。該功能的優勢是可以在無任何硬件變更的情況下提高 ADC 的準確度,缺點是降低了轉換速度和頻率(相當于降低了有效采樣率)。
3.7.2 應用
針對不同的應用,可設置不同的連續掃描次數,該次數取決于需要的精度、低轉換速度等。應用筆記沒有單獨為該功能提供例程,在例程 adc_01_sa_base 中有該功能的配置方式。
3.8
模擬看門狗
3.8.1
說明
HC32F460 系列 MCU 的模擬看門狗,可配置為上下限比較或區間比較。用戶可預先設置比較條件和相應的上下限或區間。在通道轉換結束后,模擬看門狗對轉換結果
進行比較,如果滿足比較條件,則產生通道比較中斷和事件 ADC_CHCMP,在整個序列掃描結束后,根據各通道比較結果生成序列比較中斷和事件 ADC_SEQCMP。每個使能模擬看門狗的通道,只要其轉換結果滿足比較條件,都會產生一次中斷和事件 ADC_CHCMP;每個序列,只要其中一個通道的轉換結果滿足比較條件,都會產生中斷和事件 ADC_SEQCMP。在條件滿足后,一個序列只產生一次中斷和事件 ADC_SEQCMP。也就是,一個 ADC 模塊,一輪
掃描結束后,可產生多次中斷和事件 ADC_SEQCMP,最多兩次(因為最多只有兩個序列)中斷和事件 ADC_SEQCMP。
注意:
- 不推薦同時使用 ADC_CHCMP 中斷和 ADC_SEQCMP 中斷。
3.8.2
應用
在一些控制系統中,需要嚴格監測電壓、壓力、溫度等信號的范圍,使用模擬看門狗能夠快速地檢測到這些信號的異常狀況,并做出相應的應對措施,以確保設備安全。例程adc_08_sa_sb_awd_base 給出了模擬看門狗的配置和基本應用方法;但通常,模擬看門狗的中斷用法更為高效,應用也更為普遍,例程 adc_09_sa_sb_awd_interrupt 給出了模擬看門狗的中斷配置和用法。
3.9
內部模擬通道
3.9.1
說明
ADC1 和 ADC2 都具有一個用于檢測內部模擬輸入的通道,分別為通道 16 和通道 8,用來檢測三個可選擇的內部模擬輸入量,內部基準電壓、8bitDAC1 輸出8bitDAC2 輸出。
注意:
- 只能選擇 ADC1 和 ADC2 其中之一的內部檢測通道,來檢測三個內部模擬輸入的其中一個,不能同時使用 ADC1 和 ADC2 的內部檢測通道。
3.9.2
應用
在一些系統中,可能由于某些原因導致 ADC 的參考電壓不穩定,從而無法知道模擬輸入的實際電壓值,這時,可用 ADC1 或 ADC2 的內部檢測通道,來檢測內部基準電壓(在系統工作電壓正常時恒為 1.1V),來反推 ADC 當前的參考電壓,從而得知模擬輸入當前的實際電壓值。具體實現如下:
1.
在某已知參考電壓 VREF1 下測得內部基準電壓的 ADC 值為 VAL1;
2.
隨著系統的運行,參考電壓可能隨著供電源(如電池)的電壓降低而下降,此時測得內部基準電壓的 ADC 值為 VAL2,設此時參考電壓為 VREF2;
3.
由于內部基準電壓是恒定的,所以有:
VAL1 × VREF1 = VAL2 × VREF2;
VREF2 = (VAL1 × VREF1) / VAL2;
由此已知當前參考電壓為 VREF2,就不難得到模擬輸入的實際電壓了。
例程 adc_10_internal_channel 展示了內部通道的各種配置和簡單用法。
3.10 可編程增益放大器 PGA
3.10.1 說明
HC32F460 系列 MCU 集成了可編程增益放大器 PGA,能對模擬信號進行放大處理,可節省MCU 外接運算放大器的硬件成本。PGA 電路先將模擬信號進行放大,然后再將放大后的模擬信號輸出至 ADC 模塊進行采樣轉換。
注意:
-
只有 ADC1 支持 PGA;
-
PGA 通道直接與模擬輸入引腳對應,其對應引腳映射的通道必須被 ADC1 序列 A 或序列B 的通道選擇寄存器選中,才可對該模擬輸入進行放大。
3.10.2 應用
用戶可根據實際的應用場景,選擇合適的放大倍數,對模擬輸入進行放大。模擬輸入電壓和放大倍數必須滿足如下條件:
0.1*VCCA/Gain <= VI <= 0.9*VCCA/Gain
其中,VCCA 是模擬電源電壓,Gain 是放大倍數,VI 是模擬輸入電壓,具體請參考用戶手冊PGA 相關部分。關于 PGA 的配置和用法,請參考例程 adc_12_adc1_pga。
3.11 協同模式
HC32F460 系列 MCU 具有兩個 ADC 模塊,可使用 ADC 協同工作模式。在協同工作模式下,轉換啟動只能由 ADC1 的觸發源觸發啟動,且軟件啟動無效。
協同模式可配置為以下四種協同模式:
?
單次并行觸發模式
?
單次延遲觸發模式
?
循環并行觸發模式
?
循環延遲觸發模式
注意:
-
協同模式只能由 ADC1 配置;
-
設置為協同工作模式的 ADC,其配置(掃描模式、分辨率和數據對齊方式等)應盡量相同;具體通道無需相同,但是通道數量及對應采樣時間應相同;
-
使用單次觸發時,請將協同工作模式的 ADC 設置為序列 A 單次掃描或循環掃描;使用循環觸發模式時,請設置為序列 A 單次掃描;
-
禁止多個 ADC 模塊同時對一個模擬輸入進行采樣;
-
請嚴格按照用戶手冊協同模式相關部分的說明,來設置采樣時間(ADC_SSTR 寄存器)和協同模式控制寄存器 ADC_SYNCCR 的 SYNCDLY。
-
請禁止序列 B,以免打亂同步。
3.11.1 單次并行觸發模式
3.11.1.1 說明
該模式下,ADC1 序列 A 的觸發條件同時觸發處于協同工作模式的所有 ADC 模塊, ADC1 序列 A 的觸發條件只觸發處于協同工作模式的 ADC 模塊一次,這些 ADC 模塊在采樣轉換一次后,是否停止,視其序列 A 掃描模式而定。
3.11.1.2 應用
并行觸發的特點是,處于協同工作模式的 ADC 能同時對各自的模擬輸入進行采樣轉換。例如,測量單相或三相瞬時電功率并繪制其曲線:Pn(t) = Un(t) × In(t)。在這種情況下,應同時測量電壓和電流,然后計算瞬時功率,即電壓 Un(t) 與電流 In(t)的乘積。要測量單相電功率,可將 ADC1 的一個通道和 ADC2 的一個通道配合使用,一個通道測量電壓,一個通道測量電流,如圖 3-9;要測量三相電功率,可將 ADC1 的三個通道和 ADC2 的三個通道配合使用,三個通道測量電壓,三個通道測量電流。
如果只需要測量某一時刻的瞬時功率,使用單次并行觸發模式即可;如果要連續測量,可結合定時器使用,用定時器定時觸發該協同模式,或結合序列 A 連續掃描模式,或用循環并行觸發模式,具體可根據需要的掃描頻率等需求選擇合適的解決方法。
3.11.2 單次延遲觸發模式
3.11.2.1 說明
ADC1 序列 A 的觸發條件觸發 ADC1 后,經過設定的延遲后觸發 ADC2 啟動采樣轉換。ADC1 序列 A 的觸發條件只觸發處于協同工作模式的 ADC 模塊一次,這些 ADC 模塊在采樣轉換一次后,是否停止,視其序列 A 掃描模式而定。
3.11.2.2 應用
結合序列 A 連續掃描模式,可實現對同一模擬輸入的高頻采樣。例如,如果要轉換的信號的頻率為 2.5MHz,則采樣率應該大于或等于該信號頻率的二倍(符合香農采樣定理)。
由于一個 ADC 的采樣率為 2.5MSPS,達不到采樣定理的要求。此時,可通過這種方式將采樣率提高到 5MSPS。關鍵設置如下:
1.
設置 ADC 時鐘為 60MHz;
2.
ADC1 和 ADC2 設置掃描模式為序列 A 連續掃描;
3.
ADC1 和 ADC2 配置同一個模擬輸入,并設置相同的采樣周期數 ADC_SSTR = 11;
4.
配置同步模式為單次延遲觸發,并設置同步延遲時間 ADC_SYNCCR.SYNCDLY = 12。
注意:
- 不要為了更高的采樣率而縮減采樣時間 ADC_SSTR,采樣時間過短可能會使轉換結果的
誤差超出誤差值的設計范圍。
建議:強烈建議使用 DMA 而非中斷,以免數據丟失。
3.11.3 循環并行觸發模式
3.11.3.1 說明
該模式下,ADC1 序列 A 的觸發條件同時觸發處于協同工作模式的所有 ADC 模塊。若設置為單次并行觸發,那么所有 ADC 模塊在轉換一次后就停止轉換(如果掃描模式是序列 A 單次掃描);若設置為循環并行觸發,在 ADC1 序列 A 的觸發條件同時觸發處于協同工作模式
的所有 ADC 模塊后,每經過延遲之后,所有 ADC 模塊會再次同時觸發轉換,如此循環,直到用戶主動軟件停止 ADC1 模塊或禁止協同模式。
3.11.3.2 應用
如果需要連續測量某模擬信號,可使用該模式,比如前面的測量電功率的應用。
3.11.4 循環延遲觸發模式
3.11.4.1 說明
ADC1 序列 A 的觸發條件觸發 ADC1 之后,每經過設定的延遲后,依次循環不斷觸發 ADC2、ADC1、ADC2……,直到用戶主動軟件停止 ADC1 模塊或禁止協同模式。
3.11.4.2 應用
該模式適用用于一些,需要對模擬輸入進行循環交替采樣而對采樣率要求不是很高的應用。這里簡單介紹下循環延遲觸發模式采樣率的計算方法。
假設如下條件:
1.
ADC 時鐘為 60MHz;
2.
采樣時間 ADC_SSTR 設置為 11;
3.
由 17.3.8 節和 17.4.16 節相關要求,SYNCDLY 可設置為 17。
4 總結
本應用筆記簡要介紹了 HC32F460 系列 ADC 模塊的各種功能以及可能的應用場景,并給出了ADC 模塊應用的基本流程,還提供了一種測試高頻采樣率的方法,在實際開發中,用戶可根據具體應用場景按需配置和應用 ADC 模塊。