解释 e = set - DATE; //目标值 - 实际值 ec = e - lastE; //误差变化率 sumE += e; lastE = e; if (set > 2) { OUT = fuzzy(e, ec);
时间: 2024-04-26 19:22:51 浏览: 16
这段代码实现了 PID 控制器的核心算法。首先计算误差 e,即目标值 set 减去实际值 DATE;然后计算误差变化率 ec,即当前误差 e 减去上一次误差 lastE。接着,将误差 e 累加到 sumE 中,并更新 lastE 为当前误差 e。最后,如果目标值 set 大于 2,调用 fuzzy 函数来计算 PID 控制器的输出值 OUT。其中,e 和 ec 是 fuzzy 函数的输入参数,表示当前误差和误差变化率;OUT 是 fuzzy 函数的返回值,表示 PID 控制器的输出值,即比例、积分和微分部分的输出值。
相关问题
解释int speed_pid() { //int tar = set,cur = DATE; //目标值TAR , 实际值CUR int e = -1,ec = -2.6; // tar=set; // cur=DATE; static PID pid= {0.02, 0.3, 0}; //赋予初值kp,ki,kd static int sumE = 0; //累加偏差 static int lastE = 0; PID OUT = {0, 0, 0}; e = set - DATE; //目标值 - 实际值 ec = e - lastE; //误差变化率 sumE += e; lastE = e; if (set <= 6) { return set; } // 目标值大于2,进行模糊控制和比例积分微分控制 OUT = fuzzy(e, ec); return (pid.Kp + OUT.Kp) * e + (pid.Kd + OUT.Kd) * ec + (pid.Ki + OUT.Ki) * sumE; }
这是一个函数定义,函数名称为 `speed_pid`,该函数没有参数。函数的作用是根据输入的目标值和实际值,计算出一个控制量,以控制电机的转速。
函数内部首先定义了一些变量和常量,包括目标值 `set`、实际值 `DATE`、误差 `e`、误差变化率 `ec`、累加偏差 `sumE` 和上一次的误差 `lastE`,以及一个 PID 结构体类型的变量 `pid` 和一个 `OUT` 变量。
之后,函数根据目标值和实际值计算出误差 `e` 和误差变化率 `ec`,并将误差 `e` 加入到累加偏差 `sumE` 中。接着,函数根据目标值 `set` 的大小,分别进行模糊控制和比例积分微分控制。
如果目标值 `set` 小于等于6,则直接将输出设置为目标值 `set`,表示不进行任何控制,直接输出目标值。这是因为目标值小于等于6时,要求时时电压与设置电压保持一致,因此不需要进行控制。
如果目标值 `set` 大于6,则进行模糊控制和比例积分微分控制,将最终的控制量返回。
解释return fuzzy_PID; } int speed_pid() { //int tar = set,cur = DATE; //目标值TAR , 实际值CUR int e = -1,ec = -2.6; // tar=set; // cur=DATE; static PID pid= {0.02, 0.3, 0}; //赋予初值kp,ki,kd static int sumE = 0; //累加偏差 static int lastE = 0; PID OUT = {0, 0, 0}; e = set - DATE; //目标值 - 实际值 ec = e - lastE; //误差变化率 sumE += e; lastE = e; if (set > 2) { OUT = fuzzy(e, ec); return (pid.Kp+OUT.Kp)*e + (pid.Kd+OUT.Kd)*ec + (pid.Ki+OUT.Ki)*sumE; } else { OUT.Kp = OUT.Ki = OUT.Kd = set; } }
这是一个函数定义,函数名称为 `speed_pid`,该函数没有参数。函数的作用是根据输入的目标值和实际值,计算出一个控制量,以控制电机的转速。
函数内部首先定义了一些变量和常量,包括目标值 `set`、实际值 `DATE`、误差 `e`、误差变化率 `ec`、累加偏差 `sumE` 和上一次的误差 `lastE`,以及一个 PID 结构体类型的变量 `pid` 和一个 `OUT` 变量。
之后,函数根据目标值和实际值计算出误差 `e` 和误差变化率 `ec`,并将误差 `e` 加入到累加偏差 `sumE` 中。接着,函数根据目标值 `set` 的大小,分别进行模糊控制和比例积分微分控制。
如果目标值 `set` 大于2,则调用 `fuzzy` 函数进行模糊控制,得到的输出结果保存在 `OUT` 变量中,然后将模糊控制的输出和比例积分微分控制的输出加权求和,并返回最终的控制量。
如果目标值 `set` 小于等于2,则将模糊控制的输出设置为目标值 `set`,表示只进行模糊控制,然后直接返回模糊控制的输出作为最终的控制量。