Révision 183
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=ff0022
|
||
RESET=ff002a
|
branch/daval/Emb_App/programme_principal_etud.c | ||
---|---|---|
int k=1; //gain du correcteur
|
||
int valeur = 0 ; //valeur envoyee
|
||
|
||
int consigne_roue=700;
|
||
int C=1;
|
||
int orientation_roue =0;
|
||
CanFrame vitesse;
|
||
CanFrame requete;
|
||
|
||
int distance_mesure=0;
|
||
|
||
void avance()
|
||
{
|
||
vitesse.data.id='V'; //Envoi d'une commande
|
||
vitesse.data.rtr=0; //Indique une ecriture
|
||
vitesse.data.val=15;
|
||
snd_dtq (CanTx,vitesse.msg);
|
||
|
||
|
||
}
|
||
void asservissement()
|
||
{
|
||
CanFrame comm;
|
||
CanFrame commande;
|
||
CanFrame requete;
|
||
CanFrame reponse;
|
||
|
||
... | ... | |
angle = periph[ADDR('R')].val; // Contient la valeur de retour du simulateur.
|
||
|
||
|
||
comm.data.id='T'; //Envoi d'une commande
|
||
comm.data.rtr=0; //Indique une ecriture
|
||
commande.data.id='T'; //Envoi d'une commande
|
||
commande.data.rtr=0; //Indique une ecriture
|
||
valeur=k*(consigne-angle);
|
||
comm.data.val=valeur;
|
||
snd_dtq (CanTx,comm.msg); //Envoi modif
|
||
dly_tsk(2);
|
||
commande.data.val=valeur;
|
||
snd_dtq (CanTx,commande.msg); //Envoi modif
|
||
dly_tsk(5);
|
||
}
|
||
}
|
||
|
||
void avance()
|
||
{
|
||
vitesse.data.id='V'; //Envoi d'une commande en vitesse
|
||
vitesse.data.rtr=0; //Indique une ecriture
|
||
vitesse.data.val=25;
|
||
snd_dtq (CanTx,vitesse.msg);
|
||
dly_tsk(15);
|
||
|
||
}
|
||
void distance_bord()
|
||
{
|
||
CanFrame requete_dist;
|
||
UINT flag;
|
||
|
||
while(1)
|
||
{
|
||
|
||
requete_dist.data.id= 'U' ;
|
||
requete_dist.data.rtr= 1 ; //requete lecture
|
||
periph[ADDR('U')].ev= 0x02 ;
|
||
snd_dtq(CanTx, requete_dist.msg);
|
||
wai_flg (ev_periph, 0x02, TWF_ANDW, &flag); //Attente lecture
|
||
distance_mesure=periph[ADDR('U')].val;
|
||
dly_tsk(15);
|
||
|
||
}
|
||
}
|
||
|
||
|
||
void angle_roue()
|
||
{
|
||
CanFrame requete,commande;
|
||
UINT flag;
|
||
|
||
while (1)
|
||
{
|
||
|
||
requete.data.id='D';
|
||
requete.data.rtr=1;
|
||
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);
|
||
snd_dtq(CanTx, commande.msg);
|
||
dly_tsk(5);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
void main()
|
||
|
||
... | ... | |
sta_cyc(ID_acqui);
|
||
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_avance);
|
||
while(1);
|
||
|
branch/daval/Emb_App/conf_noyau.cfg | ||
---|---|---|
name = ID_avance;
|
||
stack_size = 256;
|
||
stack_section = stack;
|
||
priority = 5;
|
||
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
||
|
||
task[]{
|
||
entry_address = distance_bord();
|
||
name = ID_distance_bord;
|
||
stack_size = 256;
|
||
stack_section = stack;
|
||
priority = 4;
|
||
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
||
|
||
task[]{
|
||
entry_address = oriente_roue();
|
||
name = ID_oriente_roue;
|
||
entry_address = angle_roue();
|
||
name = ID_angle_roue;
|
||
stack_size = 256;
|
||
stack_section = stack;
|
||
priority = 5;
|
||
priority = 4;
|
||
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
||
|
||
|
||
flag[]{
|
||
name = ev_bus_fin_tr;
|
||
initial_pattern = 0x0000;
|
Formats disponibles : Unified diff
Implantation de la mesure de distance par le telemetre + asservissement de l'orientation des roues le tout des tâches