Pages: [1]   Go Down
Author Topic: [parte 2]Muoviamo i motori col PID  (Read 978 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10472
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quì presento 2 classi: la classe Motore, molto semplice, e la classe PID, che però implementa solo la parte P (spero che basti!  smiley-wink)

Motore.h:
Code:
#ifndef Motore_h
#define Motore_h

#include "WProgram.h"

class Motore{
  public:
  Motore(int);
  void update(int actualPower);
  private:
  int PWMpin;
};
#endif

Motore.cpp:
Code:
#import "Motore.h"

#define ENGINEMIN 20
#define ENGINEMAX 230

Motore::Motore(int pin){
  PWMpin=pin;
}

void Motore::update(int actualPower){
  actualPower=constrain(map(actualPower, 0, 255, ENGINEMIN, ENGINEMAX), ENGINEMIN, ENGINEMAX);
  analogWrite(PWMpin, actualPower);
}
ENGINEMIN e ENGINEMAX servono per evitare di fermare del tutto o mandare a massimo regime il motore.
l'input deve essere un numero compreso tra 0 e 255, anche se l'algoritmo risolve il problema di input errati, non lo farà proporzionalmente.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10472
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ed ecco la classe PID:
per capire meglio cosa fa in questo caso è pensata per passare da un angolo attuale ad un altro, e calcolarci la potenza del motore. Ma si tratta di una semplice proporzione, può essere usata anche per gestire temperature ecc...
per maggiori info date un'occhiata quì:
http://igor.chudov.com/manuals/Servo-Tuning/PID-without-a-PhD.pdf

PID.h
Code:
#ifndef PID_h
#define PID_h

class PID{
  public:
  PID(int);
  float update(float, float);
  void setP(int);
  private:
  int P;
};
#endif

PID.cpp
Code:
#include "PID.h"

PID::PID(int p){
  P=p;
}

float PID::update(float angle, float setPoint){
  return P*(setPoint-angle);
}

void PID::setP(int p){
  P=p;
}
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: