¿Cómo aumentar la resolución de una onda pwm de 20 khz (Atmega 328p)?

0
#define F_CPU 16000000UL 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

double dutycycle = 0 ;

#include <avr/io.h>

int main(void)
{
DDRB = 0xFF;
TCCR1A |= _BV(COM1A1) | _BV(COM1B1);
TCCR1B |= _BV(WGM13) | _BV(CS11);//PRESCALER=64 MODE 14(FAST PWM)


ICR1=50;

OCR1A = 25;

while (1)
{       
}
}

Con este código, he podido generar una onda PWM de 20 khz, pero la resolución es muy baja, ¿hay alguna forma de aumentar la resolución de la onda?

    
pregunta mayanksagar

1 respuesta

2

Si quiere decir con "resolución" que necesita tener más de 8 bits, deberá usar su otro contador / temporizador (el ATmega328 tiene uno con 16 bits). Para obtener 12 bits de resolución, necesitarías hacer lo siguiente:

  • utilizar TC1
  • Establezca un preescalador inferior para permitir un conteo más rápido, aproximadamente un factor de 8 debería estar bien
  • Establece un valor superior de, por ejemplo, 4096 (= 2 ^ 12 bit), este es el valor donde el contador se reiniciará
  • Establezca un valor de umbral / OCR de un valor entre 0 y 4096, este es su valor de salida
respondido por el Tom L.

Lea otras preguntas en las etiquetas