1. 序 本项目使用ADC2+多通道进行ADC温度传感器采集,由于ADC2没有缓存模式,只能一次一次去读取采集的数据,即读取“ADC数据低位寄存器(ADC_DRL)和ADC数据高位寄存器(ADC_DRH)”,在使用多通道连续采集的时候,只能按照先后顺序去采集+读取数据并做响应处理。 初始化配置的代码如下:
- [align=left]void bsp_AdcInit()[/align][align=left]{[/align][align=left] ADC_CR2_ALIGN = 1; //右对齐数据[/align][align=left] ADC_CR1_CONT = 1; //连续转换模式[/align][align=left] ADC_CR1_SPSEL = 4; //8分频时钟 [/align][align=left]}[/align][align=left]void bsp_Channel9Init()//PE6->温度1[/align][align=left]{[/align][align=left] ADC_CR1_ADON = 1; //启动转换[/align][align=left] ADC_CSR &= (uint8_t)(~0x0F); // Clear the ADC2 channels [/align][align=left] ADC_CSR |= 0X09; [/align][align=left] ADC_CR1_ADON = 1; //启动转换[/align][align=left] [/align][align=left]}[/align][align=left]void bsp_Channel8Init()//PE7->温度2 [/align][align=left]{[/align][align=left] ADC_CR1_ADON = 1; //启动转换[/align][align=left] ADC_CSR &= (uint8_t)(~0x0F); // Clear the ADC2 channels [/align][align=left] ADC_CSR |= 0X08;[/align][align=left] ADC_CR1_ADON = 1; //启动转换[/align][align=left]}[/align][align=left]需要采集哪个通道的数据就调用哪个通道的配置函数,[/align][align=left]//--------------------温度采集------------------- [/align][align=left] bsp_AdcVoltageToTemp8(); [/align][align=left] bsp_AdcVoltageToTemp9();[/align]
复制代码
2. 问题 采集过程中需要频繁切换选中的通道,这时候就会出现通道之间的干扰,产生一个明显的影响。例如,室温为27°时,采集到的温度只有23/24℃。 3. 原理 搜索网上相关问题,我找到一个比较合理的解释。
4. 解决方案 在调用切换通道的配置函数之后,加一个延时,等电容电压稳定过后,再去采集和处理数据。 |