Не могу разобраться с проблемой: PWM, DS18B20, IRF520
- Войдите на сайт для отправки комментариев
Помогите пожалуйста понять, в чем может быть проблема.
Этой мой первый опыт с ардуино, делаю контроллер для аквариума с контролем температуры.
Через PWM управляю светом и вентиляторами, использую три модуля с мосфет-транзистором IRF520.
Свет: два канала LED 12в, синий и белый, SMD 5730, тройные модули, 100 тройных белый свет, 20 тройных синий
1 мосфет - на вентиляторы 12в.
Еще через один пин PWM считываю показания датчика температуры DS18B20 (подключен в паразитном режиме от ардуино, через пуллап резистор 4,9кОМ).
Какие есть симптомы:
- Если нагрузка на мосфеты выключена, то датчик температуры работает (могу считать значения, без пропусков)
- Если в пины для света пишется 255, то тоже могу считать значения с датчика, всегда, без пропусков
- Если в пины для света пишутся значения между больше 0 и меньше 255 (например - 70 в "синий", 20 - в белый), то датчик температуры сразу перестает поставлять значения, постоянно считывается -127.00. Долго ковырялся, нашёл какую-то взаимосвязь с частотой портов PWM. При частоте порта для света выставленной в 500, в этом сценарии из датчика температуры ничего не читает, никогда, всегда выдает -127.00. Если я уменьшаю частоту PWM света до 80, то успешно проходит 1 считывание из 3-10, но по крайней мере, можно как-то видеть температуру.
Вот так сейчас читаю данные (думаю, из кода предельно понятно, какого рода у меня проблема):
void GetData() { second=Clock.getSecond(); minute=Clock.getMinute(); hour=Clock.getHour(h12, PM); date=Clock.getDate(); month=Clock.getMonth(Century); year=Clock.getYear();-- temperatureAir=Clock.getTemperature(); //sensors.begin(); Serial.print("Requesting temperatures... "); sensors.requestTemperatures(); delay (500); float vTemp =sensors.getTempCByIndex(0); String svTemp=String(vTemp); Serial.println("Vtemp: "+svTemp); while (svTemp=="-127.00") { Serial.println("Error reading!"); if (frequency>60) { frequency--; SetPinFrequencySafe(WHITE_PIN, frequency); SetPinFrequencySafe(BLUE_PIN, frequency); SetPinFrequencySafe(VENT_PIN, frequency); } Serial.println("Current frequency: "+String(frequency)); sensors.requestTemperatures(); vTemp =sensors.getTempCByIndex(0); svTemp =String(vTemp); delay (2000); } if (frequency!=basefrequency) { frequency=basefrequency; SetPinFrequencySafe(WHITE_PIN, frequency); SetPinFrequencySafe(BLUE_PIN, frequency); SetPinFrequencySafe(VENT_PIN, frequency); } temperatureWater=vTemp; Serial.println(String(temperatureWater)); }
Какие могут быть причины такого поведения?
Есть мысль, может мосфет белого света не справляется с нагрузкой (греется он прилично - я уже прикрутил радиатор), и как-то заглючивает всю схему?
Напруга у вас, батенька, просаживается, да еще и питание паразитное.
Напруга у вас, батенька, просаживается, да еще и питание паразитное.
Спасибо, а что можно попробовать сделать?
И почему это происходит только при работе ШИМ, но не в двух других сценариях.
потому, что шим открывает и закрывает транзистор, который коммутирует приличный ток. Все это порождает помеху по питанию.
Учите про помехоустойчивость. Разделите питание, почитайте про конденсаторы... и т.д. Контроллер аквариума еще ни у кого не требовал гальванической развязки, просто аккуратно сделайте питание.
Если хотите, чтобы тут за вас решили, то публикуйте всю схему, и подробно питание. Конечно, сперва переведите подключение термодатчика на нормальное, 3-х проводное. При таких помехах не стоит использовать "паразитное" питание. И конденсатор ему на питание. Чаще всего хватит обычной керамики 104 (т.е. 0.1 мкФ).
спасибо, я попробую нарисовать схему, вернусь.
Прошу прощения за корявость схемы, надеюсь будет понятно.
это как есть или как хочется?
100 тройный на белый свет??? это 100 параллельно включенных комбинаций из 3-х последовательно включенных диодов??????????????
понятно ли, что это 15А?
это как есть сейчас.
Сто последовательно включенных LED-модулей, из трех параллельно подключенных СД.
По количеству знаков вопросов я понимаю, что это для мосфета многовато? :) Как быть, что поменять, чтобы работало как надо?
Я замерил ток на мосфете белого, линия к диодам. 2,6А. Диоды китайские :)
Тем не менее, вопрос в силе - что делать :)
upd. Измерил ток на ленте, без ардуины и мосфета. 3.6А.
Вообще ерунда какая-то. БП - 12В?
На диоде 3В падение. Как ты их включаешь? рисуй.
Китайские, японские, русские... 3В 150ма. Поэтому рисуй.
Вот так подключены LED, где-то штук 7 таких включений. Померял на конце одного из сегментов (10 тройников) - 9,8в напряжение. В другом месте 9,6 на не подключенном конце.
БП 12в, 350W.
нет уж, рисуй правильно, на картинке ничего не понятно, 100 на 3 не делется.
Нарисуй до диода, как на нормальной схеме. Может у тебя не БП, а ЛЕД драйвер? Это разные вещи.
......
ЗЫ: ты нарисуй нормально, а уже завтра отвечать буду... время самогона настало ;).
У меня SMD модули, вот такие вот тройнички, подключены они к БП, не драйверу. Подключены они группами как на рисунке, где-то 10, где-то 20 тройничков - по разному.
Что то вы недоговариваете. При последовательном подключении из 20шт, они еле светиться должны при 12В, если вообще зажгутся.
Я просто плохо объясняю и рисую :D Давайте исходить из того, что ток нагрузки для белого света порядка 3А. Модуль мосфет такой: http://roboparts.ru/products/modul-irf520 По спецификации должен держать до 5А. Пока не сгорел.
У меня стойкое впечатление, что именно модуль белого свет вносит нестабильность. Что добавить в схему? Конденсатор 0,1мкф на вход 12в в мосфет для белого света (между GND и 12в)?
Давайте вернемся к посту №5, что за БП1, 12В, почему у него два выхода, что стоит после него, с номиналами 12В, 5А и снова идет на мосфеты?
Для начала, добавьте полноценное питание на ДС-ку (физически) и возле него конденсатор.
Исправил схему. БП1: Блок питания EN-350-12 (12V, 350W, 29.16A, IP20)
Преобразователь: DSN-MINI-360, 3A, запитан от этого же БП.
Т.е., запитать датчик от 5в с преобразователя? Насколько я помню, я это делал (не помогло), правда без конденсатора.
На датчике конденсатор ставлю между 5в и GND, верно? Резистор оставить?
Если контакты на пайке, можно оставить как у вас. Конденсатор на ноги датчика (5В,GND). Резистор обязательно, можно попробовать уменьшить до 3к3 - 2к2 и разнести силовые шлейфы мосфетов и датчика в пространстве.
Влад вернется, может еще чего присоветует.
Я завтракаю... через час. Но уже сейчас видно, что 100 модулей это по их паспорту 1.44Вт/12В * 100 = 12А тока. это очень большая помеха. И транзисторный модуль этого держать не будет. Перегреется и сгорит.
Ладно... поем, сериал посмотрю и вернусь.
Спасибо, отцы! :)
А чем заменить текущий мосфет при такой нагрузке? На перспективу?
Еще вопрос, может, конечно, я ошибся с измерениями, но лента подключенная напрямую к БП дает 3,6А сейчас. Подключенная к мосфету и ардуино - 2,6А. Это вообще нормально? Куда делся 1А? Это при открытом транзисторе.
родное сердце! я вообще без понятия, что именно ты измеряешь. Если измерения не соответствуют смыслу, то какая-то беда с измерениями.
Мне оно надо - догадываться, что именно ты не так делаешь?
Транзистор нужно брать с логическим уровнем урпавления, если производство IR, то IRL..... Например IRL540.
Итого
- ставлю конденсатор на питание для темп. датчика
- убираю модуль на мосфет-транзисторе IRF520, делаю свой на IRL540.
можно перепаять транзистор в модуле.
И радиатор ему поставь! При максимально свете (ШИМ == 255) рассеиваться будет примерно 15 Вт!!! Почти паяльник!