PWM출력모드


개요

이 모드는 PWM 신호를 정확하게 생성하는 데 사용됩니다. PWM 신호는 동일한 직사각형 펄스가 무한히 반복되는 형태입니다. PWM 신호는 주기적인 신호이며 각 사이클은 직사각형 펄스 입니다. PWM 신호는 low-level 신호와 high-level 신호로 구성됩니다.

다음은 ST 펄스출력모드의 블록다이어그램 입니다.

st_set_pwm 01

명령어

명령어 하위 명령어 설명
set mode output pwm 모드 설정: PWM출력모드
div sec 단위 설정: 초
ms 단위 설정: 밀리 초
us 단위 설정: 마이크로 초
output od 오픈 드레인(Open-Drain)
pp 푸쉬 풀(Push-Pull)
low LOW 출력
high HIGH 출력
dev uio0 #pin 출력 핀 설정: uio0의 #pin
invert 0 정상(비 반전)출력
1 반전 출력
count [T1] [T2] 출력 타이밍 설정
delay [D] 출력 지연시간 설정
trigger from st# 트리거 대상 설정: st0 ~ st7
php 트리거 대상 설정: 없음
reset - 초기화
get state 상태 읽기
start - 시작
stop - 정지

카운트 값 설정

PWM출력모드에서는 이 명령어에 의해 직사각형 펄스의 low-level 및 high-level 유지시간을 설정할 수 있습니다. 카운트 설정 단위는 "set div"명령에 의한 단위가 사용됩니다.

명령어 문법
카운트 설정 pid_ioctl($pid, "set count T1 T2");

PWM출력모드에서 설정 가능한 카운트 값 T1과 T2의 범위는 다음과 같습니다.

단위 T1, T2 설정 가능 범위(10㎲ ~ 30분)
마이크로 초 10 ~ 1,800,000,000
밀리 초 1 ~ 1,800,000
1 ~ 1,800

이 명령은 타이머 시작 전에 설정되어야 합니다. 그렇지 않은경우 에러가 발생합니다. 아래 그림은 PWM출력모드의 출력 파형을 보여줍니다.

st_set_pwm_02

※ Duty cycle = T1 / (T1 + T2)
※ Frequency = 1 / (T1 + T2)

출력핀 설정

명령어 문법
set output dev D N pid_ioctl($pid, "set output dev uio0 0");

ST의 출력모드를 사용하기 전에 이 명령을 이용하여 출력핀을 지정해야 합니다. 디바이스 이름(예: uio0)과 핀 번호를 D와 N에 각각 지정합니다.

출력상태 설정 [low/high]

이 명령은 ST 출력핀에 즉시 LOW 또는 HIGH를 출력합니다.

명령어 문법 설명
set output low pid_ioctl($pid, "set output low"); ST 출력핀에 LOW출력
set output high pid_ioctl($pid, "set output high"); ST 출력핀에 HIGH출력

반전출력이 활성화되어 있으면 이 명령에 의한 출력 또한 반전되어 출력됩니다.

출력타입 설정 [od/pp]

이 명령은 ST 출력핀의 출력타입을 설정합니다.

명령어 문법 설명
set output pp pid_ioctl($pid, "set output pp"); 출력타입을 푸쉬-풀로 설정
set output od pid_ioctl($pid, "set output od"); 출력타입을 오픈-드레인으로 설정

출력타입의 기본값은 푸쉬-풀입니다.

반전출력 설정 [invert 0/1]

이 명령은 반전출력의 활성화/비활성화를 설정합니다.

명령어 문법 설명
set output invert 0 pid_ioctl($pid, "set output invert 0"); 반전출력 비활성화
set output invert 1 pid_ioctl($pid, "set output invert 1"); 반전출력 활성화

반전출력이 활성화되어 있으면:

st_set_pwm_04

반전출력의 기본상태는 비활성화상태 입니다.

트리거 설정

트리거는 ST를 출력모드로 사용할 때 시작 시점을 동기화 하기 위해 사용합니다. 이 때 ST의 시작 시점은 트리거 대상과 동기화 되며 트리거 대상은 또 다른 ST만 설정이 가능합니다. ST의 트리거 설정 방법은 다음과 같습니다.

구분 문법
ST(st0/1…) pid_ioctl($pid, "set trigger from st0");
php pid_ioctl($pid, "set trigger from php");

ST의 트리거 설정 기본 값은 "대상 없음(php)" 입니다.

PWM출력모드 사용 예

PWM출력모드 사용 예

<?php
$pid = pid_open("/mmap/st0");              // 0번 ST 열기
pid_ioctl($pid, "set div sec");            // 단위 설정: 초
pid_ioctl($pid, "set mode output pwm");    // PWM출력모드 설정
pid_ioctl($pid, "set output dev uio0 0");  // 출력 핀 설정: uio0의 0번
pid_ioctl($pid, "set count 1 1");          // 카운트 값 설정: 1, 1
pid_ioctl($pid, "start");                  // ST 시작
sleep(10);
pid_ioctl($pid, "stop");                   // ST 정지
pid_close($pid);
?>

위 예제를 실행했을 때 ST의 출력 결과는 다음과 같습니다.

st_set_pwm_03