////////////////////////////////////////////////////////////////
// 定义PID参数结构体
///////////////////////////////////////////////////////////////
typedef struct PID { //结构体定义
int SetPoint //设定值
int Proportion; // Proportion 比例系数
int Integral; // Integral 积分系数
int Derivative; // Derivative 微分系数
int LastError; // Error[-1] 前一拍误差
int PreError; // Error[-2] 前两拍误差
} PID;
main()
{
PID vPID; //定义结构变量名
PIDInit ( &vPID ); //Initialize Structure
vPID.Proportion = 10; //Set PID Coefficients
vPID.Integral = 10; // Set PID Integral
vPID.Derivative = 10; // Set PID Derivative
vPID. SetPoint = //根据实际情况设定
while(1)
{
Verror=Measure(); //得到AD的输出值
Error =vPID. SetPoint- Verror; //与设定值比较,得到误差值
tempi=PIDCal(&vPID, Error;
laser.Value+=tempi; // Value与Num[2]为共同体,共同体名laser
LASERH=laser.Num[0];
LASERL=laser.Num[1];
}
}
///////////////////////////////////////////////////////////////////////
//Title:PID参数初始化
//Description: Proportion="0"
// Integral=0
// LastError=0
//Input: PID的P、I控制常数和之前的误差量(PID *pp)
//Return:
//////////////////////////////////////////////////////////////////////
void PIDInit (PID *pp) //PID参数初始化,都置0
{
memset ( pp,0,sizeof(PID));
//memset()的函数, 它可以一字节一字节地把整个数组设置为一个指定的值。
// memset()函数在mem.h头文件中声明,它把数组的起始地址作为其第一个参数,
//第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。
//其函数原型为: void *memset(void*,int,unsigned);
//头文件<string.h>
}
///////////////////////////////////////////////////////////////////////
//Title:增量式PID算法程序
//Description:给出一个误差增量
//Input: PID的P、I控制常数和之前的误差量(PID *pp)& 当前误差量(ThisError)
//Return: 误差增量templ
//////////////////////////////////////////////////////////////////////
int PIDCal( PID *pp, int ThisError ){
//增量式PID算法(需要控制的不是控制量的绝对值,而是控制量的增量)
int pError,dError,iError;
long templ;
pError = ThisError-pp->LastError;
iError = ThisError;
dError = ThisError-2*(pp->LastError)+pp->PreError;
//增量计算
templ=pp->Proportion*pError + pp->Integral*iError+pp->Derivative*dError; //增量
//存储误差用于下次运算
pp->PreError = pp->LastError;
pp->LastError = ThisError;
return ((int)(templ>>8));
}
PID算法详解与实例
5星 · 超过95%的资源 需积分: 35 119 浏览量
2014-12-22
15:40:52
上传
评论 9
收藏 1.53MB RAR 举报
Jims8
- 粉丝: 2
- 资源: 28
最新资源
- Win64OpenSSL-3-3-0.exe
- 课高分程设计-基于C++实现的民航飞行与地图简易管理系统-南京航空航天大学
- 航天器遥测数据故障检测系统python源码+文档说明+数据库(课程设计)
- 北京航空航天大学操作系统课设+ppt+实验报告
- 基于Vue+Echarts实现风力发电机中传感器的数据展示监控可视化系统+源代码+文档说明(高分课程设计)
- 基于单片机的风力发电机转速控制源码
- 基于C++实现的风力发电气动平衡监测系统+源代码+测量数据(高分课程设计)
- 毕业设计- 基于STM32F103C8T6 单片机,物联网技术的太阳能发电装置+源代码+文档说明+架构图+界面截图
- 基于 LSTM(长短期记忆)(即改进的循环神经网络)预测风力发电厂中风力涡轮机产生的功率+源代码+文档说明
- 基于stm32f103+空心杯电机+oled按键+运动算法
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