0
点赞
收藏
分享

微信扫一扫

蓝桥杯—STM32G431RBT6(ADC数模转换,从原理到应用)

一、什么是ADC?

二、配置工程

蓝桥杯竞赛板有两个模拟电压输出,分别是PB15和PB12.STM32G431内部集成2个有最高12位精度ADC(ADC1、ADC2)可配置的转换精度:6位,8位,10位,12位。12位精度为:0000 0000 0000 ~ 1111 1111 1111,2^12 = 4096。意思是把0 ~ 3.3v分成4096份  一份精度约为0.0008v(电压变换了0.0008v,ADC都能感受到).如原理图所示,两个采集端均存在跳线帽,若跳线帽拔掉,则无法正常工作。

分别配置PB15和PB12

三、使用步骤

在adc.c中编写getADC1和getADC2函数,目的是为了获取AD值,并在adc.h声明
uint16_t getADC2(void)
{
uint16_t adc=0;
	HAL_ADC_Start(&hadc2);//启动ADC转换
	adc=HAL_ADC_GetValue(&hadc2);//获取AD值
	return adc;
}
uint16_t getADC1(void)
{
uint16_t adc=0;
	HAL_ADC_Start(&hadc1);
	adc=HAL_ADC_GetValue(&hadc1);
	return adc;
}

对上述代码进行详解

在adc.h中声明
/* USER CODE BEGIN Prototypes */
uint16_t getADC2(void);
uint16_t getADC1(void);
/* USER CODE END Prototypes */
在main.c中添加校准函数,也可以放置与adc.c中的初始化函数中void MX_ADC1_Init(void),void MX_ADC2_Init(void)
HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
 定义两个值,用来获取ADC采集到的值
 double volt_R37;
 double volt_R38;
volt_R37=getADC2()*3.2/4096;
volt_R38=getADC1()*3.2/4096;

这两行代码是在对获取到的 ADC 值进行进一步的计算和转换。getADC2()getADC1()获取到的是经过 ADC 转换后的数值,然后分别乘以3.2/4096,可能是为了将 ADC 值转换为实际的电压值。

sprintf(buf,"     R37:%.2fV      ",volt_R37);
	LCD_DisplayStringLine(Line4,(uint8_t*)buf);
		sprintf(buf,"     R38:%.2fV      ",volt_R38);
	LCD_DisplayStringLine(Line5,(uint8_t*)buf);

四、效果展示

五、代码开源

通过网盘分享的文件:16-TEST7-ADC.zip
链接: https://pan.baidu.com/s/1N3-lp_dettxJMHnpxKlvHg?pwd=0820 提取码: 0820

举报

相关推荐

0 条评论