新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機PID算法程序(三)增量式PID控制算法

        51單片機PID算法程序(三)增量式PID控制算法

        作者: 時間:2016-11-24 來源:網絡 收藏

        當執行機構需要的不是控制量的絕對值,而是控制量的增量(例如去驅動步進電動機)時,需要用PID的“增量算法”。

        本文引用地址:http://www.104case.com/article/201611/320783.htm


        增量式PID控制算法可以通過(2-4)式推導出。由(2-4)可以得到控制器的第k-1個采樣時刻的輸出值為:


        (2-5)


        將(2-4)與(2-5)相減并整理,就可以得到增量式PID控制算法公式為:


        (2-6)


        其中



        由(2-6)可以看出,如果計算機控制系統采用恒定的采樣周期T,一旦確定A、B、C,只要使用前后三次測量的偏差值,就可以由(2-6)求出控制量。


        增量式PID控制算法與位置式PID算法(2-4)相比,計算量小得多,因此在實際中得到廣泛的應用。


        位置式PID控制算法也可以通過增量式控制算法推出遞推計算公式:


        (2-7)


        (2-7)就是目前在計算機控制中廣泛應用的數字遞推PID控制算法。



        增量式PID控制算法C51程序



        typedef struct PID


        {


        int SetPoint;//設定目標Desired Value


        long SumError;//誤差累計


        double Proportion;//比例常數Proportional Const


        double Integral;//積分常數Integral Const


        double Derivative;//微分常數Derivative Const


        int LastError; //Error[-1]


        int PrevError; //Error[-2]


        } PID;

        static PID sPID;

        static PID *sptr = &sPID;

        void IncPIDInit(void)

        {

        sptr->SumError = 0;

        sptr->LastError = 0;//Error[-1]


        sptr->PrevError = 0;//Error[-2]


        sptr->Proportion = 0;//比例常數Proportional Const


        sptr->Integral = 0;//積分常數Integral Const


        sptr->Derivative = 0;//微分常數Derivative Const


        sptr->SetPoint = 0;


        }




        int IncPIDCalc(int NextPoint)


        {


        register int iError, iIncpid;//當前誤差


        iError = sptr->SetPoint - NextPoint;//增量計算


        iIncpid = sptr->Proportion * iError//E[k]項


        - sptr->Integral * sptr->LastError//E[k-1]項


        + sptr->Derivative * sptr->PrevError;//E[k-2]項


        //存儲誤差,用于下次計算


        sptr->PrevError = sptr->LastError;


        sptr->LastError = iError;


        //返回增量值


        return(iIncpid);


        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 新巴尔虎右旗| 新野县| 乐安县| 长春市| 浮梁县| 富平县| 珲春市| 大邑县| 阿城市| 得荣县| 甘孜| 高平市| 南昌县| 岳西县| 桃源县| 阿坝县| 淳化县| 九龙城区| 宜川县| 奎屯市| 天门市| 尤溪县| 达拉特旗| 蛟河市| 昭苏县| 泗水县| 商都县| 开远市| 广饶县| 车致| 翁源县| 克山县| 潜江市| 报价| 常熟市| 南宁市| 游戏| 门头沟区| 南城县| 上虞市| 新乡县|