Снижение оборотов вентиляторов.

telets
Offline
Зарегистрирован: 25.08.2019

Здравствуйте.

Столкнулся со снижением оборотов вентиляторов при их подключении через мосфет и включении-выключении через Arduino в зависимости от температуры, получаемой от датчика температуры/влажности sht31. При прямом подключении вентиляторов к блоку питания обороты максимальные, а через Arduino - органолептически (визуально, на слух и тактильно - по давлению воздушного потока) значительно ниже. С помощью китайского тестера "Multi-function Tester -TC1" у всех электронных компонентов определяются какие-то параметры, для резисторов значения близки к номиналам. Arduino используется в качестве реле, ШИМ не применяется. Собственно включение-выключение происходит надежно, четко, что хорошо заметно при небольших флуктуациях показаний термодатчика вблизи контрольной температуры. Т. о., с переключением проблем нет. Есть только странный побочный эффект - снижение оборотов вентиляторов. Для корректной работы это снижение необходимо устранить.

Большая просьба, помогите, пожалуйста, разобраться и решить возникшую задачу. Картинка с подключением прилагается.

Calmness
Offline
Зарегистрирован: 29.10.2019

   Три вопроса :

1. Зачем такие мощные выходные транзисторы?

2 . Как вариант : пин Ардуины-транзистор-рэле- нагрузка ( ветилятор ) . Не вариант ?

3.  А код можно глянуть ?

nik182
Offline
Зарегистрирован: 04.05.2015

Я б даже спросил. А простой тестер измерить напряжение на открытом транзисторе есть? 

Гриша
Offline
Зарегистрирован: 27.04.2014

требуется произвести измерение напряжения на сопротивлениях R2 и R4. какое падение напряжения на мосфете (сток-исток)?

и вопрос к управляющим сигналам, может ошибка в коде. Напишите тестовый скетч в котором ничего лишнего не будет... типа (blink) 5 сек крутить мотор, 5 сек ничего не делать. на втором этапе просто в наглую закоротить сток-исток.

svm
Offline
Зарегистрирован: 06.11.2016

Возможно подсунули перемаркированные IRFZ44N.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Очевидно, что мосфет не открывается полностью .
Либо городить усилитель, либо искать мосфет с параметром Vgs =5В

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Посмотрел даташит на мосфет.
Открывается он от 2В, но максимальное открытие при 16В на затворе. Делаем выводы.

Гриша
Offline
Зарегистрирован: 27.04.2014

Kakmyc пишет:
Посмотрел даташит на мосфет. Открывается он от 2В, но максимальное открытие при 16В на затворе. Делаем выводы.

для каких токов? выше правильно подсказали

svm пишет:

Возможно подсунули перемаркированные IRFZ44N.

или еще чего другое перемаркированное.... 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Я не знаю что такое "максимальное открытие"
Вообще-то у полевиков есть графики зависимости
падения напряжения от тока при разных напряжениях на затворе.

Цена шикарная, параметры тоже.
Дома покупал, какие будут из Китая - не знаю.
US $2.08 11%OFF | 50pcs/lot 17A/30V STD17NF03L D17NF03L D1703 TO-252 In Stock
https://s.click.aliexpress.com/e/pGuMjrVI

nik182
Offline
Зарегистрирован: 04.05.2015

Ну так для этого транзистора при 100 мА и 5 вольтах? На графиках даже не рассмотреть. 

b707
Offline
Зарегистрирован: 26.05.2017

я бы не сбрасывал со счетов возможность кривого кода. Может ТС открывает и закрывает ключи при каждом обороте лупа

svm
Offline
Зарегистрирован: 06.11.2016

b707 пишет:

я бы не сбрасывал со счетов возможность кривого кода. Может ТС открывает и закрывает ключи при каждом обороте лупа

В принципе и такое может быть. Хотя ТС на форуме с августа.

telets
Offline
Зарегистрирован: 25.08.2019

Здравствуйте.

Прошу прощения, что долго не отвечал, хотя надо мне, а доброжелательная помощь уже идет... Спасибо большое. Просто раньше было настроено оповещение об ответах на почту, а сейчас пропало. Думал, все заняты отдыхом в эти выходные.

