Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Multisinus le paradoxe
#5
(27-09-2025, 04:50 PM)Ludovic35 a écrit : L'idée de raccourcir la période est intéressante.
Est-ce que le Tmax à 50 dégrade l'erreur sur certaines valeurs de % (il était < 0.4% avant)?
Le fait d'avoir plus de transitions, cela dégrade-t-il le résultat? (les SSR ayant un zéro cross, l'erreur au démarrage va arriver plus souvent; + un effet de glissement si ce n'est pas synchrone)
l idée etait surtout de repartir les ON
oui le TMAX degrade l'erreur , mais le regulateur recupere rapidement cette erreur... c est le paradoxe, l erreur est plus grande mais comme la boucle reagit plus vite, c est plus rapidement corrigé, donc l'erreur de façon globale à moins d'impact. 
L'erreur de demarrage arrive sans doute plus souvent mais encire une fois sur deux ou 3 trames de 50ms cela ne se voit pas sur les courbes, et dans la pratique on ne reste pas longtemps au meme pourcentage, donc le glissement possible est naturellement effacé. Je n'ai pas encore fait toutes simulations pour vous montrer les différents scenarii possible , mais mes courbes de puissance parlent d elles mêmes. J'ai eu la flemme de faire le test en 3 étapes
- Etape 1 :  on ne change pas la période, mais on repartit les ON
- Etape 2 : On change la période sans répartir
- ETape 3 : On réduit la périude et on réparti.

Pour les habitués de l Arduino , les modifs de codes sont les suivantes ( difficile de vous donner les num de lignes car je suis parti depuis ma propre version derivée de la 15.08 d André

pour la période ca si situe autour des lignes 730  
Code :
//lbe VALEUR D ORIGINE for (int I = 0; I < 101; I++) {
  for (int I = 0; I < 101; I++) {
    tabPulseSinusTotal[I] = 3;
    tabPulseSinusOn[I] = 0;
    target = float(I) / 100.0;
    //lbe VALEUR D ORIGINE for (int T = 20; T < 101; T++) {
    for (int T = 3; T < 51; T++) { //Réduit la précision , augmente la réactivité
      for (int N = 1; N <= T; N++) {
        if (T % 2 == 1 || N % 2 == 0) {  // Valeurs impaires du total ou pulses pairs pour éviter courant continu
          vrai = float(N) / float(T);
          erreur = abs(vrai - target);
          if (erreur < 0.003) {
            tabPulseSinusTotal[I] = T;
            tabPulseSinusOn[I] = N;
            // lbe valeur origine N = 101;
            // lbe valeur origineT = 101;
            N = 51;
            T = 51;
          }
        }
      }
    }
  }


pour la repartiton c est autour des lignes 640 
Code :
      default:              // Multi Sinus ou Train de sinus
        //if (Gpio[i] > 0) {  //Gpio valide
        //  if (PulseComptage[i] < PulseOn[i]) {
        //    digitalWrite(Gpio[i], OutOn[i]);
        //  } else {
        //    digitalWrite(Gpio[i], OutOff[i]);  //Stop
        //  }
        //  PulseComptage[i] = PulseComptage[i] + 1;
        //  if (PulseComptage[i] >= PulseTotal[i]) {
        //    PulseComptage[i] = 0;
        //  }
        //}
        // lbe REPARTITION DES ON
        if (Gpio[i] > 0 && PulseTotal[i] > 0) {
  // Répartition uniforme des ON dans la trame complète
  // Exemple : PulseOn = 4, PulseTotal = 10 -> ON sur les index 0,2,5,7
  int on_count = PulseOn[i];
  int total = PulseTotal[i];
  int pos = PulseComptage[i];

  // Répartition uniforme avec espacement : version simple sans tableau
  if ((pos * on_count) % total < on_count) {
    digitalWrite(Gpio[i], OutOn[i]);
  } else {
    digitalWrite(Gpio[i], OutOff[i]);  //Stop
  }

  PulseComptage[i]++;
  if (PulseComptage[i] >= total) {
    PulseComptage[i] = 0;
  }
Répondre


Messages dans ce sujet
Multisinus le paradoxe - par Lolo69 - 27-09-2025, 02:44 PM
RE: Multisinus le paradoxe - par grostoto - 27-09-2025, 03:24 PM
RE: Multisinus le paradoxe - par Lolo69 - 27-09-2025, 04:22 PM
RE: Multisinus le paradoxe - par Ludovic35 - 27-09-2025, 04:50 PM
RE: Multisinus le paradoxe - par Lolo69 - 27-09-2025, 05:46 PM

Atteindre :


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