이 모드는 PWM 신호를 정확하게 생성하는 데 사용됩니다. PWM 신호는 동일한 직사각형 펄스가 무한히 반복되는 형태입니다. PWM 신호는 주기적인 신호이며 각 사이클은 직사각형 펄스 입니다. PWM 신호는 low-level 신호와 high-level 신호로 구성됩니다.
명령어 | 하위 명령어 | 설명 | |||
---|---|---|---|---|---|
set | mode | output | pwm | 모드 설정: PWM출력모드 | |
div | ms | 단위 설정: 밀리 초 | |||
us | 단위 설정: 마이크로 초 | ||||
output | od | 오픈 드레인(Open-Drain) | |||
pp | 푸쉬 풀(Push-Pull) | ||||
low | LOW 출력 | ||||
high | HIGH 출력 | ||||
invert | 0 | 정상(비 반전)출력 | |||
1 | 반전 출력 | ||||
count | [T1] [T2] | 출력 타이밍 설정 | |||
trigger | from | ht0 | 트리거 대상 설정: ht0만 가능 | ||
php | 트리거 대상 설정: 없음 | ||||
reset | - | 초기화 | |||
get | state | 상태 읽기 | |||
div | 분주 비 읽기 | ||||
start | - | 시작 | |||
stop | - | 정지 |
PWM출력모드에서는 이 명령어에 의해 직사각형 펄스의 low-level 및 high-level 유지시간을 설정할 수 있습니다. 카운트 설정 단위는 "set div"명령에 의한 단위가 사용됩니다.
명령어 | 문법 |
---|---|
set count | pid_ioctl($pid, "set count T1 T2"); |
PWM출력모드에서 설정 가능한 카운트 값 T1과 T2의 범위는 다음과 같습니다.
구분 | 카운트 값의 범위 |
---|---|
T1 | 1 ~ 32763 |
T2 | 1 ~ 32763 |
T1 + T2 | 2 ~ 32764 |
이 명령은 타이머 시작 전에 설정되어야 합니다. 그렇지 않은경우 에러가 발생합니다. 아래 그림은 PWM출력모드의 출력 파형을 보여줍니다.
※ Duty cycle = T1 / (T1 + T2)
※ Frequency = 1 / (T1 + T2)
이 명령은 HT핀에 즉시 LOW 또는 HIGH를 출력합니다.
명령어 | 문법 | 설명 |
---|---|---|
set output low | pid_ioctl($pid, "set output low"); | HT핀에 LOW출력 |
set output high | pid_ioctl($pid, "set output high"); | HT핀에 HIGH출력 |
반전출력이 활성화되어 있으면 이 명령에 의한 출력 또한 반전되어 출력됩니다.
이 명령은 HT핀의 출력타입을 설정합니다.
명령어 | 문법 | 설명 |
---|---|---|
set output pp | pid_ioctl($pid, "set output pp"); | 출력타입을 푸쉬-풀로 설정 |
set output od | pid_ioctl($pid, "set output od"); | 출력타입을 오픈-드레인으로 설정 |
출력타입의 기본값은 푸쉬-풀입니다.
이 명령은 반전출력의 활성화/비활성화를 설정합니다.
명령어 | 문법 | 설명 |
---|---|---|
set output invert 0 | pid_ioctl($pid, "set output invert 0"); | 반전출력 비활성화 |
set output invert 1 | pid_ioctl($pid, "set output invert 1"); | 반전출력 활성화 |
반전출력이 활성화되어 있으면:
반전출력의 기본상태는 비활성화상태 입니다.
<?php
$pid = pid_open("/mmap/ht0"); // 0번 HT 열기
pid_ioctl($pid, "set div us"); // 단위 설정: 마이크로 초
pid_ioctl($pid, "set mode output pwm"); // PWM출력모드 설정
pid_ioctl($pid, "set count 1 1"); // 카운트 값 설정: 1, 1
pid_ioctl($pid, "start"); // HT 시작
usleep(50);
pid_ioctl($pid, "stop"); // HT 정지
pid_close($pid);
?>
위 예제를 실행했을 때 HT의 출력 결과는 다음과 같습니다.