Projet

Général

Profil

« Précédent | Suivant » 

Révision 526

Ajouté par maantourou il y a plus de 6 ans

Voir les différences:

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