pid算法c语言实现

上传人:小** 文档编号:46990267 上传时间:2018-06-29 格式:DOC 页数:3 大小:19KB
返回 下载 相关 举报
pid算法c语言实现_第1页
第1页 / 共3页
pid算法c语言实现_第2页
第2页 / 共3页
pid算法c语言实现_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《pid算法c语言实现》由会员分享,可在线阅读,更多相关《pid算法c语言实现(3页珍藏版)》请在金锄头文库上搜索。

1、这是一个 PID 算法的 C 语言实现程序: “double sensor (void),void actuator(double rDelta,double LastrDelta )各函数的功能及语句的作用, 以及主函数里的变量 j 和数值 a的设置的作用,以及 for 循环语句的作用, “望大家再分享的同时,给份详细注释,在线等待,大家帮助大家,_. #include #include typedef struct PID /*K1=实际放大倍数,T1=实际积分时间,T2=实际微分时 间,T=采样周期*/ double SetPoint; /*定义 PID 结构体*/ double K1;

2、 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) /

3、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 /

4、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); /*double sensor (void) return 1.0; */ /*输入口*/ void actuator(double rDelta,double LastrDelta ) /*输出口*/ double n; n=rDelta-La

5、strDelta; /*y(k)-y(k-1)*/ LastrDelta=rDelta; printf ( “%fn “,n); void main(void) int j,a= 15,14,12.5,10.5,5.5,6.7,9.5,11.3,9.6,10.2,10.035,9.2356,10.2356,9.3654,10.01101 ; PID sPID; double rOut; double LastrOut=0; /*y(k-1)*/ double rIn; double Ud1 = 1; double Ui1 = 1; PIDInit ( /*PID 初始化*/ sPID.K1 =

6、 1; sPID.T1 = 1; sPID.T2 = 1; sPID.T = 1; sPID.SetPoint = 10.0; /*设定值*/ sPID.Err1 = 1; for (j=0;j 15;j+) rIn = aj; /*sensor ();*/ /*输入*/ rOut= PIDCalc ( actuator ( rOut, LastrOut ); 这应该是个仿真程序. sensor 原来是个输入函数,后来注释掉了,用数组代替了. actuator 输出函数,这里现示跟踪情况. j,是 15 个点的循环变量. aj,是个模拟的输入.语句:return 1.0; 变量:rDelta LastrDelta 语句:n=rDelta-LastrDelta; LastrDelta=rDelta; printf ( “%fn “,n);又分别如何解释呢,新手上路,多指教._

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 宣传企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号