蓝桥杯嵌入式:ADC采集的使用(三)
蓝桥杯嵌入式ADC采集的应用
·
蓝桥杯嵌入式: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;
}
结果演示

更多推荐



所有评论(0)