PIC18F14K50 con 8Mhz de cristal y 50Hz PWM

0

Estoy buscando generar ondas cuadradas entre 50Hz y 150Hz con un PIC18F14K50, que se ejecuta con un cristal externo de 8MHz (XT).

Aparte de leer un valor analógico para la frecuencia de un potenciómetro y mostrar el valor en una pantalla de 7 seg, el PIC no hace nada excepto la onda cuadrada.

Mis opciones son usar el módulo PWM o simplemente escribir código que alterne el pin relevante entre 0 y 1 . No me importa necesariamente hacer esto último, excepto que habrá una ligera interrupción cuando periódicamente (tal vez un par de veces por segundo) recoja el valor del potenciómetro del ADC.

Nunca he hecho PWM antes, así que lo busqué. Hay un lugar donde puede escribir la frecuencia de su MCU y su frecuencia deseada, y le dará el código XC8 correspondiente. Cuando probé esto, parece que 8MHz en realidad podría ser demasiado rápido, y no puedo producir una onda cuadrada de 50-150Hz con el módulo PWM. Mi única opción es bajar a 500 kHz o usar el método manual.

¿Esto es correcto? ¿Realmente no puedo producir una onda cuadrada de 50-150Hz con el módulo PWM si mi MCU funciona a 8MHz? ¿Hay alguna forma mejor de lograr esta onda cuadrada?

    
pregunta Ozzah

2 respuestas

2

Si realmente necesita operar con lentitud (por lo general, más rápido es mejor, al menos hasta algunos kHz para PWM), entonces tiene un par de opciones: use una frecuencia de reloj más lenta (mucho más baja, así que tal vez no sea deseable) pero con un reloj más lento significa menos consumo de energía). Tampoco le da una buena resolución en el período de PWM (porque normalmente a nadie le importa tanto, siempre que sea lo suficientemente rápido).

O puede usar la función de comparación con temporizador para proporcionar transiciones precisas en un microsegundo, ya que puede alternar el pin con la función de comparación de hardware; luego lo configura para la siguiente comparación (y, opcionalmente, alterna el pin de salida). Ese sería el enfoque preferido, en mi opinión.

Algunas de las partes de la serie 16F tienen un periférico oscilador controlado numéricamente ( NCO ), pero no creo que esté disponible en la serie 18F (podría estar mal).

    
respondido por el Spehro Pefhany
1

La respuesta de Spehro cubre los enfoques estándar. Pero es probable que la herramienta XC8 que mencionó sea correcta al decir que no puede producir una onda cuadrada de 50Hz directamente con el módulo de comparación de salida. Esto se debe al hecho de que los temporizadores 18F utilizados para el módulo de comparación de salida no pueden reducirse lo suficiente para ajustar sus valores de reinicio de período en un campo de 8 bits.

Timer2 parece tener un preescalador seleccionable y un escalador posterior (hasta 1:16). Esto significa que se pueden "disminuir" a 31.25 kHz (es decir, 8MHz / (16 * 16) = 31.25 kHz). Pero esa tasa aún es demasiado rápida para que el módulo de comparación de salida maneje el caso de 50Hz: el valor máximo de restablecimiento del período de 256 producirá una onda cuadrada de 122 Hz (es decir, 31.25 kHz / 256 = 122 Hz).

Si esto todavía es inaceptable, sugeriría usar el temporizador para activar una interrupción a una velocidad conveniente, digamos 100 kHz. Establezca una variable de contador según el número de pulsos de interrupción necesarios para lograr la frecuencia de salida deseada (será necesario que sea una variable de 16 bits). Luego decrementa ese contador en cada disparo de interrupción. Una vez que el contador llegue a 0, alterne el pin de salida y reinicie el contador. Esto es esencialmente lo que el módulo de comparación de salida está haciendo por usted. Básicamente, todo lo que está ganando al hacerlo usted mismo es la capacidad de usar más bits en su propio "Registro de reinicio del período" (la variable del contador).

    
respondido por el youtooth

Lea otras preguntas en las etiquetas