Aller au contenu


Photo
- - - - -

Robot Suiveur de Ligne 2008


  • Veuillez vous connecter pour répondre
8 réponses à ce sujet

#1 PZaf

PZaf

    Habitué

  • Membres
  • PipPip
  • 249 messages
  • Location:Toulon

Posté 03 janvier 2008 - 09:14

Bonsoir,

Venant d'inscrire notre suiveur de ligne pour Montpellier 2008 et continuant les tests, je me pose une question concernant la MLI.
Comment réalisez-vous votre MLI sur vos robots ?

Pour ma part, j'incrémente une variable de 0 à 10 à chaque interruption et suivant une valeur donnée, je mets les moteurs en fonctionnement ou pas.
Mieux que des mots, voici un exemple :

*****
if (MLI == 10)
{
MLI = 0;
}

if (Moteur_Command == Avance || Moteur_Command == DroiRap || Moteur_Command == GaucRap)
{
if (MLI_Mo > MLI)
{
Vit_Dr = 1;
Vit_Ga = 1;
}
else
{
Vit_Dr = 0;
Vit_Ga = 0;
}
}
if (Moteur_Command == Gauche)
{
if (MLI_Mo > MLI)
{
Vit_Dr = 1;
Vit_Ga = 0;
}
else
{
Vit_Dr = 0;
Vit_Ga = 0;
}
}
if (Moteur_Command == Droite)
{
if (MLI_Mo > MLI)
{
Vit_Ga = 1;
Vit_Dr = 0;
}
{
Vit_Ga = 0;
Vit_Dr = 0;
}
}
if (Moteur_Command == Arret)
{
Vit_Dr = 0;
Vit_Ga = 0;
}

MLI++;
****

Par contre je ne trouve pas que ce soit très efficace et je me demande même si ça ne me génère pas de l'inertie.

Merci de vos réponses.

#2 JEF

JEF

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 819 messages
  • Gender:Male
  • Location:St Cannat (13)

Posté 03 janvier 2008 - 09:50

salut, perso, j'utilise sur les 18F la sortie CCP1, une sortie speciale pour les MLI. si tu veux, j'ai la boucle quelque pars. je peu te la retrouver.

Chaque jour est le premier du reste de ta vie.


#3 Matthieu

Matthieu

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 604 messages
  • Gender:Male

Posté 03 janvier 2008 - 09:59

Moi , j'utilise aussi les PWM , mais sur un 16F876

#4 PZaf

PZaf

    Habitué

  • Membres
  • PipPip
  • 249 messages
  • Location:Toulon

Posté 03 janvier 2008 - 10:10

merci pour vos réponses.

JEF je suis intéressé par ta boucle (si tu la trouves rapidement).

Paterson, j'utilise un 876 aussi. Comment utilises-tu ton PWM ? Si tu as un exemple, ça m'intéresse.

#5 Matthieu

Matthieu

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 604 messages
  • Gender:Male

Posté 03 janvier 2008 - 10:32

Avec CSS , sa donne sa :

void main()
{
///////////////////////////////////////////:
//A placer au démarrage ( hors des boucles . ) 
//
////////////////////////////////////////////
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   setup_timer_2(T2_DIV_BY_16,255,1);
   setup_ccp1(CCP_PWM);
   setup_ccp2(CCP_PWM);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

//////////////////////////////////////
//Dans ton programme tu as juste sa 
//Ps : je lui demander une fréquence de 1 K avec un quartz de 20 M , donc verrifier
/////////////////////////////////////

ccp_1=255; // pwm1 a 100 %
ccp_2=50; //PWM2 a 50 / 255 éme
}

Ps : j'ai fait vite fait la , car je voulais pas sortir mon programme ( sa seras la surprise lors du concours ... )

http://z.oumnad.123.fr/Microcontroleurs/PIC16F876-77-V1.pdf

P46 , sa peux t'aider pour comprendre se timer , car tu ne travaille peut être pas avec CSS .

Sinon tu travaille avec quelle compilateur ?

#6 JEF

JEF

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 819 messages
  • Gender:Male
  • Location:St Cannat (13)

Posté 04 janvier 2008 - 08:06

c'etait mon prof d'electronique qui l'avait trouver sur internet et elle m'a servit au LED IR de wild wild bot, donc ça marche impecable. je te l'amene ce soir.

Chaque jour est le premier du reste de ta vie.


#7 _Yoda

_Yoda

    Habitué

  • Membres
  • PipPip
  • 152 messages
  • Gender:Male

Posté 04 janvier 2008 - 10:29

Un MLI peut être réaliser logiciellement ou matériellement.
C'est à dire soit utiliser une boucle d'interruption incrémentant un compteur MLI++, soit utiliser une ressource matérielle interne qui fait la même chose pendant que le prog fait autre chose.
Certains PIC possèdent une ressource (certains 18 broches), d'autres 2 (28 broches et plus) d'autres encore 4 6 8, mais c'est une autre histoire.
La ressource interne doit être initialisée au début d'un prog pour définir, la période, les broches utilisées.
Puis pendant le prog, il suffit de mettre à jour le rapport cyclique quand on le veut.

voici un exemple écrit en C pour le compilateur CCS
// Partie Initialisation
Set_tris_C(0x00); // Lignes RC1 et RC2 en sortie
output_C(0x00); // Mettre les deux lignes RC1 et RC2 à 0
setup_timer_2(T2_DIV_BY_4, 127, 1); // Choisir la période du signal MLI
// et sa précision
set_pwm1_duty(0); // rapport cyclique à 0%
set_pwm2_duty(0) ; // rapport cyclique à 0%
setup_ccp1(CCP_PWM); // Configure CCP1 pour générer MLI
setup_ccp2(CCP_PWM); // Configure CCP2 pour générer MLI
//==============================================================
// Changement du rapport cyclique dans le programme
set_pwm1_duty(64); // rapport cyclique de 50% sur RC1
set_pwm2_duty(96); // rapport cyclique de 75% sur RC2

Amusez vous bien B)
[url="http://www.robot-sumo.fr/"]Site Officiel du Tournoi de Robots Sumo
[/url]

#8 JEF

JEF

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 819 messages
  • Gender:Male
  • Location:St Cannat (13)

Posté 04 janvier 2008 - 05:44

void init_pwm(void)
{
CCP1CON = 0b00001100; // mode pwm
PR2 = 128; // periode
CCPR1L = PR2 >> 1; // D = 50
T2CON = 0b00000100; // ON prescale = 1
}

Chaque jour est le premier du reste de ta vie.


#9 PZaf

PZaf

    Habitué

  • Membres
  • PipPip
  • 249 messages
  • Location:Toulon

Posté 05 janvier 2008 - 06:47

Merci pour toutes vos réponses.
Je vais analyser tout ça et reviendrais (certainement) vers vous pour d'autres questions ;)




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users