STM32f107vct6使用ADC采样 采集温度 温度变送器发送4-20ma电流信号
采用ADC1内部 3 8 15通道进行采集
没有连接设备的通道也存在70多的数据 导致采样波动幅度大
初始化代码如下
采集代码如下
STM32f107vct6使用ADC采样 采集温度 温度变送器发送4-20ma电流信号
采用ADC1内部 3 8 15通道进行采集
以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
从你提供的描述和代码中看,存在几个问题可能会导致ADC采样波动大或采集不准确:
初始化代码中的重复部分: 在图3和图4中,你的初始化代码有一部分重复了两次。需要确认哪个是实际使用的版本并确保代码逻辑正确。另外,初始化过程中hadc1.Instance
被重复赋值了两次,这可能导致配置不正确。
ADC通道配置: 你的ADC通道配置代码段中使用了ADC_Ch_Array[i]
和sConfig.Channel
来配置通道,但没有给出具体的通道配置数组ADC_Ch_Array
的定义。请检查这个数组是否正确地定义了你要使用的通道。
校准: 确保在执行ADC转换之前进行了正确的校准。如果校准失败,可能会导致读取的数据不准确。你的代码中包含了HAL_ADCEx_Calibration_Start()
函数来启动校准,确保它在ADC初始化之后正确执行并且返回成功。
未连接的通道数据: 即使是没有连接设备的通道也存在数据,这可能是因为ADC模块内部存在一定的噪声或者干扰导致的。可以尝试关闭未使用的通道来减少噪声影响。另外,检查接地和电源噪声是否影响到ADC的读数。
采样时间和转换模式: 检查sConfig.SamplingTime
的设置是否正确。采样时间太长或太短都可能导致读数不稳定。另外确认hadc1.Init.ScanConvMode
, hadc1.Init.ContinuousConvMode
和 hadc1.Init.DiscontinuousConvMode
的设置是否符合你的需求。
转换超时: 在图5和图6的ADC_Process
函数中,使用HAL_ADC_PollForConversion(&hadcl, TimeoutOfConv)
等待转换完成。确认TimeoutOfConv
的值是否合适,太短的超时可能导致转换未完成就被中断。
为了进一步解决这个问题,建议采取以下步骤:
请注意,具体的解决方案可能需要根据你的硬件设置、电路设计以及实际使用情况来调整和优化。