Le mode classique de variation de vitesse consiste à faire varier le voltage en le découpant (PWM).
Mon vérin de ST2000 n'est pas très puissant et j'ai été déçu par mes premiers essais en mode PWM. J'ai opté pour des impulsions en 12V mais de durée variable (de 20ms à 200ms ou en continu).
Si ma commande est calculée à 50%, au lieu d'envoyer 6V (12 x 0.50), j'envoie 12V pendant 100ms.
Pour une commande à 100%, la durée de 200ms se traduit par 12V en continu jusqu'au calcul suivant. Avec un recalcul environ toutes les 200ms.
Avec un vérin plus puissant, il faut sans doute revoir tout cela et passer en mode PWM classique. un voltage faible pour de petits écarts et pleine puissance pour des écarts conséquents.
Il faut alors un autre driver pour le moteur les petits TB6612 sont limité à 1A par canal, soit 2A au total.
J'avais testé un BTN7970B avec succès mais une inversion de voltage fatale m'a fait essayer les petits TB6612 qui sont suffisants pour mon besoin. Le BTN est ancien mais en baisse sur ebay (chercher BTS7960B H-bridge, env 7$).
Le coeur du calcul est ici
cmd = Kp * headingError + (Kd * deltaError) * 1000 / deltaTime;
La commande (-100 à 100) est la somme de l'erreur de cap et de la variation de l'erreur par le temps avec des coefficients Kp et Kd pour le réglage.
Kp est le coefficient "proportionnel" qui permet de régler l'influence de l'erreur de cap.
Kd est le coefficient pour la variation de l'erreur.
Quand l'erreur se réduit, le deltaError s'inverse, le bateau revient vers son cap et la commande doit déjà tendre à s'inverser.
J'étais parti d'un calcul PID mais le résultat n'était pas bon. De manière empirique, j'ai abouti à ce mode avec commande calculée sur des valeurs lissées sur 200ms.
Il faut augmenter Kp et Kd pour augmenter le gain et la réactivité, respectivement sur l'écart et sur la variation de l'écart.