mirror of
https://github.com/modelec/odo_STM32.git
synced 2026-01-18 16:27:25 +01:00
101 lines
2.5 KiB
C++
101 lines
2.5 KiB
C++
#include "pidVitesse.h"
|
|
|
|
// Constructeur
|
|
PidVitesse::PidVitesse(float kp, float ki, float kd, float consigneVitesseFinale) : Pid(kp, ki, kd) {
|
|
|
|
this->erreurVitesse = 0;
|
|
this->erreurVitesse_old = 0;
|
|
|
|
this->consigneVitesseFinale = consigneVitesseFinale;
|
|
|
|
this->derivee = 0;
|
|
this->integral = 0;
|
|
|
|
this->nouvelleConsigneVitesse = 0;
|
|
}
|
|
|
|
// Setters
|
|
void PidVitesse::setErreurVitesse(float e) {
|
|
this->erreurVitesse = e;
|
|
}
|
|
|
|
void PidVitesse::setErreurVitesse_old(float e_old) {
|
|
this->erreurVitesse_old = e_old;
|
|
}
|
|
|
|
void PidVitesse::setConsigneVitesseFinale(float vf) {
|
|
this->consigneVitesseFinale = vf;
|
|
}
|
|
|
|
void PidVitesse::setNouvelleConsigneVitesse(float v) {
|
|
this->nouvelleConsigneVitesse = v;
|
|
}
|
|
|
|
void PidVitesse::setDerivee(float d){
|
|
this->derivee = d;
|
|
}
|
|
|
|
void PidVitesse::setIntegral(float i){
|
|
this->integral = i;
|
|
}
|
|
|
|
// Getters
|
|
float PidVitesse::getErreurVitesse() {
|
|
return this->erreurVitesse;
|
|
}
|
|
|
|
float PidVitesse::getErreurVitesse_old() {
|
|
return this->erreurVitesse_old;
|
|
}
|
|
|
|
float PidVitesse::getConsigneVitesseFinale() {
|
|
return this->consigneVitesseFinale;
|
|
}
|
|
|
|
float PidVitesse::getNouvelleConsigneVitesse() {
|
|
return this->nouvelleConsigneVitesse;
|
|
}
|
|
|
|
float PidVitesse::getDerivee(){
|
|
return this->derivee;
|
|
}
|
|
|
|
float PidVitesse::getIntegral(){
|
|
return this->integral;
|
|
}
|
|
|
|
// Méthodes spécifiques
|
|
|
|
float PidVitesse::calculErreurVitesse(float vitesseActuelle) {
|
|
return this->consigneVitesseFinale - vitesseActuelle;
|
|
}
|
|
|
|
void PidVitesse::updateErreurVitesse(float vitesseActuelle) {
|
|
this->erreurVitesse_old = this->erreurVitesse;
|
|
this->erreurVitesse = this->calculErreurVitesse(vitesseActuelle);
|
|
}
|
|
|
|
void PidVitesse::updateNouvelleVitesse(float vitesseActuelle) {
|
|
/*
|
|
La sortie est calculée en combinant les 3 termes :
|
|
- proportionnel : on multiplie kp par l'erreur
|
|
- integral : on multiplie ki par la somme des erreurs passées
|
|
- derivee : on multiplie kd par la variation de l'erreur
|
|
*/
|
|
|
|
|
|
// Mise à jour de l'erreur de vitesse
|
|
this->updateErreurVitesse(vitesseActuelle);
|
|
|
|
// Calcul du terme dérivé
|
|
this->derivee = this->erreurVitesse - this->erreurVitesse_old;
|
|
|
|
// Mise à jour du terme intégral
|
|
this->integral += this->erreurVitesse;
|
|
|
|
// Calcul de la nouvelle consigne de vitesse avec PID
|
|
this->nouvelleConsigneVitesse = this->getKp() * this->erreurVitesse +
|
|
this->getKi() * this->integral +
|
|
this->getKd() * this->derivee;
|
|
}
|