Aller au contenu


Photo
- - - - -

systeme de PMW pas comprid


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

#1 aurlien

aurlien

    Membre

  • Membres
  • 45 messages

Posté 28 août 2010 - 11:38

Et si tu pouvais faire un tout petit effort au niveau de l'orthographe, ça serait vraiment génial ! (Sinon, continue d'être actif et de vouloir progresser, c'est ça le secret !)
Esprit][/color]

voila je vais bientôt faire mon robot mais a lieu d'utiliser 2 servo sa sera 2 moteurs donc j'ai demandé comment variée la vitesse et on ma repondu d'utiliser le PMW truc muche ^^
sauf que j'ai aucune idée pour la programtion.....
si quelqu'un a un bout de code ou pourrai m'expliquer
enfin mercis d'avence ^^


#2 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique
  • Interests:La robotique !

Posté 29 août 2010 - 02:10

Bonsoir !



Le PWM est un signal modulé qui ressemble à ça :

Image IPB



Il sert à commander tout un tas de choses, notamment des servomoteurs.

(Un tas de tutoriels sont disponibles sur internet, avec un petite recherche sur google.)



Pour ma part, j'avais fait un petit code pour contrôler un servo. Il y a deux trois choses qui changent pour le contrôle d'un moteur CC, mais tu devrais pouvoir te faire une idée.







SoftwareServo myservo; // création de l'objet pour contrôler le servo



int potpin = 0; // pin analogique où lire les infos du potentiomètre

int val; // variable où mettre les infos du potards



void setup()

{

myservo.attach(2); // sortie pwm du servo à la pin2

}



void loop()

{

val = analogRead(potpin); // lire la valeur du potentiomètre

val = map(val, 0, 1023, 0, 150); // passer d'une valeur 0-1023 à 0-150



myservo.write(val);



SoftwareServo::refresh();

}[/code]



Et en voici une amélioration, par Thot, du forum de performance robot de l'association Caliban.





SoftwareServo myservo; // création de l'objet pour contrôler le servo



int potpin = 0; // pin analogique où lire les infos du potentiomètre

int val; // variable où mettre les infos du potards

int commande = 0;



void setup()

{

myservo.attach(2); // sortie pwm du servo à la pin2

}



void loop()

{

val = analogRead(potpin); // lire la valeur du potentiomètre

val = map(val, 0, 1023, 0, 150); // passer d'une valeur 0-1023 à 0-150



commande = commande+(val-commande)/2; //permet de faire le mouvement en douceur



myservo.write(commande);

delay(10);// attendre 10 millisecondes



SoftwareServo::refresh();

}[/code]



Pour comprendre le pourquoi de l'amélioration, voir sur le forum de l'association caliban (ici)





J'espère que ça t'aidera ! ;)

#3 aurlien

aurlien

    Membre

  • Membres
  • 45 messages

Posté 29 août 2010 - 08:18

ok mercis je pense que oui sa m'aide ^^

(sinon pour edit dsl je savais pas,et l'orthographe euh...j'essayerai de faire des efforts ^^, puis pour être actif je le resterai ^^)

#4 Maïck

Maïck

    Membre passionné

  • Membres
  • PipPipPip
  • 390 messages
  • Gender:Male
  • Location:Suisse

Posté 29 août 2010 - 04:15

En même temps les routines faites pour contrôler un servo ne fonctionnent pas pour un moteur CC !

La commande d'un servo se fait par une impulsion de 1 à 2 ms toutes les 20ms. Donc un rapport cyclique entre ~5% et ~10%, alors qu'il faudrait un rapport cyclique entre 0% et 100% pour un moteur!

Vraiment pas fameux ces Arduino, tant que tu fait des codes qui sont "prémaché" par eux pas de soucis mais dès que tu veut grailler il faut tout refaire... Autant partir en C tout de suite si on veut réellement programmer !!

#5 aurlien

aurlien

    Membre

  • Membres
  • 45 messages

Posté 29 août 2010 - 06:45

oui mais l'arduino est proche du C,mais moi j'y connai rien...
mais comment tu le ferai en c toi?

#6 Maïck

Maïck

    Membre passionné

  • Membres
  • PipPipPip
  • 390 messages
  • Gender:Male
  • Location:Suisse

Posté 29 août 2010 - 08:50

Moi j'utiliserais un timer générant des interruption à intervals réguliers. (temps à définir suivant résolution désirée, bruits important ou non,...)
A chaque interruption on incrémente un compteur qu'on compare à une valeur de consigne. Si le compteur est en dessous sortie à "1" autrement à "0".

Je doute que tu aie tout compris mais c'est ça la programmation de uP !! :)

#7 miky-mike

miky-mike

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 232 messages
  • Gender:Male
  • Location:Belgique

Posté 29 août 2010 - 09:33

