Projet

Général

Profil

« Précédent | Suivant » 

Révision 38

Ajouté par melepogam il y a plus de 6 ans

asservissement angulaire task+cycl ok

Voir les différences:

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 consigne=450;
unsigned int valeur=0;
int k=8;
void asserv0(consigne){
unsigned int valeur=0;
int k=1;
void asserv0(){
//'T'/84/0x54?: Commande en vitesse de la tourelle portant le telemetre (en 1/10 de degre/secondes).
//'R'/82/0x52?: Lecture de l'angle effectif de la tourelle portant le telemetre (en 1/10 de degre).
CanFrame comm;
CanFrame demande;
CanFrame reponse;
while(1){
demande.data.id='R';
demande.data.rtr=1;
demande.data.id='R';
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.
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.
if(alpha!=consigne){
valeur=k*(consigne-alpha);
comm.data.id='T';
comm.data.rtr=0;
comm.data.val=valeur;
snd_dtq (CanTx,comm.msg);
}
}
void asserv1(){
if(alpha!=consigne) valeur=k*(consigne-alpha);
}
void main()
......
sta_cyc(ID_acqui);
// sta_tsk(ID_periph_rx);
sta_tsk(ID_asserv0);
sta_cyc(ID_asserv1);
while(1)
{
asserv0(450);
/*
LED_J=1;
dly_tsk(100);
LED_J=0;
dly_tsk(100);
*/
}
}
branch/lepogam/Emb_App/conf_noyau.cfg
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = asserv0();
name = ID_asserv0;
stack_size = 256;
stack_section = stack;
priority = 4;
initial_start = OFF;
exinf = 0x0;
};
flag[]{
name = ev_bus_fin_tr;
......
interval_counter = 0x64;
phs_counter = 0x0;
};
cyclic_hand[]{
entry_address = asserv1();
name = ID_asserv1;
exinf = 0x0;
start = OFF;
phsatr = OFF;
interval_counter = 0x64;
phs_counter = 0x0;
};
vdataqueue[]{

Formats disponibles : Unified diff