找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 1305|回復: 0
打印 上一主題 下一主題
收起左側

(分享設計)一個PID算法,有需要的可以套用

[復制鏈接]
跳轉到指定樓層
樓主
ID:440846 發(fā)表于 2018-12-6 13:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "System_init.h"
extern int U_Set;
extern u16 CCR1_Val;

/*==========================================================================================*/
typedef struct PID {
    float SetPoint; // 設定目標Desired value
    float Proportion; // 比例常數(shù)Proportional Const
    float Integral; // 積分常數(shù)Integral Const
    float Derivative; // 微分常數(shù)Derivative Const
    float LastError; // Error[-1]   
    float PrevError; // Error[-2]
    float SumError; // Sums of Errors
} PID;
/*====================================================================================================/
PID計算部分
=====================================================================================================*/
PID   vPID={0,0.1,0.001,0.001,0,0,0};

float PIDCalc( PID *pp, float NextPoint )
{
    float dError,
    Error;
    Error = pp->SetPoint - NextPoint; // 偏差
    pp->SumError += Error; // 積分
    dError = pp->LastError - pp->PrevError; // 當前微分
    pp->PrevError = pp->LastError;
    pp->LastError = Error;

    if(pp->SumError>900)  pp->SumError=900;
    else if(pp->SumError<-900)      pp->SumError=-900;

    return (pp->Proportion * Error // 比例項
    + pp->Integral * pp->SumError // 積分項
    + pp->Derivative * dError // 微分項
    );
}

float Vol(int vSet,int v3){

    float vOut; // PID Response (Output)
    float vIn; // PID Feedback (Input)

    vPID.SetPoint = vSet; // Set PID Setpoint
    vIn = (float)v3; // Read Input
    vOut = PIDCalc ( &vPID,vIn ); // Perform PID Interation     
    return vOut;
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表