Bonjour à tous,
Je viens vers vous car je rencontre un blocage dans la programmation d'une courbe d'accélération/décélération d'un moteur CC.
Je suis en train de faire un petit robot avec 4 roues motrices. Les moteurs sont indépendant et sont pilotés par une carte de contrôle ou j'envoi la vitesse du moteur via une liaison série (nombre de 0 à 254).
Le principe est que le robot lit un ordre sur une carte SD : avancer de X pas / tourner à gauche / tourner à gauche / avancer de X pas....
J'essaye de coder une fonction pour faire accélérer et freiner le robot mais je ne vois pas comment faire.
Je ne vois pas comment faire pour que la formule prenne en compte aussi bien une courte distance à parcourir, qu'une longue distance. J'ai aussi une fonction pour mettre en pause, mais du coup le robot ne décélère pas, il "pile" et quand je reprend, ma fonction ne tient pas compte qu'il est à l'arret et il repart donc plein pot.
J'ai fait une bête fonction qui coupe la distance en 3 : une partie accélération entre 0% et X% du trajet parcouru, entre X% et Y% vitesse constante et au delà décélération. mais ce qui veut dire que sur de "longue" distance, le robot est dans sa phase d'accélération pendant beaucoup plus longtemps.
Je pense que je ne résonne pas du tout comme il faut !
Si vous avez donc un exemple ou quelque-chose pour m'aiguiller, je suis preneur

//Determination de la vitesse
if (nbPasEffectue <= 0)
{
vitesseCorrigee = 1;
}
else if (nbPasEffectue > 0 && nbPasEffectue <= t1) // Accel
{
vitesseCorrigee = mot_a * nbPasEffectue;
vitesseCorrigee = constrain(vitesseCorrigee, 1, consigneVitesse);
} else if (nbPasEffectue > t1 && nbPasEffectue <= (t1 + t2)) //Regime constant
{
vitesseCorrigee = consigneVitesse;
} else if (nbPasEffectue > (t1 + t2) && nbPasEffectue <= (t1 + t2 + t3)) //Decelleration
{
vitesseCorrigee = (-mot_c * nbPasEffectue) + (mot_c * (t1 + t2 + t3));
vitesseCorrigee = constrain(vitesseCorrigee, 1, consigneVitesse);
}
Merci.