kevin eccli
/
Freescale_CupV4
Adaptation K22F
Moteur.cpp
- Committer:
- singularity
- Date:
- 2014-12-16
- Revision:
- 0:6004a7230f87
File content as of revision 0:6004a7230f87:
#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; }