51单片机pid算法?

189 2024-03-12 20:12

一、51单片机pid算法?

51单片机PID的算法实现程序,用整型变量来实现PID算法,由于是用整型数来做的,所以也不是很精确,但是对于很多的使用场合,这个精度也够了, 关于系数和采样电压全部是放大10倍处理的.所以精度不是很高. 但是也不是那么低,大部分的场合都够了. 实在觉得精度不够, 可以再放大10倍或者100倍处理,但是要注意不超出整个数据类型的范围就可以了.本程序包括PID计算和输出两部分. 

当偏差>10度全速加热,偏差在10度以内为PID计算输出.

二、pic单片机pid控制算法参数整定?

我这有51的

#include

#include "global_varible.h"

/****************************************************************************

* 模块名: PID

* 描述: PID调节子程序

* 采用PID-PD算法。在偏差绝对值大于△e时,用PD算法,以改善动态品质。

* 当偏差绝对值小于△e时,用PID算法,提高稳定精度。

* PIDout=kp*e(t)+ki*[e(t)+e(t-1)+...+e(1)]+kd*[e(t)-e(t-1)]

*============================================================================

* 入口: 无

* 出口: 无

* 改变: PID_T_Run=加热时间控制

*****************************************************************************/

void PID_Math(void)

{

signed long ee1; //偏差一阶

//signed long ee2; //偏差二阶

signed long d_out; //积分输出

if(!Flag_PID_T_OK)

return;

Flag_PID_T_OK=0;

Temp_Set=3700; //温度控制设定值37.00度

PID_e0 = Temp_Set-Temp_Now; //本次偏差

ee1 = PID_e0-PID_e1; //计算一阶偏差

//ee2 = PID_e0-2*PID_e1+PID_e2; //计算二阶偏差

if(ee1 > 500) //一阶偏差的限制范围

ee1 = 500;

if(ee1

ee1 = -500;

PID_e_SUM += PID_e0; //偏差之和

if(PID_e_SUM > 200) //积分最多累计的温差

PID_e_SUM = 200;

if(PID_e_SUM

PID_e_SUM = -200;

PID_Out = PID_kp*PID_e0+PID_kd*ee1; //计算PID比例和微分输出

if(abs(PID_e0)

{

if(abs(PID_e0) > 100) //如果温度相差大于1度时积分累计限制

{

if(PID_e_SUM > 100)

PID_e_SUM = 100;

if(PID_e_SUM

PID_e_SUM = -100;

}

d_out = PID_ki*PID_e_SUM; //积分输出

if(PID_e0

{

if(PID_e_SUM > 150)

PID_e_SUM = 150;

if(PID_e_SUM > 0) //当前温度高于设定温度0.5度时削弱积分正输出

d_out >>= 1;

}

PID_Out += d_out; //PID比例,积分和微分输出

}

else

PID_e_SUM=0;

PID_Out/=100; //恢复被PID_Out系数放大的倍数

if(PID_Out > 200)

PID_Out=200;

if(PID_Out

PID_Out=0;

if(PID_e0 > 300) //当前温度比设定温度低3度则全速加热

PID_Out=200;

if(PID_e0

PID_Out=0;

Hot_T_Run=PID_Out; //加热时间控制输出

PID_e2 = PID_e1; //保存上次偏差

PID_e1 = PID_e0; //保存当前偏差

}

////////////////////////////////////////////////////////////void PID_Math() end.

三、压力pid算法?

PID=port ID,在STP中,若在端口收到的BPDU中BID和path cost相同时,则比较PID来选择阻塞端口。数字电视复用系统名词 PID(Packet Identifier) 在数字电视复用系统中它的作用好比一份文件的文件名,我们可以称它为“标志码传输包” 。

四、pid算法包括?

pid算法是可以进行拆分解释的。P所代表的就是产生偏差的比例,而I则是积分,D就是微分,三者组合起来之后即为PID,也就是一种自动控制器,这种自动控制器常常运用于相应的技术工程之中。pid算法能够对P、I、D三者进行控制,调节它们之间的平衡。pid算法的结构比较简单,且比较稳定,因此在工业生产之中,它也属于一种主流的技术。用更加通俗的话来说,pid算法就是让物理之中的一些量保持相对的稳定或者平衡。

五、逆变器pid算法?

1 是一种控制逆变器输出的算法。2 具体地说,它利用反馈控制的原理,通过比较实际输出和期望输出之间的差异,来调整逆变器的输出电压和频率,以达到稳定和精确的控制。3 此外,也可以根据不同的负载特性和运行情况进行自适应调整,以提高系统的响应速度和稳定性,应用广泛。

六、模糊pid算法?

说实话不是一两句能说清楚,简单说就是用模糊控制加PID控制。PID控制是通过PID即比例积分微分三个参数控制的策略。这个估计楼主肯定懂。模糊PID算法就是通过模糊控制来控制这三个参数,实时改变参数以便达到更好的控制策略。具体的,内容楼主找本资料慢慢研究。

七、pid同步算法?

PID算法其实不复杂,但从目前看,很多人都是因为对这三者的使用条件不了解导致的问题,都是从加热一开始,三个要素都上,结果可想而知。

P算法是温度接近目标值的时候用,I算法是在P算法到稳态极限的时候用,D算法是达到目标值附近的时候用。实际项目中,D算法一般不用,效果不大。假如非要找一个现实中对应的实物,那么以开关电源为例,TL431基准电源比较器可以认为是P,输出滤波电容C是I,输出滤波电感是D,两者完全等价。它们各自的应用工作点可以认为:假设目标温度700度,600~800度:P算法;640~760度:I算法;690~710度:D算法。具体值,以实验为准,数据仅供参考。

八、PID算法如何理解?

PID 是比例(P)、积分(I)、微分(D) 控制算法,是一种基于反馈控制原理的控制算法,用于控制和调节系统的输出。 它的基本原理是通过比较系统的实际输出与期望输出之间的误差,根据控制算法计算出相应的控制量,从而调节系统输出。 它可以有效地控制系统的输出,使其朝着指定的期望输出进行调节。

PID 控制算法的主要步骤如下:先计算系统的误差,然后根据控制算法计算出相应的控制量,最后将控制量应用到系统中,从而改变系统的输出,使其朝着期望输出进行调节。

PID调控算法

PID算法在 时刻的输出为:

其中, 为比例增益; 为积分时间常数; 为微分时间常数; 为控制量(控制器输出); 为被控量与给定值的偏差。

为了便于实现,需要将上式变成差分方程。假设 为采样周期, 为采样序号,我们作如下近似:

将近似表达式代入PID公式,得

其中,积分系数: 可以用 表示; 微分系数: 可以用 表示;

这样PID公式可以改写为:

PID 控制算法的三个参数( , 和 )的变化可以改变系统的控制性能。

  • 参数控制系统的响应速度,能迅速反映误差,从而减小误差,但比例控制不能消除稳态误差, 的加大会引起系统的不稳定;
  • 参数控制系统的抗扰性,只要系统存在误差,积分控制作用就不断地积累,输出控制量以消除误差。因此只要有足够的时间,积分控制将能完全消除误差,但是积分作用太强会使系统超调加大,甚至使系统出现振荡;
  • 参数控制系统的稳定性,可以减小超调量,克服振荡,使系统的稳定性提高,同时加快系统的动态响应速度,减小调整时间,从而改善系统的动态性能。

PID算法的调参方法请参考:《 流量调控PID算法调参指南 》。

PID算法可以用来做搜索、推荐、计算广告场景的流量调控,具体可参考:

杨旭东:搜索推荐广告业务场景下的流量调控算法

九、什么是PID算法?

比例积分微分控制算法,比例用于快速接近目标值,微分用于接近目标值以后消除动态误差,积分用于动态误差被控制在一定范围内以后消除静态误差

十、求教关于PID算法问题?

PID算法及机械臂应用(附简单Python实现)

1. PID控制原理

PID 控制器由三个部分组成:比例(Proportional, P)积分(Integral, I)微分(Derivative, D)

PID原理

比例(P)部分:比例控制根据当前的误差大小进行调整。误差越大,控制量的调整幅度就越大。

比例控制有助于快速响应误差,但可能导致系统超调和振荡

比例控制的输出与误差成正比,公式为: ,其中 是比例增益,e(t) 是当前误差。

积分(I)部分:积分控制关注误差的累积效果。

积分控制有助于消除系统的静差,即使得被控制量最终达到设定值。

积分控制的输出与误差的积分成正比,公式为: ,其中 Ki 是积分增益。

微分(D)部分:微分控制关注误差的变化速率。

微分控制有助于减小系统的超调幅度和振荡次数,从而使系统更加稳定。

微分控制的输出与误差的变化速率成正比,公式为: ,其中 是微分增益。

在PID类的control方法中,我们根据PID公式计算控制信号output。PID公式如下:

其中:

:当前误差(目标距离 - 当前距离)

:比例系数

:积分系数

:微分系数

:积分项,用于消除静差

:微分项,用于减小超调幅度和振荡次数

2. 机械臂应用场景

假设有一个机械臂和一个超声波距离传感器,现在需要用机械臂去抓取物品,用超声波距离传感器检测机械臂与物体的距离。

超声波距离传感器直接返回机械臂与目标物体的距离,那么 就是传感器返回的值,即代码中的 error

这里给出一个Python代码示例:

import time

class PID:
    def __init__(self, kp, ki, kd):
        self.kp = kp
        self.ki = ki
        self.kd = kd
        self.previous_error = 0
        self.integral = 0
        self.last_time = time.time()

    def control(self, error):
        current_time = time.time()
        delta_time = current_time - self.last_time
        derivative = (error - self.previous_error) / delta_time
        self.integral += error * delta_time

        output = self.kp * error + self.ki * self.integral + self.kd * derivative

        self.previous_error = error
        self.last_time = current_time

        return output

def read_distance_sensor():
    # 在这里实现你的距离传感器代码,返回距离误差值
    pass

def move_arm(distance):
    # 在这里实现你的机械臂移动代码,接受一个距离参数
    pass

pid_controller = PID(kp=1, ki=0.1, kd=0.01)

while True:
    error = read_distance_sensor()  # 获取距离传感器返回的误差值
    arm_adjustment = pid_controller.control(error)  # 通过PID控制器计算机械臂的调整量
    move_arm(arm_adjustment)  # 控制机械臂移动
    time.sleep(0.01)  # 控制循环速度
顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
点击我更换图片