PWM

Controla um canal PWM (modulação por largura de pulso) disponível no equipamento, gerando um sinal com frequência e ciclo de trabalho configuráveis. É um bloco de função (mantém estado entre scans; requer instância) e depende da disponibilidade de um canal PWM no hardware associado ao programa de aplicação.

Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função

Bloco de função

                  PWM
         +---------------------+
         |                     |
UINT ----|SLOT             FAIL|---- BOOL
         |                     |
UINT ----|CHANNEL     FAIL_CODE|---- INT
         |                     |
BOOL ----|RUN                  |
         |                     |
REAL ----|FREQ                 |
         |                     |
REAL ----|DUTY                 |
         |                     |
         +---------------------+

O bloco atua sobre o canal CHANNEL do módulo alocado no slot SLOT. A entrada RUN habilita a geração do sinal; quando inativa, a saída física é mantida desligada (nível zero). A frequência (FREQ) e o ciclo de trabalho (DUTY) são aplicados com resolução de 0,1 e são internamente limitados às respectivas faixas válidas.

Importante

A utilização deste bloco depende da disponibilidade do canal de PWM no equipamento associado ao programa de aplicação.

Nota

Se o valor do parâmetro FREQ ou o valor do parâmetro DUTY for ZERO, o PWM é mantido inativo, independentemente do estado da entrada RUN.

Dica

Para conhecer melhor o recurso e suas funcionalidades, acesse o vídeo tutorial: Trabalhando com Bloco de Função PWM.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

SLOT

IN

UINT

1

= 1

Número do slot do módulo que possui o canal PWM. O primeiro módulo de I/O ocupa o slot 1, o segundo o slot 2, e assim por diante (quantidade conforme o modelo do controlador).

CHANNEL

IN

UINT

0

= 0

Número do canal PWM no módulo associado. O primeiro canal é 0, o segundo 1, e assim por diante (quantidade conforme o módulo de I/O).

RUN

IN

BOOL

TRUE

—

Habilita o PWM se TRUE; mantém a saída inativa (nível zero) se FALSE.

FREQ

IN

REAL

0.0

0.0 .. 3200.0 Hz

Frequência de operação do PWM. Valores fora da faixa são limitados; a resolução é 0,1 Hz (frações são truncadas).

DUTY

IN

REAL

50.0

0.0 .. 100.0 %

Ciclo de trabalho (duty cycle) do PWM. Valores fora da faixa são limitados; a resolução é 0,1 % (frações são truncadas).

FAIL

OUT

BOOL

FALSE

—

Quando ativo, indica que o bloco detectou falha operacional ou de parâmetros; o código correspondente fica em FAIL_CODE.

FAIL_CODE

OUT

INT

0

—

Código da falha detectada. 0 indica bloco operacional; ver Códigos de retorno.

Códigos de retorno

FAIL_CODE reporta o código da falha. Use os identificadores com o namespace HILS (ex.: HILS.GL_INV_PAR). Códigos relevantes deste bloco:

Código

Identificador

Significado

0

SUCCESS

Bloco operacional, sem falhas.

5

GL_INV_PAR

Parâmetro inválido. Um valor especificado para FREQ ou DUTY foi limitado a um valor válido; o bloco permanece operacional.

Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.

Pré-condições

  • O equipamento deve possuir um módulo de I/O com canal PWM disponível no slot indicado.

Observações

  • Valores de FREQ menores que 0.0 são limitados em 0.0 e maiores que 3200.0 em 3200.0; qualquer valor menor que 0.1 Hz é considerado zero, mantendo a saída inativa.

  • Valores de DUTY menores que 0.0 são limitados em 0.0 e maiores que 100.0 em 100.0; valores menores que 0.1 % mantêm o PWM inativo, e 100 % mantém a saída constantemente ativa (frequência efetiva igual a zero).

  • Ao limitar um valor inválido de FREQ ou DUTY, o bloco continua operacional, mas retorna HILS.GL_INV_PAR em FAIL_CODE.

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    my_slot : UINT := 1; (* Nro do slot do canal PWM *)
    my_chan : UINT := 0; (* Nro do canal PWM a ser obtido *)
    my_freq : REAL;      (* Frequencia de operação do PWM em Hz *)
    my_duty : REAL;      (* Ciclo de trabalho (duty cycle) do PWM em % *)
    my_pwm  : HILS.PWM;  (* Instancia do bloco PWM *)
END_VAR

(* Note que o bloco possui o parâmetro RUN inicializado com TRUE. Portanto não
   é necessário especificar o mesmo na chamada do bloco, a menos que seja necessário
   controlar a habilitação da saída do PWM. *)

my_pwm(SLOT := my_slot, CHANNEL := my_chan, FREQ := my_freq, DUTY := my_duty);

IF (my_pwm.FAIL = TRUE) THEN
    (* trata condição de falha no bloco; o código está em my_pwm.FAIL_CODE *)
    (* ... *)
END_IF;