■ PWM(Pulse Width Modulation)
- PWM은 펄스 폭 변조(Pulse Width Modulation)의 약어이다.
- 한 주기에 있는 High 레벨과 Low 레벨의 비율을 변화 시켜서 Analog 신호를 생성한 것과 같은 효과를 출력하는 방법이다.
◎ pinMode 함수
- GPIO 핀의 모드를 설정하는 함수
void pinMode(int pin, int mode);
• pin : 핀 번호
• mode : 해당 핀의 모드 설정
INPUT / OUTPUT / PWM_OUTPUT / GPIO_CLOCK
PWM0(GPIO 12, GPIO 18), PWM1(GPIO 13, GPIO 19)
◎ PWM 출력 값 설정
- pwmWrite 함수 : PWM의 Duty를 조절하는 함수
void pwmWrite(int pin, int value);
• pin : 핀 번호
• value : 해당 PWM 핀의 Duty 값을 설정(0 ~ 1024)
◎ 임의의 PWM 신호 생성
- 라즈베리 파이에서는 2가지의 PWM 생성 모드를 지원함
• Balanced mode(default) : PWM 주파수가 유동적으로 변화 됨.
• 모드를 변경하지 않을 경우 Balanced mode 로 구동 됨.
• Mark-Space mode : 전통적인 PWM 생성 방법임.(PWM 범위, 주파수 등을 설정)
◎ PWM 모드 설정
- pwmSetMode 함수 : 출력 모드를 설정하는 함수
void pwmSetMode (int mode);
• mode : 해당 PWM 핀의 모드를 설정
• PWM_MODE_BAL(default) : PWM 주기가 유동적으로 변화
• PWM_MODE_MS : mark-space 모드로 설정 ( PWM 주기와 범위를 임의로 조정가능)
◎ PWM 범위 설정
- pwmSetRange 함수 : PWM의 범위(range)를 설정
void pwmSetRange(unsigned int range);
• range : PWM의 범위 값 (default : 1024)
◎ PWM 나눗수 설정
- pwmSetClock 함수 : PWM의 주파수를 설정하기 위한 나눗수를 설정하는 함수
void pwmSetClock(int divisor);
● softPWM
• wiringPi에서 제공해주는 소프트웨어적 기법의 PWM(software-driven PWM)
• PWM 핀이 아닌 일반 GPIO도 소프트웨어적으로 PWM 신호를 생성할 수 있도록 도와줌.
• softPWM.h 헤더 파일의 참조
• softPwmCreate() 함수와 softPwmWrite() 함수로 쉽게 생성 가능
• softPWM을 사용하기 위해서는 GPIO의 핀 모드를 OUTPUT으로 설정해야 함.
pinMode (gpio, OUTPUT)
● softPWM 범위 설정
▶ softPwmCreate() 함수 : PWM의 범위 (range)를 설정
int softPwmCreate(int pin, int initialValue, int pwmRange)
•pin : GPIO 핀 번호
• initialValue : 초기 펄스 폭 (0 ~ pwmRange)
• pwmRange : PWM 범위 (주기)
• f(pwm) = 1 / T = 1 / 100 * 100 * 10^(-6) = 100(Hz)
•권장값
Divisor : 100 µs , Range : 100 , PWM 주기 : 10ms , 기본 PWM 주파수 : 100Hz
PWM 주파수를 올리기 위해서는 펄스 시간을 낮추거나, Range를 낮추어야 함.
PWM 주파수가 200 Hz가 넘어가면 이상 작동
pwmRange 값은 50 이상으로 설정
● softPWM 범위 설정
▶ softPwmCreate() 함수 : PWM의 범위(range)를 설정
int softPwmCreate(int pin, int initialValue, int pwmRange)
● softPWM 출력 값 설정
int softPwmWrite(int pin, int value)