Вентиляторы PWM вызывают ошибочные значения датчика температуры (помехи?)

Я изучаю программирование Arduino, и мой текущий проект для реального использования состоит в том, чтобы подключить 10-17 PWM-вентиляторов корпуса ПК, чтобы температура контролировалась Arduino.

Итак, я подключил вентиляторы именно так, как на картинке. Взято с сайта https://www.racedepartment.com/threads/easy. -diy-wind-simulator-for-assetto-corsa.133999/

Схема подключения вентилятора PWM

Датчик температуры представляет собой TMP36 (входит в официальный комплект Arduino для начинающих). Он подключен к +5V и GND на Arduino Uno R3. Средний контакт является выходом и подключен к A0 на Uno.

Похоже, что показания температуры работают нормально до тех пор, пока вентиляторы не начнут вращаться. Когда они это делают, выходной контакт датчика TMP36 выводит ненужные значения. Например, 0 В или 700 мВ, и оно колеблется вверх и вниз, если я пытаюсь измерить его мультиметром. Однако, когда некоторые вентиляторы останавливаются, выход снова стабилизируется до довольно правильного значения.

Я не эксперт в области электронных помех, но я полагаю, электродвигатели вызывают некоторый электрический шум? Я надеялся, что вентиляторы ПК-шасси уже будут иметь электрические компоненты внутри концентратора, чтобы предотвратить это… В настоящее время я пытаюсь запустить 2 вентилятора одновременно, но я хочу использовать 10-17 позже, как только это сработает.

Я использую вентиляторы Arctic 92 мм PWM Rev 02.

Я проверил техническое описание (https://www.arduino.cc/en/uploads/Main /TemperatureSensor.pdf) для TMP36 (тип корпуса TO-92) и попытался добавить керамический конденсатор 0,1 мкФ между +5 В и GND, а также добавить резистор различных номиналов на выходной контакт. Я считаю, что я получил некоторую стабилизацию, но этого недостаточно. Особенно, когда вентиляторы начинают вращаться быстрее, чем 20% рабочего цикла на ШИМ, он начинает переворачиваться.

Я попытался отключить питание вентиляторов, чтобы проверить, не может ли это быть вызвано сигналом ШИМ, но это не так, поскольку TMP36 остается стабильным с включенным ШИМ, но вентиляторы отключены.

Может ли кто-нибудь помочь мне с объяснением того, что, вероятно, происходит, и как я могу решить проблему простым способом? Нужно ли добавлять диоды, конденсаторы, резисторы? Где? Или мне следует перейти на другой датчик температуры (какой)?

Спасибо за помощь!

, 👍0

Обсуждение

Быстрая мысль: возможно, попытка сделать и то, и другое вызывает проблемы. То есть вы можете использовать одни и те же ресурсы процессора для обеих функций. Как таймер или последовательный порт. Тот факт, что программа Arduino компилируется, не означает, что библиотеки, которые вы включаете, будут работать друг с другом., @st2000

Кстати, вы используете второй блок питания для питания Arduino, верно? Я говорю это, поскольку я понимаю 2 вещи. 1) Я предполагаю, что вы точно скопировали рабочий проект. Таким образом, приоритетом является совместная работа включенных библиотек. -и- 2) Второго блока питания на схеме нет. Я думаю, что первоначальный автор просто предполагал, что он будет., @st2000

@ st2000 Хммм, я использую только PWM (analogWrite) и AnalogRead для чтения значения температуры. Кажется, это очень "простой случай", чтобы он столкнулся? Это вызвало бы много проблем в проектах всех видов. Я попытался использовать LDR вместо TMP36 и получить аналоговые значения, и это сработало как шарм. Питание Arduino осуществляется через USB (подключение к ПК). Вентиляторы питаются от внешнего настенного адаптера, как показано на рисунке. Таким образом, питание для вентиляторов подается от адаптера питания., @10100111001

LDR потребовался бы подтягивающий или подтягивающий резистор. (Вы использовали его?) Тогда как, я полагаю, TMP36 не будет. Я не смотрел на спецификацию TMP36, мой плохой, я не понимал, что у него есть аналоговый выход. Я думал, что это один из обычных датчиков температуры, которые обмениваются данными по шине I2C. Дважды проверьте, что вы подключились к правильным контактам TMP36. Обратите внимание, что корпус TO92 — это вид снизу, тогда как другие виды корпуса — сверху., @st2000

