Arduino-펄스 폭 변조
펄스 폭 변조 또는 PWM은 펄스 트레인에서 펄스 폭을 변경하는 데 사용되는 일반적인 기술입니다. PWM에는 서보 및 속도 컨트롤러 제어와 같은 많은 응용 분야가있어 모터 및 LED의 유효 전력을 제한합니다.
PWM의 기본 원리
펄스 폭 변조는 기본적으로 높고 낮은 시간이 다양한 구형파입니다. 기본 PWM 신호는 다음 그림에 나와 있습니다.
PWM과 관련된 다양한 용어가 있습니다-
On-Time − 시간 신호의 지속 시간이 길다.
Off-Time − 시간 신호의 지속 시간이 짧습니다.
Period − PWM 신호의 on-time과 off-time의 합으로 표시됩니다.
Duty Cycle − PWM 신호 기간 동안 켜져있는 시간 신호의 백분율로 표시됩니다.
기간
그림과 같이 T on 은 on-time, T off 는 신호의 off-time을 나타냅니다. 기간은 켜짐 및 꺼짐 시간의 합계이며 다음 방정식과 같이 계산됩니다.
$$ T_ {total} = T_ {on} + T_ {off} $$듀티 사이클
듀티 사이클은 해당 기간의 온 타임으로 계산됩니다. 위에서 계산 된주기를 사용하여 듀티 사이클은 다음과 같이 계산됩니다.
$$ D = \ frac {T_ {on}} {T_ {on} + T_ {off}} = \ frac {T_ {on}} {T_ {total}} $$analogWrite () 함수
그만큼 analogWrite()함수는 아날로그 값 (PWM 웨이브)을 핀에 씁니다. 다양한 밝기로 LED를 켜거나 다양한 속도로 모터를 구동하는 데 사용할 수 있습니다. analogWrite () 함수를 호출 한 후 핀은 다음 번에 analogWrite ()를 호출하거나 동일한 핀에서 digitalRead () 또는 digitalWrite ()를 호출 할 때까지 지정된 듀티 사이클의 일정한 구형파를 생성합니다. 대부분의 핀에서 PWM 신호의 주파수는 약 490Hz입니다. Uno 및 유사한 보드에서 핀 5 및 6의 주파수는 약 980Hz입니다. Leonardo의 핀 3과 11도 980Hz에서 실행됩니다.
대부분의 Arduino 보드 (ATmega168 또는 ATmega328이있는 보드)에서이 기능은 핀 3, 5, 6, 9, 10 및 11에서 작동합니다. Arduino Mega에서는 핀 2 ~ 13 및 44 ~ 46에서 작동합니다. ATmega8 만 지원하는 보드 analogWrite() 핀 9, 10 및 11에서
Arduino Due는 analogWrite()핀 2 ~ 13, 핀 DAC0 및 DAC1. PWM 핀과 달리 DAC0 및 DAC1은 디지털-아날로그 변환기이며 진정한 아날로그 출력으로 작동합니다.
analogWrite ()를 호출하기 전에 핀을 출력으로 설정하기 위해 pinMode ()를 호출 할 필요가 없습니다.
analogWrite () 함수 구문
analogWrite ( pin , value ) ;
value − 듀티 사이클 : 0 (항상 꺼짐)에서 255 (항상 켜짐) 사이.
Example
int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value
void setup() {
pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop() {
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023,
// analogWrite values from 0 to 255
}