Projet

Général

Profil

« Précédent | Suivant » 

Révision 76

Ajouté par zaschiano il y a plus de 6 ans

Boucle de régulation des roues et de la tourelle fonctionnelle, gestion des couleurs des capteurs ok
Passage de la piste verte en 15,96s et de la piste bleue en 18,08s

Voir les différences:

branch/schiano/Emb_App/SessionM32C_E8a_system.ini
[RESET_RELEASE]
ENABLE=0
[CPU_SELECT]
DEVICE=M30879FL
DEVICE=M30875FH
EMUSEL=0
MCU_GROUP=M32C__87 Group
[POWER_SUPPLY]
VOLTAGE_5_0=1
VOLTAGE_3_3=0
[FW_LOCATE]
FWADDRESS=f000
FWADDRESS=fa00
RAMADDRESS=04
[WDT]
WDT_USE=0
......
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff0016
RESET=ff002a
branch/schiano/Emb_App/programme_principal_etud.c
unsigned int teta =100;
unsigned int consignealpha = 450;
unsigned int angleRoue =0;
//unsigned int distancemur =0;
//unsigned int consignedistance = 724;
int k=10;
unsigned int distancemur =722;
unsigned int consignedistance = 710; //722 piste verte
int pistebleue =0;
int consigneVitesse;
int CouleurCapteur ='V';
int k=2;
int kp=-1;
void main()
{
{
CanFrame go;
ports_mcu();
lcd_init();
periph_init();
......
capture_init();
sta_cyc(ID_acqui);
// sta_tsk(ID_periph_rx);
sta_tsk(ID_periph_rx);
sta_cyc(ID_asserv1);
sta_tsk(ID_asserv0);
//sta_cyc(ID_asservangleroue);
//sta_tsk(ID_asservRoue);
sta_cyc(ID_asservangleroue);
sta_tsk(ID_asservRoue);
dly_tsk(500);
go.data.id='V';
go.data.rtr=0;
go.data.val=30; //consigne de vitesse de la voiture
snd_dtq (CanTx,go.msg);
sta_tsk(ID_AsservVitesse);
//sta_cyc(ID_asservVitesseCyc);
while(1)
{
//LED_J=1;
......
void asserv0()
{
CanFrame comm;
CanFrame go;
CanFrame demande;
CanFrame reponse;
......
comm.data.rtr=0;
comm.data.val=teta; //consigne de vitesse de rotation de la tourelle
snd_dtq (CanTx,comm.msg);
go.data.id='V';
go.data.rtr=0;
go.data.val=10; //consigne de vitesse de la voiture
snd_dtq (CanTx,comm.msg);
snd_dtq (CanTx,go.msg);
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;
//rcv_dtq (CanRx,&reponse.msg); // Attente de la reponse
alpha=periph[ADDR('R')].val;
dly_tsk(100);
//alpha = reponse.data.val;
}
}
......
if (alpha!=consignealpha)teta = k*(consignealpha - alpha);
}
/*void asservRoue(){
void asservRoue(){
CanFrame angle;
CanFrame angleroues;
CanFrame demandeU;
CanFrame reponseU;
while(1){
angle.data.id='D';
angle.data.rtr=0;
angle.data.val=angleRoue; //consigne d'angle des roues de la voiture
angleroues.data.id='D';
angleroues.data.rtr=0;
angleroues.data.val=angleRoue; //consigne d'angle des roues de la voiture
snd_dtq (CanTx,angle.msg);
snd_dtq (CanTx,angleroues.msg);
demandeU.data.id='U';
demandeU.data.rtr=1;
snd_dtq (CanTx,demandeU.msg); //Interrogation du peripherique
rcv_dtq (CanRx,&reponseU.msg); //Attente de la reponse
distancemur = reponseU.data.val;
//rcv_dtq (CanRx,&reponseU.msg); //Attente de la reponse
if (periph[ADDR('U')].val < 1000){
distancemur = periph[ADDR('U')].val;
}
dly_tsk(6);
}
}*/
}
/*void asservangleroue(){
if (distancemur!=consignedistance)angleRoue = (consignedistance - distancemur);
}*/
void asservangleroue(){
if (distancemur != consignedistance)angleRoue=kp*(consignedistance - distancemur);
//if (distancemur < 400)angleRoue = -200;
//if ((distancemur < 900)&&(distancemur > 400))angleRoue = 0;
//if (distancemur > 900)angleRoue = 200;
}
void AsservVitesse(){
CanFrame vitesse;
CanFrame demandeCapteur;
while(1){
demandeCapteur.data.id='C';
demandeCapteur.data.rtr=1;
snd_dtq (CanTx,demandeCapteur.msg); // demande couleur capteur
pistebleue = periph[ADDR('C')].val;
CouleurCapteur = periph[ADDR('C')].val>>2;
if ((CouleurCapteur == 0x1580)||(CouleurCapteur == 0x1581)) {
consigneVitesse = 65; // 65 sur la piste verte
}
else {
consigneVitesse = 25; // 35 piste verte
}
//if (pistebleue == 0x5604)consigneVitesse = 40; //d?c?l?ration pour le saut piste bleue
vitesse.data.id='V';
vitesse.data.rtr=0;
vitesse.data.val=consigneVitesse; //consigne de vitesse de la voiture
snd_dtq (CanTx,vitesse.msg);
dly_tsk(100);
}
}
branch/schiano/Emb_App/conf_noyau.cfg
};
task[]{
entry_address = asserv0();
name = ID_asserv0;
stack_size = 256;
stack_section = stack;
priority = 4;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = asservRoue();
name = ID_asservRoue;
stack_size = 256;
......
};
task[]{
entry_address = asserv0();
name = ID_asserv0;
entry_address = AsservVitesse();
name = ID_AsservVitesse;
stack_size = 256;
stack_section = stack;
priority = 4;
priority = 3;
initial_start = OFF;
exinf = 0x0;
};
......
exinf = 0x0;
start = OFF;
phsatr = OFF;
interval_counter = 150;
interval_counter = 50;
phs_counter = 0x0;
};
vdataqueue[]{
name = QdmTouche;
wait_queue = TA_TFIFO;

Formats disponibles : Unified diff