Я подключил свой вывод 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 для управления двухпроводным двигателем, но у меня нет опыта в этом. Спасибо за ваш совет.
Вентиляторы не используют стандартные частоты ШИМ. Частота управления ШИМ должна быть 25 кГц. Arduino 16 МГц может сделать это относительно легко с помощью программного обеспечения. Просто наберите в поиске «4 wire fan arduino», и вы найдете немало сообщений об этом, включая пример кода для установки частоты предварительного делителя, чтобы выходной ШИМ был на частоте 25 кГц.
Игнасио Васкес-Абрамс
Вольфен