Skip to content

Jwf68/PID

Repository files navigation

Text book implementation of a PID controller in C++

Implementation of a PID controller, according to pseudocode from the book: Karl J Åström and Tore Hägglund, Advanced PID control, ISA, 2006, page 428, F13.18. The file PIDJonasWahlfrid2007_02_19_EN.pdf contains report "Realization and tuning of PID controllers", which explains in detail the PID implementation. For Swedish see the file PIDJonasWahlfrid2007_02_19_SE.pdf.

Classes: ChangeRateLimiter is used to limit set point changes. PIDcontroller the PID controller. PIDparameters parameters for the PID controller. Scaler is used to scale raw values to engineering units.

Typical usage:

// one time call or parameter change 
			_PIDparameters.proportionalGain = 0.2f;
			_PIDparameters.integrationTimeSecond = 0.2f;
			_PIDparameters.derivateTimeSecond = 0.0f;
			_PIDparameters.trackingTimeConstantSecond = 0.1f;
			_PIDparameters.filterTimeConstantSecond = 1.0f;
			_PIDparameters.derivateFilterTimeConstantSecond = 1.0f;
			_PIDparameters.setpointWeightingFactor = 0.5f;
			_PIDparameters.sampleTimeSecond = 0.1f;
			_PIDcontroller.SetParameters(_PIDparameters);
			_changeRateLimiter.SetSampleTime(0.1f);

// continus call
			_speedSetPointHz = 40;
			_changeRateLimiter.SetMaxChangeRatePerSecond(4.0f);
			float limitedSetPoint = _changeRateLimiter.LimitChangeRate(_speedSetPointHz);
			float controlSignal = _PIDcontroller.Compute(limitedSetPoint, _speedActualValueHz, 0.f, _settings.MaxPowerLimitControlSignal);

About

Text book PID controller in C++

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published