이 자습서는 Texas Instruments 의 MSP430G2 LaunchPad 사용 방법을 배우는 MSP430G2 LaunchPad 자습서 시리즈의 일부입니다. 지금까지 보드의 기본 사항을 배웠고 아날로그 전압을 읽는 방법, MSP430G2와 LCD 인터페이스 등을 배웠습니다. 이제 MSP430G2에서 PWM에 대해 학습하는 다음 단계를 진행합니다. 전위차계를 변경하여 LED의 밝기를 제어하여 이를 수행합니다. 따라서 전위차계는 MSP430의 아날로그 핀에 연결되어 아날로그 전압을 읽으므로 진행하기 전에 ADC 자습서를 살펴 보는 것이 좋습니다.
PWM 신호 란 무엇입니까?
펄스 폭 변조 (PWM)는 제어 회로에서 가장 일반적으로 사용되는 디지털 신호입니다. 이 신호는 미리 정의 된 시간과 속도로 높음 (3.3v) 및 낮음 (0v)으로 설정됩니다. 신호가 높게 유지되는 시간을 "on time"이라고하고 신호가 낮게 유지되는 시간을 "off time"이라고합니다. PWM에는 아래에서 설명하는 두 가지 중요한 매개 변수가 있습니다.
PWM의 듀티 사이클:
PWM 신호가 HIGH (on time)로 유지되는 시간의 비율을 듀티 사이클이라고합니다. 신호가 항상 ON이면 100 % 듀티 사이클이고 항상 꺼져 있으면 0 % 듀티 사이클입니다.
듀티 사이클 = Turn ON 시간 / (Turn ON 시간 + Turn OFF 시간)
PWM의 주파수:
PWM 신호의 주파수는 PWM이 한주기를 완료하는 속도를 결정합니다. 1주기는 위의 그림과 같이 PWM 신호의 ON 및 OFF가 완료됩니다. 튜토리얼에서 주파수는 Energia IDE에서 설정 한 기본값 인 500Hz입니다.
실시간으로 PWM 신호에 대한 많은 응용 프로그램이 있지만 PWM 신호를 사용하여 서보 모터를 제어 할 수 있으며 LED 밝기의 밝기를 제어 할 수있는 아날로그 전압으로 변환 할 수도 있습니다. 어떻게 할 수 있는지에 대해 조금 배워 봅시다.
다음은 다른 마이크로 컨트롤러를 사용한 몇 가지 PWM 예입니다.
- MPLAB 및 XC8과 함께 PIC 마이크로 컨트롤러를 사용하여 PWM 생성
- Raspberry Pi를 사용한 서보 모터 제어
- PWM을 사용하는 Arduino 기반 LED 조광기
여기에서 모든 PWM 관련 프로젝트를 확인하십시오.
PWM 신호를 아날로그 전압으로 변환하는 방법은 무엇입니까?
아날로그 전압으로 신호를 PWM하려면 RC 필터라는 회로를 사용할 수 있습니다. 이것은 이러한 목적으로 간단하고 가장 일반적으로 사용되는 회로입니다. 회로는 아래 회로와 같이 저항과 커패시터를 직렬로 포함합니다.
따라서 기본적으로 여기서 일어나는 일은 PWM 신호가 높을 때 커패시터가 저항을 통해 충전되고 PWM 신호가 낮아지면 커패시터가 저장된 전하를 통해 방전된다는 것입니다. 이렇게하면 PWM 듀티 사이클에 비례하는 출력에서 항상 일정한 전압을 갖게됩니다.
위의 그래프에서 노란색은 PWM 신호이고 파란색은 출력 아날로그 전압 입니다. 보시다시피 출력 파는 순수한 DC 파는 아니지만 우리의 응용 프로그램에서는 잘 작동합니다. 다른 유형의 애플리케이션을 위해 순수한 DC 파가 필요한 경우 스위칭 회로를 설계해야합니다.
회로도:
회로도는 매우 간단합니다. 그것은 단지 전위차계와 저항기와 커패시터를 가지고 RC 회로와 Led 자체를 형성합니다. 전위차계는 PWM 신호 듀티 사이클을 제어 할 수있는 아날로그 전압을 제공하는 데 사용됩니다. 포트의 출력은 아날로그 전압을 읽을 수있는 핀 P1.0에 연결됩니다. 그런 다음 P1.2 핀을 사용하여 수행 할 수있는 PWM 신호를 생성해야합니다.이 PWM 신호는 RC 필터 회로로 전송되어 PWM 신호를 아날로그 전압으로 변환 한 다음 LED에 제공합니다.
MSP 보드의 모든 핀이 아날로그 전압을 읽 거나 PWM 핀을 생성 할 수있는 것은 아니라는 점을 이해하는 것이 매우 중요합니다. 특정 작업을 수행 할 수있는 특정 핀은 아래 그림과 같습니다. 프로그래밍을 위해 핀을 선택하기위한 지침으로 항상 이것을 사용하십시오.
위와 같이 완전한 회로를 조립하면 브레드 보드와 몇 개의 점퍼 와이어를 사용하여 쉽게 연결할 수 있습니다. 연결이 완료되면 보드가 아래와 같이 보입니다.
PWM 신호용 MSP 프로그래밍:
하드웨어가 준비되면 프로그래밍을 시작할 수 있습니다. 프로그램에서 첫 번째는 우리가 사용할 핀을 선언하는 것입니다. 여기서는 PWM을 생성 할 수있는 기능이 있으므로 핀 번호 4 (P1.2)를 출력 핀으로 사용합니다. 따라서 나중에 프로그램에서 쉽게 참조 할 수 있도록 변수를 만들고 핀 이름을 지정합니다. 마지막에 완전한 프로그램이 제공됩니다.
int PWMpin = 4; // MSP 모듈의 4 번째 핀을 PWM 핀으로 사용하고 있습니다.
다음 으로 설정 기능 으로 들어갑니다. 여기에 작성된 코드는 모두 한 번만 실행됩니다. 여기서는 PWM이 출력 기능이므로이 4 번째 핀을 출력 핀으로 사용한다고 선언 합니다. 여기서는 숫자 4 대신 PWMpin 변수를 사용 하여 코드가 더 의미있게 보입니다.
void setup () { pinMode (PWMpin, OUTPUT); // PEMpin이 Outptut으로 설정 됨 }
마지막으로 루프 함수 로 들어갑니다 . 여기에 쓰는 것은 반복해서 실행됩니다. 이 프로그램에서 우리는 아날로그 전압 을 읽고 그에 따라 PWM 신호를 생성해야 하며 이것은 반복해서 발생해야합니다. 따라서 먼저 전위차계에 연결되었으므로 핀 A0에서 아날로그 전압을 읽는 것으로 시작하겠습니다.
여기서는 AanalogRead 함수를 사용하여 값을 읽고 있습니다.이 함수는 핀에 적용된 전압 값에 따라 0-1024 사이의 값을 반환합니다. 그런 다음이 값을 아래와 같이 "val"이라는 변수에 저장합니다.
int val = analogRead (A0); // 핀 A0에서 ADC 값 읽기
PWM 기능에 제공 하려면 ADC에서 0에서 1024까지의 값을 0에서 255 까지 의 값 으로 변환해야합니다. 왜 이것을 변환해야합니까? 곧 말씀 드리지만 지금은 변환해야한다는 것을 기억하십시오. 한 값 집합을 다른 값 집합으로 변환하기 위해 Energia에는 Arduino와 유사한 맵 기능이 있습니다. 따라서 0-1204의 값을 0-255로 변환하고 변수“val”에 다시 저장합니다.
val = map (val , 0, 1023, 0, 255); // ADC는 0-1023의 값을 제공하여 0-255로 변환합니다.
이제 전위차계의 위치에 따라 0-255의 변수 값이 있습니다. 우리가해야 할 일은 PWM 핀 에이 값을 사용하는 것입니다. 다음 라인을 사용하여 수행 할 수 있습니다.
analogWrite (PWMpin, val); // PWM 핀에 그 값을 씁니다.
0-255가 PWM 핀에 기록되는 이유 에 대한 질문으로 돌아가 보겠습니다. 이 값 0-255는 PWM 신호의 듀티 사이클을 결정합니다. 예를 들어 신호의 값이 0이면 듀티 사이클이 127의 경우 0 %이고 255의 경우 100 %라는 의미입니다.
PWM으로 LED 밝기 제어:
하드웨어와 코드를 이해했으면 회로 작업을 재미있게 할 때입니다. MSP430G2 보드에 코드를 업로드하고 전위차계 손잡이를 돌립니다. 노브를 돌리면 핀 2의 전압이 달라지며 마이크로 컨트롤러가 읽을 수 있으며 전압에 따라 핀 4에서 PWM 신호가 생성됩니다. 전압이 클수록 듀티 사이클이 커지고 그 반대의 경우도 마찬가지입니다.
이 PWM 신호는 아날로그 전압으로 변환되어 LED를 켭니다. LED 의 밝기는 PWM 신호 듀티 사이클에 정비례합니다. 브레드 보드의 LED 외에도 브레드 보드 LED와 유사한 밝기를 변경하는 smd LED (빨간색)를 확인할 수 있습니다. 이것은 LED도 같은 핀에 연결되어 있지만 RC 네트워크가 없기 때문에 실제로 매우 빠르게 깜박입니다. 어두운 방에서 보드를 흔들어 깜박이는 특성을 확인할 수 있습니다. 전체 작업은 아래 비디오 에서도 볼 수 있습니다.
지금 까지 MSP430G2 보드 에서 PWM 신호를 사용하는 방법을 배웠습니다. 다음 자습서에서는 동일한 PWM 신호를 사용하여 서보 모터를 제어하는 것이 얼마나 쉬운 지 배울 것입니다. 의심스러운 점이 있으면 아래 댓글 섹션이나 기술 지원 포럼에 게시하십시오.