cómo generar una onda de escalera usando un microcontrolador avr

-5

Estoy tratando de construir una ola de escalera utilizando atmega16.i he generado una señal pwm que también se puede controlar el ancho automáticamente. He usado un filtro de paso bajo con el pin de salida oc0 del microcontrolador. Como resultado, se observa un cambio en la forma de onda .el código y la curva de respuesta están abajo; código avr:

MI código:

uint16_t second = 0 volátil;

int intigno no firmado volátil = 0;

int intigno no firmado volátil = 0;

void init_timer1 (void);

void init_timer0 (void);

int main (void)

{

DDRB = 0xFF;

init_timer1 ();

sei();

init_timer0 ();

mientras (1) {

val = minuto * 36.4;

OCR0=val;


 }
 }

void init_timer0 (void)

{

TCCR0 |=(1<<CS00) | (1<<CS02) | (1<<WGM00) | 1<<WGM01 | 1<<COM01;

TCCR0 &=(~1<<CS01) | (~1<<COM00);


  }

void init_timer1 (void)

   {  TCCR1B |=(1<<CS12);
      TCCR1B |=(1<<WGM12);
      TCNT1=0;
      OCR1A=430; 
     TIMSK |=(1<<OCIE1A);     

}

ISR (TIMER1_COMPA_vect)    {

 second++;



if(second<7)
{ minute=second;
       }
else
 { minute--;

  }
  if(second==12)
  {
    second=0;}
     }

Finaliza el código,

Lo he intentado de manera diferente, pero no he obtenido la salida deseada, por favor ayude a cualquiera;

diagrama de circuito:

larespuestadesalidasemuestraenelosciloscopiodeProteusacontinuación:

perocuandoR=15ohm   C=4.7uluegolasalidaacontinuación: yaqueelvalorderegistroOCR0seestableceenminutosdesdeelcódigo "val = minuto * 36.4;    OCR0 = val; "

así que el ancho de pwm se está cambiando pero necesito una onda de escalera,

    
pregunta Muzahid Karim

1 respuesta

1

Como has aprendido, usar PWM en un Mega para crear una escalera es problemático. Tiene todo tipo de problemas de filtrado debido a que la frecuencia predeterminada es ~ 1KHz. Como Bimpelrekkie señala en los comentarios, esto solo está diseñado para cosas de muy baja frecuencia como el nivel en un LED. Puede jugar con el preescalado para cambiar la frecuencia PWM, pero no por grandes cantidades como órdenes de magnitud. Y todavía tendrá problemas de filtrado de paso bajo. La razón por la que PWM parece funcionar para los seres humanos es nuestra persistencia de la visión (para niveles de LED) o el filtrado natural que se produce debido a la inercia térmica o de masa (lámpara incandescente, motor eléctrico).

Hay dos soluciones prácticas que funcionarán.

  1. Use un convertidor digital a analógico disponible. Puede obtener los realmente simples que cuentan con interfaces I2C o SPI. Hay muchos ejemplos de internet de esto.
  2. Si eres aventurero, puedes crear un DAC ersatz con una escalera de resistencia . Esto se ve a continuación y el dibujo es que es muy muy rápido, pero necesitas buenas resistencias (1% o más). Sin embargo, solo puede crear el número de pasos que necesita. Por lo tanto, es posible que solo tenga 4 bits de resolución que conduzcan a 16 niveles de salida. Es posible que aún necesite un poco de filtrado, pero en este caso es la aplicación correcta y una simple combinación RC o LC funcionará bien. Mejores detalles en Analogue Devices .

2½. Plano general: ¿está realmente seguro de que la salida de su alcance muestra la forma de onda verdadera? Su imagen se ve como software en una PC. No es un alcance de Keysight. Algunos ámbitos de estilo de PC tienen una respuesta de frecuencia pobre y un síntoma de esto es mostrar los bordes de las ondas rectangulares como curvey y / o slopey, ya que todo tiende a una onda sinusoidal. El uso de la función de audio de la PC a bordo es notorio para esto.

    
respondido por el Paul Uszak

Lea otras preguntas en las etiquetas