16-10-2024, 03:13 PM
(Modification du message : 16-10-2024, 03:20 PM par Youpimatin.)
Merci André pour votre réactivité
Quand je pourrai tester à la maison, je regarderai s'il ne faut pas faire de même avec tous les autres calculs en flottant :
for (int i = 0; i < 100; i++) {
voltM[i] = (19. * voltM[i] + float(volt[i])) / 20.; //Mean value. First Order Filter. Short Integration
V = kV * voltM[i];
Uef2 += sq(V);
ampM[i] = (19. * ampM[i] + float(amp[i])) / 20.; //Mean value. First Order Filter
I = kI * ampM[i];
Ief2 += sq(I);
PWcal += V * I;
}
Uef2 = Uef2 / 100.; //square of voltage
Tension_M = sqrt(Uef2); //RMS voltage
Ief2 = Ief2 / 100.; //square of current
Intensite_M = sqrt(Ief2); // RMS current
PWcal = PfloatMax(PWcal / 100.);
Dans un but d'optimisation, il est souvent bon de troquer les divisions par des multiplications quand c'est possible (si le compilateur Arduino n'optimise pas déjà de lui-même) :
for (int i = 0; i < 100; i++) {
voltM[i] = (19. * voltM[i] + float(volt[i])) * .05; //Mean value. First Order Filter. Short Integration
V = kV * voltM[i];
Uef2 += sq(V);
ampM[i] = (19. * ampM[i] + float(amp[i])) * .05 ; //Mean value. First Order Filter
I = kI * ampM[i];
Ief2 += sq(I);
PWcal += V * I;
}
Uef2 = Uef2 * .01; //square of voltage
Tension_M = sqrt(Uef2); //RMS voltage
Ief2 = Ief2 * .01 ; //square of current
Intensite_M = sqrt(Ief2); // RMS current
PWcal = PfloatMax(PWcal * .01 );
Quand je pourrai tester à la maison, je regarderai s'il ne faut pas faire de même avec tous les autres calculs en flottant :
for (int i = 0; i < 100; i++) {
voltM[i] = (19. * voltM[i] + float(volt[i])) / 20.; //Mean value. First Order Filter. Short Integration
V = kV * voltM[i];
Uef2 += sq(V);
ampM[i] = (19. * ampM[i] + float(amp[i])) / 20.; //Mean value. First Order Filter
I = kI * ampM[i];
Ief2 += sq(I);
PWcal += V * I;
}
Uef2 = Uef2 / 100.; //square of voltage
Tension_M = sqrt(Uef2); //RMS voltage
Ief2 = Ief2 / 100.; //square of current
Intensite_M = sqrt(Ief2); // RMS current
PWcal = PfloatMax(PWcal / 100.);
Dans un but d'optimisation, il est souvent bon de troquer les divisions par des multiplications quand c'est possible (si le compilateur Arduino n'optimise pas déjà de lui-même) :
for (int i = 0; i < 100; i++) {
voltM[i] = (19. * voltM[i] + float(volt[i])) * .05; //Mean value. First Order Filter. Short Integration
V = kV * voltM[i];
Uef2 += sq(V);
ampM[i] = (19. * ampM[i] + float(amp[i])) * .05 ; //Mean value. First Order Filter
I = kI * ampM[i];
Ief2 += sq(I);
PWcal += V * I;
}
Uef2 = Uef2 * .01; //square of voltage
Tension_M = sqrt(Uef2); //RMS voltage
Ief2 = Ief2 * .01 ; //square of current
Intensite_M = sqrt(Ief2); // RMS current
PWcal = PfloatMax(PWcal * .01 );