Pages: [1] 2   Go Down
Author Topic: Aide pour creation d'un PID  (Read 2623 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 45
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Voila j'ai un projet de stage ou je dois reguler un MAXON MOTOR relié a un MD22  et ce derniers connecté à la carte Arduino Diecimila mais voila je ne vois pas par ou commencer. J'ai pensé de m'aider de cette librairie <PID_Beta6.h> mais elle ne semble pas vraiment compatible avec mon MD22 je ne sais vraiment pas quoi faire. Aidez moi plz   smiley-grin
« Last Edit: April 12, 2010, 10:21:52 am by freeman32 » Logged

France - Pays de la Loire
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Bidouilleur du dimanche ... et des autres jours de la semaine ...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour ( un p'tit bonjour, ça coute pas cher  :smiley )

D'après ce que j'ai vu sur google, il s'agit de ce type de moteur ? : http://www.directindustry.fr/prod/maxon-motor/moteur-electrique-brushless-dc-7173-322189.html    et pour la commande c'est bien ça ? : http://www.lextronic.fr/P1917-module-de-commande-de-moteur-md22.html.

Si c'est bien ça, ça marche en I2C donc il te faut la librairie "wire". Regardes cela en détail pour comprendre comment ça marche c 'est très simple ).

Après, décortiques la doc : http://www.robot-electronics.co.uk/htm/md22tech.htm et recontactes nous quand tu en seras à écrire le sketch.

Poses toi aussi la question de savoir exactement ce que tu veux faire avec cela car ce sera plus simple pour t'aider   smiley-wink

A+
Logged

Celtic Kingdom
Offline Offline
Sr. Member
****
Karma: 2
Posts: 455
hard oui no!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il faudrait savoir si le moteur est brushless ou simplement en CC, car le module ND22 est _à priori_ dédié aux moteurs CC standards (?).
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 45
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour ^^

bon  alors le moteur est un maxon DC motor 118778 donc un avec brush et la commande est bien cela http://www.lextronic.fr/P1917-module-de-commande-de-moteur-md22.html et je dois faire un PID je vois pas trop quoi dire d'autre sa me semble claire  smiley-razz d'ailleurs voila un petit programme que j'ai réaliser qu'es ce que vous en pensez??

#include <PID_Beta6.h>


double Setpoint, Input, Output;

unsigned long time;


PID pid(&Input, &Output, &Setpoint,2,5,1);


void setup()
{
  pid.SetOutputLimits(-4000,4000);
  Setpoint = 2000;
  pid.SetMode(AUTO);
  
}

void loop()
{
  time=millis();
  if(abs(Setpoint-Input)>100)pid.SetTunings(6,4,1);

  else pid.SetTunings(3,4,1);

  Input = analogRead(0);
  pid.Compute();
  if(millis()>10000) Output=0;
}


enfin voila je crois que j'ai a peu près tout dit et smiley-grin
« Last Edit: April 13, 2010, 05:06:35 am by freeman32 » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 45
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

j'ai procede a quelques modifications de mon programme
Logged

