Jag vill mäta en ström som går genom en AC motor så noggrant som möjligt och har valt att använda en current transductor som jag läser av med en MCU som har en 12bitars ADC.
Har gjort en RMS algoritm där jag först läser in 80 värden under en period till en array. Sedan kör jag följande RMS algoritm på den arrayen och får ut ett ganska bra värde.
Kod: Markera allt
long Calculate_rms_value( long *array , int numberOfSamples )
{
long tempValue = 0;
long tempMeanValue = 0;
int k;
for( k = 0; k < numberOfSamples; k++ ) // Get DC offset
{
tempMeanValue = tempMeanValue + array[k];
}
tempMeanValue = tempMeanValue/numberOfSamples;
for( k = 0; k < numberOfSamples; k++ )
{
tempValue = tempValue + ( ( array[k] - tempMeanValue ) * ( array[k] - tempMeanValue ) ) ;
}
return ( long ) sqrt( tempValue / numberOfSamples );
}
Min fråga är nu mur man på bästa sätt bestämmer hur lång en period är utifrån en array som innehåller en sinusvåg?
Det skulle antagligen vara ganska lätt att bar a leta efter två maxvärden och sedan köra en RMS beräkning däremellan. Men det lär inte bli rätt om man får in lite störningar på sinusvågen.