原来用pid做过恒温度控制,效果还行,主要是使用pid控制pwm调节占空比
这次没有pwm,就是dac直接输出4-20ma,给调节阀,问题出在衡水位,调节部分
阀门好像没有一个维稳的过程,不是全关,就是全开,下面是代码片段
else //如果是在1cm范围内,则运行PID计算
{
for(i=0;i<10;i++)
{
s=u;
rin = s; // Read Input
rout = PIDCalc ( &spid,rin ); // Perform PID Interation
}
if (high_time<=100)
{ high_time=(uchar)(rout/800);
IDA1=(high_time/100*1697)+351;}
else
high_time=100;
low_time= (100-high_time);
IDA1=2048;
}
high_time是温控时用的我理解在这里就是开阀的角度和开阀行程的占空比,不知对否
然后根据high_time反推IDA1的数值,但是好像变化很小,肯定是哪里出问题了
哪位指点一下,谢谢
顺便解释一下上面的code
IDA1=(high_time/100*1697)+351;
351输出4ma,关闭阀门,也就是开阀的基准值,
1697是开阀的行程,2048全开,减去351就是1697
(high_time/100*1697)=pid算出的微调量
下面这3句话就是出问题的地方,老跳进去把阀门全打开
high_time=100;
low_time= (100-high_time);
IDA1=2048;
还请大家拍砖 |