當前位置:編程學習大全網 - 源碼下載 - 急求位置式PID控制算法 MATLAB 代碼

急求位置式PID控制算法 MATLAB 代碼

剛好前不久搞過PID,部分程序如下,僅供參考

/*==============================================================================

在使用單片機作為控制cpu時,請稍作簡化,具體的PID參數必須由具體對象通過實驗確定。

由於單片機的處理速度和ram資源的限制,壹般不采用浮點數運算,而將所有參數全部用整數,

運算到最後再除以壹個2的N次方數據(相當於移位),作類似定點數運算,可大大提高運算速度,

根據控制精度的不同要求,當精度要求很高時,註意保留移位引起的“余數”,做好余數補償。

這個程序只是壹般常用pid算法的基本架構,沒有包含輸入輸出處理部分。

==============================================================================*/

#include <string.h>

#include <stdio.h>

/*===============================================================================

PID Function

The PID function is used in mainly

control applications. PID Calc performs one iteration of the PID

algorithm.

While the PID function works, main is just a dummy program showing

a typical usage.

PID功能

在PID功能主要用於控制應用。 PID 計算器執行壹個PID的叠代算法。雖然PID功能的工程,

主要只是壹個虛擬程序顯示壹個典型的使用。

================================================================================*/

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;

/*================================ 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 // 微分項

);

}

/*======================= 初始化的PID結構 Initialize PID Structure===========================*/

void PIDInit (PID *pp)

{

memset ( pp,0,sizeof(PID));

}

/*======================= 主程序 Main Program=======================================*/

double sensor (void) // 虛擬傳感器功能 Dummy Sensor Function{ return 100.0;}

void actuator(double rDelta) // 虛擬驅動器功能 Dummy Actuator Function{}

void main(void)

{

PID sPID; // PID控制結構 PID Control Structure

double rOut; // PID響應(輸出) PID Response (Output)

double rIn; // PID反饋(輸入) PID Feedback (Input)

PIDInit ( &sPID ); // 初始化結構 Initialize Structure

sPID.Proportion = 0.5; // 設置PID系數 Set PID Coefficients

sPID.Integral = 0.5;

sPID.Derivative = 0.0;

sPID.SetPoint = 100.0; // 設置PID設定 Set PID Setpoint

for (;;)

{ // 模擬最多的PID處理 Mock Up of PID Processing

rIn = sensor (); // 讀取輸入 Read Input

rOut = PIDCalc ( &sPID,rIn ); // 執行的PID叠代 Perform PID Interation

actuator ( rOut ); // 所需的更改的影響 Effect Needed Changes

}

  • 上一篇:GT335M HD5650對比
  • 下一篇:有源音箱如何接液晶電視機用?謝謝
  • copyright 2024編程學習大全網