Считывание оборотов комп. кулера

shibata
Offline
Зарегистрирован: 28.01.2016

Всем привет. Народ помогите пожалуйста разобраться. Вдвух словах опишу проблему. Значит есть комп кулер, на нем три вывода + - и тахометры (красный, черный, желтый провода.). Обороты кулера я регулирую шимом. Что бы кулер не пел на низах, я поднял шим до 31кгц. С этим все в порядке. Но вот решил я считывать обороты кулера и тут наткнулся на неприятность. Если получать обороты без шима, все хорошо. Но используя шим я не могу получить правльные данные. Обороты нормально отображаются при максимуме - analogWrite(fan, 255); При понижении оборотов происходит бог знает что. Методом проб и ошибок понял, что выводится в консоль частота шима. Куда копать, как обороты регулировать шимом и снимать правельные показания оборотов??? Схема и скетч скорости вращения. Спасите, помогите пожалуйста. Уже несколько дне бьюсь с этой бедо, а спросить неукого. Поэтому решил обратиться к Вам. 

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

А если подать полное напряжение питания ( 255 ) и "пальцем" тормозить фен - обороты чётко считываются?
Вплоть до  остановки?

Мне так кажется что на жёлтом проводе сидит  коллектор транзистора который "заземляет" одну из обмоток.
А вы снимаете питание со всей схемы и этот транзистор некому открывать.
И что там будет при обрыве питания?
Не зря я думаю  Интел придумал вентиляторы с четырьмя проводами: + - ШИМ и обороты.

shibata
Offline
Зарегистрирован: 28.01.2016

Да если подать 255 и останавливать то все хорошо. При полной остановке показывает 0. Но если дать 254 и ниже, выходит фигня. Что только не делал, менял номиналы резисторов, пины.. все бестолку. Пытался програмно как то реализовать правельные показания, пока ничего не вышло. :( Мб можно как то фильтровать импульсы шыма? Ардуина видать считает все подряд. Я не очень разбираюсь в электронике, делаю так сказать первые шаги, в программировании получше. Так что сильно не ругайтесь, если что не так говорю или спрашиваю :) 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

В вентиляторе стоит микросхема, ты на неё подаешь питание с частотой 31 кГц, она тебе в ответ выдает х..ню. Надо шим в постоянку превращать.

shibata
Offline
Зарегистрирован: 28.01.2016

Спасибо добрые люди. Теперь еще обьясните пожалста нубу как мне шим переварить в постоянку?? 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

shibata пишет:
Теперь еще обьясните пожалста нубу как мне шим переварить в постоянку??

LC фильтр или вместо ШИМа использовать ЦАП, а им уже управлять стабилизатором напряжения.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

shibata, я думаю в данном случае шим совершенно не  стоит сглаживать в постоянку. Будет много мороки, а результат всё равно получится очень-очень плохой. Вы не написали каким образом коммутируете вентилятор, но судя по всему n-мосфетом либо n-p-n транзистором. При коммутации кулер отключается от "земли", оставаясь висеть только на плюсе. А датчик холла внутри венлтилятора тоже подключен относительно земли, и в момент лог.0 на управляющем выходе ардуино датчик тоже "зависает" в воздухе. Что бы исправить ситуацию достаточно коммутировать не минус, а плюс  вентилятора, тогда датчик всегда будет подключен. Как коммутировать "в плюсе" на форуме неоднократно обсуждалось, так что эту тему развивать не стану.

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

Andy пишет:

В вентиляторе стоит микросхема,

Да, с тремя транзисторами внутри:
один включает одну обмотку, другой - другую, а третий, между ними, инвертором подрабатывает....

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

shibata пишет:

Спасибо добрые люди. Теперь еще обьясните пожалста нубу как мне шим переварить в постоянку?? 

Ладно, помогу.
1. Подаёте 255.
2. Отсчитываете 5-10 импульсов. Считаете обороты.
3. Выдаёте ШИМ поменьше-побольше- вам решать. Шагами ( большими или малыми).
4. Ждёте 0.01 - 10 секунд. ( чаще при разгоне- реже при стабильном режиме)
5. goto  1.

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

