Processor

【라즈베리파이】 wiringPi C언어 PWM 사용설정

작성자 임베디드코리아 작성일26-02-16 23:02 조회35회 댓글0건
■ 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)