Для чего все нужно. Гроубокс освещается греющими светодиодными светильниками. Температура повышается до +32С, нужно 22-28, охлаждение выбрано на основе элемента Пельтье 127-06. Соответственно, два радиатора с вентиляторами - для холодной и горячей сторон Пельтье. И три датчика.  1. Датчик влажности и температуры sht31 - внутри бокса. 2. Датчик температуры Ds18b20 - снаружи бокса на радиаторе горячей стороны Пельтье. 3. Датчик температуры ds18b20 снаружи корпуса для измерения температуры окружающей среды.

Охлаждающая сборка включается (Пельтье и оба вентилятора одновременно), когда температура внутри бокса (box_temp) >= 26C (BOX_TEMP_ON). Пельтье выключается при температуре внутри бокса 24С (BOX_TEMP_OFF). Вентиляторы на радиаторах выключаются при двух условиях - выключенном Пельтье и температуре радиатора горячей стороны Пельтье (rad_temp) <= температуры на пять градусов (RAD_TEMP_INC) выше температуры окружающей среды (case_temp). Сейчас тестирую сборку и программу без Пельтье (он пока не подключен) - работу датчиков и кулеров. Код - сырой - ниже.

К сожалению, обычного тестера пока нет, поэтому напрямую в собранной схеме ничего померить не могу. Все радиодетали брал в ChipDip. Все соединения - на проводах и клеммах Wago 221-й серии, кроме мосфетов - они воткнуты в 3-х пиновые разъемы для вентиляторов, а провода от этих разъемов уже подключены в схеме через клеммы. Пробовал отдельно воткнуть один мосфет в беспаечную макетку - не понял, есть разница в скорости вращения или нет. Полевики при работе не греются.

Пока писал, обнаружил ошибку в коде (там есть еще нюансы, но это потом).

b707 и svm, вы оказались правы.

Из-за неподключенного Пельтье и комментариев в коде одновременно срабатывают условия включения и выключения вентиляторов. По умолчанию (инициализация) статус Пельтье - "выключено". При включении охлаждения строка

peltier_mode=DEVICE_ON;

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

#include <Wire.h> 
#include <OneWire.h>
#include <LiquidCrystal_I2C.h> 
#include <Adafruit_SHT31.h>

#define DEVICE_ON        true
#define DEVICE_OFF      false    

#define POWER_MODE          0

#define BOXFAN_PIN          7
#define RADFAN_PIN          8
#define PELTIER_PIN         4

#define BOX_TEMP_ON      26.0
#define BOX_TEMP_OFF     24.0
#define RAD_TEMP_HIGH    65.0
#define RAD_TEMP_INC      5.0

#define ERROR_COUNT_LIMIT   6

#define SENS_UPDATE_TIME 2000

LiquidCrystal_I2C lcd(0x27,16,2); // I2C address (most common value 0x27), and monitor parameters (for LCD 1602 - 2 strings with 16 symbols) 
Adafruit_SHT31 sht31=Adafruit_SHT31();

OneWire sensTempRad  (16); // (A2 Arduino)
OneWire sensTempCase (17); // (A3 Arduino)

byte         err_cur_count, err_tot_count;
boolean      boxfan_mode, radfan_mode, peltier_mode;
float        box_temp, box_hum, rad_temp, case_temp;
unsigned int current_time, last_update_time;

void setup() {
//  byte error, address; // for I2C Scanner
//  int nDevices;        // for I2C Scanner: # of Devices found

//  Serial.begin(9600);
//  Serial.println("While all is OK");

//  Wire.begin(); // for I2C Scanner
  
  lcd.init();                      // Инициализация дисплея
  lcd.backlight();                 // Подключение подсветки

/*  
// Scanning for devices at I2C (I2C Scanner)
  
  Serial.println("Scanning...");
  nDevices = 0;
  for ( address = 1; address < 127; address++ ) {
        // The i2c_scanner uses the return value of
        // the Write.endTransmisstion to see if
        // a device did acknowledge to the address.
     Wire.beginTransmission(address);
     error = Wire.endTransmission();

     Serial.print("Address=");
     Serial.println(address);
     Serial.print("Error=");
     Serial.println(error);
     if (error == 0) {

       Serial.print("I2C device found at address 0x");
       if (address<16) Serial.print("0");
       Serial.print(address,HEX);
       Serial.println("  !");
     
       nDevices++;
     }
     else if (error==4) {
       
       Serial.print("Unknow error at address 0x");
       if (address<16) Serial.print("0");
       Serial.println(address,HEX);
     }    
   }
   
   if (nDevices == 0) Serial.println("No I2C devices found\n");
   else Serial.println("done\n");
*/

    if ( sht31.begin(0x44) ) {

      
//      Serial.print("SHT31 at 0x44 found");
    }

  pinMode(BOXFAN_PIN,OUTPUT);
  pinMode(RADFAN_PIN,OUTPUT);
//  pinMode(PELTIER_PIN,OUTPUT);

  boxfan_mode=DEVICE_OFF;
  radfan_mode=DEVICE_OFF;
  peltier_mode=DEVICE_OFF;

  err_tot_count=0;
  last_update_time=0;
}

