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;
3:多路通道11
可以加入QQ群:687360507 与大伙沟通交流,技术在于分享而进步
