STM32外設之ADC
ADC是我們可開發工程中必須掌握的外設。
ADC簡介(具體看stm32中文參照手冊)
STM32f103 系列有 3 個 ADC,精度爲 12 位,每個 ADC 最多有 16 個外部通道。其中ADC1 和 ADC2 都有 16 個外部通道, ADC3 根據 CPU 引腳的不同通道數也不同,一般都有8 個外部通道。
*今天我們例八步驅動ADC,掌握如何看參考資料和庫函數指導
根據功能框圖分成八步!!*重點內容*
(引用自野火零角度玩轉STM32)
1. 第一步:電壓輸入
我們這裏的VDD=3.3V,Vref- 、’Vref+其實就是接着我們的轉換通道
2. 第二步:輸入通道選擇
● 規則組:就是我們平時用的通道,老老實實的。選用應寫入ADC_CR1的DISCEN位。
● 注入組:就是可以插隊轉換。由應寫入ADC_CR1的JDISCEN。
3. *第三步:確定轉換順序
規則組轉換順序是通過SQR1、2、3控制決定的
SQR3控制第1-6次轉換;
SQR2控制7-12次轉化;
SRQ1控制第13-18次轉換;
(我也不知道爲什麼會反過來的)
那麼我們有十六個通道要轉換,(通道1、2、3。。。16)
如果通道8想最先轉換,就配置SQR3的SQ1【4:0】爲8
同理通道2想第8個轉換 ,就配置SQR2的SQ8【4:0】爲2
(自己可以對着寄存器帶代入)
注入組轉換順序由JSQR決定,如果 JL 的 值小於 4 的話,則 JSQR 跟 SQR 決定轉換順序的設置,當JL=4的時候跟SQR一樣
例如:
有一個轉換通道的時候,第一個轉換應該是配置JSQR4-1即是JSQR3,
有四個的時候就配置JSQR1.
4. 第四步:觸發源配置
ADC有三個打開方式:
1直接控制ADC_CR2的ADON、STRT、JSTRT
2外部io觸發
3定時器觸發
具體根據需求進行選擇
5. 第五步:轉換時間
時鐘配置:
根據時鐘樹可知道,ADC_CLK有PCLK2分頻得到,最大爲14M
通過配置ADCPRC這是2/4/6/8分頻。(我們的PCLK2一般爲72M)
採樣時間配置:
採樣的週期數可通過 ADC採樣時間寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMP[2:0]位設置, ADC_SMPR2 控制的是通道 0~9, ADC_SMPR1 控制的是通道 10~17。
公式爲: Tconv = 採樣時間 +12.5 個週期。
假如配置爲100 則Tconv=12.5+41.5=54個週期(12M下大約4.5us)
!!轉換時間越短,誤差越大。
7. 第七步:數據寄存器
規則組:ADC_DR。
由手冊我們知道這話四32位的寄存器,而我們的轉換精度是12位,所以單模式下只用低16位置,一般要右對齊。
注入組:ADC_JDRX(有四個,自行查詢手冊)
8. 第七步:中斷
轉換結束後有三種中斷:規則通道結束中斷,注入通道結束中斷,模擬看門狗中斷。前兩個中斷跟平常的中斷很相似,我們講一下模擬看門狗中斷。模擬看門狗就是設定一個高低閾值,由ADC_LCR和ADC_HTR決定,超過閾值同樣發生中斷。
9.第八步:電壓轉換
前面也提到過ADC精度爲12位數字。我們把它轉換成模擬電壓。
輸入電壓是3.3v,假設轉換後數值x,模擬電壓:y
公式
我們通過寄存器瞭解整個ADC的轉換過程,看起來很複雜,其實我們用到庫函數的時候就很簡答了。在這個學習過程中,我們要學會查看寄存器,查看庫函數幫助手冊。下次將更新庫函數配置ADC!!