没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
这 是一个 PID 算 法 的 C 语 言 实 现程序: "double sensor (void),void actuator(double rDelta,double
LastrDelta )各函数的功能及语句的作用, 以及主函数里的变量 j 和数值 a[]的设置的作用,以及 for 循环语句的作用,
"望大家再分享的同时,给份详细注释,在线等待,大家帮助大家,^_^.
#include <string.h>
#include <stdio.h>
typedef struct PID { /*K1=实际放大倍数,T1=实际积分时间,T2=实际微分时
间,T=采样周期*/
double SetPoint; /*定义 PID 结构体*/
double K1;
double T1;
double T2;
double T;
double Err1; /*前一时刻误差,E(K-1)*/
} PID;
double PIDCalc( PID *pp, double NextPoint,double Ud1,double Ui1) /*PID 计算
*/
{
double Ti,Td,Kp,Ki,Kd,Ud,Up,Ui,Err;
Ti = pp-> T1 + pp-> T2; /*积分时间*/
Td = (pp-> T1 * pp-> T2) / (pp-> T1 + pp-> T2); /*微分时间*/
Kp = pp-> K1 * ((pp-> T1 + pp-> T2) / pp-> T1); /*比例系数*/
Ki =pp-> T / Ti * Kp; /*积分系数*/
Kd = Td / pp-> T * Kp; /*微分系数*/
Err = pp-> SetPoint-NextPoint; /*当前误差*/
Ud = pp-> T2 / ((Kd * pp-> T) + pp-> T2) * Ud1+ Kd * (pp-> T2 + pp-> T) /
(Kd *
pp-> T + pp-> T2) * Err - Kd * pp-> T2 / (Kd * pp-> T + pp-> T2) *pp-> Err1; /*
微分
作用*/
Ui = Ui1 + pp-> K1 * (pp-> T / pp-> T1) * Ud; /*积分作用*/
Up = pp-> K1 * Ud; /*比例作用*/
Ud1=Ud; /*UD1=ud(k-1),ui1=ui(k-1)
*/
Ui1=Ui;
return (Ud + Up + Ui); /*y(k)*/
}
void PIDInit (PID *pp)
{
memset ( pp,0,sizeof(PID));
}
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功