Blackpill 尝试读取 NTC 时出现 adc 读取错误

问题描述 投票:0回答:1

开发板:Blackpill WeAct v3.0
单片机:STM32F401CEU6
IDE:Platformio
核心:STM32duino

我正在尝试使用一个简单的分压器和一个用于滤波的电容器来构建 NTC,如电路图所示:

the circuit diagram

代码流程如下:
1- 将 temp_outpin 设置为 HIGH
2-读取temp_inpin
中的adc值 3-处理并保存adc值
4- 将 temp_outpin 设置为 LOW

  digitalWrite(_outPin, HIGH);
  float accumulated = 0;
  for (int i = 0; i < iterations; i++)
  {
    int adc = analogRead(_inPin);
    float rt = ((adc * rs) / ((pow(2, resolution)) - adc));
    rt = rt / r0;
    rt = log(rt);
    float temp = beta / (rt + beta / t0);
    temp = temp - 273.5;
    accumulated += temp;
  }
  digitalWrite(_outPin, LOW);
  temperature = accumulated / iterations+ offset;

如果我让 _outpin 永远保持为 HIGH,代码将完美运行。只需添加行 "digitalWrite(_outPin, LOW);" 就会导致读取错误。我尝试在将引脚设置为HIGH之后以及将其设置为LOW之前和之后设置延迟(从1到100毫秒)。
我可以让它持续HIGH,但这会带来我不想承担的能源成本。
感谢您事先的帮助。

embedded temperature adc stm32f4
1个回答
0
投票

好吧,延迟了一切都解决了。误差来自电容器的充电时间。在这种情况下,RC常数为100ms,因此我在将引脚设置为HIGH后设置了大于100的延迟,并且效果完美。

© www.soinside.com 2019 - 2024. All rights reserved.