子殇丶 2024-09-13 17:21 采纳率: 0%
浏览 0

STM32f107vct6使用ADC采样 多通道采集波动大

STM32f107vct6使用ADC采样 采集温度 温度变送器发送4-20ma电流信号
采用ADC1内部 3 8 15通道进行采集

img


没有连接设备的通道也存在70多的数据 导致采样波动幅度大
初始化代码如下

img


采集代码如下

img

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-13 17:22
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你提供的描述和代码中看,存在几个问题可能会导致ADC采样波动大或采集不准确:

    1. 初始化代码中的重复部分: 在图3和图4中,你的初始化代码有一部分重复了两次。需要确认哪个是实际使用的版本并确保代码逻辑正确。另外,初始化过程中hadc1.Instance被重复赋值了两次,这可能导致配置不正确。

    2. ADC通道配置: 你的ADC通道配置代码段中使用了ADC_Ch_Array[i]sConfig.Channel来配置通道,但没有给出具体的通道配置数组ADC_Ch_Array的定义。请检查这个数组是否正确地定义了你要使用的通道。

    3. 校准: 确保在执行ADC转换之前进行了正确的校准。如果校准失败,可能会导致读取的数据不准确。你的代码中包含了HAL_ADCEx_Calibration_Start()函数来启动校准,确保它在ADC初始化之后正确执行并且返回成功。

    4. 未连接的通道数据: 即使是没有连接设备的通道也存在数据,这可能是因为ADC模块内部存在一定的噪声或者干扰导致的。可以尝试关闭未使用的通道来减少噪声影响。另外,检查接地和电源噪声是否影响到ADC的读数。

    5. 采样时间和转换模式: 检查sConfig.SamplingTime的设置是否正确。采样时间太长或太短都可能导致读数不稳定。另外确认hadc1.Init.ScanConvMode, hadc1.Init.ContinuousConvModehadc1.Init.DiscontinuousConvMode 的设置是否符合你的需求。

    6. 转换超时: 在图5和图6的ADC_Process函数中,使用HAL_ADC_PollForConversion(&hadcl, TimeoutOfConv)等待转换完成。确认TimeoutOfConv的值是否合适,太短的超时可能导致转换未完成就被中断。

    为了进一步解决这个问题,建议采取以下步骤:

    • 确认初始化代码的正确性,特别是硬件实例和配置部分。
    • 检查ADC通道配置数组是否正确设置。
    • 执行校准操作并确保成功完成。
    • 优化采样时间和转换模式设置。
    • 考虑对未使用的通道进行禁用操作。
    • 检查接地和电源噪声问题。
    • 如果可能的话,使用示波器或逻辑分析仪来观察ADC的实际输入信号,以确定是否存在外部干扰或噪声问题。

    请注意,具体的解决方案可能需要根据你的硬件设置、电路设计以及实际使用情况来调整和优化。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月13日

悬赏问题

  • ¥15 类图中关联与聚合的区别
  • ¥15 ENVI高分五号去除云层的方法
  • ¥15 16进制数据如何得到奇偶校验位
  • ¥15 求合并两个字节流VB6代码
  • ¥15 Pyqt 如何正确的关掉Qthread,并且释放其中的锁?
  • ¥30 网站服务器通过node.js部署了一个项目!前端访问失败
  • ¥15 WPS访问权限不足怎么解决
  • ¥15 java幂等控制问题
  • ¥15 海湾GST-DJ-N500
  • ¥15 氧化掩蔽层与注入条件关系