오늘은 Lazarus를 이용하여 BBB의 PWM을 이용하는 방법을 테스트 해봤습니다.
휴.. 정말 BBB는 자료 찾기가 아주 수월하진 않네요.
기본적인 방법은 디바이스 트리를 이용하는 방법입니다. 아래 링크의 방법을 이용했습니다.
https://groups.google.com/forum/#!category-topic/beagleboard/beaglebone-black/wjbOVE6ItNg
LED를 P8_13 번 핀에 저항과 직렬연결을 합니다.
그리고, 아래의 방법으로 쉘 명령어를 입력합니다. (아래 명령행에 보이는 #는 번호가 시스템 마다 조금씩 다릅니다.)
$ echo am33xx_pwm > /sys/devices/bone_capemgr.#/slots
위의 명령어는 비글 본 케이브 메니저에 am33xx_pwm를 추가하도록 합니다. 그리고 나서 P8_13핀을 PWM 출력 핀으로 지정합니다. 물론 아무 핀이나 다 사용할 수 있는 것은 아닙니다. P8_13번 핀은 EHRPWM2B로 사용되고 있는 핀이거든요. 그래서 이 핀을 사용할 수 있습니다.
$ echo bone_pwm_P8_13 > /sys/devices/bone_capemgr.#/slots
위의 명령어를 실행하면 /sys/devices/ocp.#/ 디렉토리 아래 pwm_test_P8_13.# 라는 디렉토리가 생깁니다. (#는 각 시스템마다 번호가 다를 수 있습니다.) 그럼, pwm_test_P8_13.# 내에 있는 period와 duty라는 파일에 나노초로 값을 적어 넣으면 바로 P8_13번 핀으로 주어진 PWM 파형이 출력이 됩니다.
예를 들어, 50Hz에 50% duty 값을 갖는 파형을 만들고자 한다면, 아래와 같이 하면 됩니다.
$ echo 20000000 > /sys/devices/ocp.#/pwm_test_P8_13.#/period
$ echo 10000000 > /sys/devices/ocp.#/pwm_test_P8_13.#/duty
자, 이제 기본 원리를 설명드렸으니, 이 방법 그대로 라자루스로 프로그램을 만들어봤습니다.
위의 우측에 보이는 조그마한 프로그램은 라자루스로 쓰여졌고, 슬라이드 콘트롤을 가지고, duty 값 1~100%까지 갖는 PWM 파형을 만들어내게 합니다.
아래의 동영상은 작성한 라자루스 GUI 프로그램으로 PWM 파형을 변화시켜 LED의 밝기를 조절하는 프로그램을 테스트 하는 동영상입니다.
이번엔 라자루스의 완전한 프로젝트의 소스코드를 첨부했습니다. 🙂