PID算法典型控制程序源代码


/*
这是一个比较典型的PID处理程序,在使用单片机作为控制cpu时,请稍作简化,具体的PID参数必须由具体对象通过实验确定。
由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,而将所有参数全部用整数,运算
到最后再除以一个2的N次方数据(相当于移位),
作类似定点数运算,可大大提高运算速度,根据控制精度的不同要求,
当精度要求很高时,注意保留移位引起的“余数”,做好余数补偿。
这个程序只是一般常用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结构
void PIDInit (PID *pp)
{
memset ( pp,0,sizeof(PID));
}

//输入通道和输出通道
double sensor (void) // Dummy Sensor Function
{
return 100.0;
}
void actuator(double rDelta) // Dummy Actuator Function
{

}

// 主函数
void main(void)

{
PID sPID; // PID Control Structure
double rOut; // PID Response (Output)
double rIn; // PID Feedback (Input)
PIDInit ( &sPID ); // Initialize Structure
sPID.Proportion = 0.5; // Set PID Coefficients
sPID.Integral = 0.5;
sPID.Derivative = 0.0;
sPID.SetPoint = 100.0; // Set PID Setpoint
for (;;) { // Mock Up of PID Processing
rIn = sensor (); // Read Input
rOut = PIDCalc ( &sPID,rIn ); // Perform PID Interation
actuator ( rOut ); // Effect Needed Changes
}
}

/*
内容:PID算法典型控制程序源代码
作者:罗世洲 QQ370756740  xyy0215@qq.com
欢迎技术交流
*/

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pid是指进程标识符(Process IDentifier),是操作系统分配给每个进程的唯一标识符。在操作系统中,每个进程都有一个独立的pid,通过pid可以唯一地区分和识别不同的进程。 pid可以用来进行进程的管理和控制。通过pid,我们可以查看进程的状态、获取进程的信息、终止进程、调整进程的优先级等操作。比如,我们可以使用指令"ps -ef"来查看当前运行的所有进程及其相应的pid。 在编程中,pid也是一个非常重要的概念。我们可以使用系统调用(如fork())来创建一个新的进程,并获得新进程的pid。父进程可以通过pid来管理和监控子进程的运行情况,比如等待子进程退出、向子进程发送信号等。 在多进程编程中,pid还可以用来实现进程间的通信和同步。父进程可以将自己的pid传递给子进程,子进程通过获取父进程的pid就可以将一些信息返回给父进程。此外,当多个进程需要协同工作时,可以通过pid进行进程间的同步和互斥操作,确保多个进程的执行顺序和同步性。 总之,pid是一个用来标识和管理进程的重要概念。它在操作系统和编程中都有广泛的应用,为我们实现多任务、多进程编程提供了方便和便利。 ### 回答2: PID (进程标识符) 是一种在操作系统中常用的标识符,用于唯一标识一个正在运行的进程。每个进程在创建的时候都会被分配一个唯一的 PID。 在代码源程序中,可以通过调用系统函数或库函数来获取当前进程的 PID。一般来说,不同的操作系统提供不同的方法来获取 PID,例如在Linux系统中,可以使用 `getpid()` 函数来获取当前进程的 PIDPID 在进程管理中扮演着非常重要的角色。通过 PID,操作系统可以轻松地追踪和管理进程。PID 不仅用于唯一标识一个进程,还可以用于进程之间的通信和同步。例如,父进程可以通过 PID 来监控和控制子进程的运行,不同进程之间可以通过 PID 来进行消息传递或者共享资源。 在代码源程序中,PID 可以用于实现一些特定的功能。例如,当一个进程需要与另一个进程进行通信时,可以通过将自己的 PID 传递给对方,对方就可以通过这个 PID 找到对应的进程从而进行通信。另外,在多进程编程中,PID 还可以用于创建子进程或者进行进程之间的同步。 总之,PID 是进程标识符,可以用于唯一标识一个进程,并在代码源程序中发挥着重要的作用,如进程管理、进程通信和进程同步等方面。 ### 回答3: PID是一种全称为“Proportional-Integral-Derivative”的控制算法,在代码源程序中起着重要作用。PID控制算法是一种常用的反馈控制算法,广泛应用于工业自动化、机器人、电子设备等领域。 PID算法基于系统的反馈信号进行控制,其主要思想是根据系统当前的误差、过去误差累积以及误差变化的速率来调整控制量,使得系统的输出能够接近期望值。PID算法的核心思想是通过比较期望值和实际值之间的误差,来调整系统的输出,使其趋向于期望值,同时避免过大的震荡和超调。 在代码源程序中,通常会定义一个PID控制器的对象,并设置其参数,如比例系数、积分系数和微分系数。然后,在每个控制周期内,通过读取系统当前的反馈值和期望值,计算出误差,并根据误差和PID参数来计算出控制量。最后,将控制量发送到执行机构,控制系统的输出。 PID算法的优点是简单有效,容易实现。通过调整PID参数,可以使得系统的响应速度、稳定性和抗干扰能力得到控制。然而,PID算法也有一些缺点,如对系统的动态特性要求较高,参数调整较为困难。 总的来说,PID在代码源程序中是用来实现反馈控制的算法,通过不断调整控制量,使得系统能够稳定、高效地运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值