France - Pays de la Loire
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Bidouilleur du dimanche ... et des autres jours de la semaine ...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Utilises le "insert code" ( logo # au dessus de la zone de texte quand tu écris ton message ) pour afficher ton sketch, ce sera plus lisible :

Code:
#include <PID_Beta6.h>


double Setpoint, Input, Output;

unsigned long time;


PID pid(&Input, &Output, &Setpoint,2,5,1);


void setup()
{
 pid.SetOutputLimits(-4000,4000);
 Setpoint = 2000;
 pid.SetMode(AUTO);
 
}

void loop()
{
 time=millis();
 if(abs(Setpoint-Input)>100)pid.SetTunings(6,4,1);

 else pid.SetTunings(3,4,1);

 Input = analogRead(0);
 pid.Compute();
 if(millis()>10000)Input=0;
}

C'est pas mieux ?

A+
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 45
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah merci ^^
Logged

France - Pays de la Loire
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Bidouilleur du dimanche ... et des autres jours de la semaine ...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Y a pas de quoi.

Par contre, je ne comprends pas bien comment tout cela fonctionne : il n'y a point de reference à l'utilisation d bus I2C dans ton prog ??? :o

Après quelques recherches sur le net SANS RENTRER DANS LES DETAILS , les exemples qui utilisent la librairie PID ne semblent pas utiliser un controleur comme le tiens.

Ton programme fonctionne ? comment fais tu pour gèrer le bus I2C alors que la librairie n'est pas prévue pour ?
Comment est branchée ta carte ?

A+
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3626
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
comment fais tu pour gèrer le bus I2C alors que la librairie n'est pas prévue pour ?
A priori la carte supporte plusieurs modes d'interface.
[size=12]- Interface I2C™ (8 cartes pourront être ainsi pilotées et différents paramètres tels que la vitesse, l'accélération, la valeur indicative de la température et du courant de limitation, etc... peuvent être géré).
  
- Signal analogique: 0 - 2,5 - 5 V
  (0 V -> marche arrière pleine vitesse)
  (2,5 V -> Stop)
  (5 V -> Marche avant pleine vitesse)
 
- Signal analogique: 0 - 5V avec signaux de sélection de sens séparés
 
- Mode RC (pilotage via récepteur modélisme)
 
- Via un signal "PWM"[/size]
[/tt]
(extrait de la doc sur le site Lextronic)
Logged

France - Pays de la Loire
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Bidouilleur du dimanche ... et des autres jours de la semaine ...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour la précision, fdufnews, ... j'avais pas tout lu  :-[

A+
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 45
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

eh ouai ^^ j'ai voulu essayer avec le mode Signal analogique: 0 - 2,5 - 5 V je pense que sa doit fonctionner enfin j'espère ^^
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 45
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah j'ai oublié d'introduire la commande au moteur dans mon programme mais j'ai vraiment aucune idée comment. Si quelqu'un peut m'aider ?  smiley-grin [smiley=2vrolijk_08.gif]
« Last Edit: April 14, 2010, 04:50:48 am by freeman32 » Logged

Massongex, Suisse
Offline Offline
Full Member
***
Karma: 3
Posts: 169
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

Il faudrait que tu te documentes sur la façon de communiquer avec l'i2c (ici) pour te familiariser un peu avec la chose. Je ne pense pas que tu trouveras ici du code "tout cuit", mais des âmes charitables qui te permettront d'avancer en te conseillant et corrigeant ce que tu auras déjà fait.

Il te faut chercher un peu sur le net avant de poser des questions, et essayer d'être le plus précis et clair possible afin qu'un maximum de gens puisse te répondre. J'espère que tu ne m'en veux pas trop pour ce genre de réflexion.

Franssoa

PS : c'est quoi un PID ?
PPS : s'il te plait, fait un effort dans la rédaction de tes posts, j'ai parfois (...) du mal à comprendre. Avant de poster, tu utilises le bouton "refresh preview" et tu te poses la question si ce que tu vois avait été écrit par un autre, est-ce que tu aurais envie d'y répondre.
PPPS : Ces derniers temps cela fait quelques posts que je vois (très) mal rédigés, et je vais passer pour un rabat-joie, alors si d'autres ont le même soucis de compréhension, n'hésitez pas à vous manifester  smiley-wink
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 45
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour smiley-grin
bon je vais essayer de faire un petit effort ^^. Bon un PID ( proportionnel intégrateur et dérivé ) est utilisé pour réguler un moteur. Et pour le c2i j'essayerai plus tard. Ben voila d'autres questions ? :smiley
« Last Edit: April 14, 2010, 04:49:23 am by freeman32 » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 45
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bon voila j'ai creer un progamme qui permet de simuler la regulation d'une fonction de transfert du 1er ordre mais il ne marche pas ... smiley-sad si quelqu'un peut m'aider smiley-grin
Code:
#include <PID_Beta6.h>

#define alpha 0,95
double Setpoint, Input, Output;
double Input2;
unsigned long time;


PID pid(&Input, &Output, &Setpoint,2,5,1);

double fonctiontrans(){
  double k;
  k=3;
  Input2=alpha*Input+k*(1-alpha)*Output;

}

void setup()
{
  Serial.begin(9600);
  Setpoint = 2000;
  pid.SetOutputLimits(-4000,4000);
  pid.SetMode(AUTO);
  pid.SetSampleTime(200);
}

void loop()
{

  int i;
  i=0;
  Input=0;
  Output=0;
  do{

    if(abs(Setpoint-Input)>100)
      pid.SetTunings(6,4,1);
    else
      pid.SetTunings(3,4,1);
    Input=fonctiontrans();
    pid.Compute();
    i=i+1;
    Serial.print( i );
    Serial.print(' ');
    Serial.print(Input);
    Serial.print(' ');
  }
  while(i<200);
}


« Last Edit: April 14, 2010, 07:28:21 am by freeman32 » Logged

Pages: [1] 2   Go Up
Jump to: