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", "stdlib.h": "c",
"strategie.h": "c", "strategie.h": "c",
"strategie_deplacement.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 "Moteurs.h"
#include "Asser_Moteurs.h" #include "Asser_Moteurs.h"
#define ASSERMOTEUR_GAIN_P 30000.f // Paramètres pour PAMI
#define ASSERMOTEUR_GAIN_I 3000.f //#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 consigne_mm_s[3]; // Consigne de vitesse (en mm/s)
float commande_I[3]; // Terme integral float commande_I[3]; // Terme integral

View File

@ -34,9 +34,6 @@ Pas de trajectoire rotation sur soi-même ?
Annexes Annexes
======= =======
Tables des registres
--------------------
Table des registres : Table des registres :
--------------------- ---------------------
@ -63,14 +60,14 @@ Les adresses en **gras** sont celles pour lesquelles des `#define` existent qui
| 0x0F | RW | int_16 | Commande PWM moteur gauche | | 0x0F | RW | int_16 | Commande PWM moteur gauche |
| 0x10 | RW | int_16 | Commande PWM moteur droit | | 0x10 | RW | int_16 | Commande PWM moteur droit |
| 0x11 | 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 | | **0x12** | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s|
| 0x13 | 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 | | 0x14 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s|
| 0x15 | 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 | | 0x16 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s|
| 0x17 | 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 | | 0x18 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s|
| 0x19 | 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 | | 0x1A | RW | Flottant 32 bits | Consigne davance du robot |
| 0x1B | 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 | | 0x1C | RW | Flottant 32 bits | Consigne davance du robot |
@ -132,8 +129,6 @@ Les adresses en **gras** sont celles pour lesquelles des `#define` existent qui
| 0x54 | RW | Flottant 32 bits | Angle fin rad | | 0x54 | RW | Flottant 32 bits | Angle fin rad |
| 0x55 | RW | Flottant 32 bits | Angle fin rad | | 0x55 | RW | Flottant 32 bits | Angle fin rad |
| 0x56 | RW | Flottant 32 bits | Angle fin rad | | 0x56 | RW | Flottant 32 bits | Angle fin rad |
| **0x80** | R | flottant 32 bits | Position X en mm | | **0x80** | R | flottant 32 bits | Position X en mm |
| 0x81 | 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 | | 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 | | 0x95 | R | flottant 32 bits | Position consigne Y en mm |
| 0x96 | 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 | | 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' | | **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_PAMI(uint32_t step_ms, int * asser_pos);
void gestion_VL53L8CX(void); void gestion_VL53L8CX(void);
const uint32_t step_ms=1; const uint32_t step_ms=10;
float distance1_mm=0, distance2_mm=0; float distance1_mm=0, distance2_mm=0;
// DEBUG // DEBUG
@ -172,7 +172,7 @@ void main(void)
// Consigne // Consigne
Moteur_SetVitesse(MOTEUR_A, msg_propulsion_pwm.pwm_droit); Moteur_SetVitesse(MOTEUR_A, msg_propulsion_pwm.pwm_droit);
Moteur_SetVitesse(MOTEUR_B, msg_propulsion_pwm.pwm_gauche); 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){ if(mise_a_jour_vitesse_roues){
struct msg_propulsion_vitesse_roues_t msg_propulsion_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(); temps_ms = Temps_get_temps_ms();
//if(temps_ms % step_ms == 0){ if(temps_ms % step_ms == 0){
QEI_update(); QEI_update();
Localisation_gestion(); Localisation_gestion();
@ -302,6 +302,10 @@ void main(void)
mise_données_dans_échange((uint8_t*) &abscisse, sizeof(abscisse), REG_PROPULSION_ABSCISSE); mise_données_dans_échange((uint8_t*) &abscisse, sizeof(abscisse), REG_PROPULSION_ABSCISSE);
struct point_xyo_t position_consigne = Trajectoire_get_point(&trajectoire, 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); 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); //sleep_ms(1);
//printf("x_mm:%.2f, y_mm:%.2f\n", position.x_mm, position.y_mm); //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 // Récupération des valeurs pour les mettre dans la mémoire d'échange
// TODO // TODO
//} }
} }
} }

View File

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