===== PWM 출력 (아날로그 출력) =====
==== Pwm ====
''Pwm port, freq, duty_percent''
^ 파라미터 ^ 설명 ^
| ''freq'' | 출력할 주파수 (단위: Hz) |
| ''duty_percent'' | 듀티 사이클 (0 ~ 10000 → 0.00% ~ 100.00%) |
지정된 출력 포트에 설정된 주파수와 듀티 비로 PWM 파형을 출력합니다.
명령어 실행 즉시 출력이 시작되며, ''Pwmoff'' 명령을 호출하기 전까지 출력을 유지합니다.
* **소유권 확보**: 사용 전 반드시 ''Freepin'' 명령으로 해당 포트의 소유권을 확보해야 합니다.
* **사용 가능 포트**: 모든 출력 전용 포트(Q포트)와 P포트(양방향 포트)에서 사용할 수 있습니다.
Freepin 12
Pwm 12, 1000, 5000 ' 50.00% 듀티
Pwm 12, 1000, 7500 ' 75.00% 듀티
Pwm 12, 50, 750 ' 7.50% 듀티 (RC 서보 중앙 위치)
==== 참고 ====
듀티 값은 10000 기준으로 계산됩니다.
예:
500 → 5.00%
750 → 7.50%
1000 → 10.00%
5000 → 50.00%
10000 → 100.00%
==== PWM 포트 사용 시 주의사항 ====
GPIO 포트는 짝수/홀수 한 쌍(예: 10-11, 12-13, 14-15 ...)으로 하나의 PWM 자원을 공유합니다.
따라서 같은 쌍에 속한 포트는 PWM 주파수를 각각 다르게 설정할 수 없으며,
반드시 동일한 주파수를 사용해야 합니다.
예:
- 10번과 11번 → 같은 주파수
- 12번과 13번 → 같은 주파수
※ 듀티비(Duty)는 각각 독립적으로 설정할 수 있습니다.
----
==== Pwmoff ====
''Pwmoff port''
지정 포트에 출력 중인 PWM 출력을 정지합니다.
Pwmoff 12
----
===== 예제 프로그램 1 =====
A/D 입력을 받아 PWM에 반영하고, 4번 입력이 HIGH일 경우 출력을 정지합니다.
Dim i1 As Integer
Freepin 12
Do
i1 = Adin(0) * 10000 / 4095 ' 0~10000 변환
If In(4) = 1 Then
Pwmoff 12
Else
Pwm 12, 1000, i1
End If
Wait 500
Loop
===== 예제 프로그램 2 : RC 서보 제어 예제 =====
RC 서보는 50Hz(20ms 주기)에서 약 5.0% ~ 10.0% 듀티를 사용합니다.
(10000 기준 → 500 ~ 1000)
Dim angle As Integer
Dim duty As Integer
Freepin 10
Pwm 10, 50, 750 ' 중앙 (7.5%)
Do
For angle = 0 To 180 Step 5
duty = 500 + angle * 500 / 180 ' 500~1000
Pwm 10, 50, duty
Debug Dec duty, " ", Dec angle, Cr
Wait 200
Next
For angle = 180 To 0 Step -5
duty = 500 + angle * 500 / 180
Pwm 10, 50, duty
Debug Dec duty, " ", Dec angle, Cr
Wait 200
Next
Loop
- PWM 주파수는 **50Hz**로 설정해야 합니다.
- 듀티 범위:
* 500 → 약 1.0ms (최소 위치)
* 750 → 약 1.5ms (중앙)
* 1000 → 약 2.0ms (최대 위치)
- 각도(0~180)를 듀티(500~1000)로 선형 변환합니다.
[[..:index|← CUBLOC2 목차로 돌아가기]]