使用 Arduino 准确测量温度

电器工程 Arduino 传感器 温度
2022-01-11 13:10:07

我正在尝试用 Arduino 构建恒温器。我想使用手机电池/充电器为其供电,这使得系统电压变化很大。现在我使用 Arduino Uno,但一旦完成,我会将其移植到 Lilypad。

首先我尝试使用TMP36温度传感器。到目前为止,它完全失败了。虽然传感器本身看起来非常稳定,但我无法找到准确测量其电压的方法。

为模拟传感器使用内置的 5v 参考根本不起作用——即使是从 USB arduino 的 +5V 供电,实际上也是 +4.8V(它将测量的温度改变了几度)。当电路板由电池供电时,电压降至 4V 左右,测得的温度猛增。我还尝试使用板上的 +3.3V 作为参考。当板子由 USB 供电时,它似乎更稳定,但当电池耗尽时,它的电压会下降。

有没有其他方法可以可靠地测量传感器输出电压?

对于第二阶段,我打算使用热敏电阻。刚订购了几个这样的 20K 热敏电阻

据我了解,如果我构建分压器并使用 V_in 作为 ADC 的参考电压,这些应该更容易准确测量。

关于他们的几个问题:

  • 使用几个具有不同固定电阻的分压器来提高精度是否有意义?
  • 我可以将可编程引脚用作 V_in,并使用几个不同的电压电平测量温度。虽然我不清楚这是否真的会提高准确性。
4个回答

我认为您应该考虑使用像 DS18B20/DS18S20 这样的数字温度传感器,因为它不依赖于 ATmega ADC 的精度来测量模拟信号,它使用 1 线数字协议来报告温度。

参考以下教程
http://playground.arduino.cc/Learning/OneWire
http://www.hobbytronics.co.uk/ds18b20-arduino

您似乎意识到参考电压变化的问题,如果您使用像 TMP36(固定 10mV/degC)这样的设备,除了使用来自芯片的电压参考来稳定事情之外,您无能为力。

但是,如果您使用的是 RTD 或热敏电阻,则不会出现问题。您的 ADC 正在进行比率测量 - 它将 ADC 输入与其参考电压进行比较,但是,如果您从相同的参考电压为 RTD 或热敏电阻(通过合适的电阻器)供电,则不会影响读数。如果 ref 上升 10%,那么进入 ADC 的电压也会上升。

您的测量结果与 ADC 的参考电压一样好。默认情况下,Arduino 使用电源电压作为参考电压,但在您的情况下,正确的做法是使用 arduino 的 Aref 引脚。您必须获得一个名为“电压参考”的特殊芯片并将其连接到 Aref 引脚,然后将 ADC 设置为使用 Arduino 代码中的外部参考(analogReference(EXTERNAL)

必须选择参考电压,以便温度传感器的全摆幅适合参考电压。TMP36 将在 100C 时输出 ~1.5V,因此您必须使用高于 1.5V 的参考来测量高达 100C 的温度。您希望参考电压尽可能接近测量的最大电压,以获得尽可能高的分辨率。

Atmega328p 有两个内部参考,无需任何外部组件即可使用。一个是 1.1V,另一个是 2.56V。它们通常比使用外部专用组件获得的精度要差一些。检查 Arduino 文档以获取analogReference和 Atmega328p 数据表以了解内部参考精度。

如果你真的想得到不同范围的坚果,你可以使用几个外部参考,并通过像 74hc4051 这样的模拟开关来切换它们。或者,您可以在两个内部参考之间切换。

使用热敏电阻,如果您设置恒流源而不是使用哑电阻,您将获得更好的结果。另一方面 - 由稳定电压参考供电的哑电阻可以正常工作。

选择外部参考时,请确保您有足够的电压来适应使用电池供电时的压降电压并且电池没电。Vref+Vdropout < Vbat-min。

没有稳定的 ADC 参考实际上是电路中另一个问题的症状:您没有为电路板提供足够高的电压。这可以通过 5V 电源降至 4V 和 3.3V 下降来表示。

Arduino 板上的稳压器 (MC33269D-5.0 IIRC) 的压差约为 1.0V,因此您需要为其提供至少 6V 的电压才能获得稳定的 5V 输出。AA 电池从 1.5-1.6V 开始,在 1.1V 时几乎没电,因此您必须使用至少 6 节 AA 电池为电路板供电,以便在整个电池寿命期间保持稳定的输出。

正确供电,您可以使用内部 ADC 基准或 5V 或 3.3V 线路。由于温度传感器每摄氏度变化约 10mV,您可以使用分压器将参考电压设置为等于最大预期传感器输出电压(例如 50 摄氏度)。这将提供更精确的测量。

如果您想使用少于 6 节 AA 电池,请尝试使用 DC-DC 升压转换器,例如https://www.sparkfun.com/products/10968链接的示例采用 1V - 4V 并产生 5V。输出将绕过其调节器直接馈入 Arduino 的 5V 引脚。

要让电路板在电池上运行更长时间,请在传感器读取之间让 MCU 进入睡眠状态。Rocketscream低功耗库非常适合此目的。但它仅在使用高效稳压器/DC-DC 转换器时才真正有用,因为标准 Arduino 稳压器本身仅使用 10mA!