Projet

Général

Profil

« Précédent | Suivant » 

Révision 267

Ajouté par sabeaussan il y a plus de 6 ans

ajout de la tâche permettant de gérer le départ de la course et de fonction permettant de savoir si la voiture est stable

Voir les différences:

branch/beaussant/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff002a
RESET=ff002e
branch/beaussant/Emb_App/programme_principal_etud.c
int pos_obs=0;
int commandeT=500;
int commandeV=25;
int commandeV=40;
int commandeR=0;
//CanFrame touche;
short consigne=450;
int dist_obs=0;
int dist_consigne=709;
char kt=1;
float kv=1.1;
int cmpt;
char kt=3;
char kv=15;
float kr=1.5;
//char c;
int in;
int is_stable=0;
int est_stable=0;
void envoieFrame(unsigned char id, unsigned short val)
{
......
ports_mcu();
lcd_init();
periph_init();
periph_nom("#AutoTest*");
periph_nom("#LeBolide*");
can_init();
clavier_init(1);
capture_init();
// sta_cyc(ID_acqui);
sta_tsk(ID_ctrlt);
sta_tsk(ID_asserv_v);
sta_tsk(ID_depart);
sta_tsk(ID_periph_rx);
while(1){};
......
int intervalle(int val,int borne)
{
in=0;
//on v?rifie que la commande est quasi nulle
if(val<=borne && val>=-1*borne)
{
return 1;
in=1;
}
return(in);
}
int stable()
{
static int compt=0;
if(intervalle(commandeR,1)
is_stable=0;
if(intervalle(commandeR,2)==1)
{
cmpt++;
}
else if(cmpt==10){
return 1}
else if(cmpt>=20)
{
cmpt=0;
is_stable=1;;
}
else{
is_stable=0;
}
return(is_stable);
}
......
}
void depart()
{
est_stable=0;
kv=0.8;
commandeV=15;
envoieFrame('V',commandeV);
dist_obs=acquiFrame('U');
while(est_stable!=1){
commandeR=-1*kr*(dist_consigne-dist_obs);
envoieFrame('D',commandeR);
dist_obs=acquiFrame('U');
dly_tsk(10);
est_stable=stable();
}
sta_tsk(ID_asserv_v);
sta_tsk(ID_asserv_r);
}
void ctrl_t()
{
envoieFrame('T',commandeT);
......
}
}
void asserv_roue()
{
dist_obs=acquiFrame('U');
while(1){
commandeR=-1*kr*(dist_consigne-dist_obs);
envoieFrame('D',commandeR);
dist_obs=acquiFrame('U');
dly_tsk(10);
}
}
void asserv_vitesse()
{
commandeV=50;
envoieFrame('V',commandeV);
dist_obs=acquiFrame('U');
while(1){
commandeR=-1*kv*(dist_consigne-dist_obs);
commandeV=consigne+kv*commandeR;
envoieFrame('D',commandeR);
dist_obs=acquiFrame('U');
dly_tsk(10);
}
}
/*int virage()
{
if(commandeR==0 && dist_obs<dist_consigne) return 1;
branch/beaussant/Emb_App/conf_noyau.cfg
};
task[]{
entry_address = asserv_vitesse();
name = ID_asserv_v;
entry_address = asserv_roue();
name = ID_asserv_r;
stack_size = 256;
stack_section = stack;
priority = 3;
......
exinf = 0x0;
};
task[]{
entry_address = depart();
name = ID_depart;
stack_size = 256;
stack_section = stack;
priority = 3;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = asserv_vitesse();
name = ID_asserv_v;
stack_size = 256;
stack_section = stack;
priority = 2;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = periph_rx();
name = ID_periph_rx;
stack_size = 256;

Formats disponibles : Unified diff