Проблема с питанием 3 pin вентилятора через PWM

Opteron
Offline
Зарегистрирован: 09.10.2020

Здравствуйте. Пытаюсь сделать простейший регулятор оборотов вентилятора (реобас), но сразу же столкнулся с проблемами. К сожалению, осцилограф из Китая все еще едет, поэтому обо всех проблемах приходится лишь догадываться.

Когда PWM выставлен в 255, то все отлично работает. Ничего не пищит и обороты показываются правильно. Ко как только ставлю например 195, то вентилятор начинает пищать, а датчик количества оборотов начинает сильно завышать реальные значения. Я подозреваю, что нужно сгладить PWM сигнал. Под рукой у меня только конденсаторы на 100uF и 1000uF. Кто то говорит, что достаточно установить кондер между + и - вентилятора, да, писк пропадает, но обороты становятся 100%, независимо от уровня PWM. Еще пишут, что нужно сглаживать через RC фильтр. Попробовал собрать по такой схеме, но похоже как то не так. Тупо греется резистор, конденсатор игнорируется, обороты не соответсвуют уровню PWM.

Вроде все понятно, но ничего не работает) Подскажите пожалуйста, что не так

rkit
Offline
Зарегистрирован: 23.11.2016

А с чего ты решил, что не должно пищать, когда ты отрезаешь питание на аудиочастоте? А с чего ты взял, что датчик не должен врать, когда ты ему отрезаешь питание постоянно?

Opteron
Offline
Зарегистрирован: 09.10.2020

Забыл еще момент. Руководствовался также этой статьей https://www.instructables.com/Arduino-RC-Circuit-PWM-to-analog-DC/ , но тут нет мосфета, я собрал похожую схему на его стоке. Тоже не помогло

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Стабилизатор напряжения где источник опорного сглаженный ШИМ разогнанный до 12 вольт решит проблему

rkit
Offline
Зарегистрирован: 23.11.2016

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

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

Частоту ШИМ выведи из звукового диапазона.

Opteron
Offline
Зарегистрирован: 09.10.2020

Kakmyc Пробовал ставить максимально возможные. Ничего кроме ускоренных delay() и mills() не получил, писк так и остался.

rkit С 4pin вентилем я уже собрал рабочую схему. Не интересно.

ua6em А можно пример какой нибудь?

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

ТС, уважаемый.

1. Ответь, плз, на неприятные вопросы о возрасте  и уровне знаний. Это не для того, чтобы тебя троллить, а для того, чтобы выбрать уровень, на котором пояснить, что у тебя происходит.

2. назови  марку или опиши иным способом вентилятор. Например так: "Марку не знаю, большой кулер от корпуса компа". Или: "Малый кулер от  видеокарты". Или еще как нибудь. Мне это нужно, чтобы в сети найти ток потребления. Если на нем написан ток - СУПЕР, просто скажи мне его.

Вот на этом, к примеру, написано 0.12А.

Opteron
Offline
Зарегистрирован: 09.10.2020

1. 29 годиков. Познаний в радиоэлектронике чуть менее, чем нисколько.

2. Вентилятор в теории должен быть любой (до 1А например), но я экспериментирую конкретно вот с этим https://www.deepcool.com/product/CaseFans/2018-08/2420_9256.shtml

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

Opteron пишет:

Пробовал ставить максимально возможные. Ничего кроме ускоренных delay() и mills() не получил, писк так и остался.

А для вас максимально возможные это сколько ?

rkit
Offline
Зарегистрирован: 23.11.2016

Opteron пишет:

rkit С 4pin вентилем я уже собрал рабочую схему. Не интересно.

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

Opteron
Offline
Зарегистрирован: 09.10.2020

Kakmyc Ну явно же за слышимым диапазоном, не?

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

Opteron пишет:

1. 29 годиков. Познаний в радиоэлектронике чуть менее, чем нисколько.

2. Вентилятор в теории должен быть любой (до 1А например), но я экспериментирую конкретно вот с этим https://www.deepcool.com/product/CaseFans/2018-08/2420_9256.shtml

плохо, что нисколько.

Смотри, ты ставишь 100 резистор в фильтре, через него пойдет ток.  Если бы вдруг смог пройти весь ток, который нужен вентилятору, то это, примерно, 0.1А. Какое падение напряжения на резисторе? Заком Ома к 29 годикам ведь проходил? 100*0.1 = 10В ;))). В реальности будет не так, это тебе просто для оценки. В оеальности до вентилятора возможно дойдет половина напряжения и он не заведется. В характеристиках написано, что он заводится от 7 вольт.

Таким образом резистор в фильтре не более чем 1/10 от расчетного сопротивления вентилятора, то есть, грубо, до 10Ом, лучше - 1-2 Ома.

Opteron
Offline
Зарегистрирован: 09.10.2020

wdrakula О, спасибо) Просто под рукой был только на 100 самый маленький. Сейчас в запасах покопался и нашел на 10, с ним отлично завелось (ну кроме того, что он сильно греется). Прикуплю еще поменьше

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

