STM32G4使用内部基准校准ADC

思路,内部校准值为输入3.0V下的1.2V基准,这个值在一个固定地址中记为X1,读出来就可以
然后拿ADC去采内部基准得到记为X2,就可以反算输入电压VDDA了
VDDA=3*X1/X2.得到VDDA后可以把ADC计算式改为4096/VDDA,这样就精确了

校准的前提是VDDA要稳,如果输入变化,VDDA也在变,那初次校准值没有任何意义!!!

// ADC采样次数(可以自定义,建议大于等于5)
#define ADC_SAMPLES 10

uint16_t VREFINT_Samples[ADC_SAMPLES],VREFINT_Sum,VREFINT_Max=0,VREFINT_Min=0xFFFF;
uint16_t VREFINT_Calibration_Value;			//内部记录值
float VREFINT_Avg=0;
float VDDA_Real=3.307f;					    //电压实际值

放在初始化函数内校准
	/**ADC内部基准自校准**/
	VREFINT_Calibration_Value = *(volatile uint16_t*)0x1FFF75AA;  // 获取ST工厂校准值,3.00V下的
	
	for (int i = 0; i < 10; i++) {
        HAL_ADC_Start(&hadc1);
        if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) {
            VREFINT_Samples[i] = HAL_ADC_GetValue(&hadc1);
        } else {
            VREFINT_Samples[i] = 0;  // 出错则记为0
        }
		
		 HAL_Delay(70);
	}	
	 // 统计最大最小值并计算总和
    for (int i = 0; i < ADC_SAMPLES; i++) {
        if (VREFINT_Samples[i] > VREFINT_Max) VREFINT_Max = VREFINT_Samples[i];
        if (VREFINT_Samples[i] < VREFINT_Min) VREFINT_Min = VREFINT_Samples[i];
        VREFINT_Sum += VREFINT_Samples[i];
		}
		
		VREFINT_Sum -= VREFINT_Max;
		VREFINT_Sum -= VREFINT_Min;
		VREFINT_Avg = VREFINT_Sum / (ADC_SAMPLES - 2);
		VDDA_Real=3.00f*(float)VREFINT_Calibration_Value/VREFINT_Avg;
		得到VDDA_Real值

### 回答1: STM32G4系列微控制器中的ADC模块是一种高性能的模拟转数字转换器,常用于采集各种传感器的模拟信号。以下是一些对于使用STM32G4ADC模块的提示和建议: 1. 配置ADC的时钟:在使用ADC之前,需要设置正确的时钟源和分频系数,以保证ADC工作在适当的频率范围内。可以使用RCC(Reset and Clock Control)模块来配置ADC时钟。 2. 选择合适的ADC分辨率:STM32G4ADC模块支持多种分辨率,包括8位、10位、12位和16位。选择合适的分辨率取决于您需要实现的精度要求和系统的要求。 3. 配置ADC通道和采样时间:ADC模块可以采集多个模拟通道的信号,每个通道需要设置相应的采样时间。采样时间需要根据被测信号的频率和幅度来确定。同时,还需要根据实际情况配置多通道扫描模式。 4. 选择合适的转换触发方式:ADC可以通过软件触发、外部触发源或定时器触发等方式进行转换。根据应用需求,选择合适的触发方式来实现精确的采样。 5. 启用并配置DMA传输:为了提高数据采集的效率,可以配置DMA(Direct Memory Access)来实现ADC数据的无缝传输。通过DMA传输,可以减少CPU的负载,提高系统性能。 6. 使用合适的参考电压:ADC模块需要一个参考电压作为基准来完成模拟信号的转换。在使用过程中,确保选用稳定的参考电压源,并根据需求选择合适的参考电压电平。 7. 进行校准STM32G4ADC模块支持硬件和软件校准。在使用ADC之前,建议进行校准以保证精确的转换结果。 8. 使用适当的滤波器:如果被测信号中存在噪声或杂散,可以通过配置模拟滤波器和DMA的后处理滤波器来有效地抑制噪声,提高信号质量。 以上是对于使用STM32G4ADC模块的一些建议和提示,希望能对您有所帮助。在使用过程中,请参考官方的技术文档和编程手册以获取更详细的信息和操作步骤。 ### 回答2: STM32G4系列微控制器的ADC(模数转换器)是一种用于测量模拟输入电压的重要外设。以下是有关使用STM32G4 ADC的提示和建议: 1. 配置ADC通道:要使用ADC,首先需要选择和配置要使用ADC通道。可通过设置ADC的控制寄存器来选择所需的通道,并确保相应的引脚被正确连接。 2. 选择采样时间:对于不同的输入信号,需要设置适当的采样时间。采样时间应能够充分获取输入信号的所有变化。可以根据输入信号的频率和幅值来选择合适的采样时间。 3. 设置ADC分辨率:根据应用需求,可以选择不同的ADC分辨率。较高的分辨率可以提供更精确的测量结果,但会占用更多的处理器资源。选择合适的分辨率以平衡精度和资源利用率。 4. 启动转换:在进行ADC转换之前,需要启动转换过程。可以在软件中触发转换,或使用外部触发源。需要注意转换的启动时间和转换速率,以确保获取到所需的数据。 5. 处理转换结果:ADC转换的结果可以通过读取数据寄存器进行访问。可以使用中断或DMA方式进行结果的处理。在处理结果时,应注意数据的精度和解析方法。 6. 准确性的校准ADC的准确性可能会受到偏移和增益误差的影响。为了提高测量精度,可以进行ADC校准校准过程通常包括偏移校准和增益校准。 7. 噪声滤波:在一些应用中,输入信号可能会受到噪声的干扰。可以使用滤波器来降低噪声的影响。STM32G4 ADC提供了不同的滤波器选项,可以根据实际需求进行配置。 总而言之,使用STM32G4ADC时,需要正确配置ADC通道、采样时间和分辨率。在处理转换结果时,需要注意数据的精度和解析方法。此外,可以进行校准和滤波操作以提高测量的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值