nRF52840 SAADC单通道/多通道采集分析

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值