Я пытаюсь создать модуль реле с контролем температуры с помощью ATtiny45 (Arduino UNO R3 в качестве интернет-провайдера) и датчика температуры NXP KTY81-222.
Диапазон температур, который я хочу контролировать, составляет от 20°C до 30°C.
(технические данные -> http://www.produktinfo.conrad.com/datenblaetter/150000-174999/153653-da-01-en-TEMPERATUR_SENSOR_KTY10_7_KTY81_222.pdf )
Схема моей схемы выглядит так = (я использую Arduino UNO R3 для отладки)
** обратите внимание, что я также пытался «поменять местами» резистор 1K и положение датчика, чтобы инвертировать выход.
*и плата ардуино ->
A0 — это аналоговый вход 0 Arduino. 5V напрямую подключается к выходному контакту 5V Arduino.
(позже это будет то же самое на ATtiny45 с использованием некоторых батарей)
(VCC может быть от 2,7 В до 5,5 В)
Я использовал бытовой цифровой термометр для сравнения значений аналогового входа с измеренными значениями °C.
это таблица быстрых измерений =
Аналоговый -> °C
от 687 до 690 -> от 24,4°C до 25,1°C
от 707 до 708 -> от 36,2°C до 36,5°C
как вы можете видеть, у меня есть диапазон примерно от 20 аналоговых единиц, который представляет диапазон примерно от 10 ° C единиц.
так что я на самом деле хочу, чтобы "вырастить" диапазон аналоговых единиц примерно до 200 аналоговых единиц для диапазона единиц измерения 10 ° C. решение должно подходить для обработки диапазона значений, поэтому я могу указать микроконтроллеру включить реле, если температура ниже 24°C, и закрыть реле, если температура выше 28°C.
Я хочу, чтобы 20 ° C было аналоговым значением примерно от 500, а 30 ° C - около 700. (Для меня этого диапазона от 500 до 700 было бы достаточно.
Я надеюсь, что смог хорошо объяснить свой вопрос из-за моего плохого английского.
смоделируйте эту схему - схема, созданная с помощью CircuitLab
Вы столкнетесь с некоторыми проблемами точности, такими как:
Я бы просто использовал однопроводной термометр, такой как DS18B20/DS18S20. Использование цифрового датчика менее невосприимчиво к шуму. Вы даже можете запустить его на гораздо большее расстояние. Уже есть библиотека для Arduino. Во всяком случае, это мой маршрут.
Идем своим маршрутом:
Если вам нужен только температурный диапазон от 20°C до 30°C, вам придется поиграться с вашим резистором, чтобы получить этот диапазон. Например, при 20°С номинальное сопротивление составляет 1922 Ом, а при 30°С — 2080 Ом.
Таким образом, состояния делителя напряжения дают:
Разница составляет 0,08778 В или 87,78 мВ. Так как аналог ардуино использует 10b (1023): . Это должно было дать 17,9 шагов ( , так что давайте просто скажем 17. Если вы хотите уменьшить это до большего разрешения, вы можете подключить 3,3 В от порта FTDI Arduino к аналоговому опорному выводу. Однако запитайте делитель напряжения теми же 5 В. В вашей настройке void() используйте AnalogReference(EXTERNAL). Что это сделает, так это настроит ваш аналог на использование опорного напряжения 3,3 В вместо внутреннего опорного напряжения 5 В.
Теперь давайте сделаем еще немного математики:
Поскольку сейчас мы используем опорное напряжение 3,3 В, разрешение изменится на . Теперь это даст 27,2 шага ( ) (скажем так, 27 шагов).
Как видите, мы только что увеличили количество шагов с 17 до 27. В диапазоне 10С (30С-20С) теоретически можно получить разрешение 10С/27 = 0,37С. Я бы порекомендовал подключить конденсатор параллельно датчику для создания фильтра нижних частот первого порядка (пропускает низкие частоты и подавляет высокие частоты после отсечки со скоростью 20 дБ или 10-кратное подавление за декаду). Подключите этот конденсатор прямо между A0 и gnd (как можно ближе к A0). Отсекающий фильтр рассчитывается с использованием:
Допустим, вы используете резистор 1 кОм и конденсатор 1 мкФ:
Все, что вам нужно сделать сейчас, это поиграться со значением резистора (теперь оно должно быть больше 1k). Убедитесь, что в худшем случае напряжение не будет больше опорного.
Я бы, вероятно, выбрал резистор 2k:
так что AnalogRead дает 759
так что AnalogRead дает 790
В худшем случае: @150C -> 4280 Ом
(хорошо)
Разница 98,73 мВ -> 98,73 мВ/3,23 мВ -> 30 шагов
Фильтр нижних частот: (Сигнал переменного тока на частоте 796 Гц снижается в 10 раз меньше, на частоте 7960 Гц меньше в 100 раз и т.д.).
Это может показаться не очень широким диапазоном цифровых чисел, но рассматривали ли вы усреднение (скажем) десяти показаний. Шум (если он обычно выше полосы пропускания, которую вам нужно измерить) может быть использован в ваших интересах с помощью процесса, называемого дизерингом. По сути, случайность шума даст вам разброс показаний для фиксированной температуры, а усреднение нескольких чисел даст большее разрешение. Процесс усреднения чисел представляет собой фильтр нижних частот, который (а) удаляет шум и (б) дает вам большее разрешение.
Вы упоминаете «аналоговые единицы», но ссылаетесь на цифровые значения, собранные с АЦП, поэтому я предлагаю вам сделать именно это — хотя бы попробовать и посмотреть, на что похожи вариации. Если у вас есть действительно хорошие стабильные сигналы в вашем АЦП, то можно попробовать некоторую форму усиления с помощью операционного усилителя. Если вы развязываете вход АЦП с помощью конденсатора, вы можете попробовать удалить его.
звездно-голубой
Туз
Скотт Сейдман
Туз