Révision 76
Ajouté par zaschiano il y a plus de 6 ans
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
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