Révision 250
Ajouté par stpouotong il y a plus de 6 ans
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
Asservissement tourelle et roue implémentés en tâche
-la voiture parcoure le circuit vert