Projet

Général

Profil

« Précédent | Suivant » 

Révision 250

Ajouté par stpouotong il y a plus de 6 ans

Asservissement tourelle et roue implémentés en tâche
-la voiture parcoure le circuit vert

Voir les différences:

branch/Styves_POUOTONG/tp_info6/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff0016
RESET=ff0018
branch/Styves_POUOTONG/tp_info6/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 '*'
short alpha;
short cmd;
short cmd_roue;
short angle_roue;
short D;
short k=1;
/*void tri (void)
void Asserv0() //asservissemt de la tourelle
{
CanFrame m;
while(1)
{
rcv_dtq(CanRx, &m.msg); //Attente et lecture de la reponse
switch(m.data.id){
case 'R' : //Tourelle
alpha = m.data.val;
break;
case 'U' : //Tourelle
D = m.data.val;
break;
}
CanFrame requete;
CanFrame reponse, comm;
short alpha;
short cmd;
short erreur;
short consigne=450;
while(1){
requete.data.id = 'R';
requete.data.rtr = 1;
snd_dtq(CanTx,requete.msg);
alpha = periph[ADDR('R')].val;
erreur = consigne - alpha;
cmd = erreur*k;
comm.data.id = 'T';
comm.data.rtr = 0; //Indique une ecriture
comm.data.val = cmd;
snd_dtq(CanTx, comm.msg);
dly_tsk(10);
}
}
*/
void cmd_tourelle() //commande en vitesse de la tourelle
{
CanFrame comm;
comm.data.id = 'T';
comm.data.rtr = 0; //Indique une ecriture
comm.data.val = cmd;
snd_dtq(CanTx, comm.msg);
}
void cmd_roue() //commande angle des roues
{
CanFrame comm;
comm.data.id = 'D';
comm.data.rtr = 0; //Indique une ecriture
comm.data.val = cmd_roue;
snd_dtq(CanTx, comm.msg);
}
void pos_tourelle() //r?cup?re l'angle de la tourelle
int dist;
void Asserv1() //asservissemt de la tourelle
{
CanFrame requete, reponse;
requete.data.id = 'R';
requete.data.rtr = 1; //Indique une requete de lecture
snd_dtq(CanTx, requete.msg);
rcv_dtq(CanRx, &reponse.msg);
alpha = reponse.data.val;
}
CanFrame requete;
CanFrame reponse, comm;
void distance() //r?cup?re la distance mesur?e par le t?l?m?tre
{
CanFrame requete, reponse;
requete.data.id = 'U';
requete.data.rtr = 1; //Indique une requete de lecture
snd_dtq(CanTx, requete.msg);
rcv_dtq(CanRx, &reponse.msg);
D = reponse.data.val;
}
void vitesse() //commande vitesse des roues
{
CanFrame comm;
comm.data.id = 'V';
comm.data.rtr = 0; //Indique une ecriture
comm.data.val = 15;
snd_dtq(CanTx, comm.msg);
}
void Asserv0() //asservissemt de la tourelle
{
short consigne=450;
short erreur;
short k=1;
erreur = consigne - D;
cmd = erreur*k;
}
void Asser_roue() //asservissemt des roues
{
short consigne=719;
short erreur;
short k= -1;
erreur = consigne - alpha;
cmd_roue = erreur*k;
}
short cmd;
short erreur;
short consigne=719;
requete.data.id = 'V';
requete.data.rtr = 0;
requete.data.val=15;
snd_dtq(CanTx,requete.msg);
while(1){
requete.data.id = 'U';
requete.data.rtr = 1;
snd_dtq(CanTx,requete.msg);
dist = periph[ADDR('U')].val;
erreur = consigne - dist;
cmd = -erreur*k;
comm.data.id = 'D';
comm.data.rtr = 0; //Indique une ecriture
comm.data.val = cmd;
snd_dtq(CanTx, comm.msg);
dly_tsk(10);
}
}
void main()
void main()
{
ports_mcu();
lcd_init();
......
capture_init();
sta_cyc(ID_acqui);
// sta_tsk(ID_periph_rx);
while(1)
sta_tsk(ID_periph_rx);
sta_tsk(ID_Asserv0);
dly_tsk(4000);
sta_tsk(ID_Asserv1);
while(1)
{
LED_J=1;
dly_tsk(100);
LED_J=0;
dly_tsk(100);
pos_tourelle();
distance();
Asserv0();
cmd_tourelle();
vitesse();
}
}
}
void acqui()
branch/Styves_POUOTONG/tp_info6/Emb_App/conf_noyau.cfg
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = Asserv0();
name = ID_Asserv0;
stack_size = 256;
stack_section = stack;
priority = 3;
initial_start = OFF;
exinf = 0x0;
};
flag[]{
name = ev_bus_fin_tr;
initial_pattern = 0x0000;
......
clear_attribute = YES;
wait_multi = TA_WMUL;
};
task[]{
entry_address = Asserv1();
name = ID_Asserv1;
stack_size = 256;
stack_section = stack;
priority = 3;
initial_start = OFF;
exinf = 0x0;
};
flag[]{
name = ev_periph;
initial_pattern = 0x0000;

Formats disponibles : Unified diff