初级会员

- 积分
- 132
- 金钱
- 132
- 注册时间
- 2015-6-18
- 在线时间
- 129 小时
|
1金钱
本帖最后由 xiaobudonglaoshi 于 2016-7-5 17:09 编辑
#include "pid.h"
float PP=0.5,II=0.5,DD=0;
double SumError=0,PrevError=0,LastError=0;
int dError=0,Error=0;
void PID_init(void)
{
Error=0;SumError=0;LastError=0;
}
void PIDcompute(unsigned int Target,unsigned int Real)
{
/*--------------------------------------------------------------------
根据设定及采集值进行计算PID调节,计算pwm输出值
--------------------------------------------------------------------*/
float j=0.0,i;
Error =(Target-Real);
SumError +=Error;
dError=Error-LastError;
LastError=Error;
i=PP;
j=Error*i;
i=II;
j=j+SumError*i;
i=DD;
j=j+dError*i;
j=j/100;
if(j>=hArrPwmVal)OutPwmValue=hArrPwmVal;
else if(j<1)OutPwmValue=1;
else OutPwmValue=j;
}
其中: j=j/100;
if(j>=hArrPwmVal)OutPwmValue=hArrPwmVal;
else if(j<1)OutPwmValue=1;
else OutPwmValue=j;
这里有点看不懂 我自己算了下 感觉不对啊。。。。
(这是用的STM8S:
unsigned int hArrPwmVal = ((u16)((STM8_FREQ_MHZ * (u32)1000000)/PWM_FREQUENCY));
//PWM信号周期
//hArrPwmVal=1000) |
|