本章為大家帶來模數轉換器(ADC)的使用教學,按照慣例,我們先來說一下模數轉換器本身。
首先是功能,模數轉換器接收電壓信號并輸出一個數字信號,該數字信號是一個數字,這個數字指示了電壓信號的大小。通常來說,想要判斷大小就需要有對比,因此該數字指示的電壓大小實際上是一個比較的結果。ADC將需要測量的電壓信號Ut與已知電壓的信號U作比較,并最終輸出一個數字表示Ut相當于多少比例的U。
接下來就可以看看CW32的ADC外設結構框圖了,圖中按塊劃分了ADC外設的不同功能區。
ADC會將左側紅框中某一指定通道(由程序指定)所連接的電信號與下方紅框中選定的參考電壓(由程序選定)進行比較,完成紫色方框中的步驟后,最終輸出一個數字(暫記為value)并存放在右側紅框中的寄存器里面。Value的范圍取決于ADC的位數,若ADC為12位,則value最大為2^12=4096,最小值為0,value指示了相比于參考電壓U,輸入電壓Ut的值,計算方法如下:可以認為ADC將參考電壓分成了4096份,最終輸出的結果反映了輸入電壓夠得上其中多少份,例如參考電壓選擇2.5V,最終轉換的結果數據為2048,那么就認定輸入通道的實際電壓值是2.5/4096*2048=1.25V,其他情況以此類推。由于參考電壓的存在,ADC無法直接測量比參考電壓值高的信號,輸入通道連接的電壓不能高于參考電壓。
現在來簡單說說紫色方框內的部分,這一部分是ADC的核心部分,根據ADC轉換原理的不同,這一部分的電路結構也不一樣,CW32的ADC是逐次逼近型ADC,它會先把通道中的電壓信號采樣并被內部的采樣保持放大器輸出且保持穩定(這一步叫采樣保持),隨后ADC用逐次逼近的方法得到一個12位的數字(這一步叫量化編碼),需要重點關心的是采樣保持階段的持續時間,這個時間越久,最終用于量化編碼階段的采樣電壓值就越精確,我們就能得到更精確的轉換結果。
從上述步驟來看,使用ADC需要進行如下操作:
1.必要的IO初始化和外設時鐘初始化;
2.正確設置ADC的采樣通道和參考電壓;
3.選擇合適的ADC采樣時間;
4.啟動ADC并等待轉換完成;
5.讀取轉換結果寄存器得到電壓值;
首先需要說明的是IO初始化的問題。對于使用ADC功能的IO,它本質上并不是“將這個IO復用為ADC功能”,而是把這個IO設置為模擬輸入,也就是不將IO上的電信號量化成數字信號,這一點在GPIO電路結構圖里面可以看到。
這個模擬功能從結果上來看就是ADC復用,不過還是請大家理解其本質。
下一個要說的是采樣通道。ADC一般都會有多個采樣通道,開發者從中挑選一些通道接入電路來使用。ADC外設同一時間只能對某一個通道上的電壓進行轉換,所以如果需要采樣四個通道的電壓,只能順序轉換,這個轉換順序是可以手動設置的。ADC擁有4個可填入的配置項,暫且稱為序列0~3,ADC會根據另外一個配置項(ADC_SQR寄存器的ENS位段)來判斷該轉換這4個序列中的哪些,序列里面需要填寫的內容就是AD采樣的通道號,配置完成之后ADC就會按照這4個序列內填的通道號按順序進行AD轉換。更具體的配置方法直接參考ADC_SQR寄存器描述即可
圖中有一些前文沒說到的配置項,因為這些配置項是一些ADC附帶的特殊功能。具體的功能在手冊ADC章節的寄存器描述中有詳細說明,代碼中的注釋也已經詳細標注。
該配置中,ADC被配置為單通道單次轉換模式,也就是說ADC一次轉換只能轉換一個ADC通道,并且轉換完成之后就會停下來等待CPU發出下一次轉換開始的指令(相對的,還有連續模式和掃描模式)。
配置完成后,再編寫一個啟動ADC的函數就行了,該函數需要包含啟動、等待轉換完成、返回數據的功能,如圖所示:
上圖的具體步驟對應了手冊中描述的步驟,詳細說明見用戶手冊22.5.1章節。
ADC一般用法的介紹到此就結束了,但ADC還有很多其他功能,比如連續模式、掃描模式、硬件觸發采集和DMA訪問,這些模式可以幫助我們更好地使用ADC功能,后續的章節會介紹一種不消耗CPU資源的ADC采集方法,真正實現全自動采集。
審核編輯 黃宇
-
adc
+關注
關注
97文章
6291瀏覽量
542383 -
模數轉換器
+關注
關注
26文章
3039瀏覽量
126533 -
CW32
+關注
關注
1文章
168瀏覽量
498
發布評論請先 登錄
相關推薦
評論