Dependencies: mbed
Diff: Moteur.cpp
- Revision:
- 0:1b0dce2e60ba
diff -r 000000000000 -r 1b0dce2e60ba Moteur.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Moteur.cpp Mon Dec 01 21:24:13 2014 +0000 @@ -0,0 +1,145 @@ +#include "Moteur.h" + +//t_asserv en seconde +Moteur::Moteur(PinName pin_pwm1, PinName pin_pwm2, PinName pin_feedback, PinName pin_capteur1, PinName pin_capteur2) : + m1(pin_pwm1),m2(pin_pwm2), + feedbackCurrent(pin_feedback), + capteur1(pin_capteur1), + capteur2(pin_capteur2), + tmr() +{ + this->derniere_mesure = 0; + //INIT DES PWM + this->m1.period(MOT_PERIOD); + this->m2.period(MOT_PERIOD); + this->setPuissance(0); + + //INIT CAPTEUR + this->capteur1.rise(this,&Moteur::interruptCapteurRise); + this->capteur1.fall(this,&Moteur::interruptCapteurFall); +} + +/*-1 : full marche arrière + 1 : full marche avant + */ +void Moteur::setPuissance(float p) +{ + if (p>0) { + this->m1.write(0); + this->m2.write(p); + }else{ + this->m1.write(-p); + this->m2.write(0); + } +} + +void Moteur::test1() +{ + //RAZ DES SORTIES + this->m1.write(0.0f); + this->m2.write(0.0f); + + //DEBUT SEQUENCE DE TEST + xbee.printf("Debut Test Propulsion\n"); + this->m1.write(0.5); + xbee.printf("M1 = 0.5\n"); + wait(10.0f); + this->m1.write(0); + this->m2.write(0.5); + xbee.printf("M2 = 0.5\n"); + wait(10.0f); + this->m2.write(0); + xbee.printf("Fin Test Propulsion\n"); +} + +void Moteur::test2() +{ + //RAZ DES SORTIES + this->m1.write(0.0f); + this->m2.write(0.0f); + + //DEBUT SEQUENCE DE TEST + xbee.printf("Debut Test Propulsion\n"); + this->m1.write(0.5); + xbee.printf("M1 = 0.5\n"); + wait(10.0f); + this->m1.write(0); + this->m2.write(0.5); + xbee.printf("M2 = 0.5\n"); + wait(10.0f); + this->m2.write(0); + xbee.printf("Fin Test Propulsion\n"); +} + + +void Moteur::etalonnage() { + xbee.printf("ETALONNAGE\n"); + for(int i=0;i<256;i++) { + this->m1.write((float)i/256.0f); + xbee.printf("D1 : %d\n",i); + wait(0.1f); + } +} + + +void Moteur::asserv() +{ + //Application de la nouvelle commande + this->setPuissance(regulateur.getCommande(this->erreur)); +} + +void Moteur::setKp(float k) +{ + this->regulateur.setKp(k); +} +void Moteur::setKi(float k) +{ + this->regulateur.setKp(k); +} +void Moteur::setKd(float k) +{ + this->regulateur.setKp(k); +} + + +void Moteur::interruptCapteurRise() +{ + this->mesure(); + this->majErreur(); + this->asserv(); +} + +void Moteur::interruptCapteurFall() +{ + this->mesure(); + this->majErreur(); + this->asserv(); +} + +void Moteur::mesure() +{ + this->derniere_mesure = 1/this->tmr.read(); + if(this->capteur2) { + this->derniere_mesure = -this->derniere_mesure; + } + this->tmr.reset(); +} + +void Moteur::majErreur() +{ + float e_prec = this->erreur.p; + + this->erreur.p = this->derniere_mesure - this->vitesse_consigne; + this->erreur.i += this->erreur.p; + this->erreur.d = this->erreur.p - e_prec; +} + +float Moteur::getMesure() +{ + return this->derniere_mesure; +} + +void Moteur::setVitesse(float v) +{ + this->vitesse_consigne = v; +} \ No newline at end of file