void loop() {
  byte bufData[9];
  char msg[8];

  err_cur_count=0;
  current_time=millis();
  if ( current_time - last_update_time >= SENS_UPDATE_TIME ) {

    last_update_time = current_time;

    lcd.setCursor(0,0);    
    
    sht31.getTempHum(&box_temp,&box_hum);
    if ( ! isnan(box_temp) ) {

      dtostrf(box_temp,5,1,msg);
      msg[5]=char(223);
      msg[6]='C';
      msg[7]='\0';
      lcd.print(msg);
    }
    else {

      err_cur_count=1;
      lcd.print("-------");
    }
    
    lcd.setCursor(10,0);
    if ( ! isnan(box_hum) ) {

      dtostrf(box_hum,5,2,msg);
      msg[5]='%';
      msg[6]='\0';
      lcd.print(msg);
    }
    else {

      err_cur_count=1;
      lcd.print("-----");
    }
    
    sensTempRad.reset();
    sensTempRad.write(0xCC,POWER_MODE);
    sensTempRad.write(0x44,POWER_MODE);

    sensTempRad.reset();
    sensTempRad.write(0xCC,POWER_MODE);
    sensTempRad.write(0xBE,POWER_MODE);
    sensTempRad.read_bytes(bufData,9);

    lcd.setCursor(0,1);
    if ( OneWire::crc8(bufData, 8) == bufData[8] ) {

      rad_temp = (float)((int)bufData[0] | (((int)bufData[1]) << 8)) * 0.0625 + 0.03125;
      dtostrf(rad_temp,5,1,msg);
      msg[5]=char(223);
      msg[6]='C';
      msg[7]='\0';
      lcd.print(msg);
    }
    else {

      err_cur_count=1;
      lcd.print("-------");
    }

    sensTempCase.reset();
    sensTempCase.write(0xCC,POWER_MODE);
    sensTempCase.write(0x44,POWER_MODE);

    sensTempCase.reset();
    sensTempCase.write(0xCC,POWER_MODE);
    sensTempCase.write(0xBE,POWER_MODE);
    sensTempCase.read_bytes(bufData,9);

    lcd.setCursor(9,1);              // Установка курсора в 8 позицию второй строки
    if ( OneWire::crc8(bufData, 8) == bufData[8] ) {

      case_temp = (float)((int)bufData[0] | (((int)bufData[1]) << 8)) * 0.0625 + 0.03125;
      dtostrf(case_temp,5,1,msg);
      msg[5]=char(223);
      msg[6]='C';
      msg[7]='\0';
      lcd.print(msg);
    }
    else {

      err_cur_count=1;
      lcd.print("-------");
    }
  }
  
  err_tot_count*=err_cur_count;
  err_tot_count+=err_cur_count;
  if ( err_tot_count == ERROR_COUNT_LIMIT ) {

   return;
  }

  if ( rad_temp >= RAD_TEMP_HIGH ) {  // АВАРИЯ

//    if ( peltier_mode ) digitalWrite(PELTIER_PIN,LOW);
    if ( boxfan_mode  ) digitalWrite(BOXFAN_PIN,LOW);
    if ( radfan_mode  ) digitalWrite(RADFAN_PIN,LOW);

//      peltier_mode=DEVICE_OFF;
    boxfan_mode=DEVICE_OFF;
    radfan_mode=DEVICE_OFF;

    return;
  }
    
  if ( box_temp >= BOX_TEMP_ON ) { //ВКЛЮЧЕНИЕ

    if ( !boxfan_mode  ) digitalWrite(BOXFAN_PIN,HIGH);
    if ( !radfan_mode  ) digitalWrite(RADFAN_PIN,HIGH);
//    if ( !peltier_mode ) digitalWrite(PELTIER_PIN,HIGH);

    boxfan_mode=DEVICE_ON;
    radfan_mode=DEVICE_ON;
//  peltier_mode=DEVICE_ON;
  }
  else if ( box_temp < BOX_TEMP_OFF ) {

//      if ( peltier_mode ) {

//        peltier_mode=DEVICE_OFF;
//        digitalWrite(PELTIER_PIN,LOW);
//      }
  }
      
  if ( ( !peltier_mode ) && ( rad_temp <= ( case_temp + RAD_TEMP_INC ) ) ) { //ВЫКЛЮЧЕНИЕ ВЕНТИЛЯТОРОВ

    if ( boxfan_mode  ) digitalWrite(BOXFAN_PIN,LOW);
    if ( radfan_mode  ) digitalWrite(RADFAN_PIN,LOW);

    boxfan_mode=DEVICE_OFF;
    radfan_mode=DEVICE_OFF;
  }
}

 

