Comparaison de tension et sortie PWM

Comme dit 68tjs (au fait ca veut dire quoi ? t'es un vieux 68tard ? révolutionnaire ? :wink: )
Comme dit notre ami, afficher les valeurs pour voir avec quoi vous travailler
Là vous êtes en aveugle pur

si la commande est à 5V et le capteur à 0V le rapport cyclique sera maximal, si la commande et le rapport cycliques sont égaux le rapport cyclique est nul.

Et si le capteur est supérieur à la commande ?
Votre code ne fait rien si valCapt > valCom

En quoi est-ce un problème ?

==> Il est impératif que tous les cas ammène à un résultat défini.

Apparemment votre signal hachPin va commander quelque chose qui va amener une grandeur physique mesurée par le capteur à grandir : une position, une température, je ne sais pas.
Si à un moment donné valCapt < valCom vous activez du signal sur hachPin (par exemple, vous chauffez)
Admettons que le système réagisse vite et qu'au tour de loop() suivant vous vous retrouviez avec valCapt > valCom
Résultat votre code ne fais rien ET GARDE LA SORTIE ACTIVE
Le système se met alors à dériver hors de contrôle !

Je suggère de modifier comme ceci :

if(valCom-valCapt< 0 )
      analogWrite(hachPin, (valCapt-valCom)/4); 
else
      analogWrite(hachPin, 0);

@68tjs : PID : Proportionnelle Intégrale Dérivée : algorithme d'asservissement très réputé.
Il consiste à définir le signal de sortie comme une combinaison linaire de 3 grandeurs :

  • le signal du capteur (proportionnelle)
  • l'intégrale du signal du capteur (intégrale)
  • la dérivée du signal du capteur
    Le tout est de bien calculer les coefficients pour arriver au type d'asservissement souhaité.
    C'est tout ce que j'en sais. je suis sensé l'avoir étudié à l'école mais je devais "ailleurs" :wink:

Sur mon robot j'ai appliqué un code de PID piqué directement sur le code de Pololu pour leur robot mp3I