syouichi imamori
/
MulticopterQuadX
Quad X Type Multicopter
Diff: Limiter/Limiter.cpp
- Revision:
- 8:1db19b529b22
- Parent:
- 6:a50e6d3924f1
--- a/Limiter/Limiter.cpp Tue Apr 28 01:48:21 2015 +0000 +++ b/Limiter/Limiter.cpp Sun Feb 21 05:14:57 2021 +0000 @@ -1,37 +1,22 @@ #include "mbed.h" #include "Limiter.h" -Limiter::Limiter(float LIMIT) +Limiter::Limiter(float RATE) { - _limit = LIMIT; - _rate = 0.05; - _last= 0; - skip = false; -} - -void Limiter::differential(float DIFF) -{ - _limit = DIFF; + _rate = RATE; + _lastval = 0.0; } -void Limiter::rate(float RATE) +void Limiter::setup(float _cutoffreq,float _interval) { - _rate = RATE; + _period = 1 / _cutoffreq; + _rate = _period / ( _period + _interval ); + _lastval = 0.0; } -float Limiter::calc(float now) +float Limiter::calc(float _now) { - if ( !skip ) { - skip = true; - return _last = now; - } - float differential = ( now - _last ); -// if ( differential < _limit && differential > -_limit ) _last = now; - if ( differential > _limit ) _last += _limit * _rate; - else { - if ( differential < -_limit ) _last -= _limit * _rate; - else _last = now; - } - return _last; + _lastval = _rate * _lastval + ( 1 - _rate ) * _now; + return _lastval; } ;