telets
Offline
Зарегистрирован: 25.08.2019

И еще два ответа на комментарии.

1. Почему не реле. Думал об этом, но они щелкают и как будто искрят, - возможно, небезопасно дома.

2. Почему такие мощные транзисторы. Все что-то более подходящее по параметрам (из легко доступного) - в корпусах для пайки. А у меня своеобразный подход к соединению компонентов в этой сборке. По крайней мере, пока. Возможно, с увеличением опыта, придет и другое понимание.

Спасибо за эти вопросы и вытекающие из них советы.

Calmness
Offline
Зарегистрирован: 29.10.2019

Рэле , исходя из Ваших параметров будет размером 10*5*10 . Щелчки ....Думаю не услышите.  Кроме того , как вариант - твердотельные ( LCA710 , но есть куча других вариантов ( КР293КП ...). Кстати и от ардуино можно управлять напрямую без транзисторов ( естественно через резистор)

Транзистор КТ 814, КТ815, КТ817  100% дешевле и , думаю доступнее. 

telets
Offline
Зарегистрирован: 25.08.2019

Calmness, спасибо за помощь. По реле и транзисторам понятно. А как управлять напрямую, ведь токи у ардуино существенно ниже, чем потребляемые вентиляторами? По-моему, до 40 миллиампер у Ардуино, а у вентиляторов - до 130 миллиампер.

Гриша
Offline
Зарегистрирован: 27.04.2014

Calmness пишет:

Рэле , исходя из Ваших параметров будет размером 10*5*10 . Щелчки ....Думаю не услышите.  Кроме того , как вариант - твердотельные ( LCA710 , но есть куча других вариантов ( КР293КП ...). Кстати и от ардуино можно управлять напрямую без транзисторов ( естественно через резистор)

Транзистор КТ 814, КТ815, КТ817  100% дешевле и , думаю доступнее. 

ничего не понятно, для чего это было написано, к чему относится? И чем управлять? похоже пост писан не для этого топика и попал по ошибке сюда... 

Calmness
Offline
Зарегистрирован: 29.10.2019

Нет , ардуино через резистор засвечивает светодиод в твердотелом рэле . А токи , необходимые вентиляторам коммутируются уже выходными цепями твердотельного рэле. Из плюсов :  нет щелчков, просто управлять, не залипают. 

SLKH
Offline
Зарегистрирован: 17.08.2015

Вcю рассыпуху (8 элементов) заменить на 1 корпус uln2003a

Гриша
Offline
Зарегистрирован: 27.04.2014

SLKH пишет:

Вcю рассыпуху (8 элементов) заменить на 1 корпус uln2003a

там про ток пельтье ничего не сказано, а он (микрохолодильник) не слабо кушает .

SLKH
Offline
Зарегистрирован: 17.08.2015

Гриша пишет:

SLKH пишет:

Вcю рассыпуху (8 элементов) заменить на 1 корпус uln2003a

там про ток пельтье ничего не сказано, а он (микрохолодильник) не слабо кушает .

Я про первую картинку - 2 мотора. Про подключение пельтье у автора ничего нет.

Кстати, а нужно ли отдельное управление вентиляторами?

telets
Offline
Зарегистрирован: 25.08.2019

Здравствуйте, большое спасибо за комментарии.

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

Пельтье там максимум на 6.4 ампер при 14.4-16.4 вольтах. На практике  есть сообщения, что при 12 вольтах выше 3 ампер не ест. Блок питания для него отдельный - на 5 ампер и 12 вольт. Соответственно, и обвязка - мосфет, резисторы - тоже свои, хотя такие же. Может быть, здесь бы и пригодилось твердотельное реле. Но они (из легко доступных) опять же под пайку либо уж совсем дорогие, если прикручивать к винтам.

telets
Offline
Зарегистрирован: 25.08.2019

Да, я так и понял. Спасибо. Очень интересное предложение - недорогое, компактное, отличное по характеристикам и надежное. Немного избыточное - 5 каналов остаются свободными, но это никак не препятствует использованию ULN2003a в моей сборке. В общем, плюсы перевешивают.

По поводу раздельного управления вентиляторами. Пока по коду управляются синхронно, но оставил возможность раздельного контроля. Очевидных практических причин для этого решения нет.

Гриша
Offline
Зарегистрирован: 27.04.2014

telets пишет:

Пельтье там максимум на 6.4 ампер при 14.4-16.4 вольтах. На практике  есть сообщения, что при 12 вольтах выше 3 ампер не ест. Блок питания для него отдельный - на 5 ампер и 12 вольт. 

ссылка на оригинал  пост 38

a5021 пишет:

Вот апноут на пельтье. Показаны методики и варианты расчета...

telets
Offline
Зарегистрирован: 25.08.2019

Гриша, спасибо Вам огромное. Это действительно нужная и важная вещь. Я такой не находил, хотя именно она и нужна. У меня только datasheet была.

SLKH
Offline
Зарегистрирован: 17.08.2015

telets пишет:

Да, я так и понял. Спасибо. Очень интересное предложение - недорогое, компактное, отличное по характеристикам и надежное. Немного избыточное - 5 каналов остаются свободными, но это никак не препятствует использованию ULN2003a в моей сборке. 

Включи параллельно по паре ячеек на мотор, хуже не будет. 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

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

telets
Offline
Зарегистрирован: 25.08.2019

SLKH, спасибо большое за совет. Учту и попробую.

BOOM, спасибо. Думал об этом. Но теперь все работает как и должно, и мосфеты вроде не греются. Поэтому пока решил так не делать. Если можно, для этого мосфет какой готовый драйвер подойдет? Ну и спасиюо за комплимент, но у человека паяльник в руках как раз пока плохо держится, хотя попытки удержать периодически происходят...)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Я посоветовать ничего не могу, так ничего подобного не использовал. Какие мосфеты применили в итоге, что все устраивает?

Гриша
Offline
Зарегистрирован: 27.04.2014

telets пишет:

Если можно, для этого мосфет какой готовый драйвер подойдет? 

ставить драйвер имеет смысл если протекают большие токи при частом переключении (ШИМ). Для переключения с низкой частотой достаточно использовать обычный транзистор - если требуется поднять напряжение на затворе или мосфет с управлением логическим уровнем. Как я понял транзистор не греется, значит использовать драйвер не требуется. 

telets
Offline
Зарегистрирован: 25.08.2019

BOOM, мосфеты те же, IRLZ44N. Их не менял. Там ошибка в коде была - по невнимательности. Сейчас все хорошо.

Гриша, спасибо большое. я так и делаю. Вопрос был "на будущее". Если вдруг возникнет такая потребность.

 

Гриша
Offline
Зарегистрирован: 27.04.2014

telets пишет:

Гриша, спасибо большое. я так и делаю. Вопрос был "на будущее". Если вдруг возникнет такая потребность.

"на будущее" прочитайте про драйвер верхнего и нижнего плеча там ничего сверх заумного нет. Отдельно обратите внимание на понятие "сквозной ток" - этого достаточно для общего понимания. Ну и научитесь читать Даташиит применительно к теме - научитесь понимать связь падения напряжения, тока стока с напряжением затвора (статические характеристики). Потом  уже переходные процессы и прочее. 

Konservator
Offline
Зарегистрирован: 02.10.2019

nik182 пишет:

Ну так для этого транзистора при 100 мА и 5 вольтах? На графиках даже не рассмотреть. 

 

тоже пытался на графике понять, но там абсолютно не понятно!