- PWM & 라이브러리 활용
- Fan pin 연결 (Vin, Gnd, PWM)
- 코드
PWM & 라이브러리 활용
이번 포스팅에서는 Fan의 연결과 Fan의 PWM 제어에 대해 포스팅하고
PWM에 대해서와 라이브러리 활용에 관해서는 이전 포스팅을 참고해주시면 좋겠습니다!
PWM 관련 이전 포스팅입니다
2020/09/24 - [정리, 공부해요/전기, 전자, 통신] - PWM (Pulse Width Modulated) square wave, PWM파 with 아두이노
PWM 라이브러리 다운로드 & 활용 관련 이전 포스팅입니다.
2020/10/14 - [정리, 공부해요/아두이노] - 아두이노 우노, PWM 제어 라이브러리 활용
Fan pin 연결 (Vin, Gnd, PWM)
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 아웃풋인 아두이노에 연결하면 약하고, 돌아가다 멈추는게 보이기도 하는, 시원찮게 돌아갑니다.
코드
저항 값을 인풋으로 받아,
0~1023의 값을 255로 변경하여 Fan의 PWM컨트롤 해주는 코드 입니다.
코드에서 아웃풋 값을 확인하기 위해 LCD display (I2C) (16x2)를 사용했고,
LCD 관련 내용은 필요하시다면 아래의 포스팅을 참고해주시면 감사하겠습니다 :)
(라이브러리가 필요하시면 참고하시면 됩니다)
2020/10/06 - [정리, 공부해요/아두이노] - LCD display, 아두이노 우노, 기본연결/I2C/가변저항의 필요. 회로&코드
#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값에 맞게 바로바로 잡아주는 것이 아니고 관성은 그대로 이기에,
속도가 넣는 값에 맞게 바로 맞춰지는 것은 아닙니다 :)
'공부 > 아두이노 & 회로구성' 카테고리의 다른 글
회로 구성(파워연결/데이터로깅)에 있어 유용한 커넥터/어댑터/2핀/클림프 + 잘라 쓰는 기판/만능기판 (0) | 2021.07.04 |
---|---|
Arduino uno, PID control, 아두이노 우노 PID 제어 라이브러리 활용 (0) | 2020.10.18 |
아두이노 우노, PWM 제어 라이브러리 활용 (0) | 2020.10.14 |
(저장용) 사용중인 써미스터 B값, 온도별 필요 기준저항값 (0) | 2020.10.12 |
Thermistor(써미스터) 아두이노 우노로 읽고, PLX DAQ 써서 엑셀에 실시간 기록/저장 (0) | 2020.10.12 |
댓글