PWM de borda simples e dupla

Tutorial LPC1768 PWM | Como usar o PWM no LPC1768?

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Neste tutorial, mostrarei como configurar e usar o PWM no LPC1768 MCU. O PWM é uma das técnicas mais usadas para controlar a quantidade de energia fornecida através de um pino. A técnica PWM permite controlar o brilho de um LED, a velocidade de um motor, a posição de um servo, etc. Usando este tutorial LPC1768 PWM, você pode implementar um aplicativo simples de controle de brilho de LED.

NOTA IMPORTANTE: Já mencionei isso nos tutoriais anteriores, mas vou repeti-lo em todos os tutoriais do LPC1768. Faça o download da folha de dados e do manual do usuário do LPC1768 MCU no site oficial do NXP. Não posso explicar / discutir cada tópico em detalhes. Você deve procurar o tópico da discussão nesses documentos e coletar informações adicionais.

Introdução

PWM é a abreviação de Modulação por Largura de Pulso. É uma maneira mais simples de produzir valores analógicos usando o sistema digital. a largura do pulso, isto é, a duração do pulso permanece ligada por um período varia. Por isso, é chamado de modulação por largura de pulso.

O período de um ciclo PWM é a soma da duração em que o pulso é ALTO e a duração em que o pulso é em BAIXO. Isso geralmente é representado por TEM e TFORA. Então, Período de PWM = TEM + TFORA.

Outro parâmetro importante de um sinal PWM é o seu ciclo de trabalho. Ciclo de serviço é a razão da duração pela qual o pulso é ALTO e o período total do sinal PWM.

Ciclo de trabalho = TEM / (TEM + TFORA)

O ciclo de serviço também pode ser representado como porcentagem.

% Do ciclo de trabalho = TEM * 100 / (TEM + TFORA)

Quando o tempo LIGADO e DESLIGADO do pulso são iguais, o ciclo de serviço é de 50% e a forma do pulso é uma onda quadrada perfeita.

Uma classificação importante dos sinais PWM é:

  • PWM de borda única
  • PWM de borda dupla

No Single Edge PWM, o Pulse pode estar no início do período no final do período. Se o pulso estiver no início do período, ele será chamado de PWM alinhado à esquerda ou PWM de borda à direita. Se o pulso estiver no final do período, ele será chamado de PWM alinhado à direita ou PWM da borda principal.

PWM de borda simples e dupla

Chegando ao Double Edge PWM, ambas as bordas podem ser moduladas e, portanto, o pulso é colocado em qualquer lugar do período. O Double Edge PWM é geralmente usado em aplicações de controle de motores multifásicos.

Uma das aplicações importantes do PWM é a entrega de energia. O ciclo de trabalho do PWM determina a potência média de um sinal PWM e é calculado usando a seguinte fórmula.

VAVG = Ciclo de trabalho * VH

Onde VH é o nível máximo de tensão do sinal PWM.

PWM em LPC1768

O periférico PWM no LPC1768 MCU é semelhante ao de um periférico de timer, pois possui um contador de temporizadores, registros de correspondência de pré-escaladores e suas funções são exatamente as mesmas que discutimos no tutorial sobre o temporizador LPC1768.

Existem 6 saídas PWM chamadas PWM1.1, PWM1.2,… PWM1.6. Usando esses seis canais PWM, você pode gerar 6 sinais PWM de borda única ou 3 sinais PWM de borda dupla.

Há um total de sete registros de partidas. O Registro de correspondência 0, ou seja, PWM1MR0 é usado para definir a taxa de ciclo PWM, enquanto os registros de correspondência restantes, ou seja, PWM1MR1 – PWM1MR6, correspondem aos respectivos canais de saída PWM. PWM1.1 corresponde a PWM1MR1, PWM1.2 corresponde a PWM1MR2, etc.

Pinos LPC1768 PWM

A tabela a seguir mostra os pinos associados ao PWM no LPC1768 MCU.

PWM1.1

P1.18 / P2.0

PWM1.2

P1.20 / P2.1 / P3.25

PWM1.3

P1.21 / P2.2 / P3.26
PWM1.4

P1.23 / P2.3

PWM1.5

P1.24 / P2.4
PWM1.6

P1.26 / P2.5

Registros associados ao LPC1768 PWM

Existem totalmente 21 registros associados ao PWM no LPC1768. Se você der uma olhada na lista de Registros PWM, encontrará muitos nomes semelhantes aos do Periférico do timer. Vamos agora dar uma olhada em alguns dos registros importantes do bloco PWM.

PWM1TCR – Registro de controle do temporizador PWM: Usado para controlar as operações do contador de timer PWM.

Bit 0

Ativar contadorQuando 1, o contador de temporizador PWM e o contador de pré-escala estão ativados.

Bit 1

Reinicialização do contador

Quando 1, o contador de temporizador PWM e o contador de pré-escala são redefinidos na próxima borda positiva do PCLK.

Bit 3Ativar PWM

Quando 1, o modo PWM está ativado.

PWM1PR – Registro pré-escala: É usado para controlar a resolução das saídas PWM. O TC é incrementado em todos os ciclos PR + 1 de PCLK.

PWM1MR0 – PWM1MR6 – Registros de correspondência: Esses registros de correspondência, como mencionado acima, contêm os valores para a largura de pulso (número de marchas PWM1TC).

