nrf52832學習系列一:saadc兩種配置使用方法(DMA:PPI+TIMER;非DMA:TIMER+單通道單次轉換)

nrf52832的saadc基本功能:


1、支持差分輸入方式,測量結果爲兩輸入端口電壓差的轉換的有符號數值,這個功能對於啥橋式傳感器的數據採集真是太爽了,可以省一個電平平移放大電路

2、原始分辨率最高提升到12位,14位那個過採樣方式實現的,使用限制很多,不能掃描,還不如自己軟件解決要多少位有多少位。

3、新增“通道”概念,每個通道可以選定使用的+-信號源,轉換是以通道爲個體進行的,如果使能多個通道,則一次觸發完成全部通道的掃描轉換。

4、自帶EasyDMA,可以直接把數據打到RAM內,但不能像STM32那樣支持循環傳輸,復位指針只能靠手動

5、取消了外部電壓參考輸入,這個其實有點蛋疼,在測量端供電和MCU供電之間存在變動情況下可能會引入誤差,對於低頻信號,可以用軟件進行補償,但也還有點蛋疼

6、可以自主配置採樣時間,端口負載電阻之類參數

大家上網查資料都應該知道,nrf52832各種各樣的例程代碼非常少,特別是帶操作系統,如freertos的例程少之又少。今天給大家分享兩個關於nrf52832的saadc的兩種用法。一種是DMA的方式,使用硬件內部的PPI映射,和定時器,可以實現固定的採樣頻率採集ADC值;還有一種是單次轉換ADC,使用定時器設置規定的採樣頻率;

官方提供的saadc例程是使用第一個方法(不帶操作系統的)。在實際應用中,這種方法可能不適用。

下面,我來介紹第一種方法的底層配置及應用

(1)saadc配置


如圖所示,1:配置單端通道輸入AIN0,關於這個配置,涉及到採樣增益,參考電壓選擇,過採樣選擇和差分/單端輸入選擇,後面的文章我會繼續更新講解,感興趣的話可以關注我,一起學習;2:提供saadc中斷回調函數,第一個形參表示對應的通道配置結構體,如果爲NULL,則表示默認使用一個回調函數,這裏也可以輸入channel_config;在多通道saadc中,這裏可以設定多個回調函數,後面我也會更新文章專門介紹;3:通道配置初始化;4:nrf52832採樣雙buffer緩存,當然你可以只用一個,這裏的意思當採樣滿SAMPLES_IN_BUFFER個數據後,觸發回調函數,然後在回調函數中處理數據;

(2)定時器和PPI配置


如圖所示,1:PPI初始化,PPI具體是什麼不需要去深究,只要學會如何使用他的api接口就可以了;2:定時器初始化配置及中斷函數的綁定;3:定時時間設置,單位爲ms,設置定時器爲比較模式,這裏我們關注最後一個形參,false表示定時中斷失能,true表示定時中斷失能,如果使用EsayDMA的PPI方式,就使用不到定時中斷函數,設置好定時時間後,會自動根據定時好的時間循環去採樣,設置的時間即爲採樣頻率,但是必須給出中斷函數,這裏的中斷函數就是timer_handler。4:獲取指定定時器比較事件的地址和saadc採樣任務;5:分配ppi通道給saadc採樣任務。

(3)採樣事件使能


(4)回調函數


好了,第一種方法的配置介紹這裏,這種方法在例程中都有。下面給大家介紹第二種,單次轉換+定時器的方法,以單通道爲例,上面詳細介紹了函數的作用,下面我就不具體介紹了。

(1)saadc初始化配置


這裏配置了一個差分輸入的saadc,單通道的話,這裏的SAMPLES_IN_BUFFER爲1

(2)定時器初始化


將ppi初始化及相關配置取消,將定時器中斷使能true。

(3)定時器中斷函數


表示定時器400ms後採樣1個點,觸發回調函數。SAMPLES_IN_BUFFER=1

(4)回調函數


好了,兩種方法都已經介紹完了,下次我會分享一篇關於多通道單次轉換的文章,希望大家持續關注,如果有什麼不對的地方,多多指教,謝謝


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章