📄 pid.c
字号:
#include "includes.h"
#include "Pid.h"
#include "menu.h"
extern SetDat set_dat;
void Px(int *p,char n)
{
int i;
int j;
int tmp;
for(i = 0;i<n;i++)
{
tmp = *(p+i);
for(j = i;j<n;j++)
{
if(tmp>*(p+j))
{
tmp = *(p+j);
*(p+j) = tmp;
}
}
*(p+i) = tmp;
}
}
int aver(int *p,char n)
{
int i;
int tmp = 0;
for(i = 0;i<n;i++)
{
tmp += *p;
p++;
}
return( tmp/n);
}
void pid_init(pid *p)
{
p->errsum = 0;
p->err1 = 0;
p->err2 = 0;
p->kp = 300;
p->kpadj=0;
p->ki = 0;
p->kd = 30000;
p->feed = 0;
p->ut = 0;
p->setval = set_dat.SetTemp;
}
void pid_calc(pid* p)
{
int i;
// p->kp = set_dat.pidkp;
// p->kd = set_dat.pidkd<<3; //应该乘10,这里左移3相当乘以8,
p->kp = 350;
p->kd = 12800;
p->setval = (set_dat.SetTemp << 15)/6000 + 1;
// p->setval = set_dat.SetTemp;
p->err = p->setval- p->feed;
// p->errsum += error;
p->derr = p->err - p->err1;
p->err2 = p->err1;
p->err1 = p->err;
i = p->err;
p->kp +=p->kpadj;
// p->kp = set_dat.Number;
// p->ut = p->kp * error + p->ki * p->errsum + p->kd * derror;
p->ut = p->kp * p->err + p->kd * p->derr + 2000; //set_dat.pidext;
// i = (unsigned short) p->ut;
// p->ut = 0xffff - i;
// p->ut /= 2;
/* if(p->feed == p->setval)
{
p->ut = 90;
}
else if(p->feed > p->setval)
{
p->ut = 10;
} */
/* if(i<-1)
{
p->ut = 10;
} */
if(p->ut<=10)
p->ut = 10;
else if(p->ut >40000)
p->ut = 40000;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -