Necesito generar una señal PWM con el microcontrolador PIC18F2550 a cerca de 20kHz. Leí la hoja de datos, la encontré demasiado compleja y confusa, luego comencé a buscar un código de muestra en la red para finalmente ver esta herramienta PWM .
Lo usé con los parámetros \ $ F_ {OSC} \ $ = 20MHz y \ $ F_ {PWM} \ $ = 20kHz para generar estos dos códigos diferentes para los correspondientes dos porcentajes de ciclos de trabajo diferentes.
// Duty cycle = 0%
PR2 = 0b11111001 ;
T2CON = 0b00000100 ;
CCPR1L = 0b00000000 ;
CCP1CON = 0b00001100 ;
// Duty cycle = 100%
PR2 = 0b11111001 ;
T2CON = 0b00000100 ;
CCPR1L = 0b11111001 ;
CCP1CON = 0b00111100 ;
La hoja de datos me dice que los bits 4 y 5 del registro CCP1CON son los LSB del valor del "ciclo de trabajo PWM con", y sus MSB se almacenan en el registro CCPR1L, ¿no?
Eso hace que, para un ciclo de trabajo del 0%, la temporización del ciclo de trabajo PWM de 10 bits sea,
00000000 + 00 = 0x000
Y para el ciclo de trabajo del 100%,
11111001 + 11 = 0x3E7
Entonces, de acuerdo con esta herramienta, debo establecer los valores entre 0x000 y 0x3E7 en los registros PWM relevantes para que tengan relaciones de ciclo de trabajo entre 0% y 100%. En este punto me confundo y surgen las siguientes preguntas en mi mente:
- ¿Qué es este valor 0x3E7 ? ¿Cómo se calcula? ¿Cómo lo encontraría yo mismo si no hubiera tenido una herramienta en línea?
- ¿Cuál es la resolución de esta señal PWM (es decir, cuál es la diferencia de tiempo de la duración de dos ciclos de trabajo para dos valores secuenciales como 0x3E6 y 0x3E7)?
- ¿Por qué no puedo cargar valores más altos en el registro CCPR1L como todos (0xFF); eso haría 0x3FF para el valor total de la duración del ciclo de trabajo PWM. ¿Qué pasa si lo hago?
- La herramienta dice que, puedo usar la función PWM solo con una resolución de 9 bits con los parámetros de trabajo que especifiqué. Entonces, ¿por qué el número 0x3E7 es un número de 10 bits? ¿El "9 bits" proviene de un valor truncado de enteros de \ $ log_2 (0x3E7) \ $?
Esta fue una pregunta larga, pero me ayudaría enormemente si alguien me explicara los pasos generales y la lógica de la creación de señales PWM con microcontroladores PIC.
Gracias.