• Arduino PID Library


    Arduino PID Library

    by Brett Beauregard,contact: br3ttb@gmail.com

    What Is PID?   PID是什么

    From  Wikipedia: "A PID controller calculates an 'error' value as the difference between a measured [Input] and a desired setpoint. The controller attempts to minimize the error by adjusting [an Output]."

    So, you tell the PID what to measure (the "Input",) Where you want that measurement to be (the "Setpoint",) and the variable to adjust that can make that happen (the "Output".) The PID then adjusts the output trying to make the input equal the setpoint.

    For reference, in a car, the Input, Setpoint, and Output would be the speed, desired speed, and gas pedal(踏板) angle respectively.

    Functions

    PID()

    Description 建立一个PID控制器

    Creates a PID controller linked to the specified Input, Output, and Setpoint. The PID algorithm is in parallel form.

    Syntax

    PID(&Input, &Output, &Setpoint, Kp, Ki, Kd, Direction)

    PID(&Input, &Output, &Setpoint, Kp, Ki, Kd, POn, Direction)

    Parameters:

    Input: The variable we're trying to control (double)

    Output: The variable that will be adjusted by the pid (double)

    Setpoint: The value we want to Input to maintain (double)

    Kp, Ki, Kd: Tuning Parameters. these affect how the pid will chage the output. (double>=0)

    Direction: Either DIRECT or REVERSE. determines which direction the output will move when faced with a given error. DIRECT is most common.

    POn: Either P_ON_E (Default) or P_ON_M. Allows Proportional on Measurement to be specified.

    Returns:None

    Compute()

    Description  在loop()中做PID运算

    Contains the pid algorithm. it should be called once every loop(). Most of the time it will just return without doing anything. At a frequency specified by SetSampleTime it will calculate a new Output.

    Syntax:

    Compute()

    Parameters:None

    Returns:

    True: when the output is computed

    False: when nothing has been done

    SetMode()

    Description  工作模式设定(自动/手动)

    Specifies whether the PID should be on (Automatic) or off (Manual.) The PID defaults to the off position when created.

    Syntax:

    SetMode(mode)

    Parameters:

    mode: AUTOMATIC or MANUAL

    Returns:None

     

    SetOutputLimits()

    Description:输出限幅

    The PID controller is designed to vary its output within a given range. By default this range is 0-255: the arduino PWM range. There's no use sending 300, 400, or 500 to the PWM. Depending on the application though, a different range may be desired.

    Syntax:

    SetOutputLimits(min, max)

    Parameters:

    min: Low end of the range. must be < max (double)

    max: High end of the range. must be > min (double)

    Returns:None

      

    SetTunings()

    Description:PID参数实时调整

    Tuning parameters (or "Tunings") dictate(决定) the dynamic behavior of the PID. Will it oscillate or not? Will it be fast or slow? An initial set of Tunings is specified when the PID is created. For most users this will be enough. There are times however, tunings need to be changed during run-time. At those times this function can be called.

    Syntax:

    SetTunings(Kp, Ki, Kd)

    SetTunings(Kp, Ki, Kd, POn)

    Parameters:

    Kp: Determines how aggressively the PID reacts to the current amount of error (Proportional) (double >=0)

    Ki: Determines how aggressively the PID reacts to error over time (Integral) (double>=0)

    Kd: Determines how aggressively the PID reacts to the change in error (Derivative) (double>=0)

    POn: Either P_ON_E (Default) or P_ON_M. Allows Proportional on Measurement to be specified.

    Returns:None

    SetSampleTime()

    Decription:采样时间设定(毫秒)

    Determines how often the PID algorithm evaluates. The default is 200mS. For robotics applications this may need to be faster, but for the most part 200mS is plenty fast.

    Syntax:

    SetSampleTime(SampleTime)

    Parameters:

    SampleTime:  How often, in milliseconds, the PID will be evaluated. (int>0)

    Returns:None

    SetControllerDirection()

    Description: 控制方向设定(正作用/逆作用)

    If my Input is above Setpoint, should the output be increased or decreased? Depending on what the PID is connected to, either could be true. With a car, the output should be decreased to bring the speed down. For a refrigerator, the opposite is true. The output (cooling) needs to be increased to bring my temperature down.

    This function specifies which type of process the PID is connected to. This information is also specified when the PID constructed. Since it's unlikely that the process will switch from direct to reverse, it's equally unlikely that anyone will actually use this function.

    Syntax:

    SetControllerDirection(Direction);

    Parameters:

    DirectionDIRECT (like a car,输出减弱) or REVERSE (like a refrigerator,输出增强)

    Returns:None

    Display Functions

    Decription:PID 参数询问显示

    These functions query(询问) the PID internals to get current values. These are useful for display purposes.

    GetKp()

    GetKi()

    GetKd()

    GetMode()

    GetDirection()

    Syntax:

    GetKp()

    GetKi()

    GetKd()

    GetMode()

    GetDirection()

    Parameters:None

    Returns:The corresponding internal value

    Examples  PID控制举例

     Basic   模拟量输入控制模拟量输出

     1 /******************************************************** 
     2 * PID Basic Example 
     3 * Reading analog input 0 to control analog PWM output 3 
     4 ********************************************************/
     5  #include <PID_v1.h> 
     6 //Define Variables we'll be connecting to double Setpoint, Input, Output; 
     7 //Specify the links and initial tuning parameters 
     8 PID myPID(&Input, &Output, &Setpoint,2,5,1, DIRECT);
     9  
    10 void setup() 
    11 {
    12      Input = analogRead(0);     //initialize the variables we're linked to
    13      Setpoint = 100; 
    14      myPID.SetMode(AUTOMATIC);     //turn the PID on
    15  } 
    16 
    17 void loop() 
    18 {
    19     Input = analogRead(0); 
    20     myPID.Compute(); 
    21     analogWrite(3,Output); 
    22 }

    AdaptiveTunings  自动调整PID参数

     1 /******************************************************** 
     2 * PID Adaptive Tuning Example
     3 * One of the benefits of the PID library is that you can 
     4 * change the tuning parameters at any time. this can be
     5 * helpful if we want the controller to be aggressive(进取的) at some
     6 * times, and conservative(保守的) at others. in the example below
     7 * we set the controller to use Conservative Tuning Parameters
     8 * when we're near setpoint and more aggressive Tuning 
     9 * Parameters when we're farther away. 
    10 ********************************************************/
    11 #include <PID_v1.h> 
    12 //Define Variables we'll be connecting to double Setpoint, Input, Output;
    13 //Define the aggressive and conservative Tuning Parameters
    14 double aggKp=4, aggKi=0.2, aggKd=1; 
    15 double consKp=1, consKi=0.05, consKd=0.25;
    16 //Specify the links and initial tuning parameters 
    17 PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
    18 
    19 void setup() 
    20 { 
    21     Input = analogRead(0);   //initialize the variables we're linked to
    22     Setpoint = 100; 
    23     myPID.SetMode(AUTOMATIC);   //turn the PID on
    24 } 
    25 
    26 void loop() 
    27 { 
    28     Input = analogRead(0);
    29     double gap = abs(Setpoint-Input);   //distance away from setpoint
    30     if(gap<10) 
    31     { 
    32         myPID.SetTunings(consKp, consKi, consKd);  
    33         //we're close to setpoint, use   conservative tuning parameters
    34     } 
    35     Else
    36     { 
    37         myPID.SetTunings(aggKp, aggKi, aggKd);  
    38         //we're far from setpoint, use   aggressive tuning parameters
    39     }
    40     myPID.Compute();
    41     analogWrite(3,Output); 
    42 }
  • 相关阅读:
    Kendo UI for jQuery电子表格控件可轻松实现Excel导出
    缩短
    google 插件 消息通知
    C#初学者的Hello World代码_艾孜尔江撰
    HTML简易的用户名密码登录页面_艾孜尔江撰
    一次性打开多个网页的工具脚本_艾孜尔江撰
    使用a标签无法跳转到指定网页的解决办法
    Flutter安装+Vscode+夜神模拟器+android SDK
    gitbook 说明
    两个模块之间项目依赖问题
  • 原文地址:https://www.cnblogs.com/MyAutomation/p/9290250.html
Copyright © 2020-2023  润新知