温度控制的PID算法的C语言程序 - 图文(8)

2019-04-14 22:56

RETURN VALUE The new output value for the pid loop.

USAGE #i nclude \

float pid_calc(struct _pid *pid)

{ int err;

float pterm, dterm, result, ferror;

err = (pid->sp) - (pid->pv); if (abs(err) > pid->deadband)

{

ferror = (float) err; /*do integer to float conversion only once*/

pterm = pid->pgain * ferror; if (pterm > 100 || pterm < -100)

{

pid->integral = 0.0;

} else {

pid->integral += pid->igain * ferror;

if (pid->integral > 100.0)

{

pid->integral = 100.0;

}

else if (pid->integral < 0.0) pid->integral = 0.0;

}

dterm = ((float)(err - pid->last_error)) * pid->dgain;

result = pterm + pid->integral + dterm;

}

else result = pid->integral;

pid->last_error = err;

return (result);

}

void main(void)

{

float display_value;

int count=0;

pid = &warm;

// printf(\

I gain, D gain \\n\

// scanf(\

&i_gain, &d_gain);

process_point = 30; set_point = 40; p_gain = (float)(5.2); i_gain = (float)(0.77); d_gain = (float)(0.18);

dead_band = 2;

integral_val =(float)(0.01);

printf(\

D gain \\n\

printf(\

p_gain, i_gain, d_gain);

printf(\

while(count<=20)

{

scanf(\

pid_init(&warm, process_point, set_point); pid_tune(&warm, p_gain,i_gain,d_gain,dead_band); pid_setinteg(&warm,0.0); //pid_setinteg(&warm,30.0);

//Get input value for process point

pid_bumpless(&warm);

// how to display output display_value = pid_calc(&warm); printf(\

//printf(\

count++;

}

} 看贴必回帖

viper_love

TOP

单片机高中生

? 个人空间 ? 发短消息 ? 加为好友 ? 当前离线

3# 大 中 小 发表于 2009-5-23 19:49 只看该作者

谢谢

TOP

蒋辉jh

单片机教授

? 个人空间 ? 发短消息 ? 加为好友 ? 当前离线

viper_love

单片机高中生

? 个人空间 ? 发短消息 ? 加为好友 ? 当前离线 4#

大 中 小 发表于 2009-5-23 19:49 只看该作者

看看

承接: 单片机项目及毕业设计

QQ : 546138373 TEL : 13197105690

TOP

5# 大 中 小 发表于 2009-6-16 18:26 只看该作者

谢谢,万分感谢


温度控制的PID算法的C语言程序 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:集输工高级工理论题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: