NRF52840的ADC支持多位ADC采集,具有8个通道,支持差分输入和单路输入。
项目上使用SAADC采集四路电池电压的阻值,需要用到四路ADC通道;通过主动采采集单次数据,放入缓存中,等需要数据时,再处理缓存中的数据,返回数据实现方式如下:
测试场景:
1.进行单次单路电池的采集
2.进行单次四路电池的采集
测试分析:
1.根据测试事件区分为两种测试通道模式配置:
#define SAMPLES_IN_BUFFER 4 表示有4个SAADC通道采集数据,只有当4个通道都采集了数据,产生中断事件,才进入事件回调处理函数;(Battery_ADC_CallbackHandle)
SAMPLES_IN_BUFFER = 4;
err_code = nrf_drv_saadc_buffer_convert(p_event->data.done.p_buffer, SAMPLES_IN_BUFFER);
APP_ERROR_CHECK(err_code);
#define SAMPLES_IN_BUFFER 1 表示有1个SAADC通道采集数据,只要有1个通道都采集了数据,便可产生中断事件,进入事件回调处理函数;(Battery_ADC_NUM_CallbackHandle)
err_code = nrf_drv_saadc_buffer_convert(p_event->data.done.p_buffer, 1);
APP_ERROR_CHECK(err_code);
2.nrf_saadc_value_t adc_buffer [2] [SAMPLES_IN_BUFFER] 表示2个SAADC数据转换buff(双缓冲区),即可以一边处理数据,一边进行SAADC的转换。
err_code = nrf_drv_saadc_buffer_convert(m_bettery_buffer_pool[0], SAMPLES_IN_BUFFER);
APP_ERROR_CHECK(err_code);
err_code = nrf_drv_saadc_buffer_convert(m_bettery_buffer_pool[1], SAMPLES_IN_BUFFER);
APP_ERROR_CHECK(err_code)
测试初始化:
void Battery_ADC_NUM_Init(BATTERY_CHANNEL_NUM BattNum)
{
ret_code_t err_code;
nrf_saadc_channel_config_t channel_0_config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE( BATT4_SAADC_INPUT);
nrf_saadc_channel_config_t channel_1_config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE( BATT2_SAADC_INPUT);
nrf_saadc_channel_config_t channel_5_config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CO