原创 PID算法实例

2015-4-3 22:09 1562 19 20 分类: MCU/ 嵌入式 文集: FPGA

==================================================*/

 

#include <string.h>

#include <stdio.h>

/*=================================================

PID Function

The PID function is used in mainly

control applications. PID Calc performs one iteration of the PID

algorithm.

While the PID function works, main is just a dummy program showing

a typical usage.

 

PID功能

在PID功能主要用于控制应用。 PID 计算器执行一个PID的迭代算法。虽然PID功能的工程,

主要只是一个虚拟程序显示一个典型的使用。

==================================================*/

typedef struct PID {

double SetPoint; // 设定目标 Desired Value

double Proportion; // 比例常数 Proportional Const

double Integral; // 积分常数 Integral Const

double Derivative; // 微分常数 Derivative Const

double LastError; // Error[-1]

double PrevError; // Error[-2]

double SumError; // Sums of Errors

} PID;

 

 

/*====================== PID计算部分===================*/

double PIDCalc( PID *pp, double NextPoint )

{

double dError, Error;

 

Error = pp->SetPoint - NextPoint; // 偏差

pp->SumError += Error; // 积分

dError = pp->LastError - pp->PrevError; // 当前微分

pp->PrevError = pp->LastError;

pp->LastError = Error;

return (pp->Proportion * Error // 比例项

+ pp->Integral * pp->SumError // 积分项

+ pp->Derivative * dError // 微分项

);

}

 

/*========== 初始化的PID结构 Initialize PID Structure==========*/

void PIDInit (PID *pp)

{

memset ( pp,0,sizeof(PID));

}

 

 

/*============= 主程序 Main Program==================*/

double sensor (void) // 虚拟传感器功能 Dummy Sensor Function{ return 100.0;}

void actuator(double rDelta) // 虚拟驱动器功能 Dummy Actuator Function{}

void main(void)

{

PID sPID; // PID控制结构 PID Control Structure

double rOut; // PID响应(输出) PID Response (Output)

double rIn; // PID反馈(输入) PID Feedback (Input)

PIDInit ( &sPID ); // 初始化结构 Initialize Structure

sPID.Proportion = 0.5; // 设置PID系数 Set PID Coefficients

sPID.Integral = 0.5;

sPID.Derivative = 0.0;

sPID.SetPoint = 100.0; // 设置PID设定 Set PID Setpoint

for (;;)

{ // 模拟最多的PID处理 Mock Up of PID Processing

rIn = sensor (); // 读取输入 Read Input

rOut = PIDCalc ( &sPID,rIn ); // 执行的PID迭代 Perform PID Interation

actuator ( rOut ); // 所需的更改的影响 Effect Needed Changes

}

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

roumao_411466022 2015-4-28 09:12

好!!!
相关推荐阅读
用户1656818 2015-05-13 20:17
控制型FPGA的典型需求
 今天突发奇想,如果将FPGA作为控制器来使用,那么典型的需求是什么呢?其实这个问题有点白痴。只要看看现在的单片机有什么外设也就清楚了,不过我还是想从单片机的角度列出软件和硬件的需求。   硬...
用户1656818 2015-04-03 22:15
PID算法实例(二)
#include <stdio.h> #include<math.h> struct _pid { int pv; //integer that co...
用户1656818 2015-04-01 12:52
鏉烇箒绶犵拠鍡楀焼缁犳纭堕幀婵婄熅
1.閻╂悂鍋︾敮褍妯婂▔鏇犫�鐠併倗娲伴弽鍥︾秴缂冾噯绱濋幍鈺併亣閸氬骸浠涙潻娑楃濮濄儱顦甸悶鍡欐畱閼煎啫娲� 2.閻楃懓绶涢幓鎰絿 闁俺绻冮惌鈺佽埌鎼�鐠侊紕鐣荤涵顔款吇閻╊喗鐖i弰顖氭儊娑...
用户1656818 2015-03-18 20:07
浅谈 VGA 和 CVBS 两类模拟视频信号的借口芯片选择
    浅谈CVBS和VGA视频输出接口 博主使用FPGA输出CVBS和VGA视频,已经有一段时间。但始终对什么时候使用哪种接口芯片没有清晰的概念,基本都是在网上找资料,依葫芦画瓢搭上电路就万...
用户1656818 2015-03-15 17:23
视频信号基础知识(四)DVI数字视频信号
视频信号基础知识(四)数字视频信号 DVI(Digital Visual Interface),即数字视频接口。它是1999年由Silicon Image、Intel(英特尔)、Compaq(...
EE直播间
更多
我要评论
1
19
关闭 站长推荐上一条 /3 下一条