新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機PID算法實現

        單片機PID算法實現

        作者: 時間:2016-12-01 來源:網絡 收藏

        // 比例項
        pterm = pid->pgain * ferror;

        if (pterm > 100 || pterm < -100)
        {
        pid->integral = 0.0;
        }
        else
        {
        // 積分項
        pid->integral += pid->igain * ferror;


        if (pid->integral > 100.0)
        {
        pid->integral = 100.0;
        }

        else if (pid->integral < 0.0)
        pid->integral = 0.0;

        }

        // 微分項
        dterm = ((float)(err - pid->last_error)) * pid->dgain;

        result = pterm + pid->integral + dterm;
        }
        else
        result = pid->integral; // 在死區范圍內,保持現有輸出

        // 保存上次偏差
        pid->last_error = err;

        return (result);
        }
        //----------------------------------------------
        參數說明:
        p_gain = (float)(5.2);//比例系數
        i_gain = (float)(0.77);//積分系數
        d_gain = (float)(0.18);//微分系數
        process_point為設定的穩定值
        display_value為系統輸出值
        process_point為傳感器傳入當前值


        函數調用示例:
        float display_value;
        int count=0;
        pid = &warm;

        process_point = 30;
        set_point = 40;

        dead_band = 2;

        integral_val =(float)(0.01);
        scanf("%d",&process_point);
        // 設定PV,SP值
        pid_init(&warm, process_point, set_point);

        // 初始化PID參數值
        pid_tune(&warm, p_gain,i_gain,d_gain,dead_band);

        // 初始化PID輸出值
        pid_setinteg(&warm,0.0);
        //pid_setinteg(&warm,30.0);

        pid_bumpless(&warm);

        display_value = pid_calc(&warm);

        printf("%f", display_value);

        上一頁 1 2 下一頁

        關鍵詞: 單片機PID算

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阿坝| 昔阳县| 兴国县| 肃南| 连南| 梁平县| 田林县| 阿鲁科尔沁旗| 湛江市| 万山特区| 鄂伦春自治旗| 洞口县| 吉木乃县| 福安市| 江山市| 全椒县| 余姚市| 天等县| 怀化市| 雷州市| 新郑市| 安陆市| 肇州县| 陵川县| 游戏| 自治县| 兴国县| 山阴县| 平乐县| 呼玛县| 射洪县| 嘉善县| 收藏| 娄底市| 临洮县| 金寨县| 彭泽县| 武冈市| 秦安县| 财经| 台东市|