본문 바로가기
공부/아두이노 & 회로구성

아두이노 우노 펜 PWM 제어, 속도 제어 - heat sink, fan

by 쉬고 싶다 2020. 10. 16.
반응형

 

- PWM & 라이브러리 활용

- Fan pin 연결 (Vin, Gnd, PWM)

- 코드

 

 

 PWM & 라이브러리 활용

 

이번 포스팅에서는 Fan의 연결과 Fan의 PWM 제어에 대해 포스팅하고

PWM에 대해서와 라이브러리 활용에 관해서는 이전 포스팅을 참고해주시면 좋겠습니다!

 

PWM 관련 이전 포스팅입니다

2020/09/24 - [정리, 공부해요/전기, 전자, 통신] - PWM (Pulse Width Modulated) square wave, PWM파 with 아두이노

 

PWM (Pulse Width Modulated) square wave, PWM파 with 아두이노

- PWM (Pulse width modulated)파 - PWM (Pulse width modulated) - Arduino에서 PWM  PWM (Pulse Width Modulated)파 이런 꺽쇠 모양의 signal을 주는 것을 PWM 제어, wave라고 합니다. PWM은 특정 목표값을 갖..

setoo0922.tistory.com

PWM 라이브러리 다운로드 & 활용 관련 이전 포스팅입니다.

2020/10/14 - [정리, 공부해요/아두이노] - 아두이노 우노, PWM 제어 라이브러리 활용

 

아두이노 우노, PWM 제어 라이브러리 활용

- PWM (Pulse Width Modulated) square wave - Arduino uno, PWM library download - PWM 제어 사용 코드 - led +, - 구분  PWM (Pulse Width Modulated) square wave 2020/09/24 - [정리, 공부해요/전기, 전자,..

setoo0922.tistory.com

 Fan pin 연결 (Vin, Gnd, PWM)

 

https://rgy0409.tistory.com/3362

3핀 쿨러는 DC 방식으로, 4핀 쿨러는 PWM방식으로 회전속도가 변합니다.

4핀 쿨러는 PWM 제어가 가능한데,

4번째 핀인 컨트롤 핀에 PWM 신호를 넣어주고,

GND와 VDC를 연결해주면 신호에 맞춰 속도가 변합니다.

 

PWM값에 대한 펜의 속도

  • 펜을 컨트롤 해주다 보면, 일정 PWM 값 이상이 되어야 제대로(충분히) 회전하기 시작합니다.
  • 위 그래프를 보면 PWM 듀디사이클이 0 ~ 20% 일때는 고정된 느린속도로 회전하다가 (바람이 거의 느껴지지 않을 정도로)
  • 20 ~ 100% 까지는 PWM 듀디사이클에 따라 거의 비례하면서 제어됩니다.
  • 이는 제조사마다 조금씩 차이가 있으니 자세한것은 데이터시트를 확인하시기 바랍니다.

공급 전력

4핀을 사용하던, 3핀을 사용하던, Fan 자체는 12VDC, GND에 파워만 공급해주면 돌아갑니다.

, fan의 요구 전압이 12V이고, 2.5W정도가 필요하다고 치면

12V 0.3A이상 되는 전원을 연결해 주어야 풀로 돌아갑니다.

테스트 삼아 5V 아웃풋인 아두이노에 연결하면 약하고, 돌아가다 멈추는게 보이기도 하는, 시원찮게 돌아갑니다.

 

 

300x250

 

 

 코드

 

저항 값을 인풋으로 받아,

0~1023의 값을 255로 변경하여 Fan의 PWM컨트롤 해주는 코드 입니다.

코드에서 아웃풋 값을 확인하기 위해 LCD display (I2C) (16x2)를 사용했고,

LCD 관련 내용은 필요하시다면 아래의 포스팅을 참고해주시면 감사하겠습니다 :)

(라이브러리가 필요하시면 참고하시면 됩니다)

2020/10/06 - [정리, 공부해요/아두이노] - LCD display, 아두이노 우노, 기본연결/I2C/가변저항의 필요. 회로&코드

 

LCD display, 아두이노 우노, 기본연결/I2C/가변저항의 필요. 회로&코드

- LCD display - 기본연결 LCD (회로 & 코드) - I2C 탑재된 LCD (회로 & 코드) - 가변저항이 필요한 이유  LCD display address 찾기 LCD display를 사용하는 코드를 짜기 위해선 우선 우리가 가지고 있는 LCD가..

setoo0922.tistory.com

#include <PWM.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

int resist = A0;
int fan = 9;
int fan_power = 0;
int32_t frequency = 25000; //frequency (in Hz)

void setup() {
  //initialize all timers except for 0, to save time keeping functions
  InitTimersSafe(); 

  //sets the frequency for the specified pin
  bool success = SetPinFrequencySafe(fan, frequency);

  #ifndef ESP8266
    while (!Serial);     // will pause Zero, Leonardo, etc until serial console opens
  #endif
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  
  //if the pin frequency was set successfully, turn pin 13 on
  if(success) {
    lcd.print("succeed freq") ; 
    delay(1000); 
  }

  pinMode(resist,INPUT);
}

void loop() {
  //use this functions instead of analogWrite on 'initialized' pins
  pwmWrite(fan, fan_power);
  fan_power = map(analogRead(resist),0,1023,5,255);

  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print(analogRead(resist));
  lcd.print(" / ");
  lcd.print(fan_power);
  Serial.print(resist);
  Serial.print(" , ");
  Serial.println(analogRead(resist));

  delay(100);
}

<<가변저항 연결 참고>>

 

가운데 시그널, 빨강 + 밤색 -

마무리

실제 넣은 코드의 GIF입니다.

Fan의 반응 속도가 느려서, 돌고 있는 Fan을 pwm값에 맞게 바로바로 잡아주는 것이 아니고 관성은 그대로 이기에,

속도가 넣는 값에 맞게 바로 맞춰지는 것은 아닙니다 :)

 

 

반응형

댓글