目录

PID库

Github地址:https://github.com/br3ttb/Arduino-PID-Library

下载

PID库V1.2.1

函数

例程

使用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输出值。最后,我们控制加热器,并等待一段时间。