채널 사양이 있는 펄스 출력 명령(PWM 출력)
이 명령은 지정된 DUT에 따라 펄스 폭 변조 출력 신호를 전달합니다. 지정된 채널의 제어 플래그가 FALSE이고 실행 조건이 TRUE이면 이 채널에서 펄스가 출력됩니다.
입력
데이터 테이블이 포함된 영역의 시작 어드레스
펄스 출력 채널:
FP-XH C30 T/P: 0~3
FP-XH C60 T/P: 0~5
FPS: 0,2
FP-X, FP-XH 릴레이: 0.1
FP-X, FP-XH 16k 트랜지스터: 0-2
FP0R, FP0H, FP-X, FP-XH 32 트랜지스터: 0-3
FP-XH 32k 트랜지스터: 0-5
다음과 같은 사전 정의된 DUT 사용: F173_PulseOutput_PWM_DUT
DUT에서 F168_PulseOutput_Home_DUT 파라미터를 지정할 수 있습니다.
대략적인 주파수
듀티(펄스 기간 및 주기)
구형파의 펄스 지속 시간과 주기 간의 비율 차이입니다. 펄스 지속 시간이 1ms이고 펄스 주기가 4ms인 펄스 열의 경우, 듀티는 0,25 또는 25%입니다.
특히 듀티가 최소 또는 최대값과 가까우면 부하 전압과 부하 전류에 따라 특정 듀티와 다를 수 있습니다.
듀티는 스캔할 때마다 변경될 수 있습니다.
명령 실행 중에 주파수 정수 K를 변경할 수 없습니다. 변경하면 주파수에는 효과가 없지만 듀티 해상도에는 효과가 있습니다.
명령 실행 중에 듀티가 허용 범위를 벗어난 값으로 변경되면 듀티는 최대 값으로 조정됩니다. 명령 실행이 시작되면 연산 에러가 표시됩니다.
명령 실행 중에 주파수가 허용 범위를 벗어난 값으로 변경되면 해상도는 100으로 조정됩니다. 명령 실행이 시작되면 연산 에러가 표시되지 않습니다.
명령 실행 중에 듀티가 100% 이상으로 변경되면 주파수는 특정 해상도에서의 최대 값으로 조정됩니다. 명령 실행이 시작되면 연산 에러가 표시되지 않습니다.
주 프로그램과 인터럽트 프로그램 모두에 같은 채널 코드가 포함된 경우, 두 프로그램을 동시에 실행하지 마십시오.
FP-X, FP0R: 펄스 출력 명령이 실행되고 펄스가 출력 중이면 해당 채널의 펄스 출력 제어 플래그(예: sys_bIsPulseChannel0Active)는 TRUE입니다. 다른 펄스 출력 명령이 실행되면 이 플래그는 더 이상 TRUE가 아닙니다.
FPS: 고속 카운터 제어 플래그(예: sys_bIsHscChannel0ControlActive)와 펄스 출력 제어 플래그(예: sys_bIsPulseChannel0Active)가 같은 특수 내부 플래그 번호(예: R903A)에 할당됩니다. 따라서 고속 카운터 명령 또는 펄스 출력 명이 실행되면 사용된 채널의 고속 카운터 제어 플래그(예: sys_bIsHscChannel0ControlActive)와 펄스 출력 제어 플래그(예: sys_bIsPulseChannel0Active)는 TRUE입니다. 다른 고속 카운터 명령 또는 펄스 출력 명령이 실행되면 이 플래그는 더 이상 TRUE가 아닙니다.
FPS: 원 보간 제어 명령 F176_PulseOutput_Center를 실행하면 원 보간 제어 플래그(sys_bIsCircularInterpolationActive)가 TRUE로 설정됩니다. 이 플래그 상태는 목표 값에 도달할 때까지 유지됩니다(실행 조건이 TRUE가 아니더라도). 이 시간 동안에는 다른 펄스 출력 명령을 실행할 수 없습니다.
FPS: 펄스 출력 채널에 할당된 모든 고속 카운터를 시스템 레지스터의 "미사용"으로 설정합니다.
FP-X, FP0R: 시스템 레지스터에서 원하는 채널의 "PWM 출력"을 설정합니다.
위치결정 프로그램에 강제 정지 옵션을 통합하는 것이 좋습니다.
고속 카운터 제어 플래그 또는 펄스 출력 제어 플래그 상태는 스캔이 실행 중인 동안에 변경될 수 있습니다. 예를 들어, 수신된 바이트 수를 읽으면 스캔 1회에 다른 상태가 두 개 이상 있을 수 있습니다.
글로벌 변수 리스트에서 프로젝트의 모든 POU에서 액세스할 수 있는 변수를 정의합니다.
DUT F173_PulseOutput_PWM_DUT는 FP Library에서 사전 정의됩니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR_EXTERNAL
X6_bEnablePWM: BOOL:=FALSE;
END_VAR
VAR
dutPWMControl: F173_PulseOutput_PWM_DUT:=iFrequencyValue := 1;
(*iFrequencyValue := 1: f=2.0 Hz, T=502.5 ms;
*)
iPulseWidthModulationDuty: INT:=500;
(*500 = 50% duty*)
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,X6_bEnablePWM,5,2,7,4,);
B(B_F,E_MOVE!,Instance,16,1,22,5,,?DEN?D?AENO?C);
B(B_VARIN,,iPulseWidthModulationDuty,14,3,16,5,);
B(B_VAROUT,,dutPWMControl.iPulseWidthModulationDuty,22,3,24,5,);
L(7,3,16,3);
L(1,3,5,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,F173_PulseOutput_PWM!,Instance,16,0,29,5,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutPWMControl,14,2,16,4,);
B(B_VARIN,,2,14,3,16,5,);
B(B_CONTACT,,X6_bEnablePWM,5,1,7,3,);
L(7,2,16,2);
L(1,2,5,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (X6_bEnablePWM) then
dutPWMControl.iPulseWidthModulationDuty:=iPulseWidthModulationDuty;
END_IF;
IF (X6_bEnablePWM) then
F173_PulseOutput_PWM(s_dutDataTable := dutPWMControl,
n_iPulseOutputChannel := 2);
END_IF;