# PID controller with a limited range of control variable

Started by April 26, 2023
```In one application an AC voltage sourced by a generator is applied to a
load as a PWM waveform. The period PER is fixed (for example, 100ms) and
the pulse-width PW has a maximum (for example, 20ms).

The user can change the voltage peak (and consequently the voltage RMS)
by an handle, while the controller manages automatically the PW.

The load changes its temperature when the PWM waveform is applied to it
and a sensor that read the temperature is present.

There's a temperature upper limit (for example, 40&deg;C) that mustn't be
exceeded. If needed, the controller should decrease the PW accordingly
to avoid temperature overshoot. Otherwise, the PW is the maximum allowed
(20ms).

Of course, when the voltage peak is low, PW could be the maximum. When
the user increases the voltage, the controller should be smart enough to
reduce PW accordingly and fast to avoid temperature overshoot.

I was thinking to implement a PID controller with the load temperature
as the process variable PV and the thermal power as the control variable
CV. From the thermal power I could calculate the PW to use.

CV = Vrms^2 / Z * PW / PER

Apart calibrating the PID constants, there's another problem. When the
voltage is low, the CV from the PID algorithm would be greater than the
maximum allowed (limited by PW maximum duration). The system could stay
in this state for minutes, so the PW calculated by the PID assumes very
great values with time.

When the user decides to increase the voltage and there's the moment to
reduce the PW, the PID behaviour could be very slow, because it would
start from a very high PW (very high sum of errors of the integrative part).

What's the trick here to avoid this behaviour? Should I limit the sum of
errors of the I term? Should I re-initialize the PID state in some way?
```
```On Wednesday, April 26, 2023 at 2:57:14&#8239;AM UTC-4, pozz wrote:
> In one application an AC voltage sourced by a generator is applied to a
> load as a PWM waveform. The period PER is fixed (for example, 100ms) and
> the pulse-width PW has a maximum (for example, 20ms).
>
> The user can change the voltage peak (and consequently the voltage RMS)
> by an handle, while the controller manages automatically the PW.

Looks like an unusual feature to me. Can you share what the purpose of varying
the supply voltage?

>
> The load changes its temperature when the PWM waveform is applied to it
> and a sensor that read the temperature is present.
>
> There's a temperature upper limit (for example, 40&deg;C) that mustn't be
> exceeded. If needed, the controller should decrease the PW accordingly
> to avoid temperature overshoot. Otherwise, the PW is the maximum allowed
> (20ms).
>
> Of course, when the voltage peak is low, PW could be the maximum. When
> the user increases the voltage, the controller should be smart enough to
> reduce PW accordingly and fast to avoid temperature overshoot.
>
> I was thinking to implement a PID controller with the load temperature
> as the process variable PV and the thermal power as the control variable
> CV. From the thermal power I could calculate the PW to use.
>
> CV = Vrms^2 / Z * PW / PER
>
> Apart calibrating the PID constants, there's another problem. When the
> voltage is low, the CV from the PID algorithm would be greater than the
> maximum allowed (limited by PW maximum duration). The system could stay
> in this state for minutes, so the PW calculated by the PID assumes very
> great values with time.
>
> When the user decides to increase the voltage and there's the moment to
> reduce the PW, the PID behaviour could be very slow, because it would
> start from a very high PW (very high sum of errors of the integrative part).
>
> What's the trick here to avoid this behaviour? Should I limit the sum of
> errors of the I term? Should I re-initialize the PID state in some way?

I think the easiest solution is to cap the error/PW value.

Good luck,
Ed

```