@ st2000 Вы правы, да, у меня был резистор последовательно с LDR (10 кОм), в то время как TMP36 не нуждался в нем (хотя в техническом описании я затем нашел раздел ближе к концу, посвященный высоким индуктивным нагрузкам, показывающий конденсатор 01 мкФ и резистор 750 Ом). Может быть, это немного стабилизировало вещи, но как только вентиляторы раскручиваются выше 20% или около того, TMP36 начинает капризничать. Подключения к TMP36 должны быть правильными, потому что он отлично работает, когда вентиляторы не вращаются. Я чувствую, что чего-то не хватает, например, конденсатора или диода, или чего-то для вентиляторов?, @10100111001

Это превращается в догадки. Последовательное сопротивление и цоколь, вероятно, уменьшат шум, согласовывая импеданс длинного кабеля между АЦП и TMP36. Просто говори коротко пока. Фут/дециметр будет нормально. Я подозреваю, что ток, потребляемый вентиляторами на скорости, заключается в снижении напряжения источника питания вентилятора и перетаскивании источника питания USB ноутбука, что приводит к неожиданным показаниям. Убедитесь, что используемый вами блок питания в два раза превышает сумму ожидаемых токов вентиляторов. Кроме того, попробуйте подключить только 1 вентилятор, чтобы проверить, будет ли он работать должным образом., @st2000

Я подозреваю, что вы укажете, что у делителя LDR / резистора не было проблем с управлением вентиляторами на желаемой высокой скорости. Если это действительно так, я могу предположить, что импеданс LDR/резисторного делителя ниже, чем у TMP36. Что в таком случае небольшой шум может проявляться в виде больших колебаний напряжения и более неустойчивых выборок АЦП. Если это правда, то есть если шум случайный и среднее значение достаточно точное для этого проекта, рассмотрите возможность решения этой проблемы программно. Возьмите среднее значение показаний и используйте его для управления вентиляторами., @st2000

@ st2000 Верно, что значения напряжения, которые я получил при чтении LDR, были постоянными, поэтому я мог последовательно установить рабочий цикл ШИМ в зависимости от условий освещения. Я не могу взять среднее значение для TMP36, потому что, когда вентиляторы вращаются и на них влияют какие-то помехи, выходной контакт дает 0 В или что-то среднее между этим и, скажем, 700 мВ, и с помощью мультиметра я вижу, что напряжение на выходном контакте все время прыгает. Пока я не остановлю вентиляторы, то есть. Могу ли я вместо этого использовать резистивный датчик температуры (например, LDR для Light)? Итак, какой из них имеет линейный отклик?, @10100111001

Вы проверили, что питание вентилятора в 2 раза превышает сумму пикового потребления тока вентиляторами? (Вентиляторы рассчитаны на 0,8 А, поэтому оба на 1,6 А, поэтому в 2-х средствах следует использовать источник питания, который может подавать 3,2 А.) Или поэкспериментируйте с одним вентилятором, но используйте источник питания, который может подавать 1,6 А., @st2000

В настоящее время я использую банк питания, который может подавать 12V. Но вентиляторы рассчитаны на 0,16 А (а не на 1,6 А, которые были бы действительно мощными вентиляторами :)). Таким образом, с обоими вентиляторами на максимальной скорости я получаю 0,32 А при 12 В. Но у меня возникают проблемы с датчиком при скорости выше 20%, когда два вентилятора потребляют очень мало тока. Я не думаю, что блок питания слишком слаб, но я попробую с другим блоком питания. Если бы у меня был осциллограф, я бы смог увидеть, есть ли у меня искажение напряжения на входе датчика., @10100111001


1 ответ


Лучший ответ:

1

Если у кого-то возникнет такая же проблема, я решил ее. Выяснилось, что это был плохой блок питания. После покупки нового, более качественного, все заработало. Таким образом, я подозреваю, что проблема заключалась в высокой пульсации или, по крайней мере, достаточно высокой при приложении некоторой нагрузки (именно поэтому я заметил, что ситуация ухудшилась после того, как вентиляторы начали вращаться с рабочим циклом более 20%), чтобы датчик температуры перевернулся.

,