PWM1MCR – Registro de controle de correspondência PWM: Usado para controlar a operação a ser executada quando um dos registros de correspondência corresponde ao TC. Cada registro de partida possui 3 bits de controle. Portanto, um total de 21 bits no registro PWM1MCR é usado para controlar as operações para todos os sete registros de correspondência.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Vamos ver um desses conjuntos de bits para PWM1MR0 e todos os outros registradores podem ser entendidos com base nisso.

Bit 0

PWMMR0ISe esse bit estiver definido como 1, será gerada uma interrupção quando PWMMR0 corresponder ao PWMTC.
Bit 1PWMMR0R

Se esse bit estiver definido como 1, o PWMTC será redefinido quando PWMMR0 corresponder ao PWMTC.

Bit 2

PWMMR0S

Se esse bit estiver definido como 1, o PWMTC e o PWMPC serão interrompidos e o PWMTCR[0] é definido como 0, quando PWMMR0 corresponde a PWMTC.

Da mesma forma, Bits [5:3] para PWMMR1, Bits [8:6] para PWMMR2 etc.

PWMLER – Registro de ativação de trava do PWM: Usado para controlar a atualização dos registros de correspondência do PWM. Quando um valor é gravado no Match Register, ele não entra em ação imediatamente. Somente quando o bit “Latch” correspondente no PWMLER Register for definido, o valor no Match Register será efetivo.

O bit 0 de PWMLER é usado para ativar a trava de correspondência 0 do PWM, o bit 1 de PWMLER é usado para ativar a trava de correspondência 1 do PWM e assim por diante até o bit 6 do registro de correspondência 6.

PWM1PCR – Registro de controle PWM: Usado para ativar um canal PWM e também selecionar o tipo de PWM, ou seja, um PWM de borda única ou um PWM de borda dupla.

O bit 2 é chamado de PWMSEL2 e, quando esse bit 0, a saída do PWM2 é de borda única. Quando esse bit é 1, a saída PWM2 é de dois gumes. Da mesma forma, Bit 3 para PWM3, Bit 4 para PWM4 até Bit 6 para PWM6.

Os bits 9 no PWM1PCR são chamados PWMENA1 e, quando esse bit é 1, a saída PWM1 é ativada, caso contrário, desativada. Da mesma forma, o Bit 10 para saída PWM2, o Bit 11 para saída PWM3 e assim por diante até o Bit 14 para saída PWM6.

Inicializar bloco PWM

Se você observar os registros do PWM, poderá encontrar muitas semelhanças com as de um Timer. E a inicialização também é muito semelhante. Além disso, algumas inicializações relacionadas ao PWM, como a seleção de pinos do PWM, a ativação do canal do PWM, a seleção do tipo de PWM etc., devem ser realizadas.

Antes disso, vamos fazer alguns cálculos relacionados ao PWM PR.

Se PR for o valor de pré-escala do PWM e PCLK for o relógio periférico do PWM, a resolução do PWM poderá ser calculada usando a seguinte fórmula.

PWM na LPC1768 Imagem 1

Reorganizando a equação acima, podemos obter o valor de PR como:

PR = (PWMRES * PCLK) – 1

Para PCLK de 25 MHz e PWMRES de 1 mili segundo, o valor do PR é

PR = (25 * 106 * 1 * 10-3) – 1 = 24999.

Se PWMRES é 1 micro segundo, depois PR = 24.

Exemplo

Vamos usar o valor PR acima e escrever um programa para aplicação de escurecimento por LED.

#incluir
#define PWMPRESCALE (25-1)
#define TIMPRESCALE (25000-1)

void PWM_Init (void);
void PulseWidth_Update (não assinado int pulseWidth);
atrasos nulos (não assinados em milissegundos);
void Timer0_Init (void);

int main (vazio)
{
Timer0_Init ();
PWM_Init ();

int count = 0;

enquanto (1)
{
while (contagem <1000)
{
contagem + = 10;
PulseWidth_Update (contagem);
atrasos (1);
}
while (contagem> 0)
{
contagem = 10;
PulseWidth_Update (contagem);
atrasos (1);
}

}
retornar 0;
}

void PWM_Init (void)
{
LPC_PINCON-> PINSEL3 | = (1 << 5);
LPC_PWM1-> PCR = 0x0;
LPC_PWM1-> PR = PWMPRESCALE;
LPC_PWM1-> MR0 = 1000;
LPC_PWM1-> MR1 = 0;
LPC_PWM1-> MCR = (1 << 1);
LPC_PWM1-> LER = (1 << 1) | (1 << 0);
LPC_PWM1-> PCR = (1 << 9);
LPC_PWM1-> TCR = (1 << 1);

LPC_PWM1-> TCR = (1 << 0) | (1 << 3);

}

void PulseWidth_Update (não assinado int pulseWidth)
{
LPC_PWM1-> MR1 = largura de pulso;
LPC_PWM1-> LER = (1 << 1);
}

atrasos nulos (não assinados em milissegundos)
{
LPC_TIM0-> TCR = 0x02;
LPC_TIM0-> TCR = 0x01;

while (LPC_TIM0-> TC

LPC_TIM0-> TCR = 0x00;
}

void Timer0_Init (void)
{
LPC_TIM0-> CTCR = 0x0;
LPC_TIM0-> PR = TIMPRESCALE;

LPC_TIM0-> TCR = 0x02;
}

Conclusão

Um tutorial simples sobre o uso do PWM no LPC1768 MCU. Usando este tutorial PWM do LPC1768, você pode configurar o bloco PWM para gerar sinais PWM para controle de LED, controle de motor, etc.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Leia Também  MOSFET Gate Driver Switch IPD para ECUs automotivos