Projet

Général

Profil

« Précédent | Suivant » 

Révision 60

Ajouté par maporte3 il y a plus de 6 ans

Mise en place de la gestion de la queue de message avec la fonction periph_rx()

Voir les différences:

branch/porte/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff0032
RESET=ff0038
branch/porte/Emb_App/programme_principal_etud.c
unsigned int Consigne_T=450; //Consigne de l'angle de la tourelle
unsigned int valeur=0; //valeur transmise corrig?
unsigned int Somme_Erreur=0, Erreur=0, Delta_Erreur=0, Erreur_pre=0;
int Kp=2, Kpr=1;
int Ki=7;
int Kd=2;
unsigned int Vitesse=2,Distance;
int Kp=3, Kpr=1;
int Ki=9;
int Kd=1, Kdr=1;
unsigned int Vitesse=0,Distance;
unsigned int Angle_R=0;
unsigned int ErreurRoues=0;
unsigned int ErreurRoues=0, ErreurRouesPre=0, Delta_ErreurRoues=0;
void Asserv_T(){
......
demande.data.rtr=1;
snd_dtq (CanTx,demande.msg); // Interrogation du peripherique
rcv_dtq (CanRx,&reponse.msg); // Attente de la reponse
alpha=reponse.data.val; // contient la valeur de retour du simulateur.
alpha=periph[ADDR('R')].val; // contient la valeur de retour du simulateur.
comm.data.id='T';
comm.data.rtr=0;
......
demande.data.rtr=1;
snd_dtq (CanTx,demande.msg); // Interrogation du peripherique
rcv_dtq (CanRx,&reponse.msg); // Attente de la reponse
Distance=reponse.data.val; // contient la valeur de retour du simulateur.
Distance=periph[ADDR('R')].val; // contient la valeur de retour du simulateur.
comm.data.id='D'; //Commande de l'angle des roues
comm.data.rtr=0;
......
}
}
/*void Asserv_V(){
//'V'/86/0x56?: Commande en vitesse des roues motrices du vehicule (en radian /secondes).
CanFrame comm;
CanFrame demande;
CanFrame reponse;
while(1){
comm.data.id='V'; //Commande de l'angle des roues
comm.data.rtr=0;
comm.data.val=Vitesse;
snd_dtq (CanTx,comm.msg);//Envoi de la commande
dly_tsk(500);
}
}*/
void Asserv_T_hc(){
Erreur_pre=Erreur;
Erreur=Consigne_T-alpha;
......
}
void Asserv_R_hc(){
ErreurRoues=Distance-708;
if(Distance<=680)
Angle_R=Kpr*ErreurRoues;
ErreurRouesPre=ErreurRoues;
ErreurRoues=Distance-710;
Delta_ErreurRoues=ErreurRoues-ErreurRouesPre;
if(Distance<=690)
Angle_R=Kpr*ErreurRoues+Kdr*Delta_ErreurRoues;
if(Distance>=730)
Angle_R=Kpr*ErreurRoues;
Angle_R=Kpr*ErreurRoues+Kdr*Delta_ErreurRoues;
}
void main()
......
capture_init();
sta_cyc(ID_acqui);
// sta_tsk(ID_periph_rx);
sta_tsk(ID_periph_rx);
sta_tsk(ID_Asserv_T);
sta_cyc(ID_Asserv_T_hc);
sta_tsk(ID_Asserv_R);
sta_cyc(ID_Asserv_R_hc);
/*delay(1000);
sta_tsk(ID_Asserv_V);*/
while(1)
{

Formats disponibles : Unified diff