标题: pid温度调节 [打印本页]
作者: shenlong 时间: 2017-9-28 17:36
标题: pid温度调节
if(set_temper>temper)
{
if(set_temper-temper>1)
{
high_time=100 ; //大于1°不进行PID运算
low_time=0 ;
}
else
{ //在1°范围内进行PID运算
for(i=0;i<10;i++)
{
//get_temper();
rin=s;
// Read Input
rout=PIDCalc(&spid,rin); //执行PID运算
// Perform PID Interation
}
if(high_time<=100) //限制最大值
high_time=(unsigned char)(rout/800);\\为什么除以800
else
high_time=100;
low_time=(100-high_time);
作者: useeker 时间: 2017-9-28 18:16
仅凭这一小段程序无法得出为什么除以800的结论
作者: pangzimengnan 时间: 2017-9-28 19:05
你单独放这么一段程序,除了作者谁也不能保证完全看的明白啊。我个人认为你这个程序是有些问题的,首先设定温度大于实时温度1度就不进行PID运算,那温度控制肯定是不理想的,由于惯性会有很大的超调,这里就需要微分环节的抑制。另外函数里面什么rin,s什么的变量你全都没有做说明,谁知道是写的是什么?看后面代码的意思应该是PID输出映射PWM控制占空比,但是输出限幅的位置就错了。最后至于为啥要除以800?多半是PID参数调的不好,不能直接映射。不过一看就有问题的程序,你再细扣其中几个数字的问题那也没什么意义。
作者: wxszx 时间: 2017-9-28 19:57
其实第一个if判断可以不要的吧
作者: yzwzfyz 时间: 2017-9-28 23:44
因为在此之前扩大了800倍。
作者: yzczone 时间: 2017-9-29 11:06
这个程序根本不能判断为什么除800
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |