PID算法完全讲解-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: 对折之内

PID算法完全讲解

  [复制链接]
发表于 2018-9-19 16:32 | 显示全部楼层
这个讲解不错
发表于 2018-9-19 16:33 | 显示全部楼层
空了研究下
发表于 2020-7-6 16:09 | 显示全部楼层
void PID_Output(void)
{
        static uInt16 iTemp;
        static uChar8 uCounter;
       iTemp = PID.iPriVal;
        if(iTemp == 0)
                ConOut = 1;                //不加热
        else ConOut = 0;        //加热
        if(g_bPIDRunFlag)        //定时中断为100ms(0.1S),加热周期10S(100份*0.1S)
        {
                g_bPIDRunFlag = 0;
                if(iTemp) iTemp--;                //只有iTemp>0,才有必要减“1”
                uCounter++;
                if(100 == uCounter)
                {
                        PID_Operation();        //每过0.1*100S调用一次PID运算。
                        uCounter = 0;        
                }
        }
}

iTemp = PID.iPriVal;    这句,每次进入函数都要赋值,iTemp--根本不起作用。
这程序估计连仿真都没做。
发表于 2021-7-9 16:57 | 显示全部楼层
PID_output 函数中,用pid 的运行标志,来判断。其中又用到了 uCounter 的变量。里头写到,挚友uCounter 执行100次,才开始运行 PID_Operation(),开始pid 的计算。

那么,总的时间应该是:100 * 100 * 0.1s。和注释中写到的,100 * 0.1s 不符。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:46 , Processed in 0.076865 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表