Bonjour à tous,
je rencontre un problème dans un projet d'asservissement en vitesse de 2 moteurs (moteurs d'un véhicule chenillé).
J'utilise des capteur à fourche pour connaitre la vitesse des 2 moteurs. J'ai alors une boucle qui "regarde" la vitesse des moteurs.
Je distingue alors 3 cas :
- Si le moteur de gauche va plus vite que le moteur de droite, alors je ralenti le moteur de gauche.
- Si le moteur de droite va plus vite que le moteur de gauche, alors je ralenti le moteur de droite.
- Si les moteurs vont à la même vitesse, il conserve cette commande.
C'est la que mon problème intervient, j'utilise des conditions "if" or, je me rend compte qu'elle ne fonctionne pas en "parallèle", que l'ordre à une importance et donc seul la première condition fonctionne ...
Avez vous une solution ?
Ci dessous mon programme !
/*------------------------------------FONCTION AVANCER--------------------------------------*/
void avancer() {
int n = 0 ; // On initialise un compteur.
int values_D = 255 ; // On définit la vitesse d'initalisation du moteur de droite comme la vitesse maximum (allant de 0 à 255).
int values_G = 255 ; // On définit la vitesse d'initalisation du moteur de gauche comme la vitesse maximum (allant de 0 à 255).
digitalWrite (M1, LOW) ; // On définit le sens du moteur de droite (sens avant).
digitalWrite (M2, LOW) ; // On définit le sens du moteur de gauche (sens avant).
analogWrite (E1, values_D) ; // On définit la vitesse du moteur de droite.
analogWrite (E2, values_G) ; // On définit la vitesse du moteur de gauche.
while (n<60) { // n < x fois 200 ms (= temps que SEED avance).
vitesse () ; // On appele la fonction vitesse afin de connaitre les vitesses du moteur gauche et droit.
if ((Vitesse_D < 105) && (Vitesse_G < 105)) { // On filtre les informations parasites.
if (Vitesse_D < Vitesse_G) { // Dans le cas où la vitesse du moteur droit est inférieur à la vitesse du moteur gauche.
int values_G2 = values_G - 100 ; // On va donner une nouvelle "values" au moteur gauche afin qu'il soit moins rapide.
// On soustrait à la "values" actuelle, la différence (en values) des vitesses des moteurs gauche et droit.
analogWrite (E1, values_G2) ; // On donne cette nouvelle "values" au moteur gauche.
analogWrite (E2, values_D) ; // Le moteur droit conserve sa vitesse actuelle (255).
Serial.println ("Ralenti Gauche") ;
}
else if (Vitesse_G < Vitesse_D) { // Dans le cas où la vitesse du moteur gauche est inférieur à la vitesse du moteur droit.
int values_D2 = values_D - 100 ; // On va donner une nouvelle "values" au moteur droit afin qu'il soit moins rapide.
// On soustrait à la "values" actuelle, la différence (en values) des vitesses des moteurs gauche et droit.
analogWrite (E1, values_G) ; // On donne cette nouvelle "values" au moteur droit.
analogWrite (E2, values_D2) ; // Le moteur gauche conserve sa vitesse actuelle (255).
Serial.println ("Ralenti droite") ;
}
else { // Dans le cas où les 2 moteurs vont à la même vitesse.
analogWrite (E2, values_D) ; // Le moteur droit conserve sa vitesse actuelle (255).
analogWrite (E1, values_G) ; // Le moteur gauche conserve sa vitesse actuelle (255).
}
}
n=n+1 ; // On incrémente le compteur.
}
}
/*----------------------------------FIN FONCTION AVANCER------------------------------------*/