用户工具

站点工具


reference:library:pid

PID库

下载

函数

  • SetMode(Mode):设置PID控制器的工作模式,包括自动模式和手动模式。
  • SetOutputLimits(Min, Max):设置PID控制器的输出限制,确保输出值在指定范围内。
  • SetTunings(Kp, Ki, Kd):设置PID控制器的参数,包括比例系数、积分系数和微分系数。
  • SetSampleTime(NewSampleTime):设置PID控制器的采样时间,即控制周期。
  • Initialize():初始化PID控制器,包括清零误差、输出和累积误差。
  • Compute():计算PID控制器的输出值,根据输入值和当前的参数计算出控制器的输出值。
  • SetControllerDirection(Direction):设置PID控制器的控制方向,包括正向和反向控制。
  • SetSensorDirection(Direction):设置传感器的方向,包括正向和反向。
  • SetBias(Bias):设置偏差值,用于校准传感器的零点误差。
  • GetKp():获取PID控制器的比例系数。
  • GetKi():获取PID控制器的积分系数。
  • GetKd():获取PID控制器的微分系数。
  • GetMode():获取PID控制器的工作模式。

例程

使用NTC3950 100K为测温电阻4.7K上拉接入A0脚,D9口PID控制加热。

#include <PID_v1.h>

// 定义NTC3950的引脚
#define NTC_PIN A0

// 定义加热器的引脚
#define HEATER_PIN 9

// 定义PID参数
double Setpoint, Input, Output;
double Kp = 2, Ki = 5, Kd = 1;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

// 定义温度转换参数
const float R1 = 4700; // 上拉电阻的电阻值
const float R2 = 100000; // NTC3950的电阻值
const float T1 = 25; // 室温
const float B = 3950; // B值
const float R0 = R2 * exp(-B / (T1 + 273.15) + B / (25 + 273.15)); // 标准电阻值

void setup() {
  // 初始化串口
  Serial.begin(9600);

  // 设置加热器引脚为输出模式
  pinMode(HEATER_PIN, OUTPUT);

  // 设置PID参数
  Setpoint = 50; // 设定目标温度
  myPID.SetMode(AUTOMATIC); // 设置为自动模式
  myPID.SetOutputLimits(0, 255); // 设置输出范围
}

void loop() {
  // 读取NTC3950的电阻值
  float Rntc = analogRead(NTC_PIN);
  Rntc = R1 * (1023.0 / Rntc - 1.0);

  // 计算温度
  float Tntc = B / log(Rntc / R0) - 273.15;

  // 输出温度
  Serial.print("Temperature: ");
  Serial.print(Tntc);
  Serial.println(" C");

  // 更新PID控制器的输入值
  Input = Tntc;

  // 计算PID输出值
  myPID.Compute();

  // 输出PID输出值
  Serial.print("PID Output: ");
  Serial.println(Output);

  // 控制加热器
  analogWrite(HEATER_PIN, Output);
  
  // 等待一段时间
  delay(1000);
}

在这个代码中,我们首先定义了NTC3950的引脚和加热器的引脚。然后,我们定义了PID控制器的参数,并初始化了PID控制器。接下来,我们定义了温度转换参数,并在setup()函数中初始化了串口和加热器引脚。在loop()函数中,我们首先读取NTC3950的电阻值,并计算温度。然后,我们更新PID控制器的输入值,并计算PID输出值。最后,我们控制加热器,并等待一段时间。

reference/library/pid.txt · 最后更改: 2023/06/07 04:24 由 127.0.0.1