我每1秒/分钟读取一次温度值(此速率并不重要)。我想测量这个温度,这样如果它开始快速上升超过一定的阈值,我就会采取行动。
如果温度超过30度(无论如何),我会增加风扇速度。
我想我必须做一些事情,例如将旧温度设置为新温度,然后每次循环将旧温度设置为引擎的当前温度。但我不确定是否需要使用数组作为引擎温度。
答案 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];
};