если найдешь еще на 10 - поставь их 2-3 штуки параллельно. и падение напряжения меньше и греться меньше будут.

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

Opteron пишет:

Kakmyc Ну явно же за слышимым диапазоном, не?

Ну и как ты это слышишь ?

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

Opteron пишет:

Kakmyc Пробовал ставить максимально возможные. Ничего кроме ускоренных delay() и mills() не получил, писк так и остался.

Пробовал ставить максимально возможные что? - судя по тому , что delay() и mills() "ускорились" - ты менял частоту МК.  А надо менять частоту ШИМ!

Ты хотя бы простенькую статейку "Ардуино для чайников" прочитал бы...

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

wdrakula пишет:

если найдешь еще на 10 - поставь их 2-3 штуки параллельно. и падение напряжения меньше и греться меньше будут.

греться будут ровно так же :)

Opteron
Offline
Зарегистрирован: 09.10.2020

b707 значит я как-то не так прочитал это https://playground.arduino.cc/Main/TimerPWMCheatsheet/

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

Opteron пишет:

b707 значит я как-то не так прочитал это https://playground.arduino.cc/Main/TimerPWMCheatsheet/

уточните, какая ардуина у вас, какой вывод ШИМ использован и лучше бы привести весь код целиком. чтобы видеть, как вы так ШИМ настраивали, что у вас миллис() сбился

rkit
Offline
Зарегистрирован: 23.11.2016

wdrakula пишет:

если найдешь еще на 10 - поставь их 2-3 штуки параллельно. и падение напряжения меньше и греться меньше будут.

Хороший пример неуча, которого слушать не надо. Вся цель этого мероприятия - создать падение напряжения. И либо оно есть, либо не тот результат.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

rkit пишет:

wdrakula пишет:

если найдешь еще на 10 - поставь их 2-3 штуки параллельно. и падение напряжения меньше и греться меньше будут.

Хороший пример неуча, которого слушать не надо. Вся цель этого мероприятия - создать падение напряжения. И либо оно есть, либо не тот результат.

тут я с тобой соглашусь, фильтровать в сильноточных цепях это же конечно бред, для 2-х Ом конденсатор должен быть 10 тысяч микрофарад   (тау 20 миллисекунд) и естественно токи запредельные

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

rkit пишет:

wdrakula пишет:

если найдешь еще на 10 - поставь их 2-3 штуки параллельно. и падение напряжения меньше и греться меньше будут.

Вся цель этого мероприятия - создать падение напряжения.

А зачем тебе нужно падение напряжения? ;))) Вот в ФНЧ зачем оно тебе? Угадай, зачем я советую соединить параллельно два 10 Омных резистора? ;))) Что получится? Ой! Ты угадал - один 5 Омный!

Еще тест на профпригодность: а что лучше на больших токах один резистор в 10 Ом или два по 20 Ом в параллель. И зачем так делают? Суть то не меняется. И что из этого греться будет меньше? ;)))

"Дебил, ..ля!" (с) ;))

Ты, голуба, помолчал бы. Ну хоть в каких нибудь темах. Реально задалбывать начал. Мало того, что от каждой бочки затычка, так еще и безграмотная затычка.

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

ua6em пишет:

rkit пишет:

wdrakula пишет:

если найдешь еще на 10 - поставь их 2-3 штуки параллельно. и падение напряжения меньше и греться меньше будут.

Хороший пример неуча, которого слушать не надо. Вся цель этого мероприятия - создать падение напряжения. И либо оно есть, либо не тот результат.

тут я с тобой соглашусь, фильтровать в сильноточных цепях это же конечно бред, для 2-х Ом конденсатор должен быть 10 тысяч микрофарад   (тау 20 миллисекунд) и естественно токи запредельные

У ТС вентилятор на 100 мА. Перестань бредить. Даже если до 1Ампера. И зачем тебе тау в 20 мс? Таблицу умножения подарить на НГ? Да и ШИМ  нужно потом выводить к 10 КГц, чтобы не пищало в ухе. ;) и там какой конденсатор будет достаточен? При 2 Омах?

------------------------------

Если бы ты прочел тему, то увидел бы вопрос про ток вентилятора. Вот сейчас, для этого вентилятора - ничего не нужно, кроме как резистор поменьше. А если бы "у бабушки были яйца...", то есть вентилятор на дохуя ампер, то были бы другие советы.

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

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

я прочитал, ТС заявил, что ему нужен ток 1 ампер (Один ампер), ты же не отрицаешь, что фильтровать в малоомных цепях некомильфо, если задаться током с пина ШИМ в 1ма то 5 ком подразумевают, что можно сделать правильно... Исходно, там 490 герц исходя из этого и рассматриваем техническое решение, оно в лоб и,неправильное, но работать будет )))

Opteron
Offline
Зарегистрирован: 09.10.2020

