Salida PWM
Esta instrucción proporciona una salida de pulsos modulados en anchura según la DUT especificada. Se envían pulsos desde el canal especificado si la bandera de control para ese canal es FALSE y la condición de ejecución es TRUE.
Entrada
Dirección de inicio del área que contiene la tabla de datos
Salida de pulsos: 0 o 1
Utilizar la siguiente DUT predefinida: F170_PulseOutput_PWM_DUT
Se pueden especificar los siguientes parámetros en la DUT:
Frecuencia
Ciclo de trabajo
La relación entre la duración del pulso y el periodo de una señal rectangular. Para un tren de pulsos cuya duración del pulso es de 1ms y el periodo es de 4ms, el ciclo de trabajo es de 0,25 o 25%.
Tan pronto como comience a editar online (es decir, en modo RUN) un programa que utiliza esta instrucción, se detendrá la salida de pulsos.
En los registros del sistema seleccionar como "No usado" cualquier contador de alta velocidad asignado a un canal de salida de pulsos.
Si tanto el programa principal como el programa de interrupción contienen código para el mismo canal, asegurarse de que no se ejecutan simultáneamente.
La bandera de control del contador de alta velocidad (por ejemplo sys_bIsHscChannel0ControlActive) y la bandera de control de la salida de pulsos (por ejemplo sys_bIsPulseChannel0Active) están asignadas al mismo relé interno especial (R903A). Por lo tanto, cuando se ejecuta una instrucción del contador de alta velocidad o de salida de pulsos, tanto la bandera de control de contador de alta velocidad (por ejemplo sys_bIsHscChannel0ControlActive) como la bandera de control de la salida de pulsos (por ejemplo sys_bIsPulseChannel0Active) para el canal especificado, están a TRUE. No se puede ejecutar ninguna otra instrucción del contador de alta velocidad o de salida de pulsos mientras que está bandera esté a TRUE.
Cerca del valor mínimo o máximo del ciclo de trabajo se produce un retardo en la salida que puede hacer que el ciclo de trabajo esté fuera del valor especificado.
El ciclo de trabajo se puede modificar en cada ciclo de scan. El cambio se hace efectivo con la siguiente salida de pulsos. La configuración de la frecuencia solo se hace efectiva cuando ha comenzado la ejecución de la instrucción.
Se recomienda encarecidamente proporcionar la posibilidad de una parada forzada en cualquier programa de posicionamiento.
El estado de la bandera de control del contador de alta velocidad o de la bandera de control de la salida de pulsos puede cambiar dentro del ciclo de scan.
Para utilizar el FP0R en modo compatibilidad con el FP0, se puede descargar un programa del FP0 al FP0R.
Canal y número de salida de pulsos
Canal N° | Salida de pulsos | Método salida de pulsos |
0 |
Y0 |
Pulso |
Y2 |
Sentido | |
1 |
Y1 |
Pulso |
Y3 |
Sentido |
Variables del sistema y áreas de memoria utilizadas. Los valores entre paréntesis son válidos para FP0 T32.
Descripción |
Variable del Sistema |
|
---|---|---|
Salida de pulsos: bandera de control para el canal |
0 |
sys_bIsPulseChannel0Active |
1 |
sys_bIsPulseChannel1Active |
|
Salida de pulsos: valor actual para el canal |
0 |
sys_diPulseChannel0ElapsedValue |
1 |
sys_diPulseChannel1ElapsedValue |
|
Salida de pulsos: valor de preselección para el canal |
0 |
sys_diPulseChannel0TargetValue |
1 |
sys_diPulseChannel1TargetValue |
|
Código de control del contador de alta velocidad o salida de pulsos |
sys_wHscOrPulseControlCode |
En la Lista de Variables Globales, se definen las variables a las que pueden acceder todas las POUs del proyecto.
La DUT F170_PulseOutput_PWM_DUT está predefinida en la librería FP Library.
Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU. Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.
VAR_EXTERNAL
X6_bEnablePWM: BOOL:=FALSE;
END_VAR
VAR
dutPWMControl: F170_PulseOutput_PWM_DUT;
(*iFrequencyValue := 1: f=2.0Hz, T=502.5ms;*)
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_F,E_MOVE!,Instance,15,1,21,5,,?DEN?D?AENO?C);
B(B_VARIN,,iPulseWidthModulationDuty,13,3,15,5,);
B(B_VAROUT,,dutPWMControl.iPulseWidthModulationDuty,21,3,23,5,);
B(B_CONTACT,,X6_bEnablePWM,4,2,6,4,);
L(6,3,15,3);
L(1,3,4,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,X6_bEnablePWM,4,2,6,4,);
B(B_F,F170_PulseOutput_PWM!,Instance,13,1,26,6,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutPWMControl,11,3,13,5,);
B(B_VARIN,,2,11,4,13,6,);
L(1,3,4,3);
L(6,3,13,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (X6_bEnablePWM) then
dutPWMControl.iPulseWidthModulationDuty:=iPulseWidthModulationDuty;
END_IF;
IF (X6_bEnablePWM) then
F170_PulseOutput_PWM(s_dutDataTable := dutPWMControl,
n_iPulseOutputChannel := 2);
END_IF;