-
Notifications
You must be signed in to change notification settings - Fork 15
예제 pwm
myCortex-LM8962는 3개의 PWM 생성 장치를 내장하고 있습니다. MCU 장치 구성에 생색내기용으로 집어넣은 단순 PWM 생성기가 아닌 본격 PWM 발생장치이며, 6개 PWM 출력을 통하여 BLDC 모터도 바로 제어할 수 있습니다. 본 예제에서는 PWM 장치의 기본적인 기능을 살펴볼 수 있습니다.
각각의 PWM 장치는 16비트 카운터를 중심으로 2개의 비교기, PWM 파형 생성기, dead-band 생성기 등으로 구성되어 2개의 PWM 출력을 낼 수 있습니다. 장치가 3개 있으므로 총 6개 PWM 출력을 낼 수 있습니다. 16비트 카운터로 시스템 클럭을 카운트하며 2개의 비교기로 PWM 주파수와 듀티비(duty ratio)를 만들어 냅니다. 본 예제에서는 50MHz 시스템 클럭을 입력으로 받아 440Hz의 PWM 기본 주파수를 만들고, 듀티비 25%와 75% 두 개의 출력을 만드는 예를 구현하고 있습니다.
PWM을 이용해 모터 제어를 할 때 P 채널, N 채널 스위치의 스위칭 딜레이 차이에 의해 shoot-through 현상이 일어날 수 있습니다. 이를 방지하기 위해서는 잘 튜닝된 스위치 쌍을 사용하거나 PWM 스위칭 시 dead-band를 인위적으로 집어넣어야 합니다. myCortex-LM8962는 dead-band generator를 이용해 PWM 스위칭 시 사용자가 지정한 delay를 자동으로 만들어 줌으로써 실전 회로를 보다 쉽게 구현할 수 있게 합니다.
- SysCtl
- GPIO
- PWM
45 line:
//
// Set the clocking to use PLL
//
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_8MHZ);
시스템 클럭을 PLL을 사용하여 50MHz로 설정합니다.
54 line:
//
// Enable the peripherals used by this example.
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
//
// Set GPIO F0 and G1 as PWM pins. They are used to output the PWM0 and
// PWM1 signals.
//
GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_0);
GPIOPinTypePWM(GPIO_PORTG_BASE, GPIO_PIN_1);
본 예제에서 사용 할 장치들을 enable합니다. PWM0는 PF0, PWM1은 PG1 핀을 사용합니다.
71 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%.
//
PWMPulseWidthSet(PWM_BASE, PWM_OUT_0, period / 4);
PWMPulseWidthSet(PWM_BASE, PWM_OUT_1, period * 3 / 4);
PWM0에 25% 듀티, PWM1에 75% 듀티를 설정합니다.
89 line:
//
// Enable the PWM0 and PWM1 output signals.
//
PWMOutputState(PWM_BASE, PWM_OUT_0_BIT | PWM_OUT_1_BIT, true);
//
// Enable the PWM generator.
//
PWMGenEnable(PWM_BASE, PWM_GEN_0);
PWM 출력을 enable 합니다.
- 펌웨어를 빌드한 후 다운로드 하고, 보드의 리셋 버튼을 1회 누릅니다.
- 오실로스코프를 이용하여 PF0와 PG1 핀을 관찰하여 PWM 출력이 나오는지 확인합니다.
- PWM duty를 바꿔서 다시 다운로드 해 보고 변경사항이 적용되는지 확인합니다.