Не могу разобраться с проблемой: PWM, DS18B20, IRF520

cap0
Offline
Зарегистрирован: 06.08.2017

Помогите пожалуйста понять, в чем может быть проблема.

Этой мой первый опыт с ардуино, делаю контроллер для аквариума с контролем температуры.

Через 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));
}

 

Какие могут быть причины такого поведения? 

Есть мысль, может мосфет белого света не справляется с нагрузкой (греется он прилично - я уже прикрутил радиатор), и как-то заглючивает всю схему?

 

bwn
Offline
Зарегистрирован: 25.08.2014

Напруга у вас, батенька, просаживается, да еще и питание паразитное.

cap0
Offline
Зарегистрирован: 06.08.2017

bwn пишет:

Напруга у вас, батенька, просаживается, да еще и питание паразитное.

Спасибо, а что можно попробовать сделать?

И почему это происходит только при работе ШИМ, но не в двух других сценариях.

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

потому, что шим открывает и закрывает транзистор, который коммутирует приличный ток. Все это порождает помеху по питанию.

Учите про помехоустойчивость. Разделите питание, почитайте про конденсаторы... и т.д. Контроллер аквариума еще ни у кого не требовал гальванической развязки, просто аккуратно сделайте питание.

Если хотите, чтобы тут за вас решили, то публикуйте всю схему, и подробно питание. Конечно, сперва переведите подключение термодатчика на нормальное, 3-х проводное. При таких помехах не стоит использовать "паразитное" питание. И конденсатор ему на питание. Чаще всего хватит обычной керамики 104 (т.е. 0.1 мкФ).

cap0
Offline
Зарегистрирован: 06.08.2017

wdrakula пишет:

 

спасибо, я попробую нарисовать схему, вернусь.

cap0
Offline
Зарегистрирован: 06.08.2017

Прошу прощения за корявость схемы, надеюсь будет понятно.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

это как есть или как хочется?

100 тройный на белый свет??? это 100 параллельно включенных комбинаций из 3-х последовательно включенных диодов??????????????

понятно ли, что это 15А?

cap0
Offline
Зарегистрирован: 06.08.2017

это как есть сейчас.

Сто последовательно включенных LED-модулей, из трех параллельно подключенных СД.

По количеству знаков вопросов я понимаю, что это для мосфета многовато? :) Как быть, что поменять, чтобы работало как надо?

 

cap0
Offline
Зарегистрирован: 06.08.2017

Я замерил ток на мосфете белого, линия к диодам. 2,6А. Диоды китайские :)

Тем не менее, вопрос в силе - что делать :)

 

upd. Измерил ток на ленте, без ардуины и мосфета. 3.6А.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Вообще ерунда какая-то. БП - 12В?
На диоде 3В падение. Как ты их включаешь? рисуй.
Китайские, японские, русские... 3В 150ма. Поэтому рисуй.

cap0
Offline
Зарегистрирован: 06.08.2017

Вот так подключены LED, где-то штук 7 таких включений. Померял на конце одного из сегментов (10 тройников) - 9,8в напряжение. В другом месте 9,6 на не подключенном конце.

БП 12в, 350W.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

нет уж, рисуй правильно, на картинке ничего не понятно, 100 на 3 не делется.

Нарисуй до диода, как на нормальной схеме.  Может у тебя не БП, а ЛЕД драйвер? Это разные вещи.

......

ЗЫ: ты нарисуй нормально, а уже завтра отвечать буду... время самогона настало ;).

cap0
Offline
Зарегистрирован: 06.08.2017

У меня SMD модули, вот такие вот тройнички, подключены они к БП, не драйверу. Подключены они группами как на рисунке, где-то 10, где-то 20 тройничков - по разному.

bwn
Offline
Зарегистрирован: 25.08.2014

Что то вы недоговариваете. При последовательном подключении из 20шт, они еле светиться должны при 12В, если вообще зажгутся.

cap0
Offline
Зарегистрирован: 06.08.2017

Я просто плохо объясняю и рисую :D Давайте исходить из того, что ток нагрузки для белого света порядка 3А. Модуль мосфет такой: http://roboparts.ru/products/modul-irf520 По спецификации должен держать до 5А. Пока не сгорел.

У меня стойкое впечатление, что именно модуль белого свет вносит нестабильность. Что добавить в схему? Конденсатор 0,1мкф на вход 12в в мосфет для белого света (между GND и 12в)? 

 

bwn
Offline
Зарегистрирован: 25.08.2014

Давайте вернемся к посту №5, что за БП1, 12В, почему у него два выхода, что стоит после него, с номиналами 12В, 5А и снова идет на мосфеты?

Для начала, добавьте полноценное питание на ДС-ку (физически) и возле него конденсатор.

cap0
Offline
Зарегистрирован: 06.08.2017

Исправил схему. БП1: Блок питания EN-350-12 (12V, 350W, 29.16A, IP20) 

Преобразователь: DSN-MINI-360, 3A, запитан от этого же БП.

 

 

 

cap0
Offline
Зарегистрирован: 06.08.2017

Т.е., запитать датчик от 5в с преобразователя? Насколько я помню, я это делал (не помогло), правда без конденсатора.

На датчике конденсатор ставлю между 5в и GND, верно? Резистор оставить? 

bwn
Offline
Зарегистрирован: 25.08.2014

Если контакты на пайке, можно оставить как у вас. Конденсатор на ноги датчика (5В,GND). Резистор обязательно, можно попробовать уменьшить до 3к3 - 2к2 и разнести силовые шлейфы мосфетов и датчика в пространстве.
Влад вернется, может еще чего присоветует.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Я завтракаю... через час. Но уже сейчас видно, что 100 модулей это по их паспорту 1.44Вт/12В * 100 = 12А тока. это очень большая помеха. И транзисторный модуль этого держать не будет. Перегреется и сгорит.

Ладно... поем, сериал посмотрю и вернусь.

cap0
Offline
Зарегистрирован: 06.08.2017

Спасибо, отцы! :) 

А чем заменить текущий мосфет при такой нагрузке?  На перспективу?

Еще вопрос, может, конечно, я ошибся с измерениями, но лента подключенная напрямую к БП дает 3,6А сейчас. Подключенная к мосфету и ардуино - 2,6А. Это вообще нормально? Куда делся 1А? Это при открытом транзисторе.

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

родное сердце! я вообще без понятия, что именно ты измеряешь. Если измерения не соответствуют смыслу, то какая-то беда с измерениями.

Мне оно надо - догадываться, что именно ты не так делаешь?

Транзистор нужно брать с логическим уровнем урпавления, если производство IR, то IRL..... Например IRL540.

 

cap0
Offline
Зарегистрирован: 06.08.2017

Итого

- ставлю конденсатор на питание для темп. датчика

- убираю модуль на мосфет-транзисторе IRF520, делаю свой на IRL540.

 

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

можно перепаять транзистор в модуле.

И радиатор ему поставь! При максимально свете (ШИМ == 255) рассеиваться будет примерно 15 Вт!!! Почти паяльник!