Comparer des entrées analogiques et soritir un signal pwm

Bonjour, je fais un projet sur l'équilibrage de deux batteries en série. Donc j'utilise un arduino afin de récupérer les tensions des deux batteries, les comparer et sortir un signal pwm de 100kHz afin de piloter les transistors en parallèle avec chaque batterie. En vrai, j'aimerai qu'il y ai une différence d'au moins 50mV entre les batteries avant d'équilibrer mais pour le test du code j'ai pris un écart de 0.5V. Voici mon code :

void setup()
{
  pinMode(3, OUTPUT);
  pinMode(A0, INPUT);
  pinMode(A5, INPUT);
}

void generer_pwm(float V2, float V1){
  TCCR2A = bit(COM2A1) | bit(COM2B1) | bit(WGM21) | bit(WGM20);
  TCCR2B = bit(WGM22) | bit(CS21);
  OCR2A = 20;
  float alpha;
  alpha = V1/(V1+V2);
  OCR2B = alpha*OCR2A;
}

void loop()
{
  float V_High;
  V_High = analogRead(A0)*(5.0/1023.0);
  float V_Low;
  V_Low = analogRead(A5)*(5.0*1023.0);
  float Vdiff = V_High - V_Low;
  while(1)
  {
    if(Vdiff > 0.5){
      generer_pwm(V_High,V_Low);
    }
    else if (Vdiff < -0.5){
      generer_pwm(V_Low, V_High);
    }
    else{
      analogWrite(3, 0);
    }
  }
}

Je l'ai testé en branchant deux alimentations aux entrées A0 et A5, mais je n'obtiens rien en sorti ou j'ai le signal pwm quand il y a une différence de 1.2V entre les deux tensions. J'aimerais savoir s'il y a une erreur dans mon code. Merci

Bonjour; j'aurai deux questions :

-1 Je ne suis pas capable de répondre sans avoir de schéma électrique.
-2 Pour quelle raison la production de PWM nécessite de modifier les registres du uC. (pourquoi une fréquence élevée ?)

Serge .D

Même sans schéma, on voit quand même un vilain while(1) au milieu de loop qui fait que la mesure des 2 tensions ne se produit qu'une fois au démarrage et plus jamais par la suite.

@aligote, en fait j'utilise une inductance entre les deux batteries pour stocker et transmettre l’énergie d'une batterie vers l'autre. Du coup, il faut une fréquence élevée pour empêcher le courant d'atteindre de grandes valeurs. Et pour modifier la fréquence du signal pwm, j'ai pas trouvée d'autres méthodes que l'utilisation des timers.
@fdufnews merci de la remarque je vais la sortir du loop
En fait ici, le schéma n'est pas vraiment important vu que je compare juste deux tensions en entrée pour sortir un signal pwm.

En fait ici, le schéma n'est pas vraiment important vu que je compare juste deux tensions en entrée pour sortir un signal pwm.

Tu as peut-être raison ....ou tord.
C'est toi le demandeur il me semble que si tu veux des réponses il faut répondre aux questions. Même si elles te semblent sans rapport avec ce que tu conçois du sujet elles proviennent de personnes ayant beaucoup d'expérience qui du fait de leur expérience ont abandonné leurs certitudes depuis des lustres et ont en permanence le doute (salutaire) en tête.

Si tu veux modifier la fréquence de PWM , qui sera bornée par les capacités du microcontrôleur, il y a la datasheet du microcontrôleur et le site de Mike Gamon : Gammon Forum : Electronics : Microprocessors

C'est Nick, pas Mike... :slight_smile: