5 votos

Frecuencia de la onda de seno vs frecuencia PWM (AVR)

Estoy usando un AVR Mega 168 para generar una onda sinusoidal a través de la modulación de ancho de pulso. Mi objetivo es generar una onda sinusoidal con una frecuencia de aproximadamente 50 hz. Entiendo que la frecuencia PWM debe ser lo más rápido posible, para su más fácil para atenuar en el filtro.

Hasta ahora, mi uC se está ejecutando en 8MHz usando el oscilador RC interno (planeo mudarme a un cristal más tarde en tomar este paso una vez). Esto me proporciona un máx. PWM de frecuencia de base de 8M/256 (modo PWM rápido) = 31.25 kHz.

A mi las actualizaciones del programa el ciclo de trabajo siempre que timer0 se desborda es decir, cada 32uS (creo que... desde 1/31250 = 32uS). Mi pregunta ahora es, ¿cómo puedo 'control' de la frecuencia real de la onda sinusoidal? Fácilmente se puede frenar por prescaling pero que, obviamente, sería hacer la base freq. bastante baja.

He incluido mi código de abajo: uint8_t i=0;

int main(void)
{
     int ipwm;

     DDRD = 0xFF;

     TCCR0A = 0b10000011;
     TCCR0B = (1 << WGM12);

     TIMSK0 |= (1 << TOIE0);
     TIFR1 |= (1 << OCF0A);
     TCCR0B = (1 << CS10);
     TCNT0 = 0;

     OCR0A = 128;

     sei();

     for(;;)
     {

     }

     return 1;
}

 ISR(TIMER0_OVF_vect)
 {
    OCR0A=pgm_read_byte(&sinewave[i]); // update duty cycle
    i++;
 }

12voto

lillq Puntos 4161

El 31.25 kHz es 625x su 50Hz. Así que todo lo que tiene que hacer es construir un 625 entradas en el seno de la tabla de búsqueda, y en cada interrupción conjunto de su salida de comparar el valor de la siguiente entrada de la tabla. Si usted tiene un 32\$\mu\$s de interrupción tendrás pasó por encima de la tabla completa (=sine ciclo) cada 625 x 32\$\mu\$s = 20ms, así que va a ser su 50Hz.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X