NRF52832 SAADC多通道採集調試

NRF52832的ADC支持8/10/12/14位ADC採集,具有8個通道,支持差分輸入和單路輸入。

項目上使用SAADC採集電池電壓和溫度電阻的阻值,需要用到兩路ADC通道;在此項目中,使用NRF52832SAADC多通道採集,通過定時器,間隔500毫秒採集一次數據,放入緩存中,等需要數據時,在處理緩存中的數據,返回數據實現方式如下:

1,定義需要使用到的數據變量。


說明:

(1)#define SAMPLES_IN_BUFFER 2表示有兩個SAADC通道採集數據,只有當兩個通道都採集了數據,產生中斷時間,進入事件回調函數

(2)nrf_saadc_value_t adc_buffer [2] [SAMPLES_IN_BUFFER]定義兩個ADC數據轉換buff(雙緩衝區),這樣可以在一邊處理數據,一邊進行ADC的轉換。

2,初始化SAADC


說明;

(1)ADC配置可與配置ADC的採集精度,設置低功耗採集模式,中斷優先級等參數。在整體配置SAADC時,我們可以完全使用默認的配置。(我們此時使用採集精度時12位,所以要對其進行修改);使用ret_code_t nrf_drv_saadc_init(nrf_drv_saadc_config_t const * p_config, nrf_drv_saadc_event_handler_t  event_handler);進行配置。p_config:配置參數的結構體指針   event_handler:事件回調函數。

(2)配置ADC採集通道,這裏我們要使用兩個通道分別採集電池電壓和溫度電阻的電壓,所以我們要配置兩個通道。

(3)ADC通道配置,使用ret_code_t nrf_drv_saadc_channel_init(uint8_t  channel, nrf_saadc_channel_config_t const * const p_config);函數;channel:表示使用的ADC通道  p_config:該通道的配置結構體指針。在通道配置中我們可以配置參考電壓,輸入增益等,詳情參考配置結構體。

(4)ret_code_t nrf_drv_saadc_buffer_convert(nrf_saadc_value_t * p_buffer, uint16_t size)是用來綁定轉換buff,這裏我們採用雙緩衝機制,所以這裏綁定兩個緩衝區

(5)ADC轉換我們採用定時器觸發,所以在此我們創建了一個定時器,在定時器的回調函數中,啓動ADC轉換。

3、定時器回調函數


說明:

(1)ret_code_t nrf_drv_saadc_sample()啓動一次ADC轉換,這一次的轉換包括配置的所有ADC通道的轉換。

4、SAADC回調函數


說明;

(1)在回調函數中,我們首先判斷事件類型,如果時緩存區有數據事件類型纔開始處理數據。

(2)p_event-> data.done.p_buffer實質就是我們開始定義的ADC數據緩衝區adc_buffer [2] [SAMPLES_IN_BUFFER],通過nrf_drv_saadc_buffer_convert()函數在初始化時綁定。

(3)不同的通道採集的數據,存放在緩存數組的不同下標元素位上存放順序與我們使用的通道有關,低通道採集的數據存在低下標元素位上例如:。我們使用的channel_7採集電池電壓,CHANNEL_1採集溫度電阻,p_event-> data.done.p_buffer [0]就時CHANNEL_1轉換完成的數據,p_event-> data.done.p_buffer [1]是channel_7轉換完成的數據。


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