Мне пока достаточно, чтобы просто работало. Собрал из подручных средств. Писк то пропал, но скорость совсем не соотвествует PWM duty когда подключен конденсатор. Даже на 127 работает примерно на 90% оборотах, а снижается уже в значениях в диапазоне 16-32. Дело в объеме конденсатора?  Под рукой только на 1000uF и 100uF. 

Нашел еще такую статейку https://www.baldengineer.com/pwm-3-pin-pc-fan-arduino.html, но нет нужных номиналов под рукой, поеду в выходные и буду экспериментировать.

Под рукой также имеется настоящий реобас, содержимое которого выглядит следующим образом. Заявленная мощность на канал: 3А

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

Opteron - ответы на прямые вопросы будут? Что за ардуина? какой PWM? Где код?

Без ответов варитесь в своем соку сами

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

у тебя сам двигатель нелинейный от 7 до 12 вольт, а ты регулируешь от 0 до 255, то есть твой шим некоторому чёрному ящику должен добавлять напряжение от 0 до 5 вольт к уже имеющемуся опорному около 7 вольт )))

Opteron
Offline
Зарегистрирован: 09.10.2020

Arduino UNO

Код который относится к выставлению скорости:

void setup() { pinMode(3, OUTPUT); analogWrite(3, 128); }

Все остальное по дефолту

rkit
Offline
Зарегистрирован: 23.11.2016

Opteron пишет:

 Дело в объеме конденсатора? 

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

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

Opteron пишет:

Arduino UNO

Код который относится к выставлению скорости:

void setup() { pinMode(3, OUTPUT); analogWrite(3, 128); }

Все остальное по дефолту

Opteron - код что, секретный? Что за херню вы выложили? вы пока даже приблизительно не врубаетесь. что в этом коде "по дефолту". а что нет, поэтому либо делайте что говорят - выкладывайте код целиком - либо идите... на юх

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

На материнках HP нечто аналогичное, PA102FDG, A1t  и восьминогая мелкосхема )))

ЗЫ частота среза порядка 400 -410 герц в той схеме

Opteron
Offline
Зарегистрирован: 09.10.2020
#include "fan.h"

uint32_t fanTimer;

Fan fan1 = Fan(3, 2);

void setup() {
  Serial.begin(9600);
  
  Fan::SamplingInterval = 1000;
  fan1.setPwm(96);
}

void loop() {
  if (millis() - fanTimer >= Fan::SamplingInterval) 
  {
    fanTimer = millis();
    fan1.endCounting();

    Serial.print("Fan #1: ");
    Serial.print(fan1.getRpm());
    Serial.print(" rpm, (");
    
    fan1.beginCounting();
  }

  fan1.checkState();
}

#include "Arduino.h"
#include "fan.h"

#define DEFAULT_SAMPLING_INTERVAL 1000
#define DEFAULT_START_PWM 255
#define DEFAULT_START_DELAY 3000

int Fan::SamplingInterval = DEFAULT_SAMPLING_INTERVAL;
int Fan::StartDelay = DEFAULT_START_DELAY;
byte Fan::StartPwm = DEFAULT_START_PWM;

Fan::Fan(byte pinPwm, byte pinHall)
{
  _pinPwm = pinPwm;
  _pinHall = pinHall;
}
  
void Fan::start()
{
  setPwm(StartPwm);
  delay(StartDelay);
}

void Fan::beginCounting()
{
  _loopCounter = 0;
  _isCounting = true;
}
    
void Fan::endCounting()
{
  _isCounting = false;
  //Serial.println(_loopCounter);
  _rpm = (60000 / SamplingInterval) * _loopCounter / 2;
  _loopCounter = 0;
}

void Fan::checkState()
{
  if(!_isCounting)
    return;

  _currentState = digitalRead(_pinHall);
  if(_currentState == HIGH && !_isHighState)
    _isHighState = true;

  if(_currentState == LOW && _isHighState)
  {
    _loopCounter++;
    _isHighState = false;
  }
}
  
int Fan::getRpm()
{
  return _rpm;
}
  
int Fan::getPwm()
{
  return _pwm;
}
  
int Fan::getDuty()
{
  return (_pwm / (float)255) * 100;
}
  
void Fan::setPwm(byte pwm)
{
  Serial.print("Setting PWM to: ");
  Serial.println(pwm);
  _pwm = pwm;
  analogWrite(_pinPwm, _pwm);
}

 

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

ну надо же, код выложили.

Покажите, в каком месте вы настраиваете частоту ШИМ. чтобы не пищало?

Opteron
Offline
Зарегистрирован: 09.10.2020

убрал, потому что не помогало.
в setup()

TCCR2B = TCCR2B & B11111000 | B00000001;

Окей, теперь писк пропал. Но вентилятор всегда работает на полную, независимо от выставленного pwm. Видимо поэтому и не пищит)

 

вот если совсем отстраниться от ардуины, есть же способы как из pwm получить аналоговый сигнал? как в примере по ссылке выше. Только именно для токов до 1А

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

Всем сорри. Схемку рассмотрел ;)))

ТС! "не взлетит". Вообще все не так делать надо.