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
CYCdeve ser de no mínimo 100 ms.Alterar
CYCapenas 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
INsó se refletem emOUTno 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;
(* ... *)