请教单片机PWM控制加热器用增量式PID,三个参数的选择
我用PWM信号控制加热器,采用增量式PWM控制方法。增量式的公式是δu(k)=A*E(K)-B*E(K-1)+C*E(K-2),请问这三个参数如何选择?...
我用PWM信号控制加热器,采用增量式PWM控制方法。增量式的公式是δu(k)=A*E(K)-B*E(K-1)+C*E(K-2),请问这三个参数如何选择?
展开
5个回答
2014-01-16
展开全部
uint ZKB; //定义占空比初始值
float zkc;
int kkk;
uint kp=4; //定义PID初始值
float ki=0.17;
uint kd=16;
uint uc=5000;
float ek;
float u_k;
float uk;
float uk1=0;
float ek1=0;
float ek2=0;
uchar click=0; //中断次数计数器变量
uint zhouqi=0;
void deal(uint t) //加热控制函数
{ TR0=1;
if(zhouqi==1) //进行PID算法,求新的占空比
{
zhouqi=0;
ek=wendu_c-t; //计算偏差
u_k=kp*(ek-ek1)+ki*ek+kd*(ek-2*ek1+ek2); //计算增量
uk=uk1+u_k;
zkc=100*uk/uc;
if (zkc>=95)
zkc=95;
kkk=(int)zkc ;
}
if(t>=wendu_c) //大于设定值
shuchu=0; //输出高电平
else //小于设定值
{
ZKB=(int)zkc; //调整新的脉宽定时,即新的占空比
if (click<=ZKB) // 判断脉宽定时周期是否到?当小于占空比值时输出高电平,高于时是低电平,从而实现占空比的调整
shuchu=1;
else
shuchu=0 ;
}
}
float zkc;
int kkk;
uint kp=4; //定义PID初始值
float ki=0.17;
uint kd=16;
uint uc=5000;
float ek;
float u_k;
float uk;
float uk1=0;
float ek1=0;
float ek2=0;
uchar click=0; //中断次数计数器变量
uint zhouqi=0;
void deal(uint t) //加热控制函数
{ TR0=1;
if(zhouqi==1) //进行PID算法,求新的占空比
{
zhouqi=0;
ek=wendu_c-t; //计算偏差
u_k=kp*(ek-ek1)+ki*ek+kd*(ek-2*ek1+ek2); //计算增量
uk=uk1+u_k;
zkc=100*uk/uc;
if (zkc>=95)
zkc=95;
kkk=(int)zkc ;
}
if(t>=wendu_c) //大于设定值
shuchu=0; //输出高电平
else //小于设定值
{
ZKB=(int)zkc; //调整新的脉宽定时,即新的占空比
if (click<=ZKB) // 判断脉宽定时周期是否到?当小于占空比值时输出高电平,高于时是低电平,从而实现占空比的调整
shuchu=1;
else
shuchu=0 ;
}
}
艾普斯
2024-07-18 广告
2024-07-18 广告
稳频稳压电源哪家好?艾普斯电源(苏州)有限公司开始专业研发、制造及营销交流稳压电源,满足全球电子及信息业对电源设备日益蓬勃的市场需求。迄今为止,业已发展成为交流不间断电源、稳压电源、变频电源、中频航空- 军事专用电源、直流电源、逆变电源等产...
点击进入详情页
本回答由艾普斯提供
2014-01-16
展开全部
LZ上面的公式是懒汉公式,最好把PID的3个分开,可以独立调整PID参数,更灵活。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
网上找的,我把它做了修改(用NTC等),精度+-1度,我是用12VDC/2A发热提来测试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-01-16
展开全部
谢谢各位,有没有不计算,用增减PWM来做的PI控制的简单的程序?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-01-16
展开全部
好像有个建议选值方法的,网上有
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询