Generar onda PWM con microcontrolador PIC: 6 pasos
Generar onda PWM con microcontrolador PIC: 6 pasos
Anonim
Generar onda PWM con microcontrolador PIC
Generar onda PWM con microcontrolador PIC
Generar onda PWM con microcontrolador PIC
Generar onda PWM con microcontrolador PIC
Generar onda PWM con microcontrolador PIC
Generar onda PWM con microcontrolador PIC

¿QUÉ ES PWM?

PWM STANDS PARA MODULACIÓN DE ANCHO DE PULSO es una técnica mediante la cual se varía el ancho del pulso.

Para comprender este concepto, considere claramente un pulso de reloj o cualquier señal de onda cuadrada, tiene un ciclo de trabajo del 50%, lo que significa que el período de Ton y Toff es el mismo. La duración total durante la cual la señal fue alta y la duración durante la cual la señal fue baja se llama total. periodo de tiempo.

Para la imagen que se muestra arriba, esta onda tiene un ciclo de trabajo del 50%

Ciclo de trabajo = (tiempo ON / tiempo total) * 100

ON time - tiempo durante el cual la señal fue alta

Tiempo de APAGADO - tiempo para el que la señal fue baja Tiempo total -Período de tiempo total del pulso (tiempo de ENCENDIDO y APAGADO)

Paso 1: selección del microcontrolador

Selección de microcontrolador
Selección de microcontrolador

Seleccionar el microcontrolador apropiado para el proyecto, esta es la parte esencial del proyecto. Las señales PWM se pueden generar en microcontroladores con canales PWM (registros CCP). Para este proyecto, planeo seguir con pic16f877. puede descargar el enlace de la hoja de datos que se proporciona a continuación

PIC16F877a hoja de datos haga clic aquí

El módulo CCP es responsable de producir la señal PWM. CCP1 y CCP2 se multiplexan con PORTC. PORTC es un puerto bidireccional de 8 bits de ancho. El registro de dirección de datos correspondiente es TRISC. La configuración del bit TRISC (= 1) hará que se tome el pin PORTC correspondiente como entrada. Borrar un bit TRISC (= 0) hará que el pin PORTC correspondiente sea una salida.

TRISC = 0; // Borrar este bit hará que PORTC sea la salida

Paso 2: CONFIGURAR EL MÓDULO CCP

CONFIGURAR MÓDULO CCP
CONFIGURAR MÓDULO CCP
CONFIGURAR MÓDULO CCP
CONFIGURAR MÓDULO CCP

CCP - MÓDULOS DE CAPTURA / COMPARACIÓN / PWM

Cada módulo de captura / comparación / PWM (CCP) contiene un registro de 16 bits que puede funcionar como:

• Registro de captura de 16 bits

• Registro de comparación de 16 bits

• Registro de ciclo de trabajo maestro / esclavo PWM

Configure el registro CCP1CON en modo PWM

Descripción del registro

CCPxCON Este registro se utiliza para configurar el módulo CCP para la operación de captura / comparación / PWM.

CCPRxL Este registro contiene los bits de 8 Msb de PWM, los 2 bits inferiores serán parte del registro CCPxCON.

TMR2 Contador de funcionamiento libre que se comparará con CCPR1L y PR2 para generar la salida PWM.

Ahora usaré binario para representar los bits para configurar el registro CCP1CON.

consulte la imagen de arriba.

CCP1CON = 0b00001111;

También puede su formato hexadecimal

CCP1CON = 0x0F; // configurar el registro CCP1CON para el modo PWM

Paso 3: Configuración del módulo Timer2 (registro TMR2)

Configuración del módulo Timer2 (registro TMR2)
Configuración del módulo Timer2 (registro TMR2)

Timer2 es un temporizador de 8 bits con un preescalador y un posescalador. Se puede utilizar como base de tiempo PWM para el modo PWM de los módulos CCP. El registro TMR2 se puede leer y escribir y se borra en cualquier dispositivo Reset.

Se muestra el registro T2CON

La preescala y la posescala ajustarán la frecuencia de salida de la onda PWM generada.

Frecuencia = frecuencia de reloj / (4 * pre-escalador * (PR2-TMR2) * Post-escalador * recuento)

Donde Tout = 1 / frecuencia

T2CON = 0b00000100;

Esto generará un cristal de 2.5 KHz a 1Mhz o 100KHz a 4MHz (prácticamente hay una limitación para esta frecuencia PWM, consulte la hoja de datos particular para obtener más detalles)

representación hexadecimal

T2CON = 0x04; // habilita T2CON sin configuración de preescalador y posescala

Paso 4: Configuración de PR2 (registro de período de Timer2)

El módulo Timer2 tiene un registro de período de 8 bits, PR2. El temporizador2 se incrementa desde 00h hasta que coincide con PR2 y luego se restablece a 00h en el siguiente ciclo de incremento. PR2 es un registro que se puede leer y escribir. El registro PR2 se inicializa a FFh al reiniciar.

Establecer un rango apropiado para PR2 permitirá cambiar el ciclo de trabajo de la onda PWM generada

PR2 = 100; // Establezca el tiempo de ciclo en 100 para variar el ciclo de trabajo de 0 a 100

Para simplificar, estoy usando PR2 = 100 haciendo CCPR1L = 80; Se puede lograr un ciclo de trabajo del 80%.

Paso 5: configurar el módulo CCPR1l

Dado que PR2 = 100, CCPR1l se puede configurar en cualquier lugar entre 0-100 para obtener el ciclo de trabajo deseado.

Paso 6: Escriba el boceto en usted MPLAB X IDE el código se da a continuación

Escriba el boceto en usted MPLAB X IDE el código se da a continuación
Escriba el boceto en usted MPLAB X IDE el código se da a continuación

#incluir

void delay (int a) // función para generar delay {

para (int i = 0; i <a; i ++)

{

para (int j = 0; j <144; j ++);

}

}

vacío principal()

{TRISC = 0; // Borrar este bit hará que PORTC sea la salida.

CCP1CON = 0x0F; // configurar el registro CCP1CON para el modo PWM

T2CON = 0x04; // habilita T2CON sin configuración de preescalador y posescala.

PR2 = 100; // Establezca el tiempo de ciclo en 100 para variar el ciclo de trabajo de 0 a 100

while (1) {

CCPR1L = 75; // generó un retraso del ciclo de trabajo del 75% (1);

}

}

También hice una pequeña modificación al código para que la frecuencia de la onda PWM generada

Este código se simula en proteus y la onda PWM de salida se muestra a continuación. Para cargar esto en sus placas de desarrollo de imágenes, use #include con los bits de configuración adecuados.

Gracias