导航:首页 > 编程语言 > 舵机云台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控制程序相关的资料

热点内容
g76锥度牙怎么编程 浏览:430
win10企业版关机很慢 浏览:163
微信短视频是保存在哪个文件夹 浏览:985
win10打印机设置纸张大小设置 浏览:427
卫星测控数据有哪些 浏览:451
格式工厂330教程 浏览:421
童美编程课怎么样 浏览:40
网页代码调试器 浏览:54
读取文件string 浏览:500
ug自动编程软件怎么画数控图 浏览:920
什么网站可以介绍主机 浏览:340
移动短信查询代码 浏览:192
怎么看公司网络是什么时候开通 浏览:960
cad2015文件参照怎么关闭 浏览:678
最小二乘逼近程序 浏览:610
铁路12306密码找不回 浏览:352
默认网络覆盖的脑区 浏览:319
itunes恢复iphone教程 浏览:292
炉石现在是什么版本 浏览:825
word兼容包安装报错 浏览:528

友情链接