蓝桥杯嵌入式:ADC采集的使用(三)

蓝桥杯比赛中我们adc’采集的应用主要是采集两个电压,我这里主要阐述如何简单快速的上手adc采集值,mcp4017如何通过iic设置我会在之后讲。

ADC采集对应的引脚

PB15和PB12。
在这里插入图片描述

配置cubemx中ADC的设置

其实配置很简单,但是需要注意一些细节。
在这里插入图片描述
在这里插入图片描述

adc1我们会用到两个,adc2会用到一个,adc1多的一个是用来采集mcp4017的,可以和iic配合一起使用。将对应的通道配置成Single-ended,由于adc1有两个,我们还需要增加转换的数量(Number Of Convention)为2,此时的rank就会有两个,我们主要是把rank中的通道(rank)和采集频率(samping time)设置了,其他多余的可以暂时不用管。

工程代码

在这里插入图片描述
这里的采集主要是用到了HAL_ADC_Start(&hadcx)和HAL_ADC_GetValue(&hadcx)
这里我要强调一下,adc的采集结果是和通道的顺序对应,也就是和rank对应,比如adc1的rank中是通道五和通道十一,那第一次采集的就是mcp第二次就是r38。
对于最后的电压值计算我说一下:采集的电压值是3.3-0,而我们单片机的adc(12位)采集数量是0到4096个单位,所以0对应0,3.3对应4096,相当于是一个线性的一次函数,所以用如下的计算过程。
然后将一下代码放进while(1)进行运行

uint32_t adcTick = 0;
uint16_t mcp_value = 0;
uint16_t r38_value = 0;
uint16_t r37_value = 0;

float mcp_volt = 0.0,r38_volt = 0.0,r37_volt = 0.0;

void ADC_proc(void)
{
	if(uwTick - adcTick <100)
			return;
		adcTick = uwTick;
	
	HAL_ADC_Start(&hadc1);
	mcp_value = HAL_ADC_GetValue(&hadc1);
	
	HAL_ADC_Start(&hadc1);
	r38_value = HAL_ADC_GetValue(&hadc1);
	
	HAL_ADC_Start(&hadc2);
	r37_value = HAL_ADC_GetValue(&hadc2);
	
	mcp_volt = 3.3 * mcp_value /4096.0f;
	r38_volt = 3.3 * r38_value /4096.0f;
	r37_volt = 3.3 * r37_value /4096.0f;
	
	
}

结果演示

在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