Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
O QUE É PWM?
PWM STANDS PARA MODULAÇÃO DE LARGURA DE PULSO é uma técnica pela qual a largura do pulso é variada.
Para entender este conceito, considere claramente um pulso de clock ou qualquer sinal de onda quadrada, ele tem ciclo de trabalho de 50%, o que significa que o período de Ton e Toff é o mesmo. A duração total para a qual o sinal esteve alto e a duração para a qual o sinal esteve baixo é chamada de total período de tempo.
Para a imagem mostrada acima, esta onda tem um ciclo de trabalho de 50%
Ciclo de trabalho = (tempo ON / Tempo total) * 100
Tempo ON - tempo para o qual o sinal estava alto
Tempo DESLIGADO - tempo para o qual o sinal estava baixo. Tempo total - Período de tempo total do pulso (tempo LIGADO e DESLIGADO)
Etapa 1: Seleção do microcontrolador
Selecionando o microcontrolador apropriado para o projeto, esta é a parte essencial do projeto. Os sinais PWM podem ser gerados em microcontroladores com canais PWM (registros CCP). Para este projeto, estou planejando manter o pic16f877. você pode baixar o link da folha de dados é fornecido abaixo
Folha de dados do PIC16F877a clique aqui
O módulo CCP é responsável por produzir o sinal PWM. CCP1 e CCP2 são multiplexados com PORTC. PORTC é uma porta bidirecional de 8 bits. O registro de direção de dados correspondente é TRISC. Definir o bit TRISC (= 1) fará com que o pino PORTC correspondente seja uma entrada. Apagar um bit TRISC (= 0) tornará o pino PORTC correspondente uma saída.
TRISC = 0; // Limpar este bit tornará PORTC como saída
Etapa 2: CONFIGURAR MÓDULO CCP
CCP - CAPTURAR / COMPARAR / MÓDULOS PWM
Cada módulo de Captura / Comparar / PWM (CCP) contém um registro de 16 bits que pode operar como:
• Registro de captura de 16 bits
• Registro de comparação de 16 bits
• Registro de ciclo de trabalho mestre / escravo PWM
Configure o registro CCP1CON para o modo PWM
Descrição do Registro
CCPxCON Este registro é usado para configurar o módulo CCP para operação de Captura / Comparar / PWM.
CCPRxL Este registro contém os bits de 8 Msb do PWM, 2 bits inferiores farão parte do registro CCPxCON.
Contador de funcionamento livre TMR2 que será comparado com CCPR1L e PR2 para gerar a saída PWM.
Agora usarei o binário para representar os bits para configurar o registro CCP1CON.
consulte a imagem acima.
CCP1CON = 0b00001111;
Você também pode usar o formato hexadecimal
CCP1CON = 0x0F; // configurando o registro CCP1CON para o modo PWM
Etapa 3: Configurando o Módulo Timer2 (Registro TMR2)
Timer2 é um temporizador de 8 bits com um prescaler e um postscaler. Ele pode ser usado como a base de tempo PWM para o modo PWM do (s) módulo (s) CCP. O registro TMR2 é legível e gravável e é limpo em qualquer reinicialização do dispositivo.
O registro T2CON é mostrado
A pré-escala e a pós-escala ajustarão a frequência de saída da onda PWM gerada.
Frequência = frequência do relógio / (4 * prescaler * (PR2-TMR2) * Postcaler * contagem)
Onde Tout = 1 / frequência
T2CON = 0b00000100;
Isso irá gerar cristal de 2,5 KHz @ 1Mhz ou 100KHz @ 4MHz (praticamente há uma limitação para esta frequência PWM, consulte a folha de dados específica para obter mais detalhes)
representação hexadecimal
T2CON = 0x04; // habilita T2CON sem configuração de pré-escala e pós-escala
Etapa 4: Configurando PR2 (Registro de Período Timer2)
O módulo Timer2 possui um registro de período de 8 bits, PR2. O cronômetro2 aumenta de 00h até que corresponda a PR2 e, a seguir, é redefinido para 00h no próximo ciclo de incremento. PR2 é um registro legível e gravável. O registro PR2 é inicializado para FFh na reinicialização.
Definir uma faixa apropriada para PR2 permitirá o uso para alterar o ciclo de trabalho da onda PWM gerada
PR2 = 100; // Defina o tempo de ciclo para 100 para variar o ciclo de trabalho de 0-100
Para simplificar, estou usando PR2 = 100 fazendo CCPR1L = 80; O ciclo de trabalho de 80% pode ser alcançado.
Etapa 5: configurar o módulo CCPR1l
Como PR2 = 100, CCPR1l pode ser configurado em qualquer lugar entre 0-100 para obter o ciclo de trabalho desejado.
Etapa 6: Escreva o esboço em você MPLAB X IDE o código é fornecido abaixo
#incluir
void delay (int a) // função para gerar atraso {
para (int i = 0; i <a; i ++)
{
para (int j = 0; j <144; j ++);
}
}
void main ()
{TRISC = 0; // Limpar este bit tornará PORTC como saída.
CCP1CON = 0x0F; // configurando o registro CCP1CON para o modo PWM
T2CON = 0x04; // habilita T2CON sem configuração de pré-escala e pós-escala.
PR2 = 100; // Defina o tempo de ciclo para 100 para variar o ciclo de trabalho de 0-100
enquanto (1) {
CCPR1L = 75; // gerou 75% de atraso do ciclo de trabalho (1);
}
}
Também fiz uma pequena modificação no código para que a frequência da onda PWM gerada
Este é um código simulado em proteus e a onda PWM de saída é mostrada abaixo.
Obrigado