目前分類:PC風扇相關控制與偵測 (6)
- May 12 Sat 2018 22:36
用Arduino控制PC風扇轉速 PART3 MOSFET+PWM控制+顯示轉速
- May 05 Sat 2018 23:34
用Arduino控制PC風扇轉速 PART2 MOSFET+PWM控制
前文中已經可以使用Arduino的PWM 接腳來控制4pin PC風扇,
但實務上使用會遇到一些困難,首先就如同之前討論PC風扇的文章中所說,
4pin風扇較貴,且普及率遠不如另外兩種VC(電壓控制)與傳統2pin風扇,
所以可以利用Arduino的PWM輸出接腳來控制MOSFET,進而達到
控制所有種類風扇的轉速功能。
- May 04 Fri 2018 16:12
用Arduino控制PC風扇轉速 PART1 PWM控制
在PC散熱風扇之研究三:PWM風扇進階研究一文中介紹過用PWM控制
PC風扇轉速,而Arduino本身就提供好幾個PWM輸出腳位,可以直接
拿來控制PC上的散熱風扇。
先看Arduino UNO的介面圖:
- Apr 30 Mon 2018 14:47
用Arduino偵測PC風扇轉速 PART3 使用專門程式庫
前面兩文介紹了兩種量轉速的方法,本文介紹另一種。
用中斷(interrupt)來進行風扇轉速量測很方便,
但也有佔用中斷的問題發生,而且對UNO這類的只有
兩個中斷的低階CPU來說問題會比較大。
所以有人專門開發了量測風扇轉速用的程式庫,可以
- Apr 25 Wed 2018 07:51
用Arduino偵測PC風扇轉速 PART2 使用interrupt
官網後段也有改進之後的程式:
// read RPM
int half_revolutions = 0;
int rpm = 0;
unsigned long lastmillis = 0;
void setup(){
Serial.begin(9600);
attachInterrupt(0, rpm_fan, FALLING);
}
void loop(){
if (millis() - lastmillis == 1000){ //Uptade every one second, this will be equal to reading frecuency (Hz).
detachInterrupt(0);//Disable interrupt when calculating
rpm = half_revolutions * 60; // Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use half_revolutions * 30.
Serial.print("RPM =\t"); //print the word "RPM" and tab.
Serial.print(rpm); // print the rpm value.
Serial.print("\t Hz=\t"); //print the word "Hz".
Serial.println(half_revolutions); //print revolutions per second or Hz. And print new line or enter.
half_revolutions = 0; // Restart the RPM counter
lastmillis = millis(); // Uptade lasmillis
attachInterrupt(0, rpm_fan, FALLING); //enable interrupt
}
}
// this code will be executed every time the interrupt 0 (pin2) gets low.
void rpm_fan(){
half_revolutions++;
}
這個程式改進了上一個程式時基不固定的缺點,改用等待1000mS也就是一秒鐘之後統計
中斷次數並乘以60,也就是一分鐘的換算RPM值輸出到com port。
不過這樣的算法會造成RPM數值為兩倍,因為每轉一次會輸出兩個pluse,所以算式要調整除以二:
rpm = (half_revolutions * 60)/2;
- Apr 21 Sat 2018 17:11
用Arduino偵測PC風扇轉速 PART1 使用millis()函數