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 |
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 |
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
FREQmenores 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
DUTYmenores 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
FREQouDUTY, o bloco continua operacional, mas retornaHILS.GL_INV_PARemFAIL_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;