[아두이노] 가변저항(Potential Divider)과 전압분배(Voltage Divider)



위 그림에서 (a)는 전압분배(Voltage Divider), (b)는 가변저항(Potential Divider)입니다. 전압분배는 고정된 두개의 저항으로 구성됩니다. 가변저항은 전압분배와 구조적으로 비슷하나 하나의 저항을 특정 지점을 기준으로 둘로 나누게 되며, 이 특정 지점은 임의로 조절 가능한 구조로 되어 있습니다. 위 그림에서 전압분배나 가변저항 모두 두 저항 사이에 Vd 포인트가 위치하고, 저항 R1, R2 크기를 조절할 수 있느냐 없느냐가 차이점입니다.


전압분배와 가변저항 둘 모두, 직렬로 연결된 두 저항의 크기에 따라 인가되는 공급 전압이 달라지는 원리를 이용하며, 공급전원을 원하는 크기로 출력하기 위해서 사용합니다.


아래 그림은 동일한 저항값을 가지는 R1, R2가 직렬로 연결되어 있는 회로입니다.

Vin은 총 전압이고, R1, R2에 나누어 인가됩니다. 결론적으로 Vout은 Vin과 다른 전압을 가지게 됩니다. 각 저항 R1, R2에 얼마의 전압이 인가될지는 두 저항의 상대적인 크기와 총 저항의 크기로 결정됩니다. 그 공식은 아래와 같습니다.


아래 회로를 봅시다.


Vin이 5V이고 R1 is 1KΩ and R2 is 10KΩ인 경우 Vout에 인가되는 전압은 얼마일까요? 


가변저항은 다양한 저항값을 가진 제품들이 있습니다. 예를 들어 10KΩ 가변저항의 경우 0Ω에서 최대 10KΩ까지 저항값을 변경할 수 있습니다.


그럼 아두이노와 가변저항을 이용하여 LED의 밝기를 조절해 보겠습니다. 우선 가변저항은 아래와 같은 구조를 가집니다.


3개의 핀으로 구성되어 있고, Vref-Ground 핀을 통해서 공급전원을 인가하면 ouput 쪽으로 가변저항에 의해 조정된 출력전압이 인가됩니다.



우선, 아두이노 우노와 220옴 저항, LED를 이용하여 위와 같은 회로를 구성합니다. 그리고 아두이노 IDE를 이용하여 아래와 같이 코드를 입력합니다.


const int ledPin = 9;  //pin 9의 PWM 기능을 이용합니다.
const int potPin = A0; //pin A0를 이용하여 아날로그 입력을 받습니다.
int value; //아날로그 값을 저장합니다.
void setup() {
    pinMode(ledPin, OUTPUT); 
    pinMode(potPin, INPUT);
}
void loop() {
    value = analogRead(potPin); //가변저항에서 아날로그 입력값 읽기
    value = map(value, 0, 1023, 0, 255); //아날로그 입력값 0-1023를 PWM 값 0-255으로 맵핑
    analogWrite(ledPin, value); //LED로 PWM 출력을 실행
    delay(100);
}


실행결과는 아래와 같습니다.


아래는 다른 타입의 가변저항을 사용한 예입니다. 아두이노 코드는 동일합니다.


위 코드에서 A0핀을 이용하여 전압값을 읽었습니다. 아두이노 내부에는 ADC(analog-to-digital converter)가 내장되어 있으며, 전압 변화값을 0~1023 사이의 정수로 반환해 주는 역할을 합니다. 가변저항을 돌려 저항이 가장 높은 위치에 도달하면 전압은 0V에 가까워지고 analogRead() 함수는 0을 반환합니다. 가변저항을 저항이 가장 낮은 위치로 돌리면, 전압은 공급전압과 가까워지고 analogRead() 함수는 최대값인 정수 1023을 반환합니다.

위 예제의 결과를 보면 가변저항을 통해 LED의 밝기가 조절되고 있습니다. 즉, LED에 인가되는 전압을 조정해서 LED의 밝기를 조정하는 것입니다. 하지만 아두이노 우노의 출력핀은 아날로그 출력을 지원하지 않습니다. 대신 디지털 출력핀을 통해 아날로그 출력을 모방하고 있습니다. 이러한 방법을 PWM(펄스-폭-변조) 방식이라 합니다. PWM 출력은 analogWrite() 함수를 통해 구현하고 있습니다. 아래 그림은 PWM 출력시 전압의 그래프입니다.


초록색 세로선은 사이클 시간을 의미합니다. 사이클 시간의 역수는 PWM 주파수가 됩니다. 즉, 사이클 시간이 짧을수록 높은 주파수를 가지게 됩니다. 아두이노의 PWM 주파수는 500Hz 정도이며 사이클 시간은 2ms 정도가 됩니다. analogWrite() 함수의 인자로 전달하는 정수는 0-255 사이의 값을 가집니다. analogWrite(255)는 1사이클 내내 5V 출력하게 됩니다. analogWrite(127)은 1사이클의 50% 시간동안만 5V 출력하게 됩니다. Duty Cycle이란 1사이클 내에서 얼마의 시간동안 전압을 출력할지를 나타내는 값입니다.


위 그림에서 duty cycle별 전압은 아래와 같습니다.

Duty Cycle 25%인 경우 평균전압 : 5V x 25% = 1.25V

Duty Cycle 55%인 경우 평균전압 : 5V x 50% = 2.5V

Duty Cycle 75%인 경우 평균전압 : 5V x 75% = 3.25V

Duty Cycle 100%인 경우 평균전압 : 5V x 100% = 5V


결론적으로 analogWrite() 함수로 Duty Cycle을 조절하면 출력전압이 변경되게 됩니다.


끝.

댓글

이 블로그의 인기 게시물

[PLC] PLC 아날로그 입출력 기본

공압 속도 제어: 미터인 vs 미터아웃

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

[PLC] 채터링 현상과 입력 필터

제너 다이오드에 저항을 연결하는 이유

[PLC] 래더 다이어그램과 PLC

[python] 파이썬 pyplot 2차원 그래프 샘플 코드

[PLC] PLC 입출력 타입 - 싱크 & 소스 (Sink & Source)

공압회로 기호

[암호화폐 자동매매] pip install ta-lib 설치오류 해결