-
Notifications
You must be signed in to change notification settings - Fork 15
예제 pwm_dimming
irmusy edited this page Oct 8, 2013
·
1 revision
pwm_dimming 예제는 PWM 생성기를 이용해 PWM을 만들고, 듀티비를 주기적으로 바꿔 보는 간단한 예제입니다. PWM 출력에 LED를 연결하면 LED의 밝기가 서서히 변하는 것을 확인할 수 있습니다.
- SysCtl
- GPIO
- PWM
60 line:
//
// Enable the peripherals used by this example.
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//
// Set GPIO F0 as PWM pin. They are used to output the PWM0
// PWM1 signals.
//
GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_0);
본 예제에서 사용 할 장치들을 enable합니다. PWM0는 PF0 핀을 사용합니다.
74 line:
//
// Compute the PWM period based on the system clock.
//
period = SysCtlClockGet() / 440;
// Set the PWM period to 440 (A) Hz.
//
PWMGenConfigure(PWM_BASE, PWM_GEN_0,
PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
PWMGenPeriodSet(PWM_BASE, PWM_GEN_0, period);
PWM 생성기 0의 주파수를 440Hz로 설정합니다.
83 line:
//
// Set PWM0 to a duty cycle of 25% and PWM1 to a duty cycle of 75%.
//
SetPWMDuty(25);
PWM0에 25% 듀티를 설정합니다. SetPWMDuty()함수는 아래 설명 참조하세요.
91 line:
//
// Enable the PWM0 output signals.
//
PWMOutputState(PWM_BASE, PWM_OUT_0_BIT, true);
//
// Enable the PWM generator.
//
PWMGenEnable(PWM_BASE, PWM_GEN_0);
PWM 출력을 enable 합니다.
101 line:
//
// Set up the period for the SysTick timer.
//
SysTickPeriodSet(SysCtlClockGet() / 100); // 100Hz SysTick timer
//
// Enable the SysTick Interrupt.
//
SysTickIntEnable();
SysTickIntRegister(SysTickIntHandler);
//
// Enable SysTick.
//
SysTickEnable();
100Hz 주기의 SysTick 타이머를 설정합니다. 이 SysTick 타이머는 주기적으로 PWM 듀티를 변경하여 dimming 효과를 얻기 위해 사용합니다.
128 line:
void SysTickIntHandler(void)
{
if (++duty >= 100)
duty = 0;
SetPWMDuty(duty);
}
SysTick 타이머 인터럽트 핸들러입니다. SysTick 타이머는 100Hz로 설정되었습니다. 따라서 매 10ms 마다 이 인터럽트가 발생하고, 인터럽트가 발생할 때 마다 PWM 듀티를 1씩 증가시킵니다. 그러므로 1초가 지나면 듀티가 최대값인 100이 되어 다시 0으로 초기화 됩니다.
138 line:
static void SetPWMDuty(unsigned long duty)
{
unsigned long period = SysCtlClockGet() / 440;
PWMPulseWidthSet(PWM_BASE, PWM_OUT_0, period * duty / 100);
}
PWM의 듀티를 설정하는 함수입니다. 듀티는 0~100%의 값을 지정합니다.
- 펌웨어를 빌드한 후 다운로드 하고, 보드의 리셋 버튼을 1회 누릅니다.
- 오실로스코프를 이용하여 PF0 핀을 관찰하여 PWM 출력이 나오고, 듀티가 서서히 변하는지 확인합니다.
- PF0 핀에 LED와 저항을 연결하여 LED의 밝기가 변하는지 확인합니다.