Réglage de l'asservissement des moteurs

This commit is contained in:
Samuel 2026-04-18 14:00:17 +02:00
parent 23bc31cfac
commit 5f4cacf2d1
5 changed files with 40 additions and 25 deletions

View File

@ -13,6 +13,8 @@
"stdlib.h": "c",
"strategie.h": "c",
"strategie_deplacement.h": "c",
"servomoteur.h": "c"
"servomoteur.h": "c",
"moteurs.h": "c",
"messagerie_applicative.h": "c"
}
}

View File

@ -2,8 +2,14 @@
#include "Moteurs.h"
#include "Asser_Moteurs.h"
#define ASSERMOTEUR_GAIN_P 30000.f
#define ASSERMOTEUR_GAIN_I 3000.f
// Paramètres pour PAMI
//#define ASSERMOTEUR_GAIN_P 30000.f
//#define ASSERMOTEUR_GAIN_I 3000.f
// Paramètre Robot 2026
#define ASSERMOTEUR_GAIN_P 150.f
#define ASSERMOTEUR_GAIN_I 1.f
float consigne_mm_s[3]; // Consigne de vitesse (en mm/s)
float commande_I[3]; // Terme integral

View File

@ -34,9 +34,6 @@ Pas de trajectoire rotation sur soi-même ?
Annexes
=======
Tables des registres
--------------------
Table des registres :
---------------------
@ -63,22 +60,22 @@ Les adresses en **gras** sont celles pour lesquelles des `#define` existent qui
| 0x0F | RW | int_16 | Commande PWM moteur gauche |
| 0x10 | RW | int_16 | Commande PWM moteur droit |
| 0x11 | RW | int_16 | Commande PWM moteur droit |
| **0x12** | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
| 0x13 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
| 0x14 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
| 0x15 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
| 0x16 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
| 0x17 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
| 0x18 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
| 0x19 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
| **0x12** | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s|
| 0x13 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s|
| 0x14 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s|
| 0x15 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s|
| 0x16 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s|
| 0x17 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s|
| 0x18 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s|
| 0x19 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s|
| 0x1A | RW | Flottant 32 bits | Consigne davance du robot |
| 0x1B | RW | Flottant 32 bits | Consigne davance du robot |
| 0x1C | RW | Flottant 32 bits | Consigne davance du robot |
| 0x1D | RW | Flottant 32 bits | Consigne davance du robot |
| 0x1E | RW | Flottant 32 bits | Consigne de rotation du robot |
| 0x1F | RW | Flottant 32 bits | Consigne de rotation du robot |
| 0x20 | RW | Flottant 32 bits | Consigne de rotation du robot |
| 0x21 | RW | Flottant 32 bits | Consigne de rotation du robot |
| 0x1E | RW | Flottant 32 bits | Consigne de rotation du robot |
| 0x1F | RW | Flottant 32 bits | Consigne de rotation du robot |
| 0x20 | RW | Flottant 32 bits | Consigne de rotation du robot |
| 0x21 | RW | Flottant 32 bits | Consigne de rotation du robot |
| **0x22** | RW | Enum 8 bits | Trajectoire, type :<br>0 : Droite<br>1 : Circulaire<br>2 : Bézier<br>3 : Composée<br>4 : Rotation |
| 0x23 | RW | Flottant 32 bits | Point 1, X |
| 0x24 | RW | Flottant 32 bits | Point 1, X |
@ -132,8 +129,6 @@ Les adresses en **gras** sont celles pour lesquelles des `#define` existent qui
| 0x54 | RW | Flottant 32 bits | Angle fin rad |
| 0x55 | RW | Flottant 32 bits | Angle fin rad |
| 0x56 | RW | Flottant 32 bits | Angle fin rad |
| **0x80** | R | flottant 32 bits | Position X en mm |
| 0x81 | R | flottant 32 bits | Position X en mm |
| 0x82 | R | flottant 32 bits | Position X en mm |
@ -158,5 +153,12 @@ Les adresses en **gras** sont celles pour lesquelles des `#define` existent qui
| 0x95 | R | flottant 32 bits | Position consigne Y en mm |
| 0x96 | R | flottant 32 bits | Position consigne Y en mm |
| 0x97 | R | flottant 32 bits | Position consigne Y en mm |
| **0x98** | R | flottant 32 bits | Vitesse roue gauche en mm/s |
| 0x99 | R | flottant 32 bits | Vitesse roue gauche en mm/s |
| 0x9A | R | flottant 32 bits | Vitesse roue gauche en mm/s |
| 0x9B | R | flottant 32 bits | Vitesse roue gauche en mm/s |
| 0x9C | R | flottant 32 bits | Vitesse roue droite en mm/s |
| 0x9D | R | flottant 32 bits | Vitesse roue droite en mm/s |
| 0x9E | R | flottant 32 bits | Vitesse roue droite en mm/s |
| 0x9F | R | flottant 32 bits | Vitesse roue droite en mm/s |
| **0xFF** | R | int_8 | Identifiant de la carte : 'P' |

