Révision 38
Ajouté par melepogam il y a plus de 6 ans
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
asservissement angulaire task+cycl ok