Tout a fait d'accord sur l'utilisation d'un timer et interruption pour cela.


#8 aurlien

aurlien

    Membre

  • Membres
  • 45 messages

Posté 31 août 2010 - 11:55

donc dis moi si j'ai tord
j'allume j'eteind j'allume etc....non>?

#9 miky-mike

miky-mike

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 232 messages
  • Gender:Male
  • Location:Belgique

Posté 31 août 2010 - 12:48

En gros c'est ça mais avec une gestion du temps

#10 aurlien

aurlien

    Membre

  • Membres
  • 45 messages

Posté 03 septembre 2010 - 06:33

ok bon je vais d'abord le faire tourner normalement puis apres je chercherai pour le PMW ^^

#11 robocop

robocop

    Membre passionné

  • Membres
  • PipPipPip
  • 357 messages
  • Gender:Male

Posté 05 septembre 2010 - 06:01

Mais on peut tout à fait utiliser les interruptions avec l'arduino, cf datasheet de l'atmega328.

#12 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique
  • Interests:La robotique !

Posté 06 septembre 2010 - 03:36

Bonjour à tous.



En fouinant un peu sur le net, je suis tombé sur le site de "Fribotte".

Et en regardant leurs tutoriels, j'ai eu l'attention attirée par celui-ci : PIC et servo-moteur.



Dans ce petit tuto, ils expliquent la différence entre le PWM (Pulse-width modulation) et le Signal-code modulated signal

La différence en images :



Image IPB

Le signal PWM.



Image IPB

Le "Signal-code modulated signal".





J'imagine que vous parliez donc plutôt du deuxième.

Et donc, quand on dit que le servo est piloté grâce à un PWM, c'est faux ? (Il me semble que j'ai beaucoup lu ça, je l'ai dis aussi...)

#13 miky-mike

miky-mike

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 232 messages
  • Gender:Male
  • Location:Belgique

Posté 07 septembre 2010 - 06:19

Personnellement c'est du premier que je parlai (pwm)

#14 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique
  • Interests:La robotique !

Posté 08 septembre 2010 - 06:53

Je me rends compte que j'ai encore énormément de chose à apprendre. Heureusement que je vais avoir des cours avec des PIC cette année. J'ai hâte !
J'ai du retard à rattraper...

Tu vois qu'il faut que tu viennes donner des cours ? :D

#15 miky-mike

miky-mike

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 232 messages
  • Gender:Male
  • Location:Belgique

Posté 08 septembre 2010 - 11:39

En électronique/informatique on aura toujours a apprendre.
Moi c'est surtout les finances et le temps qui me manque sinon j'achèterai beaucoup plus de matériel pour tester.

Comme je te l'ai dis, je suis ton projet de près. Et ça me tante bien de venir faire un cours ( en 4 heure il y a moyen d'avoir une bonne base sur les atmega).
Par contre pour le moment j'ai pas beaucoup de temps du fait que je viens de savoir que je passe en 3eme et donc j'ai beaucoup de projet :
- Travailler pour l'école (et notre prof va nous donner beaucoup de boulot)
- Préparer le séminaire car en avril ont présente un projet (robot avec linux ou windows embarqué) à technifuture
- Trouver un stage dans l'informatique embarqué car je comme en janvier jusque juin.
- ...

Enfin je trouverai le temps pour robotix

#16 niglis

niglis

    Membre

  • Membres
  • 61 messages

Posté 15 septembre 2010 - 10:17

Bon je vous donne une petite reponse pour les pwm et du coup les commande moteur.
En fait c'est super simple pour commander un moteur avec un RC ou un pic il faut une carte de commande moteur ou un variateur pour un moteur brushless.
Ensuite c'est simple lorsque vous écrivez un prog vous indiquez:
1° la connection de votre carte: moteur_droit con P1 (moteur constante pate P1 du pic)
2° moteur position zero : moteur_droit=1500 ( voici la frequence de votre PWM soit 15ms position zero de tout les moteurs mais aussi centre pour les servos)
3° la puissance du moteur ( en general c'est une fonction x=x+10 pour qu'il ajoute 10 à chaque boucle )
moteur_droit=moteur_droit+10 ( le principe c'est qu'en ajoutant vous ralentissez et en retranchant vous accelerez)
4° envoyé à la carte moteur pulsout 12,moteur_droit (connection de votre carte moteur P12 ).
Voilà (les commandes que je vous donne sont en basic mais le principe est le même en C ).

#17 aurlien

aurlien

    Membre

  • Membres
  • 45 messages

Posté 17 septembre 2010 - 07:21

hmmm hmmm....bon bin j'ai plus qu'a apprendre a programmer ^^ !
en plus j'ai recus ya pas longtemp mon arduino je vais essayer quelque tests....




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

0 members, 0 guests, 0 anonymous users