如何衡量变量的上升率

时间:2016-02-15 16:38:19

标签: c++ loops

我每1秒/分钟读取一次温度值(此速率并不重要)。我想测量这个温度,这样如果它开始快速上升超过一定的阈值,我就会采取行动。

如果温度超过30度(无论如何),我会增加风扇速度。

我想我必须做一些事情,例如将旧温度设置为新温度,然后每次循环将旧温度设置为引擎的当前温度。但我不确定是否需要使用数组作为引擎温度。

1 个答案:

答案 0 :(得分:0)

当然,您只能存储一个旧样本,然后检查差异,如:

<em>
从C的角度来看,这是可以的,但从计量学的角度来看非常糟糕。您应该考虑对信号进行一些调节(在这种情况下为温度),以消除任何尖峰。

当然你可以添加信号调节信。对于(简单)示例,请查看Simple Moving Avarage:https://en.wikipedia.org/wiki/Moving_average

如果你想“正确地”控制风扇速度,你应该考虑学习一下PID控制器:https://en.wikipedia.org/wiki/PID_controller

简单的离散PID: PidController.h:

bool isHot(int sample) {
    static int oldSample = sample;
    return ((sample > 30) || (sample - oldSample > threshold));
}

PidController.cpp

class PidController
{
public:
    PidController();
    double sim(double y);
    void UpdateParams(double kp, double ki, double kd);
    void setSP(double setPoint) { m_setPoint = setPoint; } //set current value of r(t)

private:
    double m_setPoint; //current value of r(t)
    double m_kp;
    double m_ki;
    double m_kd;
    double m_outPrev;
    double m_errPrev[2];
};