You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1017 B
41 lines
1017 B
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace AutomaticController
|
|
{
|
|
public class PIDController
|
|
{
|
|
public double Kp { get; set; }
|
|
public double Ki { get; set; }
|
|
public double Kd { get; set; }
|
|
|
|
private double _prevError;
|
|
private double _integralError;
|
|
|
|
public PIDController(double kp, double ki, double kd)
|
|
{
|
|
Kp = kp;
|
|
Ki = ki;
|
|
Kd = kd;
|
|
|
|
_prevError = 0;
|
|
_integralError = 0;
|
|
}
|
|
|
|
public double Compute(double setpoint, double actualValue, double deltaTime = 0.01)
|
|
{
|
|
double error = setpoint - actualValue;
|
|
_integralError += error * deltaTime;
|
|
double derivative = (error - _prevError) / deltaTime;
|
|
|
|
double output = Kp * error + Ki * _integralError + Kd * derivative;
|
|
|
|
_prevError = error;
|
|
|
|
return output;
|
|
}
|
|
}
|
|
}
|
|
|