新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PID算法調節C51程序(2)

        PID算法調節C51程序(2)

        作者: 時間:2016-11-23 來源:網絡 收藏
        *====================================================================================================

        這是從網上找來的一個比較典型的PID處理程序,在使用單片機作為控制cpu時,請稍作簡化,具體的PID
        參數必須由具體對象通過實驗確定。由于單片機的處理速度和ram資源的限制,一般不采用浮點數運算,
        而將所有參數全部用整數,運算到最后再除以一個2的N次方數據(相當于移位),作類似定點數運算,可
        大大提高運算速度,根據控制精度的不同要求,當精度要求很高時,注意保留移位引起的“余數”,做好余
        數補償。這個程序只是一般常用pid算法的基本架構,沒有包含輸入輸出處理部分。
        =====================================================================================================*/
        #i nclude
        #i nclude


        typedef struct PID {

        double SetPoint; //設定目標 Desired Value

        double Proportion; //比例常數 Proportional Const
        double Integral; //積分常數 Integral Const
        double Derivative; //微分常數 Derivative Const

        double LastError; // Error[-1]
        double PrevError; // Error[-2]
        double SumError; // Sums of Errors

        } PID;



        double PIDCalc( PID *pp, double NextPoint )
        {
        double dError,
        Error;

        Error = pp->SetPoint - NextPoint; // 偏差
        pp->SumError += Error; // 積分
        dError = pp->LastError - pp->PrevError; // 當前微分
        pp->PrevError = pp->LastError;
        pp->LastError = Error;
        return (pp->Proportion * Error // 比例項
        + pp->Integral * pp->SumError // 積分項
        + pp->Derivative * dError // 微分項
        );
        }



        void PIDInit (PID *pp)
        {
        memset ( pp,0,sizeof(PID));
        }



        double sensor (void) // Dummy Sensor Function
        {
        return 100.0;
        }

        void actuator(double rDelta) // Dummy Actuator Function
        {}

        void main(void)
        {
        PID sPID; // PID Control Structure
        double rOut; // PID Response (Output)
        double rIn; // PID Feedback (Input)

        PIDInit ( &sPID ); // Initialize Structure
        sPID.Proportion = 0.5; // Set PID Coefficients
        sPID.Integral = 0.5;
        sPID.Derivative = 0.0;
        sPID.SetPoint = 100.0; // Set PID Setpoint

        for (;;) { // Mock Up of PID Processing

        rIn = sensor (); // Read Input
        rOut = PIDCalc ( &sPID,rIn ); // Perform PID Interation
        actuator ( rOut ); // Effect Needed Changes
        }
        }

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

        擴充臨界比例法確定PID系數??
        采用比例控制形成閉環系統,比例系數從小逐漸加大,使閉環系統處于臨界震蕩狀態(穩定邊界)得到的臨界振蕩狀態波形如圖2所示。此狀態下的振蕩周期Tc=0.0396 s。
        根據經驗公式確定范圍,由單橋換流器構成的舟山直流輸電系統特點決定,僅在脈沖觸發閥換向時,才對系統進行控制,即每3.3 ms控制一次,即有Ts=3.3 ms也就是Ts=0.083 Tc。  由表1提供的經驗公式以上的情況接近Ts=0.09 Tc,可得PID系數的大致范圍為Kp=1 800,Ki=370,Kd=4 000附近。
        表1 擴充臨界比例法的PID控制器參數的范圍
        Ts Kp Ti Td
        0.014Tc 0.63Kpc 0.49Tc 0.14Tc
        0.043Tc 0.47Kpc 0.47Tc 0.16Tc
        0.090Tc 0.34Kpc 0.43Tc 0.20Tc
        0.160Tc 0.27Kpc 0.40Tc 0.22Tc



        關鍵詞: PID算法調節C51程

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 仁怀市| 治县。| 呼图壁县| 周宁县| 衡水市| 宁国市| 印江| 城市| 甘南县| 鹤山市| 汕头市| 深圳市| 从化市| 庐江县| 林州市| 阿城市| 昌平区| 五家渠市| 永仁县| 广东省| 温州市| 平凉市| 隆安县| 巨鹿县| 西畴县| 正蓝旗| 开阳县| 鞍山市| 监利县| 塔城市| 确山县| 临夏县| 崇礼县| 淮南市| 南溪县| 海南省| 丹寨县| 紫阳县| 丁青县| 镇原县| 玛纳斯县|