28 lines
646 B
C++
28 lines
646 B
C++
#pragma once
|
|
|
|
/* slew rate limiting filter. This is used to prevent oscillation of a
|
|
* controller by modifying the controllers output based on a maximum
|
|
* slew rate
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
#include "LowPassFilter.h"
|
|
|
|
class SlewLimiter {
|
|
public:
|
|
SlewLimiter(const float &slew_rate_max, const float &slew_rate_tau);
|
|
|
|
/*
|
|
apply filter to sample, returning multiplier between 0 and 1 to keep
|
|
output within slew rate
|
|
*/
|
|
float modifier(float sample, float dt);
|
|
|
|
private:
|
|
const float &slew_rate_max;
|
|
const float &slew_rate_tau;
|
|
LowPassFilterFloat slew_filter;
|
|
float slew_amplitude;
|
|
float last_sample;
|
|
};
|