Révision 275
Ajouté par vidaval il y a plus de 6 ans
branch/daval/Emb_App/SessionM32C_E8a_system.ini | ||
---|---|---|
[Target]
|
||
M32C E8a SYSTEM=Renesas Communications
|
||
[USER_DATA]
|
||
RESET=ff0030
|
||
RESET=ff0028
|
branch/daval/Emb_App/programme_principal_etud.c | ||
---|---|---|
//'I'/73/Ox49 : D?finition du nom du v?hicule. Doit d?buter par le caract?re '#' et entraine le chargement de la configuration de piste
|
||
// correspondant au nom du v?hicule si le nom se termine par '*'
|
||
|
||
//Asservissement de la tourelle
|
||
|
||
int consigne = 450; //valeur de la consigne
|
||
int angle=0 ; //valeur retournee
|
||
float k=1.9; //gain du correcteur
|
||
int valeur = 0 ; //valeur envoyee
|
||
int angle_mesure=0 ; //valeur retournee
|
||
char k=1; //gain du correcteur
|
||
int angle_corrige = 0 ; //valeur envoyee
|
||
|
||
int consigne_roue=735; // Consigne en angle pour que les roues soient un peu pr?s droite
|
||
float C=1.; // Gain asservissment des roues
|
||
int orientation_roue =0; // valeur corrigee pour l orientation des roues
|
||
int vitesse_voulue=45; // Commande de vitesse que l'on envoie
|
||
CanFrame vitesse;
|
||
CanFrame requete;
|
||
//Asservissement de la voiture
|
||
int consigne_roue=700; // Consigne qui permet d etre bien centr? sur la route
|
||
char C=1; // Gain asservissment des roues
|
||
int vitesse_voulue=35; // Commande de vitesse que l'on envoie
|
||
|
||
int distance_mesure=0;
|
||
|
||
|
||
void asservissement()
|
||
{
|
||
CanFrame commande;
|
||
... | ... | |
//rcv_dtq (CanRx,&reponse.msg); // Attente de la reponse // On ne l'utilise plus car utlisation de periph_ID
|
||
|
||
|
||
angle = periph[ADDR('R')].val; // Contient la valeur de retour du simulateur.
|
||
angle_mesure = periph[ADDR('R')].val; // Contient la valeur de retour du simulateur.
|
||
|
||
|
||
commande.data.id='T'; //Envoi d'une commande
|
||
commande.data.rtr=0; //Indique une ecriture
|
||
valeur=k*(consigne-angle);
|
||
commande.data.val=valeur;
|
||
angle_corrige=k*(consigne-angle_mesure);
|
||
commande.data.val=angle_corrige;
|
||
snd_dtq (CanTx,commande.msg); //Envoi modification
|
||
dly_tsk(5);
|
||
dly_tsk(15);
|
||
}
|
||
}
|
||
|
||
void avance()
|
||
{
|
||
vitesse.data.id='V'; //Envoi d'une commande en vitesse
|
||
vitesse.data.rtr=0; //Indique une ecriture
|
||
vitesse.data.val=vitesse_voulue;
|
||
snd_dtq (CanTx,vitesse.msg);
|
||
dly_tsk(15);
|
||
CanFrame vitesse;
|
||
CanFrame requete;
|
||
vitesse.data.id='V'; //Envoi d'une commande en vitesse
|
||
vitesse.data.rtr=0; //Indique une ecriture
|
||
vitesse.data.val=vitesse_voulue;
|
||
snd_dtq (CanTx,vitesse.msg);
|
||
dly_tsk(15);
|
||
|
||
}
|
||
void distance_bord()
|
||
... | ... | |
|
||
requete_dist.data.id= 'U' ;
|
||
requete_dist.data.rtr= 1 ; //requete lecture distance donne par le telemetre
|
||
periph[ADDR('U')].ev= 0x01 ; //L evenement est declenche a chaque fois que la valeur du periph U et mise ? jour
|
||
periph[ADDR('U')].ev= 0x02 ; //L evenement est declenche a chaque fois que la valeur du periph U et mise ? jour
|
||
snd_dtq(CanTx, requete_dist.msg);
|
||
wai_flg (ev_periph, 0x01, TWF_ANDW, &flag); //Attente lecture
|
||
distance_mesure=periph[ADDR('U')].val;
|
||
dly_tsk(15);
|
||
wai_flg (ev_periph, 0x02, TWF_ANDW, &flag); //Attente lecture
|
||
//distance_mesure=periph[ADDR('U')].val;
|
||
if(periph[ADDR('U')].val > 2000)
|
||
{
|
||
distance_mesure=700;
|
||
}
|
||
else
|
||
{
|
||
distance_mesure=periph[ADDR('U')].val;
|
||
}
|
||
|
||
dly_tsk(5);
|
||
|
||
}
|
||
}
|
||
|
||
|
||
void angle_roue()
|
||
void angle_roues()
|
||
{
|
||
CanFrame requete,commande;
|
||
UINT flag;
|
||
... | ... | |
while (1)
|
||
{
|
||
|
||
requete.data.id='D';
|
||
requete.data.rtr=1;
|
||
requete.data.id='D'; //Angle des roues directrices
|
||
requete.data.rtr=1; //Requete lecture distance donne par le telemetre
|
||
periph[ADDR('D')].ev=0x01;
|
||
snd_dtq(CanTx, requete.msg);
|
||
wai_flg (ev_periph, 0x01, TWF_ANDW, &flag);
|
||
orientation_roue=periph[ADDR('D')].val;
|
||
commande.data.id='D';
|
||
commande.data.rtr=0;
|
||
commande.data.val= C*(distance_mesure-consigne_roue);
|
||
... | ... | |
sta_tsk(ID_periph_rx); //Si on utilise cette t?che on ne doit plus utiliser canRX
|
||
sta_tsk(ID_asservissement);
|
||
sta_tsk(ID_distance_bord);
|
||
sta_tsk(ID_angle_roue);
|
||
sta_tsk(ID_angle_roues);
|
||
sta_tsk(ID_avance);
|
||
while(1);
|
||
|
branch/daval/Emb_App/conf_noyau.cfg | ||
---|---|---|
};
|
||
|
||
task[]{
|
||
entry_address = angle_roue();
|
||
name = ID_angle_roue;
|
||
entry_address = angle_roues();
|
||
name = ID_angle_roues;
|
||
stack_size = 256;
|
||
stack_section = stack;
|
||
priority = 4;
|
Formats disponibles : Unified diff
Mise en place de la condition pour passer les trous barrière piste bleue + correction position de la voiture sur la route