Home » 산딸기 가지고 놀기 » 라즈베리파이 하드웨어(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 파일에는 소스가 올라와 있어서 함수 자체 분석은 해보았습니다.

소스를 보니 좀더 그때 봤던 것들이 좀 더 쉽게 머리속에서 정리가 되는군요 ^^

여러분들의 좋은 작품 기대해 보겠습니다.

산딸기마을 포스트 검색

공동제작 공동프로젝트 무상후원 기관

산딸기마을 기부하기

산딸기마을 방문자 현황

Flags Countries Visits Page views
South Korea 626063 1845660
United States 10882 26091
Japan 5011 13204
Germany 2755 5151
India 1897 2902
Canada 1729 4640
United Kingdom 1596 2642
Australia 1240 2901
Russia 1219 1677
China 1077 2239
Total Pageviews: 1936700