라즈베리파이 하드웨어(Hardware) PWM 사용하기
라즈베리파이 하드웨어(Hardware) PWM 사용하기
Created Date: 2013.10.17
Modified Date: 2013.10.17
revision 1
안녕하세요 땡땡이아부지 입니다.
정말 오랜만에 글을 쓰는군요….
멀티파이 버전업과 회사의 정신없는 업무로 인하여 맨날 눈팅만 하다가 잠깐 짬을 내서 이렇게 글을 써 봅니다.
오늘은 라즈베리파이로 사용하는 Hardware PWM 에 관한 설명을 드리겠습니다.
http://www.airspayce.com/mikem/bcm2835/bcm2835-1.30.tar.gz 를 다운받아
라즈베리파이에 압축을 풉니다. 여러 방법이 있는데 wget 를 사용하셔도 되고 ftp 를 이용하셔도 됩니다. tar zxvf bcm2835-1.30.tar.gz 명령어를 이용하여 압축을 풉니다. 그리고 아래의 명령어를 순차적으로 입력합니다. cd bcm2835-1.30
./configure
make
sudo make check
sudo make install
자 bcm2835 설치가 모두 끝마쳤습니다.
아래는 PWM 소스 입니다. PWM 채널 0을 사용합니다. P1 기준 12번 핀을 사용합니다.
#include <bcm2835.h>
#include <stdio.h>
#define PIN RPI_GPIO_P1_12
#define PWM_CHANNEL 0
#define RANGE 1024
void main(int argc, char **argv)
{
if (!bcm2835_init())
return 1;bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_ALT5);
bcm2835_pwm_set_clock(BCM2835_PWM_CLOCK_DIVIDER_16);
bcm2835_pwm_set_mode(PWM_CHANNEL, 1, 1);
bcm2835_pwm_set_range(0, RANGE);int direction = 1;
int data = 1;
while (1)
{
if (data == 1)
direction = 1;
else if (data == RANGE-1)
direction = -1;
data += direction;
bcm2835_pwm_set_data(PWM_CHANNEL, data);
bcm2835_delay(50);
}
bcm2835_close();
return 0;
}
아래와 입력을 하시고 저장을 하시면 됩니다.
파일명 확장자는 .c로 하시면 됩니다. pwm.c 로 가정을 하겠습니다.
gcc -o pwm -I ../../src ../../src/bcm2835.c pwm.c
이렇게 컴파일 하시구요.
사용방법은
sudo ./pwm
이렇게 사용을 하시면 됩니다.
여기까진 뭐 저도 인터넷 있는거 가져다 쓴 글입니다.
다들 아시겠지만 이걸론 공부가 되지 않아요.
이 함수들이 어떤 역할을 하는지 정확히 알아야 원하는 주파수를 만들어 내실수 있을 겁니다.
전 약 2개월정도 전에 데이터시트를 보면서 PWM 2개 포트를 실제 구현을 해봤구요.
이 소스로는 해보지 않았습니다. 하지만 전부터 header 파일에는 소스가 올라와 있어서 함수 자체 분석은 해보았습니다.
소스를 보니 좀더 그때 봤던 것들이 좀 더 쉽게 머리속에서 정리가 되는군요 ^^
여러분들의 좋은 작품 기대해 보겠습니다.