SPWM

Implementa um PWM em software: a partir de um tempo de ciclo (CYC) definido pelo usuário, controla o valor de uma saída booleana (OUT) variando o tempo ativo de 0 a 100% do ciclo especificado. É um bloco de função (mantém estado entre scans; requer instância).

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

Bloco de função

               SPWM
         +--------------+
BOOL ----|START      OUT|---- BOOL
         |              |
TIME ----|CYC     CYC_EV|---- BOOL
         |              |
REAL ----|IN            |
         +--------------+

A largura do pulso ativo de OUT é proporcional a IN (0 a 100%) dentro de cada tempo de ciclo CYC. A saída CYC_EV gera um pulso a cada término de ciclo do PWM.

Diagrama de tempo:

     !- - Tcyc - -|- - Tcyc- -|- - Tcyc - -|- - Tcyc - -|
     +------------+-----------+------------+------------+
     t0           t1          t2           t3           t4

     +---+        +-----+     +--------+   +------------+
OUT  |   |        |     |     |        |   |            |
   --+   +--------+     +-----+        +---+            +

     !    25%     !     50%   !    75%     !    100%    !

Dica

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

Nota

Como o tempo do PWM é dependente do ciclo de scan do programa de aplicação pode existir um erro máx. de 1 ciclo de scan no cálculo do pulso de saída. Para minimizar este erro, o tempo de ciclo (CYC) é limitado em no mínimo 100 ms.

A resolução da largura de pulso da saída é função do tempo de ciclo. Com o tempo de ciclo mínimo (100 ms) a saída possuirá resolução de aproximadamente 7 bits (~1 a 2% do sinal de entrada). Já com um tempo de ciclo de 1000 ms a resolução da saída será da ordem de 10 bits.

Importante

Alterações no valor do tempo de ciclo devem ser realizadas com o bloco inativo (START = FALSE). Se o valor for alterado com o bloco ativado não será processado o novo valor até que ocorra uma nova transição do sinal de START.

Alterações no valor da entrada IN só serão refletidas na saída OUT após o término do ciclo corrente.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

TRUE

—

Ativação do bloco.

CYC

IN

TIME

T#0ms

= 100 ms

Tempo de ciclo do PWM (mínimo 100 ms).

IN

IN

REAL

0.0

0 .. 100 (%)

Valor da largura do pulso de saída, em percentual do ciclo.

OUT

OUT

BOOL

FALSE

—

Valor da saída PWM do bloco.

CYC_EV

OUT

BOOL

FALSE

—

Gera um pulso a cada ciclo do PWM.

Pré-condições

  • O tempo de ciclo CYC deve ser de no mínimo 100 ms.

  • Alterar CYC apenas com o bloco inativo (START = FALSE).

Observações

  • A resolução da largura de pulso depende do tempo de ciclo (~7 bits em 100 ms, ~10 bits em 1000 ms).

  • Alterações em IN só se refletem em OUT no término do ciclo corrente.

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    inp_IN   : REAL := 15.0; (* Entrada do PWM *)
    pwm_inst : HILS.SPWM;    (* Instancia do bloco SPWM *)
END_VAR

(* Exemplo de ativação do bloco SPWM dentro da POU *)

(* ... *)
(* Ativação da instancia do bloco SPWM *)
pwm_inst(
    IN  := inp_IN,     // valor da largura do pulso do PWM
    CYC := T#1000ms    // Tempo de ciclo
    );
// Direciona a saida do PWM para a saída digital 0 do equipamento
DO00 := pwm_inst.OUT;
(* ... *)