Rate limiter class.

Dependents:   BLDC_mainProgram L298N-Breakout-Test HBridgeDCMotor STMF302R8_MotorDrive ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers RateLimiter.cpp Source File

RateLimiter.cpp

00001 #include "RateLimiter.h"
00002 
00003 RateLimiter::RateLimiter () {
00004     setLimits(1, -1, 0, 10e-3);
00005 }
00006 
00007 RateLimiter::RateLimiter (float R, float F, float y0, float T_d) {
00008     setLimits(R, F, y0, T_d);
00009 }
00010 
00011 void RateLimiter::reset() {
00012     y0 = 0;
00013 }
00014 
00015 void RateLimiter::setLimits(float R, float F) {
00016     if (R < 0) {
00017         R = -R;
00018     }
00019     if (F > 0) {
00020         F = -F;
00021     }
00022     this->R = R;
00023     this->F = F;
00024 }
00025  
00026 void RateLimiter::setLimits(float R, float F, float y0, float T_d) {
00027     if (R < 0) {
00028         R = -R;
00029     }
00030     if (F > 0) {
00031         F = -F;
00032     }
00033     if (T_d <= 1e-6) {
00034         T_d = 1e-3;
00035     }
00036     this->T_d = T_d;
00037     this->y0 = y0;
00038     this->R = R;
00039     this->F = F;
00040 }
00041  
00042 float RateLimiter::out (float u) {
00043     rate = (u - y0) / T_d;
00044     if (rate > R) {
00045         y = R * T_d + y0;
00046     } else if (rate < F) {
00047         y = F * T_d + y0;
00048     } else {
00049         y = u;
00050     }
00051     y0 = y;
00052     return y;
00053 }