導航:首頁 > 編程語言 > 舵機雲台pid控製程序

舵機雲台pid控製程序

發布時間:2023-03-17 12:19:04

『壹』 怎麼做PLC PID程序

PID指令不需要自己寫,不管是那家公司的PLC(不包括OMRON的小PLC)都有PID專用指令或者向導模塊來建立PID功能,你只需要搞懂就可以了

『貳』 求教:舵機如何通過程序減速舵機的轉速太快,如何通過程序給減速。

PWM就不用說了。我給你一段PID的代碼:
#define AA_KPVALUE 150 #define AA_KIVALUE 100 #define AA_KDVALUE 30
typedef struct PID { sint an_Ref; //角度PID,角度設定值 sint an_FeedBack; //角度PID,角度反饋值 sint an_PreError; //角度PID,前一次,角度誤差,,an_Ref - an_FeedBack sint an_PreDerror; //角度PID,前一次,角度誤差之差,d_error-PreDerror; sint an_Kp; //角度PID,Ka = Kp sint an_Ki; //角度PID,Kb = Kp * ( T / Ti ) sint an_Kd; //角度PID, sint an_PreU; //舵機控制輸出值}PID;

PID sPID;//申請一個PID類型的變數

void PIDInit(void)//PID初始化 { sPID.an_Ref = 0 ; sPID.an_FeedBack = 0 ; sPID.an_PreError = 0 ; sPID.an_PreDerror = 0 ; sPID.an_Kp = AA_KPVALUE; sPID.an_Ki = AA_KIVALUE; sPID.an_Kd = AA_KDVALUE; sPID.an_PreU = 0 ; }
unsigned int PIDCalc( PID *pp )//返回值賦給舵機 { sint error,d_error,dd_error; error = pp->an_Ref - pp->an_FeedBack; d_error = error - pp->an_PreError; dd_error = d_error - pp->an_PreDerror; pp->an_PreError = error; pp->an_PreDerror = d_error; pp->an_PreU +=pp->an_Kp*error+pp->an_Ki*d_error+pp->an_Kd*dd_error ; return ( pp->an_PreU ); }在主函數中初始化PID,將設定值與返回值設置好後,調用unsigned int PIDCalc( PID *pp )把返回值給舵機。
設定值就是你想要讓舵機轉的角度賦給sPID.an_Ref,返回值就是舵機現在的角度。因為是一個閉環控制系統,需要將角度量化以後的值返回,賦給sPID.an_FeedBack,這個演算法會根據設定值與現在所處的角度計算出下一次所偏轉的角度,這是一種增量式數字PID的演算法。若想修改轉的速度就修改宏定義中這三個參數的值,其中AA_KPVALUE影響最大。PID的東西很多,我也只是初窺門徑。希望對你有所幫助

『叄』 pid控制的C語言編程

#include<unistd.h>
#include<stdio.h>
int main(int argc,int **argv)
{
int pid=fork();
if(pid==-1)
{
printf("error");
}
else if(pid==0)
{
printf("This is the child process!\n");
}
else
{
printf("This is the parent process! child process id=%d\n",pid);
}
return 0;
}
首先為什麼這段代碼gcc編譯不了,只能用g++編譯,gcc編譯顯示結果如下
Undefined first referenced
symbol in file
__gxx_personality_v0 /var/tmp//ccuHN8IS.o
ld: fatal: Symbol referencing errors. No output written to t5
collect2: ld returned 1 exit status
其次,g++編譯後運行結果如下
This is the parent process! child process id=27406
This is the child process!

『肆』 pid控制演算法的DSP程序設計與實現

typedef struct PID {

int SetPoint; // 設定目標 Desired value

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

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

// double Lastout; //上次輸出
unsigned int E1; // e1>e2
unsigned int E2; //

int Pmax;//上限
int Pmin;//下限

} PID;

/*====================================================================================================
PID計算部分,遇限消弱積分PID防飽和,積分分離演算法實現
=====================================================================================================*/

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

Error = pp->SetPoint - NextPoint; //偏差
if (Error<=-pp->E1) return (pp->Pmin); //飽和
else if (Error>=pp->E1)
return (pp->Pmax);
else
{
dError = pp->LastError - pp->PrevError; // 當前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
if (Error>=pp->E2||Error<=-pp->E2) //分離
return (pp->Proportion * Error // 比例項
+ pp->Derivative * dError );//PD,考慮限幅
else //位置式
{
pp->SumError += Error; // 積分
return (pp->Proportion * Error // 比例項
+ pp->Integral * pp->SumError // 積分項
+ pp->Derivative * dError // 微分項 //PID
);
}
}
}

閱讀全文

與舵機雲台pid控製程序相關的資料

熱點內容
編程怎麼與steam教育融合 瀏覽:697
js製作滑鼠拖拽小塊 瀏覽:310
將圖紙拆分為多個CAD文件 瀏覽:779
如何鑒別dsd文件 瀏覽:902
thinkphp不能用js 瀏覽:664
蘋果11粘膩app是什麼意思 瀏覽:670
安卓手機中木馬了怎麼辦 瀏覽:964
java組建模型 瀏覽:53
wifi萬能密碼安全嗎 瀏覽:785
紅色系圓圈是什麼app 瀏覽:714
迷你編程開始的教程怎麼過 瀏覽:216
上海國衡網站有什麼用 瀏覽:29
掃描文件如何全選 瀏覽:363
directx一鍵修復工具 瀏覽:620
如何恢復谷歌同步中刪除的文件夾 瀏覽:215
安卓51轉換為系統應用 瀏覽:789
哪裡看雙11數據 瀏覽:783
文件變成exe如何恢復 瀏覽:49
為什麼逆戰會缺少文件 瀏覽:180
蘋果4s版本怎麼更新 瀏覽:418

友情鏈接