问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

压力调节阀PID控制

发布网友 发布时间:2022-04-23 05:15

我来回答

1个回答

热心网友 时间:2023-07-12 02:19

刚好前不久搞过PID,部分程序如下,仅供参考

/*==============================================================================
在使用单片机作为控制cpu时,请稍作简化,具体的PID参数必须由具体对象通过实验确定。
由于单片机的处理速度和ram资源的*,一般不采用浮点数运算,而将所有参数全部用整数,
运算到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可大大提高运算速度,
根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的“余数”,做好余数补偿。
这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分。
==============================================================================*/

#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 mmy 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
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
镇海立人中学好吗 镇海立人中学升学率 自考学位申请在什么时候 电子科大自考本科申请学士学位要多久 浙江自考毕业两年后还能考学士学位吗 自考学士学位申请超过时限怎么办 自考本科毕业后多久能申请学士学位 自考本科毕业后多久能申请学位 自考要在几年内考完才能申请学位证 春天可以种白菜吗 春天能不能种白菜 PID控制是什么意思 如何用单片机PID去控制压力? 支付宝我实名认证用了别人的用了身份证,用的是我自己的手机号可以改吗_百度问一问 什么是PID控制?其主要用途是什么?PID各项的主要作用是什么 PID控制的原理是什么? 我支付宝用别人身份证实名认证了 但手机号是我的 请问可以改过来吗?_百度问一问 手机号是我的,支付宝账户和实名认证不是我的? 支付宝手机号是我自己的,但名字和实名认证不是我的,怎么修改?而且 我的支付宝手机号是我的,身份认证是别人的,该怎么进行换绑?_百度知 ... 支付宝用的别人的身份证手机号是自己的怎么办? 腿一直麻 不见好转是什么情况? 腿麻了怎么办 腿疼麻不能走到怎么回事 腿经常发麻怎么办? 走路腿麻 腿麻走不了路间歇性头痛 我突然腿麻的走不了道了,另外手也麻是怎么回事儿 老年人腿麻,走路走不稳是什么毛病 身体好好的就走几部就腿麻 麻的走不了路?怎么回事?该怎么治疗?应该查什么? 走路腿麻木是什么原因 虹润仪表PID调节器可以控制流量和压力吗? PID控制是用来干什么的?什么时候要用PID控制? PID控制与PLC控制的区别? 如何在pid控制器设定恒压供水 全国消防日是几月几日 PID控制的含义? 我国的消防日是哪一天? 浙江省的消防安全日是哪天? abb变频器pid控制到了目标压力不减小频率如何设置? 全国消防安全日哪天 二次供水设备中PID控制是什么意思? 平安i贷为什么不可以提现了呢 压力能不能用PID自整定来设定PID参数 平安普惠i贷有额度 但是提不出来 有法儿吗 全国安全消防日是哪天 变频恒压供水PID控制压力给定值设置 平安普惠i贷怎么老提现不出 远传压力表怎样实现PID控制 全国安消防安全日是哪一天 请问下变频器PID恒压控制PID设置? 哪一天是全国消防日