cómo medir la baja frecuencia (50Hz) con atmega32 con mayor precisión

0

Estoy tratando de medir la frecuencia de dos fuentes de CA con atmega32, ambas estarán alrededor de 50Hz. Ya construí el circuito de zerocross usando LM358, todo lo que tengo que hacer con mi atmega32 es usar el temporizador para leer la onda cuadrada. el pin no es cero, y detenga el temporizador cuando el voltaje llegue a 0, luego multiplique el resultado con 2. Tengo problemas (preguntas) sobre esto. Primero, no es realmente preciso, pero es realmente sensible. Siempre obtuve 52Hz en lugar de 50, pero puede detectar cambios de hasta 0.05Hz. ¿Hay una mejor manera de leer la baja frecuencia usando atmega32? En segundo lugar, tengo problemas para leer la frecuencia de las señales a la vez. ¿Alguna sugerencia?

int main(void)
{
  while(1)
{
   zerocrossingA(); 
   freA = frecalculationA();
   _delay_ms(20);
   zerocrossingB();
   freB = frecalculationB();
}

}
 void zerocrossingA(void)
{
  while(1)
{
      if ((PINA&(1<<7)) ==0 )
      {
            TCNT1=0;
            TCCR1B=0x01;
            break;
      }
      else
     {
            continue;
     }
}
while(1)
{
    if ((PINA&(1<<7)) !=0 )
    {
        TCCR1B=0x00;
        g1=TCNT1;
        break;
    }
    else
    {
        continue;
    }
}
}
 void zerocrossingB(void)
 {
    while(1)
 {
    if ((PINC&(1<<0)) ==0 )
    {
        TCNT1=0;
        TCCR1B=0x01;
        break;
    }
    else
    {
        continue;
    }
    }
     while(1)
    {
       if ((PINC&(1<<0)) !=0 )
    {
        TCCR1B=0x00;
        g2=TCNT1;
        break;
     }
    else
    {
        continue;
    }
    }
    }

    double frecalculationA()
   {
     k1=1000000/(g1);
     w1=k1/2;
     return w1;
   }

   double frecalculationB()
   {
     k2=1000000/(g2+1);
     w2=k2/2;
     return w2;
   }
    
pregunta qichao.f

1 respuesta

1

Lea AVR ref205 para conocer los métodos de contador / temporizador sincrónicos

  • use la derivada de una onda cuadrada de 50 Hz para detectar el borde para comenzar a contar usando hardware o software con Irq para iniciar un temporizador
  

El ejemplo de dV / dt de la onda cuadrada es un HPF de 10 kHz en una compuerta lógica limitada pero polarizada actual para obtener 1 pulso por ciclo. Para hacer un pulso ZCS, retrase la ruta de la onda cuadrada por T us luego XOR con una señal no demorada para obtener el pulso T us ZCS en ambas transiciones. Esto es el doble de la frecuencia.

  • la detección de bordes de ZCS puede depender del software IRQ o algunos medios para sincronizar el temporizador en los bordes.

Sin embargo

  • Resolución > = 50 / 0.05 = 1000 cuentas o más por ciclo, es decir, > 50kHz

Sugiero un reloj de referencia de mayor frecuencia y mido el ciclo completo debido al error de asimetría más probable de su onda cuadrada.

  • Por lo tanto, un método es Y la salida XOR con la señal lógica de 50 Hz para obtener un pulso estrecho por ciclo para el método de conteo de intervalos de tiempo.
  • Otra es simplemente usar cualquiera de los dos lados del reloj para medir los conteos de temporizadores de HF para la resolución en 10us, por ejemplo.

: verifique la precisión y sintonice según sea necesario.

    
respondido por el Tony EE rocketscientist

Lea otras preguntas en las etiquetas