Révision 526
Ajouté par maantourou il y a plus de 6 ans
branch/Antourou/Emb_App/SessionM32C_E8a_system.ini | ||
---|---|---|
[Target]
|
||
M32C E8a SYSTEM=Renesas Communications
|
||
[USER_DATA]
|
||
RESET=ff005c
|
||
RESET=ff0038
|
branch/Antourou/Emb_App/programme_principal_etud.c | ||
---|---|---|
unsigned short distanceaumur(); //acquisition distance des roues au mur en cm
|
||
void vitesse_vehicule(int vitesse); // r?glage de la vitesse du vehicule
|
||
void roue_directrices(unsigned short angle); // commande des roues (angle des en 10e de degre)
|
||
|
||
unsigned short modecourse();
|
||
char Capteur();
|
||
unsigned short modecourse()
|
||
char feu_vert();
|
||
void foction_commandegen( );
|
||
// variable utilis?e:
|
||
char feu = 0 ;// pour feu vert on a feu=1 et pour rouge et orange=0
|
||
short num_piste ;
|
||
char num_piste ;
|
||
char capt ;
|
||
unsigned short saut ;
|
||
unsigned short tour ;
|
||
char saut ;
|
||
char tour ;
|
||
int i;
|
||
// MAIN:
|
||
void main()
|
||
{
|
||
ports_mcu();
|
||
lcd_init();
|
||
lcd_init();
|
||
periph_init();
|
||
periph_nom("#mimi001");// changement du nom du v?hicule
|
||
|
||
... | ... | |
sta_cyc(ID_acqui);
|
||
sta_tsk(ID_periph_rx);
|
||
sta_tsk(ID_asservissment_tour);
|
||
dly_tsk(300);
|
||
dly_tsk(200);
|
||
sta_tsk(ID_regulation_roue);
|
||
dly_tsk(300);
|
||
dly_tsk(200);
|
||
// boucle de d?m lorsque le feu est vert
|
||
while ( feu != 1 )
|
||
{
|
||
feu = feu_vert();
|
||
dly_tsk(25);
|
||
}
|
||
sta_tsk(ID_foction_commandegen);
|
||
vitesse_vehicule(45);
|
||
|
||
sta_tsk(ID_fonction_commandegen);
|
||
vitesse_vehicule(39);
|
||
|
||
while(1)
|
||
{
|
||
}
|
||
|
||
|
||
}
|
||
void acqui()
|
||
... | ... | |
}
|
||
|
||
// fonction et asservissment
|
||
//1: lire la position de la tourelle
|
||
// lire la position de la tourelle
|
||
unsigned short position_Tourelle()
|
||
{
|
||
CanFrame requete;
|
||
... | ... | |
|
||
return periph[ADDR('R')].val;
|
||
}
|
||
//2:vitesse tourelle
|
||
//vitesse tourelle
|
||
void acquivitesse_Tour(int vit)
|
||
{
|
||
CanFrame comm;
|
||
comm.data.id = 'T';
|
||
comm.data.rtr = 0;
|
||
comm.data.val = vit;
|
||
snd_dtq (CanTx,comm.msg);
|
||
|
||
snd_dtq (CanTx,comm.msg);
|
||
}
|
||
//3: acquisition distance du telemetre en cm pour le calcul de la distance
|
||
// acquisition distance du telemetre en cm pour le calcul de la distance
|
||
unsigned short acqui_distance_Telem()
|
||
{
|
||
CanFrame requete;
|
||
... | ... | |
// distance=periph[ADDR('U')].val;
|
||
return periph[ADDR('U')].val;
|
||
}
|
||
// 4:r?glage de la vitesse du vehicule
|
||
// r?glage de la vitesse du vehicule
|
||
void vitesse_vehicule(int vitesse)
|
||
{
|
||
CanFrame comm;
|
||
... | ... | |
snd_dtq (CanTx,comm.msg);
|
||
}
|
||
|
||
/*5: Fonction pour l'arr?t d'urgence de la voiture // d?ja mise dans la fonction de commande g?n
|
||
/* Fonction pour l'arr?t d'urgence de la voiture // d?ja mise dans la fonction de commande g?n
|
||
void arret_urgence(void)
|
||
{ short stop;
|
||
CanFrame comm;
|
||
... | ... | |
}
|
||
}
|
||
*/
|
||
//6:acquisition distance des roues au mur en cm
|
||
//acquisition distance des roues au mur en cm
|
||
unsigned short distanceaumur()
|
||
{
|
||
unsigned short longtelem, pos_tourelle, distanceaumur;
|
||
... | ... | |
return distanceaumur;
|
||
}
|
||
|
||
//7: commande des roues (angle des en 10e de degre)
|
||
// commande des roues (angle des en 10e de degre)
|
||
void roue_directrices(unsigned short angleroue)
|
||
{
|
||
CanFrame comm;
|
||
... | ... | |
snd_dtq (CanTx,comm.msg);
|
||
|
||
}
|
||
//8:asservissment avec Correcteur proportionnel afin de r?guler la direction des roues directrices
|
||
//asservissment avec Correcteur proportionnel afin de r?guler la direction des roues directrices
|
||
void regulation_roue()
|
||
{
|
||
unsigned short dConsigne , distance, k;
|
||
int angleroue;
|
||
k = 3; //gain pour l'asservissment
|
||
k = 2.5; //gain pour l'asservissment
|
||
dConsigne = 500; //position initiale(d?but)
|
||
|
||
while(1)// condition pour le passage de la piste o? se trouvent des trous dans les bords
|
||
... | ... | |
}
|
||
}
|
||
|
||
// 9: asservissment tourelle
|
||
// asservissment tourelle
|
||
void asservissment_tour()
|
||
{
|
||
unsigned short posConsigne,posfinale;
|
||
... | ... | |
dly_tsk(100);
|
||
}
|
||
}
|
||
//10:fonciton d'acqu?rir la couleur du feu pour l'utiliser pour le d?marrage losque le feu est vert:
|
||
char feu_vert()
|
||
{
|
||
if ( (modecourse() & 0x8000) == 0x8000)
|
||
return 1;
|
||
else
|
||
return 0;
|
||
}
|
||
//fonciton d'acqu?rir la couleur du feu pour l'utiliser pour le d?marrage losque le feu est vert:
|
||
|
||
//11: FONCTION LECTURE CAPTEUR POUR AVOIR LES IFORMATIONS SUR NUM DU CAPTEUR ET SA COULEUR
|
||
// FONCTION LECTURE CAPTEUR POUR AVOIR LES IFORMATIONS SUR NUM DU CAPTEUR ET SA COULEUR
|
||
char Capteur()
|
||
{
|
||
|
||
... | ... | |
}
|
||
|
||
|
||
//12:MODE DE COURSE
|
||
//MODE DE COURSE
|
||
unsigned short modecourse()
|
||
{
|
||
CanFrame requete;
|
||
... | ... | |
return periph[ADDR('M')].val;
|
||
|
||
}
|
||
char feu_vert()
|
||
{
|
||
if ( (modecourse() & 0x8000) == 0x8000)
|
||
return 1;
|
||
else
|
||
return 0;
|
||
}
|
||
|
||
char nump()
|
||
{
|
||
|
||
return modecourse() & 0x000F ;
|
||
}
|
||
|
||
// 13: fonction commande g?n?rale:
|
||
void foction_commandegen( )
|
||
// fonction commande g?n?rale:
|
||
void fonction_commandegen( )
|
||
{
|
||
int lecture = 0;
|
||
int capt_lu = 0;
|
||
|
||
num_piste = modeCourse() & 0x000F;
|
||
num_piste = nump();
|
||
switch(num_piste){
|
||
|
||
case 0x01:
|
||
... | ... | |
{
|
||
if (Bp_G == 1)// //5: Fonction pour l'arr?t d'urgence de la voiture
|
||
{
|
||
vitesseVoiture(0);
|
||
vitesse_vehicule(0);
|
||
sus_tsk(ID_regulation_roue);
|
||
sus_tsk(ID_asservissment_tour);
|
||
LED_R = 1;
|
||
... | ... | |
|
||
|
||
|
||
if (tour > 3)// arret de la voiture au out de 3 tours
|
||
if (tour > 3)// arret de la voiture au bout de 3 tours
|
||
{
|
||
vitesseVoiture(0);
|
||
vitesse_vehicule(0);
|
||
sus_tsk(ID_regulation_roue);
|
||
sus_tsk(ID_asservissement_tour);
|
||
sus_tsk(ID_foction_commandegen);
|
||
sus_tsk(ID_asservissment_tour);
|
||
sus_tsk(ID_fonction_commandegen);
|
||
}
|
||
num_piste = modeCourse() & 0x000F;
|
||
num_piste = nump();
|
||
// commande selon la piste
|
||
switch(num_piste){
|
||
|
||
... | ... | |
{
|
||
vitesse_vehicule(30);
|
||
}else{
|
||
vitesse_vehicule(60);
|
||
vitesse_vehicule(48);
|
||
}
|
||
|
||
capt_lu = capt;
|
||
... | ... | |
lecture = 0;
|
||
|
||
}
|
||
capt_lu = capt;
|
||
|
||
if ( (capt == 0x5603) && saut == 0 )
|
||
capt_lu = capt;
|
||
|
||
if ( (capt == 0x5603)&& saut == 0 )
|
||
{
|
||
vitesse_vehicule(46);
|
||
dly_tsk(1700);
|
||
sus_tsk(ID_regulation_roue); // l'asservissement esqst d?sactiv? avant le saut
|
||
dly_tsk(1000);
|
||
vitesse_vehicule(46);
|
||
dly_tsk(1800);
|
||
|
||
sus_tsk( ID_regulation_roue ); // suspension de l'asservissment des roues avant le saut
|
||
|
||
dly_tsk(1200);
|
||
vitesse_vehicule(5); // vitesse aveclaquelle la voit att?rit
|
||
dly_tsk(300);
|
||
vitesse_vehicule(15);
|
||
dly_tsk(800);
|
||
rsm_tsk(ID_regulation_roue);
|
||
dly_tsk(700);
|
||
rsm_tsk( ID_regulation_roue );
|
||
capt = 0;
|
||
saut = 1;
|
||
|
branch/Antourou/Emb_App/conf_noyau.cfg | ||
---|---|---|
name = ID_asservissment_tour;
|
||
stack_size = 256;
|
||
stack_section = stack;
|
||
priority = 6;
|
||
priority = 7;
|
||
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
||
... | ... | |
name = ID_regulation_roue;
|
||
stack_size = 1024;
|
||
stack_section = stack;
|
||
priority = 7;
|
||
priority = 5;
|
||
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
||
task[]{
|
||
entry_address = foction_commandegen();// assr'vissement de la direction des roues directices
|
||
name = ID_foction_commandegen ;
|
||
entry_address = fonction_commandegen();// assr'vissement de la direction des roues directices
|
||
name = ID_fonction_commandegen ;
|
||
stack_size = 1024;
|
||
stack_section = stack;
|
||
priority = 5;
|
||
priority = 6;
|
||
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
Formats disponibles : Unified diff