Управление 4-проводным ШИМ-сигналом вентилятора с помощью Arduino допускает только две настройки.

Я подключил свой вывод PWM к моему Arduino, как в этом уроке.

http://fritzing.org/projects/reading-pc-fan-rpm-with-an-arduino/

введите описание изображения здесь

Он работает правильно. Я могу прочитать и установить скорость, используя скетч с этого сайта:

http://www.beefrankly.org/blog/2011/12/21/read-out-4-pin-cpu-fan-speed/

int fanPulse = 0;
unsigned long pulseDuration;

void setup()
{
Serial.begin(9600);
pinMode(fanPulse, INPUT);
digitalWrite(fanPulse,HIGH);
}

void readPulse() {
pulseDuration = pulseIn(fanPulse, LOW);
double frequency = 1000000/pulseDuration;

Serial.print("pulse duration:");
Serial.println(pulseDuration);

Serial.print("time for full rev. (microsec.):");
Serial.println(pulseDuration*2);
Serial.print("freq. (Hz):");
Serial.println(frequency/2);
Serial.print("RPM:");
Serial.println(frequency/2*60);

}

void loop()
{
analogWrite(3,20);
delay(5000);
readPulse();
analogWrite(3,50);
delay(5000);
readPulse();
analogWrite(3,100);
delay(5000);
readPulse();
analogWrite(3,200);
delay(5000);
readPulse();
analogWrite(3,255);
delay(5000);
readPulse();
}

Мне кажется, что я могу вводить только значения выше 127 и значения ниже 127. Между ними нет шагов. Вентилятор не будет работать медленнее, когда я перехожу от 126 к 0 или от 128 к 255.

Некоторые результаты, которые я получаю:

100: 

 pulse duration:19058
time for full rev. (microsec.):38116
freq. (Hz):26.00
RPM:1560.00


0:

pulse duration:19160
time for full rev. (microsec.):38320
freq. (Hz):26.00
RPM:1560.00


127:

pulse duration:9032
time for full rev. (microsec.):18064
freq. (Hz):55.00
RPM:3300.00


255:

pulse duration:9151
time for full rev. (microsec.):18302
freq. (Hz):54.50
RPM:3270.00

Это какая-то ошибка, которую я сделал, или мой вентилятор не примет точные значения? Можете ли вы порекомендовать какие-либо 4 проводных вентилятора, которые я мог бы использовать для этого или каким-либо другим способом? Я думал об использовании SG2524N для управления двухпроводным двигателем, но у меня нет опыта в этом. Спасибо за ваш совет.

Вы уверены, что контакт 3 является каналом PWM на вашем Arduino? Используйте светодиод для проверки.
Я сейчас использую SoftPWM, пока без изменений. Я собираюсь переключить вентилятор и попробовать еще раз

Ответы (1)

Вентиляторы не используют стандартные частоты ШИМ. Частота управления ШИМ должна быть 25 кГц. Arduino 16 МГц может сделать это относительно легко с помощью программного обеспечения. Просто наберите в поиске «4 wire fan arduino», и вы найдете немало сообщений об этом, включая пример кода для установки частоты предварительного делителя, чтобы выходной ШИМ был на частоте 25 кГц.

Согласованный. От 25 до 50 Гц — это ужасно малый рабочий цикл для вентилятора.
Вот ссылка для настройки ШИМ 25 кГц на Arduino: arduino.stackexchange.com/a/25623/7732