Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Energie_M_xxx, bug corrigé > v12.03
#3
Merci André pour votre réactivité Smile

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 );
Répondre


Messages dans ce sujet
RE: Energie_M_Soutiree : seuil de consommation ? - par Youpimatin - 16-10-2024, 03:13 PM
RE: Energie_M_xxx, bug corrigé > v12.03 - par XabiX - 18-10-2024, 10:23 AM
RE: Energie_M_xxx, bug corrigé > v12.03 - par XabiX - 18-10-2024, 04:11 PM
RE: Energie_M_xxx, bug corrigé > v12.03 - par XabiX - 21-10-2024, 11:45 AM

Atteindre :


Utilisateur(s) parcourant ce sujet : 4 visiteur(s)