1. ADC概述(STM32F4xx系列)
- 3 個 ADC
- 可分別獨立使用
- 也可使用雙重/三重模式(提高采樣率)
- 2 個通道組
- 規則通道:相當於正常運行的程序
- 注入通道:相當於中斷(可以打斷規則通道的轉換)
- 轉換模式分為
- 單次、連續、掃描、間斷模式
- 位數
- 12位模擬數字轉換器
- 結果左對齊或右對齊,存在16位數據寄存器中
2. 規則通道 & 單次轉換模式
過程
轉換結束時:
- 轉換結果將被存在 ADC_DR 寄存器中
- EOC(轉換結束)標志將被置位
- 如果設置了 EOCIE,則會產生中斷
要配置哪些
是否用掃描模式,分辨率,對齊方式,外部觸發使能設置,開始轉換,輸入時鍾分頻,多重模式選擇,采樣時間
用到的寄存器
1)ADC控制寄存器(ADC_CR1 和 ADC_CR2)
ADC_CR1
- ADC_CR1 的 SCAN 位
- 該位用於設置掃描模式
- 如果設置為 1,則 使用掃描模式,如果為 0,則關閉掃描模式。
- 由軟件設置和清除
- 在掃描模式下,由 ADC_SQRx或 ADC_JSQRx 寄存器選中的通道被轉換。
- 如果設置了 EOCIE 或 JEOCIE,只在最后一個通道轉換完畢后才會產生EOC 或 JEOC 中斷。
- ADC_CR1[25:24]
用於設置 ADC 的分辨率
ADC_CR2
- ADON 位用於開關 AD 轉換器
- CONT 位用於設置是否進行連續轉換,我們使用單次轉換,所以 CONT 位必須為 0。
- ALIGN 用於設置數據對齊,我們使用右對齊,該位設置為 0。
- EXTEN[1:0]用於規則通道的外部觸發使能設置,我們這里使用的是軟件觸發,即不使用外部觸發
- SWSTART 位用於開始規則通道的轉換,我們每次轉換(單次轉換模式下)都需要向該位寫
1。
2)ADC 通用控制寄存器(ADC_CCR)
- TSVREFE 位是內部溫度傳感器和 Vrefint 通道使能位,內部溫度傳感器我們將在下一章介紹,這里我們直接設置為 0
- ADCPRE[1:0]用於設置 ADC 輸入時鍾分頻
- 00~11 分別對應 2/4/6/8 分頻
- STM32F4 的 ADC 最大工作頻率是 36Mhz, 而 ADC 時鍾(ADCCLK)來自 APB2,APB2 頻率一般是 84Mhz,所以我們一般設置 ADCPRE=01, 即 4 分頻,這樣得到 ADCCLK 頻率為 21Mhz,不超過36的最大頻率。
- MULTI[4:0]用於多重 ADC 模式選擇,本章我們僅用了 ADC1(獨立模式),並沒用到多重 ADC 模式,所以設置這 5 個位為 0 即可。
3) ADC 采樣時間寄存器(ADC_SMPR1 和 ADC_SMPR2)
- 這兩個寄存器 用於設置通道 0~18 的采樣時間
- 每個通道占用 3 個位。
- 對於每個要轉換的通道,采樣時間建議盡量長一點
- 以獲得較高的准確度
- 但是這樣會降 低 ADC 的轉換速率。
- ADC 的轉換時間可以由以下公式計算
- Tcovn=采樣時間+12 個周期 , 其中:
- Tcovn 為總轉換時間
- 采樣時間是根據每個通道的 SMP 位的設置來決定的
- 例如, 當 ADCCLK=21Mhz 的時候,並設置 3 個周期的采樣時間,則得到Tcovn=3+12=15 個周期 =0.71us。
4)ADC 規則序列寄存器(ADC_SQR1~3)
5)ADC 規則數據寄存器(ADC_DR)
- 規則序列中的 AD 轉化結果都將被存 在這個寄存器里面
- 而注入通道的轉換結果被保存在 ADC_JDRx 里面
- 該寄存器的數據可以通過 ADC_CR2 的 ALIGN 位設置左對齊還是 右對齊。
6)ADC 狀態寄存器(ADC_SR)
EOC 位,我們通過判斷該位來決定是否此次規則通道的 AD
轉換已經完成, 如果該位位 1,則表示轉換完成了, 就可以從 ADC_DR 中讀取轉換結果,否則
等待轉換完成。