Примерно так измеряют напряжение при зарядке аккумуляторов
для исключения влияния падения напряжения на внутреннем сопротивлении от зарядного тока.

Или ЦАП ( простейщий) на опору стабилизатора.
Но это уже другая история....

 

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

Кстати другой способ:
Двойной блок питания 5  и 12 Вольт
Оба соединеы диодами для развязки.
5 Вольт подключен всегда и это даст небольшие обороты, а что самое главное- питание для выхода оборотов.
А 12-ти Вольтовым управляем ШИМом.

Примерно так иногда делается форсировка тока через индуктивную нагрузку- шаговики
В зондах ДШИ-200 шёл и удержиавлся пятью Вольтами, а стартовал на 55-ти через КТ805-ый
 

tyutrin
Offline
Зарегистрирован: 23.06.2020

Пытаюсь считать обороты 4х проводного кулера подобным образом, не выходит. Пальцами торможу крыльчатку и тестером смотрю сопротивление между желтым и черным. что то невнятное вижу. Может тахометр кулера работать как то иначе чем коротить черный и желтый? 

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

tyutrin пишет:

Пытаюсь считать обороты 4х проводного кулера подобным образом, не выходит. Пальцами торможу крыльчатку и тестером смотрю сопротивление между желтым и черным. что то невнятное вижу. Может тахометр кулера работать как то иначе чем коротить черный и желтый? 

есть две цветовые схемы, у вас какая?

tyutrin
Offline
Зарегистрирован: 23.06.2020

черный, желтый, голубой, красный

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

tyutrin пишет:

черный, желтый, голубой, красный

tyutrin
Offline
Зарегистрирован: 23.06.2020

Подключил. Считаю обороты по формуле из скетча взятого выше 

#include <U8glib.h>
U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI 
 
int pwm;
int rpm;
volatile int val;
 
void rpm_count(){
  val++;
}
 
void draw(void) { 
  u8g.setFont(u8g_font_unifont); 
  u8g.setPrintPos(10, 18); 
  u8g.print("PWM:");
  u8g.setPrintPos(45, 18); 
  u8g.print(pwm);  
  u8g.setPrintPos(10, 32); 
  u8g.print("RPM:");
  u8g.setPrintPos(45, 32); 
  u8g.print(rpm);
}
 
void setup(void) {
  attachInterrupt(0, rpm_count, CHANGE);
}
 
void loop(void) {
 
   pwm = analogRead(0);
   pwm = map(pwm, 0, 1023, 0, 255);
   pwm = constrain(pwm, 0, 255);
   analogWrite(3, pwm);
   
   u8g.firstPage();  
   do {
     draw();
   } 
   while( u8g.nextPage() );
 
   val = 0; 
   delay(500); 
   rpm = ((val*60)/2);
 
}
 
Получил обороты на ШИМ=0 2300 а на ШИМ=255 9800, по заявлению производителя цифры должны быть 2900 и 12000, соответственно мои показания отличаются на 20% от заявленных. Проверил на двух новых одинаковых кулерах.
 
 
Kakmyc
Offline
Зарегистрирован: 15.01.2018

Напряжение под нагрузкой проверь...

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

неправильные пчёлы неправильный мёд

tyutrin
Offline
Зарегистрирован: 23.06.2020

Напряжение с блока питания 12В 2А без изменений под нагрузкой

ШИМ=0 обороты 2300 - крутится тихонечко

ШИМ=255 обороты 9800 - ревёт и взлетает, нужно удерживать рукой

Промежуточные значения ШИМ показывают полную ерунду по оборотам

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

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

А сколько сигналов на оборот даёт тахогенератор ?

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

просится компаратор с датчика до ардуины, пару каскадов нормализуют сигнал вполне качественно, LM393 в помощь, и, я бы делал не на прерывании а на счетчике (таймере)и таки да, этот код, что ты привёл однозначно врёт