Projet

Général

Profil

« Précédent | Suivant » 

Révision 59

Ajouté par melepogam il y a plus de 6 ans

circuit vert ok
3 taches : tourelle,roue et vitesse

Voir les différences:

branch/lepogam/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff0022
RESET=ff002a
branch/lepogam/Emb_App/programme_principal_etud.c
// correspondant au nom du v?hicule si le nom se termine par '*'
unsigned int alpha=0;
unsigned int theta=0;
unsigned int distance=0;
unsigned int vitesse=0;
unsigned int distance_ref=722;
unsigned int consigne=450;
unsigned int consigne_vitesse=30;
unsigned int valeur=0;
int k=1;
unsigned int consigne_vitesse=40;
unsigned int valeur_t=0;
unsigned int valeur_r=0;
int k1=1;
int k2=2;
void asserv0(){
void asserv_tourelle(){
//'T'/84/0x54?: Commande en vitesse de la tourelle portant le telemetre (en 1/10 de degre/secondes).
......
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;
comm.data.val=valeur;
comm.data.val=valeur_t;
snd_dtq (CanTx,comm.msg);
dly_tsk(300);
dly_tsk(100);
}
}
void asserv1(){
if(alpha!=consigne) valeur=k*(consigne-alpha);
if(alpha!=consigne) valeur_t=k1*(consigne-alpha);
}
void asserv_vitesse(){
/*
void asserv_roue(){
//'U'/85/0x55?: Distance mesuree par le telemetre (1/100 de metre)
//'D'/68/0x44?: Commande de l'angle des roues directrices (en 1/10 de degre).
//'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='D'; //envoi consigne vitesse
comm.data.rtr=0;
comm.data.val=consigne_vitesse;
snd_dtq (CanTx,comm.msg);
demande.data.id='U';
demande.data.rtr=1;
snd_dtq (CanTx,demande.msg); // Interrogation du peripherique
rcv_dtq (CanRx,&reponse.msg); // Attente de la reponse
theta=reponse.data.val; // contient la valeur de retour du simulateur.
distance=periph[ADDR('U')].val; // contient la valeur de retour du simulateur.
comm.data.id='D';
comm.data.rtr=0;
comm.data.val=valeur;
comm.data.val=valeur_r;
snd_dtq (CanTx,comm.msg);
}
*/
}
void asserv2(){
if(distance!=distance_ref) valeur_r=-k2*(distance_ref-distance);
}
void asserv_vitesse(){
//'V'/86/0x56?: Commande en vitesse des roues motrices du vehicule (en radian /secondes).
CanFrame comm;
CanFrame demande;
CanFrame reponse;
while(1){
dly_tsk(400);
comm.data.id='V'; //envoi consigne vitesse
comm.data.rtr=0;
comm.data.val=vitesse;
snd_dtq (CanTx,comm.msg);
}
}
void asserv3(){
if(vitesse!=consigne_vitesse) vitesse++;
}
void main()
{
......
capture_init();
sta_cyc(ID_acqui);
// sta_tsk(ID_periph_rx);
sta_tsk(ID_asserv0);
sta_cyc(ID_asserv1);
sta_tsk(ID_periph_rx);
sta_tsk(ID_asserv_tourelle);
sta_tsk(ID_asserv_roue);
sta_tsk(ID_asserv_vitesse);
sta_cyc(ID_asserv1);
sta_cyc(ID_asserv2);
sta_cyc(ID_asserv3);
while(1)
branch/lepogam/Emb_App/conf_noyau.cfg
exinf = 0x0;
};
task[]{
entry_address = asserv0();
name = ID_asserv0;
entry_address = asserv_tourelle();
name = ID_asserv_tourelle;
stack_size = 256;
stack_section = stack;
priority = 3;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = asserv_roue();
name = ID_asserv_roue;
stack_size = 256;
stack_section = stack;
priority = 4;
initial_start = OFF;
exinf = 0x0;
......
name = ID_asserv_vitesse;
stack_size = 256;
stack_section = stack;
priority = 4;
priority = 5;
initial_start = OFF;
exinf = 0x0;
};
flag[]{
name = ev_bus_fin_tr;
initial_pattern = 0x0000;
......
interval_counter = 0x64;
phs_counter = 0x0;
};
cyclic_hand[]{
entry_address = asserv2();
name = ID_asserv2;
exinf = 0x0;
start = OFF;
phsatr = OFF;
interval_counter = 0x64;
phs_counter = 0x0;
};
cyclic_hand[]{
entry_address = asserv3();
name = ID_asserv3;
exinf = 0x0;
start = OFF;
phsatr = OFF;
interval_counter = 0x64;
phs_counter = 0x0;
};
vdataqueue[]{

Formats disponibles : Unified diff