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):设置偏差值,用于校准传感器的零点误差。
例程
使用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.1678624522.txt · 最后更改: 2023/06/07 04:10 (外部编辑)