close

PC散熱風扇之研究三:PWM風扇進階研究一文中介紹過用PWM控制

PC風扇轉速,而Arduino本身就提供好幾個PWM輸出腳位,可以直接

拿來控制PC上的散熱風扇。

 

先看Arduino UNO的介面圖:

 

Arduino UNO上有6個PWM控制腳可以用,PCB上有標示~的就是有PWM功能的腳位,

pin 3,5,6,9,10,11

 

先前介紹風扇的文章中也介紹了PWM技術,如下圖:

pwm1.gif (601×197)

 

對PWM技術來說,很重要的參數就是佔空比(Duty cycle),Arduino可以設定為0-255,也就是8bit

深度。

而不同接腳能輸出的頻率不一樣,

pin 5,6 可以輸出976.5625Hz,也就是約1K Hz

pin 3,9,10,11則是490.196Hz,也就是約500Hz

 

Arduino PWM輸出的控制指令非常簡單:

 

analogWrite(接腳編號,類比數值);

 

接腳編號就是上述的那幾隻腳,類比數值就是上述的0-255之間。

 

PWM的電壓輸出可以用公式換算,計算公式:

 

類比輸出電壓=佔空比 * 高電位值

 

反過來算:

佔空比 = 輸出電壓 / 高電位值

 

假設要輸出3.3V類比電壓,高電位值=5V

所以是3.3/5 = 66%

因Arduino的設定是0-255,所以是255*66%=168

PWM的類比數值填168,即可讓PWM接腳輸出3.3V

以上的計算很簡單。

 

利用可變電阻控制PWM風扇

 

如上述要改變PWM的輸出很簡單也很方便計算,但不太可能

每次要調整轉速時就修改程式一次,不方便也不合理。

 

所以實務上可以透過一個可變電阻(VR),利用類比輸入腳進行偵測,

並將結果輸出到PWM腳上,這樣就能靠控制轉動VR的角度來改變風扇

的轉速輸出。

 

程式碼:

int fan = 9; //設定 Arduino 風扇腳位在 9 pin

void setup() {
 // 初始化傳輸速率設定為9600
 Serial.begin(9600);
 pinMode(fan, OUTPUT); //定義 pinmode 為 pin 9 OUTPUT 輸出
}

void loop() {
 // 讀取輸入 on analog pin 0:
 int pot = analogRead(A0); //設定A0 值為讀取類比訊號
 int fan_speed = pot * (255 / 1023.0); //這個公式將會計算風扇速度的pwm輸出介於 0-255
 analogWrite(fan,fan_speed); //我們設定 9 pin 為 pwm 風扇速度輸出
 Serial.println(fan_speed); //利用 Serial.println函數可以在序列監控視窗中輸出風扇速度的值
 delay(1000); // 我希望每秒鐘可以延遲印出值
}

 

此程式預設是PWM接腳輸出為pin9,VR接到A0輸入,

因類比輸入解析度有0-1023段,但PWM輸出只有0-255,

所以中間需要mapping一下,我有特別標示出來。

 

com port輸出如下圖:

 

輸出數值會隨著VR轉動角度不同而改變,最高為255最低為0。

 

arrow
arrow
    文章標籤
    arduino DC FAN PWM
    全站熱搜

    呂阿谷 發表在 痞客邦 留言(0) 人氣()