CUP 쿨러로 주로 사용되는 쿨링팬은 핀의 개수에 따라 다음과 같이 3가지 종류로 구분된다.
1. 2 pin : VCC, GND
2. 3 pin : VCC, GND, RPM feedback
3. 4 pin : VCC, GND, RPM feedback, PWM signal
핀이 한 개 늘어날 때마다 기능이 하나 추가되는 식이다.
이 중 3 pin fan을 갖게 되어 RPM feedback 신호를 확인해 보려 한다.
집에 오실로스코프가 없어서 아두이노를 통해 신호를 입력받고 RPM을 계산하는 코드를 구현해 봤다.
1. 회로 구성
3 pin 이상의 쿨링팬 내부에는 팬의 회전을 감지하는 홀센서가 존재한다.
홀센서로부터 팬이 회전할 때마다 전압이 발생하여 RPM feedback핀으로 전달된다.
따라서 오실로스코프로 이를 측정하면, 구형파(square wave) 형태의 신호가 관찰될 것이다.
이를 아두이노를 통해 확인해 보자.
아두이노에서 팬의 피드백 신호를 인풋으로 받기 위해 아래와 같이 아두이노의 5V핀과 D2핀에 풀업 저항을 연결한 뒤, 쿨링팬의 signal 핀과 연결시켰다. 이렇게 연결하면 팬의 signal 핀이 팬의 회전에 따라 마치 스위치를 on/off 시키는 것처럼 아두이노에게 High와 Low 신호를 계속해서 보내게 된다.
2. RPM Feedback 신호 확인하기
이제 아래와 같이 간단한 코드를 통해서 해당 신호를 모니터링할 수 있다.
const int signal_pin = 2; //D2핀을 signal input pin으로 사용
int signal=0;
void setup() {
pinMode(signal_pin, INPUT); // signal input 핀을 입력 모드로 설정
Serial.begin(9600);
}
void loop() {
signal = digitalRead(2); // signal 핀으로부터 디지털 신호를 입력 받은 후 변수에 저장
Serial.print("signal:");
Serial.println(signal); // 시리얼 모니터에 변수에 저장된 값을 출력한 뒤 줄 바꿈
delay(1); // 1 ms 대기
}
이제 코드를 업로드한 후 Arduino IDE의 Serial Plotter기능을 통해 신호를 확인해 보면 다음과 같이 구형파 신호를 관찰할 수 있다.
위 신호는 팬의 전원을 켜고 몇 초간 나타나는 구형파 신호이다. 팬의 전원을 처음 켜게 되면 팬의 회전속도가 서서히 증가하다가 일정한 속도에 다다르게 된다. 이에 따라 처음 전원을 켜고 구형파 신호가 불규칙하다 이내 일정한 형태로 바뀌는 걸 확인할 수 있다.
3. RPM값 계산하기
이제 해당 신호를 분당 회전수로 환산하여 RPM값을 계산하는 일만 남았다.
아래 코드는 1초 동안 회전 신호를 감지하여 이를 분당 회전수로 계산하는 코드이다.
const int signal_pin = 2;
volatile unsigned long counter = 0;
int signal=0;
void countPulses() {
counter ++; // fan회전 신호 감
}
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(signal_pin), countPulses, FALLING); //디지털 신호가 High에서 Low로 전환 되는 FALLING 엣지 감지
}
void loop() {
delay(1000); // 1초간 회전신호 측정
long rpm = counter * 60 / 2; // 1초간 측정한 신호를 1분 신호로 환산
Serial.print("RPM:");
Serial.println(rpm);
counter = 0; // 변수 초기화
}
코드를 살펴보면, D2핀의 디지털 신호가 High에서 Low로 전환되는 Falling 엣지를 감지하여 counter변수의 값을 1씩 추가한다. 이 동작을 1초 동안 시행 후 해당 값을 1분간 회전수로 변환한다. 이때, 2로 나눈 이유는 일반적으로 홀 센서는 1회전당 두 번의 신호가 발생하기 때문이다. (몇몇 fan은 1회전당 한 번의 신호만 발생하기도 한다.)
코드를 실행하여 RPM이 잘 측정되는지 확인해보자.
위 사진은 코드를 실행시킨 결과이다.
전원장치의 전압을 약 6V부터 12V까지 조절하며 팬의 RPM을 측정해 보았다. 전원에 따라 RPM이 증가하며, 12V에서는 내가 가진 쿨링팬의 스펙과 거의 일치하는 약 3500 RPM이 나타나는 것을 볼 수 있다.
이로써 아두이노를 통한 3 pin 팬의 RPM 모니터링 포스팅을 마치겠다. 아쉽게도 내가 갖고 있는 쿨링팬은 4 pin이 아니라서 PWM 컨트롤은 해보지 못했다. 추후 4pin 팬을 이용하면 속도조절이 가능한 선풍기 같은 것들을 만들어 볼 수 있을 것 같다.