reference:library:pid
这是本文档旧的修订版!
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.1678621624.txt · 最后更改: 2023/06/07 04:10 (外部编辑)