_var_pid.c 672 字节
#include "var_pid.h"

float Variable_KP(float err, transform_pid_conf_t conf)
{
    return conf.KP_a + conf.KP_b * (1 - expf(-conf.KP_c * fabsf(err)));
}

float Variable_KI(float err, transform_pid_conf_t conf)
{
    return conf.KI_a * expf(-conf.KI_c * fabsf(err));
}

float Variable_KI_Gain(float err, transform_pid_conf_t conf)
{
    if (fabsf(err) > conf.KI_e)
    {
        return 1;
    }
    else
    {
        return conf.KI_1 * expf(-conf.KI_0 * fabsf(err));
    }
}

float Variable_KD(float err, transform_pid_conf_t conf)
{
    if (conf.KD_a <= conf.KD_b)
    {
        return 0;
    }

    return conf.KD_a - conf.KD_b * (1 - expf(-conf.KD_c * fabsf(err)));
}