#include <string.h>#include<stdio.h>typedef struct PID{ double Command; //输入指令 double Proportion; //比例系数 double Integral; //积分系数 double Derivative; //微分系数 double preErr; //前一拍误差 double sumErr; //误差累积}PID;double PIDCale(PID *p,double feedback){ double dErr,Err; Err=p->Command-feedback; //当前误差 p->sumErr+=Err; //误差累加 dErr=Err-p->preErr; //误差微分 p->preErr=Err; return(p->Proportion*Err //比例项 +p->Derivative*dErr //微分项 +p->Integral*p->sumErr); //积分项}void PIDInit(PID *p){ memset(p,0,sizeof(PID)); //初始化}typedef struct motor{ double lastY; double preY; double lastU; double preU;}motor;void motorInit(motor *m){ memset(m,0,sizeof(motor));}double motorCal(motor *m,double u){ double y=1.9753*m->lastY-0.9753*m->preY+0.00003284*u+0.00006568*m->lastU+0.00003284*m->preU;//二阶系统 m->preY=m->lastY; m->lastY=y; m->preU=m->lastU; m->lastU=u; return y;}void main(){ FILE *fp=fopen("data.txt","w+"); PID sPID; motor m_motor; int k=0; double u; double y=0; PIDInit(&sPID); sPID.Proportion=2; sPID.Derivative=1; sPID.Integral=0.00001; sPID.Command=10; motorInit(&m_motor); while(k<=1000) {• fprintf(fp,"%d 设定值=%f 被控量=%f 偏差=%f 控制量=%fn",k,sPID.Command,y,sPID.Command-y,u); u=PIDCale(&sPID,y); y=motorCal(&m_motor,u); k++; } printf("%fn",y); fclose(fp);}
导读:目前正在解读《C语言PID演示程序》的相关信息,《C语言PID演示程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言PID演示程序》的详细说明。
简介:这里给大家分享了一个C语言PID演示程序。
提醒:《C语言PID演示程序》最后刷新时间 2024-03-14 01:02:34,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言PID演示程序》该内容的真实性请自行鉴别。