nRF52笔记(1) ADC使用

nrf52832 adc使用

1:adc输入范围的计算
需要注意点:
(1):选择参考电压,有以下几种
在这里插入图片描述
(2):增益大小,增益范围有以下几种
在这里插入图片描述
2:对输入电压的计算
计算公式如下:输入电压范围=参考电压/增益
Input range = (± 0.6 V or ±VDD/4)/Gain
Input range = (VDD/4)/(1/4) = VDD
Input range = (0.6 V)/(1/6) = 3.6 V

举例:
如果需要测量输入的电压最大只有1.2v,而选择输入的参考电压是0.6v,则需要选择的增益GAIN可为NRF_SAADC_GAIN1_2,这就得到输入电压的大小为1.2v

3:程序配置过程
3.1 adc 初始化驱动

void InitAdc(nrf_saadc_input_t adc_chann)
{
    ret_code_t err_code;

    err_code=nrf_drv_saadc_init(0,saadc_callback);  // ²Î¿¼µçѹÊÇ1.2v
    APP_ERROR_CHECK(err_code);
	nrf_saadc_channel_config_t channel_cfg = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(adc_chann);
   
	err_code=nrf_drv_saadc_channel_init(0,&channel_cfg);
    APP_ERROR_CHECK(err_code);
}

3.2 开始初始化和转化

void StartAdc(nrf_saadc_input_t input,uint8_t times)
{
    static uint8_t first=1; 
	
	if(first)
	{
		first=0;
		InitAdc(input);
	}
	nrf_drv_saadc_buffer_convert(m_buffer_pool, 1);
	nrf_drv_saadc_sample();
  
    busy_ms=0;
	while(true==nrf_drv_saadc_is_busy())
	{
		busy_ms++;
		nrf_delay_ms(1);
	}
}

3.3 adc返回事件

void saadc_callback(nrf_drv_saadc_evt_t const * p_event)
{
    if (p_event->type == NRF_DRV_SAADC_EVT_DONE)
    {
		avg_sample = p_event->data.done.p_buffer[0];
		battery_adc_valu = (ADC_valu(avg_sample) + 0);// realy adc src + calibration value.
    }
}

3.4 :计算实际电压值
#define ADC_REF 600 (0.6v的参考电压)
#define ADC_10BIT 1024 (10位ADC)
#define ADC_gain 3 (增益为1/3)

1: 计算实际的电压值

方法1:
#define ADC_valu(ADC_VALUE) ((((ADC_VALUE) *ADC_REF) / ADC_10BIT) * ADC_gain)
其中输入 ADC_VALUE = avg_sample

方法 2:
voltage = (float)avg_sample*3.6/1024;

4举例子
#define FU_SAADC_RESOLUTION 1024 // 10bit
#define FU_SAADC_REFERENCE 3600 // (in the unit of mV)

uint16_t service_bas_voltage_get(void)
{
ret_code_t err_code;
uint16_t bat_mv;
nrf_saadc_value_t adc_value;

err_code = nrfx_saadc_sample_convert(FU_SAADC_CHANNEL_BATTERY, &adc_value);
APP_ERROR_CHECK(err_code);

bat_mv = adc_valueFU_SAADC_REFERENCE2/FU_SAADC_RESOLUTION;

return bat_mv;
}

3:多路通道11

可以加入QQ群:687360507
与大伙沟通交流,技术在于分享而进步

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值