Paso 5: Rutina de medición de Arduino
- Durante 5 segundos
- Se toma una muestra de la ADC
- Componente de filtro a la DC del circuito divisor potencial y ruido utilizando un filtro Digital de banda
- Calcular el valor cuadrático medio (MS) de la corriente (es decir, cuadrado los valores y obtener el funcionamiento promedio)
- Calcular el valor RMS del MS por Plaza-enraizamiento.
- Multiplicar por el voltaje RMS (230V en Irlanda / Reino Unido; 110V en los E.e.u.u.).
- Escala para permitir el aumento actual del transformador y el ADC.
Aquí está la sección de código relevante
voidloop() { // send the value of analog input 0: r2 = r1; r1 = r0; r0 = analogRead(A0); u2 = u1; u1 = u0; // 0.5Hz to 200Hz Band Pass Filter u0 = 0.2929*(r0-r2) + 1.411*u1 -0.4142*u2; v = u0; // Calculate Mean-Square Current (Amps) AMS = 0.99*AMS +0.01*v*v; // Calculate Root-Mean-Square (Amps) Arms = sqrt(AMS); // Convert to RMS Power: // Multipy by 230V (rms) // 30*5/1024 accounts for the gain of the Current Transformer and ADC Prms = 230*30*Arms*5/1024; delay(1);
El cálculo del filtro Digital probablemente merece una mención especial.
No es necesario entenderlo para hacer el proyecto pero tal vez encuentre interesante.
Está implementado en la siguiente línea de código:
u0 = 0.2929*(r0-r2) + 1.411 * u1-0.4142 * u2;
Es un filtro IIR porque opera sobre valores de entrada (pasado y presente) y sus propios valores de salida (pasado y presente). Arriba se muestra la respuesta de la BPF.
Su polo dominio z cero función de transferencia es:
0.2929 (z+1)(z-1)
=================
(z-0.9952) (z-0.4162)
Una técnica similar se utiliza para filtrar las lecturas actuales para obtener el valor cuadrático medio.
AMS = 0.99 * AMS + 0.01 * v * v;
Es simplemente un filtro de paso bajo para formar un promedio de largo plazo de su entrada (v ^ 2).