Estoy tratando de encontrar el RMS de una onda sinusoidal de entrada utilizando el microcontrolador ARM 7 LPC 2119. Conozco la teoría detrás de encontrar el RMS de tal forma de onda, pero estoy teniendo problemas para implementar esto en el código, especialmente en el muestreo en ordenadas intermedias igualmente espaciadas. También acabo de usar las interrupciones de temporizador para encontrar la frecuencia de una onda sinusoidal usando entradas de captura, por lo que soy consciente de las funcionalidades básicas en términos de programación de un microcontrolador ARM 7 LPC 2119.
Estoyprobandoestafuncionalidadutilizandounaondasinusoidaldepicoapicode3Vconunafrecuenciade50Hz.Hedesplazadolaformadeondahaciaarribaen1,5VparaevitarqueseintroduzcanvaloresnegativosenlospinesADCdelmicrocontrolador.
Paramuestrearaintervalosigualmenteespaciados,estoyusandointerrupcionesdetemporizador.Deunamaneramuysimilaraesteejemplo
Antes de usar la siguiente fórmula:
Necesito asegurarme de que estoy tomando muestras a intervalos dados, y para probar esto, he configurado el reloj del temporizador para que proporcione un retraso de 20 ms antes de ingresar a la función ADC al hacerlo:
T0CTCR = 0x0; //Set Timer Mode
T0PR = 60000-1; //Increment T0TC at every 60000 clock cycles
//60000 clock cycles @60Mhz = 1 mS
T0MR0 = 21-1; //Zero Indexed Count-hence subtracting 1
T0MCR = (1<<0) | (1<<1);//Set bit0 & bit1 to Interrupt & Reset TC on MR0
Una vez hecho esto, estoy habilitando la interrupción del temporizador:
VICVectAddr0 = (unsigned )timer0ISR; //Pointer Interrupt Function (ISR)
VICVectCntl0 = (1<<5) | 4; //(bit 5 = 1)->to enable Vectored IRQ slot
VICIntEnable = (1<<4); // Enable timer0 interrupt
El código anterior da un retraso de 20 ms. Con una onda sinusoidal a 50 Hz, esto debería dar el mismo valor en cada lectura, ya que el período de dicha onda sinusoidal es también de 20 ms. Sin embargo, este no es el caso y no puedo ver ningún patrón visible en mis resultados.
La función ADC que estoy usando funciona bien con voltajes de CC y también puedo confirmar que el temporizador está demorando 20 ms antes de ingresar a la función ADC.
¿Me estoy perdiendo algo obvio aquí o podría haber otras variables que no estoy considerando? Cualquier idea sería apreciada.