开发板:Blackpill WeAct v3.0
单片机:STM32F401CEU6
IDE:Platformio
核心:STM32duino
我正在尝试使用一个简单的分压器和一个用于滤波的电容器来构建 NTC,如电路图所示:
代码流程如下:
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,但这会带来我不想承担的能源成本。
感谢您事先的帮助。
好吧,延迟了一切都解决了。误差来自电容器的充电时间。在这种情况下,RC常数为100ms,因此我在将引脚设置为HIGH后设置了大于100的延迟,并且效果完美。