LCOV - code coverage report
Current view: top level - Filter - SlewLimiter.h (source / functions) Hit Total Coverage
Test: lcov.info Lines: 2 2 100.0 %
Date: 2026-09-09 11:02:08 Functions: 1 1 100.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : /* slew rate limiting filter. This is used to prevent oscillation of a
       4             :  * controller by modifying the controllers output based on a maximum
       5             :  * slew rate
       6             : */
       7             : 
       8             : #include <stdint.h>
       9             : #include "LowPassFilter.h"
      10             : 
      11             : #define SLEWLIMITER_N_EVENTS 2  // number of positive and negative consecutive slew rate exceedance events recorded where a value of 2 corresponds to a complete cycle 
      12             : 
      13             : class SlewLimiter {
      14             : public:
      15             :     SlewLimiter(const float &slew_rate_max, const float &slew_rate_tau);
      16             : 
      17             :     CLASS_NO_COPY(SlewLimiter);
      18             : 
      19             :     /*
      20             :       apply filter to sample, returning multiplier between 0 and 1 to keep
      21             :       output within slew rate
      22             :     */
      23             :     float modifier(float sample, float dt);
      24             : 
      25             :     /*
      26             :       get last oscillation slew rate
      27             :      */
      28   144423234 :     float get_slew_rate(void) const {
      29   144423234 :         return _output_slew_rate;
      30             :     }
      31             : 
      32             : private:
      33             :     const float &slew_rate_max;
      34             :     const float &slew_rate_tau;
      35             :     LowPassFilterFloat slew_filter;
      36             :     float _output_slew_rate;
      37             :     float _modifier_slew_rate;
      38             :     float last_sample;
      39             :     float _max_pos_slew_rate;
      40             :     float _max_neg_slew_rate;
      41             :     uint32_t _max_pos_slew_event_ms;
      42             :     uint32_t _max_neg_slew_event_ms;
      43             :     uint8_t _pos_event_index;
      44             :     uint8_t _neg_event_index;
      45             :     uint32_t _pos_event_ms[SLEWLIMITER_N_EVENTS];
      46             :     uint32_t _neg_event_ms[SLEWLIMITER_N_EVENTS];
      47             :     bool _pos_event_stored;
      48             :     bool _neg_event_stored;
      49             : };

Generated by: LCOV version 1.14