AD检测——基于gdf310k

1、计算

V = Vout * Vref / 2^n;

V:检测电压(外部电路输入到MCU引脚的电压)

Vout:ADC检测值(目标值

Vref :参考电压

n:ADC位数

举例:

 检测BAT_DET的电压,VBAT为电路输入电压,BAT_DET = VBAT*(200k)/(200k+1m);

以参考电压5v为例,该电路能测量最大电压为30v。


2、配置代码

void AdcInit(void)
{
        //启用外设时钟功能
		rcu_periph_clock_enable(RCU_ADC);
		rcu_periph_clock_enable(RCU_GPIOA);
		rcu_adc_clock_config(RCU_ADCCK_APB2_DIV4);
		
        //设置GPIO模式
		gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_5);
		
        //配置通道数
		adc_channel_length_config(ADC_REGULAR_CHANNEL,1);

        //选择通道
		adc_regular_channel_config(0,ADC_CHANNEL_5,ADC_SAMPLETIME_55POINT5);

        //ADC对齐设置为右对齐
		adc_data_alignment_config(ADC_DATAALIGN_RIGHT);

        //配置 ADC 为连续模式(扫描模式只在 DMA 模式下使用)
		adc_special_function_config(ADC_CONTINUOUS_MODE,ENABLE);

        //ADC使能
		adc_enable();

		Delay_us(20000);
        //校准和复位校准 ADC
		adc_calibration_enable();
    
}

uint16_t Adc_ReadValue(void)
{
	uint16_t Value=0;

	adc_software_trigger_enable(ADC_REGULAR_CHANNEL);//软件触发 ADC 转换开始

	if(SET == adc_flag_get(ADC_FLAG_STRC))
	{
		//Delay_us(100000);
		
		if(SET == adc_flag_get(ADC_FLAG_EOC))
		{		
                //AD值
				Value = adc_regular_data_read();
		}
		
		adc_flag_clear(ADC_FLAG_STRC|ADC_FLAG_EOC);	
	}
	
	return Value;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值