12
main.c
View File

@ -47,7 +47,7 @@ int get_couleur(void);
void gestion_PAMI(uint32_t step_ms, int * asser_pos);
void gestion_VL53L8CX(void);
const uint32_t step_ms=1;
const uint32_t step_ms=10;
float distance1_mm=0, distance2_mm=0;
// DEBUG
@ -172,7 +172,7 @@ void main(void)
// Consigne
Moteur_SetVitesse(MOTEUR_A, msg_propulsion_pwm.pwm_droit);
Moteur_SetVitesse(MOTEUR_B, msg_propulsion_pwm.pwm_gauche);
//printf("pwm_gauche:%d, pwm_droit:%d\n", msg_propulsion_pwm.pwm_gauche, msg_propulsion_pwm.pwm_droit);
printf("pwm_gauche:%d, pwm_droit:%d\n", msg_propulsion_pwm.pwm_gauche, msg_propulsion_pwm.pwm_droit);
}
if(mise_a_jour_vitesse_roues){
struct msg_propulsion_vitesse_roues_t msg_propulsion_vitesse_roues;
@ -262,7 +262,7 @@ void main(void)
}
temps_ms = Temps_get_temps_ms();
//if(temps_ms % step_ms == 0){
if(temps_ms % step_ms == 0){
QEI_update();
Localisation_gestion();
@ -302,6 +302,10 @@ void main(void)
mise_données_dans_échange((uint8_t*) &abscisse, sizeof(abscisse), REG_PROPULSION_ABSCISSE);
struct point_xyo_t position_consigne = Trajectoire_get_point(&trajectoire, abscisse);
mise_données_dans_échange((uint8_t*) &(position_consigne.point_xy), sizeof(position_consigne.point_xy), REG_PROPULSION_POSITION_CONSIGNE);
float vitesse_roue_gauche = AsserMoteur_getVitesse_mm_s(MOTEUR_A, step_ms);
float vitesse_roue_droite = AsserMoteur_getVitesse_mm_s(MOTEUR_B, step_ms);
mise_données_dans_échange((uint8_t*) &(vitesse_roue_gauche), sizeof(vitesse_roue_gauche), REG_PROPULSION_VITESSE_ROUES_lecture);
mise_données_dans_échange((uint8_t*) &(vitesse_roue_droite), sizeof(vitesse_roue_droite), REG_PROPULSION_VITESSE_ROUES_lecture +4);
//sleep_ms(1);
//printf("x_mm:%.2f, y_mm:%.2f\n", position.x_mm, position.y_mm);
@ -312,7 +316,7 @@ void main(void)
}*/
// Récupération des valeurs pour les mettre dans la mémoire d'échange
// TODO
//}
}
}
}

View File

@ -13,6 +13,7 @@
#define REG_PROPULSION_TRAJECTOIRE 0x22
#define REG_PROPULSION_ABSCISSE 0x8C
#define REG_PROPULSION_POSITION_CONSIGNE 0x90
#define REG_PROPULSION_VITESSE_ROUES_lecture 0x98
struct msg_propulsion_position_t{
float position_x_mm, position_y_mm, orientation_rad;