c2000ware-core-sdk/libraries/.meta/control/dcl/controller_longdesc.js
2023-12-13 16:46:16 +05:30

734 lines
34 KiB
JavaScript

var longDescriptionObj = {
//*************************************************************************/
// PID
//*************************************************************************/
"PID":
`# ***Linear PID Controllers***
The basic controller type described here is a linear PID. The PID implementations in the
DCL include several features not commonly found in basic PID designs, and this
complexity is reflected the benchmark figures. Applications which do not require
derivative action, or are more sensitive to cycle efficiency, may be better served by the
simpler PI controller structure described in the next section.
***NOTE***: The DCL contains one implementation of a linear PID controller in double precision
floating point form. This controller may be used with the FPU32 CPU, however support
for the double precision data type currently relies on the run time support libraries which
are not cycle efficient. The structure of the controller is identical to the PID_C1 & PID_C2
controllers described earlier in this chapter. Support functions for PIDF64 do not currently
include the ability to load the controller from transfer function coefficient or ZPK3
descriptions.
PID control is widely used in systems which employ output feedback control. In such
systems, the controlled output is measured and fed back to a summing point where it is
subtracted from the reference input. The difference between the reference and feedback
corresponds to the control loop error and forms the input to the PID controller.
Conceptually, the PID controller output is the parallel sum of three paths which act
respectively on the error, error integral, and error derivative. The relative weight of each
path may be adjusted by the user to optimize transient response, or to emulate the
behavior of a specified transfer function expressed in terms of its poles and zeros.
*Figure: Parallel form PID controller*
![](../../libraries/.meta/control/dcl/images/figures_scaled/Parallel_form_PID_controller-Figure5.png)
The diagram above shows the structure of a continuous time parallel PID controller. The
output of this controller is captured in the following equation:
![](../../libraries/.meta/control/dcl/images/PID_Equation-2.svg)
Conceptually, the controller comprises three separate paths connected in parallel. The
upper path contains an adjustable gain term (Kp). Its effect is to fix the open loop gain of
the control system. Since loop gain is proportional to this term, Kp is known as
proportional gain.
A second path contains an integrator which accumulates error history. A separate gain
term acts on this path. The output of the integral path changes continuously as long as a
non-zero error (e) is present at the controller input. A small but persistent servo error has
the effect of driving the output of the integrator such that the loop error will eventually
disappear. The principal effect of the integral path is therefore to eliminate steady state
error. The effect of the integral gain term is to change the rate at which this happens.
Integral action is especially important in applications such as electronic power supplies,
which must maintain accurate regulation over long periods of time.
The third path contains a differentiator. The output of this path is large whenever the rate
of change of the error is large. The principal effects of the derivative action are to damp
oscillation and reduce transients.
The operation of the PID controller can be visualized in terms of the transient error
following a step change of set-point.
*Figure: PID control action*
![](../../libraries/.meta/control/dcl/images/figures_scaled/PID_control_action-Figure6.png)
The figure above shows the action of the PID controller in terms of the control loop error
at time t1. The proportional term contributes a control effort which is proportional to the
instantaneous loop error. The output of the integral path is the accumulated error history:
the shaded area in the lower plot. The contribution of the derivative path is proportional to
the rate of change of the loop error. Derivative gain fixes the time interval over which a
tangential line to the error curve is projected forward in time.
Tuning the PID controller is a matter of finding the optimum combination of these three
effects. This in turn means finding the best balance of the three gain terms. For more
information on PID control & tuning, see the references in section 6.1.
The PID shown above is known as the “parallel” form because the three controller gains
appear in separate parallel paths. A slightly different PID architecture in which the
proportional gain is moved into the output path (i.e. after the summing point), so that the
proportional path becomes a direct connection between the controller input and the
summing point, is known as the “series” or “ideal” form. In the ideal form, the open loop
gain is directly influenced by the proportional controller gain, and there is less interaction
between the controller gains. However the proportional gain cannot be zero (since the
loop would be opened), and to maintain good control cannot be small. The parallel form
allows the proportional gain to be small, however there is slightly more interaction
between the controller gains, complicating the tuning process. The DCL contains both
ideal and parallel PID functions.
## ***Implementation***
The linear PID controllers in the DCL include the following features:
* Parallel and ideal forms
* Programmable output saturation
* Independent reference weighting on proportional path
* Anti-windup integrator reset
* Programmable low-pass derivative filter
* External saturation input for integrator anti-windup
* Adjustable output saturation
It is important to note that the controller sample period is not accounted for in the selection
of integral gain (Ki). This is relevant when computing the integral gain as opposed to
manual tuning against a transient response, for example. In such situations, users must
multiply the computed integral gain by the sample period before loading Ki (either directly
or through the SPS). The element T in the CSS sub-structure can be used to store the
sample period for this purpose.
All PID type controllers in the library implement integrator anti-windup reset in a similar
way. A clamp is present at the controller output which allows the user to set upper and
lower limits on the control effort. If either limit is exceeded, an internal floating-point
controller variable changes from 1.0 to 0.0. This variable is multiplied by the integrator
input, such that the integrator accumulates zero data only when the output is saturated,
thus preventing the well-known “wind-up” phenomenon.
The PID controllers in the library make provision for anti-windup reset to be triggered from
an external part of the loop. This is useful in situations where a component outside the
controller may be saturated. The floating-point variable lk is expected to be either 1.0 or
0.0 in the normal and saturated conditions respectively. If this feature is not required, the
functions should be called with the lk argument set to 1.0. Note that all the controllers
here require non-zero proportional gain to recover from loop saturation.
The derivative PID path includes a digital low-pass filter to avoid amplification of unwanted
high frequency noise. The filter implemented here is a simple first order lag filter
(with differentiator), converted into discrete form using the Tustin transform. Referring to
Figure 6, the difference equation of the filtered differentiator is
![](../../libraries/.meta/control/dcl/images/PID_Equation-3.svg)
The temporary storage elements d2 & d3 must be preserved from the (k - 1)th interval, so
the following must be computed after the differentiator update.
![](../../libraries/.meta/control/dcl/images/PID_Equation-4.svg)
![](../../libraries/.meta/control/dcl/images/PID_Equation-5.svg)
The derivative filter coefficients are
![](../../libraries/.meta/control/dcl/images/PID_Equation-6.svg)
![](../../libraries/.meta/control/dcl/images/PID_Equation-7.svg)
Both the sample period (T) and filter time constant (tau) must be determined by the user.
The time constant is the reciprocal of the desired filter bandwidth in radians per second.
All linear PID controller functions use a common C structure to hold coefficients and data.
Refer to the header file DCLF32.h for details of the DCL_PID controller structure.
The library PID controller architectures are shown below:
*Figure: DCL_PID C1, C2, & L1 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_PID_C1_C2_L1_architecture-Figure7.png)
*Figure: DCL_PID C3, C4, & L2 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_PID_C3_C4_L2_architecture-Figure8.png)
`,
//*************************************************************************/
// PI
//*************************************************************************/
"PI":
`# ***Linear PI Controllers***
The continuous time parallel PI control equation is
![](../../libraries/.meta/control/dcl/images/PI_Equation-8.svg)
The linear PI controllers in the DCL differ from the PID in the following respects.
* Removal of derivative path
* Removal of set-point weighting
* No provision for external saturation input
In all other respects, the PI controllers are similar to the PID controllers.
## ***Implementation***
All linear PI controller functions use a common C structure to hold coefficients and data,
defined in the header files DCLF32.h and DCLCLA.h.
The PI controller architectures are shown in the following diagrams.
*Figure: DCL_PI C1, C2, L1, & L3 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_PI_C1_C2_L1_L3_architecture-Figure9.png)
*Figure: DCL_PI C3, C4, L2 & L4 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_PI_C3_C4_L2_L4_architecture-Figure10.png)
*Figure: DCL_PI C5 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_PI_C5_architecture-Figure11.png)
Note that the C5 parallel form PI controller contains enhanced anti-windup reset logic which allows the
integral path to recover from saturation even when the proportional gain is zero.
*Figure: DCL_PI C6, C7, & L5 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_PI_C6_C7_L5_architecture-Figure12.png)
The C6, C7, & L5 controllers combine a series form PI with a Tustin integrator. This configuration
is best suited to applications in which the controller gains are selected on the basis of high
frequency loop gain and zero frequency, because Kp and Ki are effectively un-coupled in the
series form controller. Furthermore the Tustin integrator has fixed 90 degree phase lag at all
frequencies below the Nyquist limit, simplifying design of the compensator.
`,
//*************************************************************************/
// NLPID
//*************************************************************************/
"NLPID":
`# ***Non-linear PID Controller***
The DCL includes two implementations of a non-linear PID controller, denoted NLPID.
The controllers are broadly similar to the ideal PID_C1 controller, except that there is no
set-point weighting and in one case the derivative path sees the servo error instead of the
feedback. A non-linear gain block appears in series with each of the three paths.
To improve computational efficiency, the non-linear law is separated into two parts: one
part which is common to all paths, and a second part which contains terms specific to
each path. The non-linear part of the high-level controller structure is shown below:
*Figure: DCL_NLPID C1 input architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_NLPID_C1_input_architecture-Figure13.png)
The linear part of the DCL_NLPID_C1 controller is shown below:
*Figure: DCL_NLPID C1 output architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_NLPID_C1_output_architecture-Figure14.png)
*Figure: DCL_NLPID C2 & C3 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_NLPID_C2_C3_architecture-Figure15.png)
The non-linear control law is based on a power function of the modulus of the servo error,
with a linearized region about the zero error point. In the equation below, x represents the
input to the control law, y, the output, and "ALPHA" is a user selectable exponent representing
the degree of non-linearity.
![](../../libraries/.meta/control/dcl/images/NLPID_Equation-9.svg)
The following plot shows the x-y relationship for values of "ALPHA" between 0.2 and 2. Notice
that the curves intersect at x = 0, and x = ±1.
*Figure: Non-linear control law input-output plot*
![](../../libraries/.meta/control/dcl/images/figures_scaled/Non-linear_control_law_input-output_plot-Figure16.svg)
The gain of the control law is the slope of the x-y curve. Observe that with "ALPHA" = 1 the
control is linear with unity gain. With "ALPHA" > 1 the gain is zero when x = 0, and increases as x
increases. In the controller, a value of "ALPHA" in this range produces controller gain which
increases with increasing control error. With 0 < "ALPHA" < 1 the gain at x = 0 is infinite, and falls
as x increases. This range of "ALPHA" setting produces controller gain which decreases with
increasing servo error.
The plots below show the gain vs. control loop error curves for different values of "ALPHA".
Notice particularly the singularity at x = 0 when "ALPHA" < 1.
*Figure: Gain vs error curves for varying alpha*
![](../../libraries/.meta/control/dcl/images/figures_scaled/Gain_vs_error_curves_for_varying_alpha-Figure17.png)
The presence of zero or infinite gain at the zero control error point leads to practical
difficulties. With "ALPHA" > 1 the response becomes sluggish for small errors; with "ALPHA" < 1 it is
common to encounter oscillation or “chattering” near steady-state. These issues can be
overcome by limiting the controller gain in a region close to x = 0. This is done by
modifying the control law to introduce a user selectable region about x = 0 with linear gain
is applied. The non-linear control law becomes
![](../../libraries/.meta/control/dcl/images/NLPID_Equation-10.svg)
When the magnitude of servo error falls below δ the linear gain is applied, otherwise the
gain is determined by the non-linear law. For computational efficiency, we pre-compute
the gain in the linear region ("GAMMA") as follows.
![](../../libraries/.meta/control/dcl/images/NLPID_Equation-11.svg)
A typical plot of the linearized control law is shown below. Observe that when x = δ the
linear and non-linear curves intersect, so the controller makes a smooth transition
between the linear and non-linear regions as the servo error passes through x = ±δ.
*Figure: NLPID linearized region*
![](../../libraries/.meta/control/dcl/images/figures_scaled/NLPID_linearized_region-Figure18.png)
In addition to the P, I, and D gains, the user must select two additional terms in each
control path: "ALPHA" and δ. The library includes a separate function to compute and update "GAMMA"
for each path using the SPS structure. The use must initialize "GAMMA" parameters before calling
the NL controllers.
The NLPID controller has been seen to provide significantly improved control in many
cases, however it must be remembered that increased gain, even if only applied to part of
the control range, can lead to significantly increased output from the controller. In most
cases, this 'control effort' is limited by practical factors such as actuator saturation, PWM
modulation range, and so on. The corollary is that not every application benefits equally
from the use of non-linear control and some may see no benefit at all. In cases where
satisfactory performance cannot be achieved through the use of linear PID control, the
user is advised to start with all "ALPHA" = 1, and experiment by introducing non-linear terms
gradually while monitoring both control performance and the magnitude of the control
effort. In general, P and I paths benefit from increased gain at high servo error ("ALPHA" > 1),
while the D path benefits from reduced gain at high servo error ("ALPHA" < 1), but this is not
universally true. Further information on tuning the nonlinear PID controller can be found
in the Nonlinear PID Controller Tuning Guide in the \docs directory of the DCL.
Further information on this control law can be found in: “From PID to Active Disturbance
Rejection Control”, Jingqing Han, IEEE TRANSACTIONS ON INDUSTRIAL
ELECTRONICS, VOL. 56, NO. 3, MARCH 2009
## ***Implementation***
The NLPID controller uses a C structure to hold coefficients and data, defined in the
header file DCL_NLPID.h. Note that the NLPID functions make use of the pow()
function in the standard C library. For this reason the header file math.h must be
included, which is not supported by the CLA compiler. To allow different DCL functions to
be run on both the CPU and CLA in the same program, the NLPID functions are located in
a separate header file. Refer to the file DCL_NLPID.h for details of the NLPID controller
structure.
`,
//*************************************************************************/
// DF11
//*************************************************************************/
"DF11":
`# ***Direct Form 1 (First Order) Compensators***
The DCL includes one first order compensator in Direct Form 1. The DF11 compensator
implements a first order, or “simple lag”, type frequency response. The general form of
discrete time first order transfer function is
![](../../libraries/.meta/control/dcl/images/DF11_Equation-12.svg)
Denominator coefficients must be normalized accordingly. The corresponding difference
equation is
![](../../libraries/.meta/control/dcl/images/DF11_Equation-13.svg)
A diagrammatic representation of the DF11 is shown below:
*Figure: DCL_DF11 C1, C2, & L1 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_DF11_C1_C2_L1_architecture-Figure21.png)
## ***Implementation***
All DF11 functions use a common C structure to hold coefficients and data, defined in the
header files DCLF32.h and DCLCLA.h.
`,
//*************************************************************************/
// DF13
//*************************************************************************/
"DF13":
`# ***Direct Form 1 (Third Order) Compensators***
The Direct Form 1 (DF1) structure is a common type of discrete time control structure
used to implement a control law or dynamical system model specified either as a polezero
set, or as a rational polynomial in z (i.e. a discrete time transfer function). The DCL
includes one third order DF1 compensator, denoted “DF13”.
In general, the Direct Form 1 structure is less numerically robust than the Direct Form 2
(see below), and for this reason users are encouraged to choose the latter type whenever
possible. However, the DCL_DF13 structure is very common in digital power supplies
and for that reason is included in the library. The same function supports a second order
control law after the superfluous coefficients (a3 & b3) have been set to zero.
The general form of third order transfer function is
![](../../libraries/.meta/control/dcl/images/DF13_Equation-14.svg)
Notice that the coefficients have been adjusted to normalize the highest power of z in the
denominator. There is no notational standard for numbering of the controller coefficients;
the notation used here has the advantage that the coefficient suffixes are the same as the
delay line elements and this helps with clarity of the assembly code, however other
notations may be found in the literature. The corresponding difference equation is
![](../../libraries/.meta/control/dcl/images/DF13_Equation-15.svg)
The DF13 controller uses two, three-element delay lines to store previous input and
output data required to compute u(k). A diagrammatic representation is shown below.
*Figure: DCL_DF13 C1, C4, & L1 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_DF13_C1_C4_L1_architecture-Figure22.png)
The DF13 control law consists of seven multiplication operations which yield seven partial
products, and six addition or subtraction operations which combine the partial products to
obtain the compensator output, u(k). When implemented in this way, the control law is
referred to as the “full” DF13 form.
The DF13 control law can be re-structured to reduce control latency by pre-computing six
of the seven partial products which are already known in the previous sample interval.
The control law is then broken into two parts: the “immediate” part and the “partial” part.
The advantage of doing this is to reduce the “sample-to output” delay, or the time between
e(k) being sampled, and a corresponding u(k) becoming available. By partially precomputing
the control law, the computation delay can be reduced to one multiplication
and one addition.
In the kth interval, the immediate part is computed.
![](../../libraries/.meta/control/dcl/images/DF13_Equation-16.svg)
Next, the v(k) partial result is pre-computed for use in the (k+1)th interval.
![](../../libraries/.meta/control/dcl/images/DF13_Equation-17.svg)
Structurally, the pre-computed control law can be drawn as below:
*Figure: DCL_DF13 C2, C3, C5, C6, L2, & L3 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_DF13_C2_C3_C5_C6_L2_L3_architecture-Figure23.png)
The pre-computed structure allows the controller output (u(k)) to be used as soon as it is
computed. The remaining terms in the third order control law do not involve the newest
input e(k) and therefore do not affect u(k). These terms can be computed after u(k) has
been applied to the control loop and the input-output latency of the controller is therefore
reduced.
A further benefit of the pre-computed structure is that it allows the control effort to be
clamped after the immediate part. Computation of the pre-computed part can be made
dependent on the outcome of the clamp such that if u(k) matches or exceeds the clamp
limits there is no point in pre-computing the next partial control variable and the
computation can be avoided. The DCL includes three clamp functions intended for this
purpose.
## ***Implementation***
All DF13 functions use a common C structure to hold coefficients and data, defined in the
header files DCL.h and DCLCLA.h.
The assignment of coefficients and data in the DCL_DF13 structure to those in the
diagram is shown below:
*Figure: DCL_DF13 data & coefficient layout*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_DF13_data_coefficient_layout-Figure24.png)
To implement a full DF13 controller, the user might call:
uk = DCL_runDF13_C1(&df13, ek);
…where ek and uk are the controller input and output respectively, and df13 is the
controller structure.
To implement a pre-computed DF13 controller, the user might call:
uk = DCL_runDF13_C2(&df13, ek, vk);
vk = DCL_runDF13_C3(&df13, ek, uk);
...where vk is an intermediate float variable. This arrangement allows the user to make
use of the output immediately by placing instructions between the two lines above to use
the newest value of uk.
For applications where it is necessary to restrict the output of the compensator, a clamp
function can be used as follows.
uk = DCL_runDF13_C2(&df13, ek, vk);
s = DCL_runClamp_C1(&uk, upperLim, lowerLim);
if (0U == s)
{
vk = DCL_runDF13_C3(&df13, ek, uk);
}
The clamp function limits the controller output to lie between “lowerLim” and “upperLim”
and sets the unsigned integer “s” to 1 is that range is exceeded. The pre-computed part
of the controller will only be executed when the immediate result is in range.
`,
//*************************************************************************/
// DF22
//*************************************************************************/
"DF22":
`# ***Direct Form 2 (Second Order) Compensators***
The C2000 Digital Controller Library contains a second order implementation of the Direct
Form 2 controller structure, denoted “DCL_DF22”. This structure is sometimes referred to
as a “bi-quad” filter and is commonly used in a cascaded chain to build up digital filters of
high order.
***NOTE***: From version 3.4, the DCL contains support for the DF22 compensator in double precision
floating point. The controller architecture is identical to that described in section 3.8 so
the details need not be repeated here. One full controller and a pair of functions to
support a pre-computed controller are implemented. There are also 'reset' and 'update'
functions, and a double precision clamp function. Other single precision
functions to support coefficient calculation are not implemented at this time.
The transfer function of a second order discrete time compensator is
![](../../libraries/.meta/control/dcl/images/DF22_Equation-18.svg)
The corresponding difference equation is
![](../../libraries/.meta/control/dcl/images/DF22_Equation-19.svg)
A diagrammatic representation of the full Direct Form 2 realization is shown below:
*Figure: DCL_DF22 C1, C4,L1, & L4 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_DF22_C1_C4_L1_L4_architecture-Figure25.png)
As with the DCL_DF13 compensator, sample-to-output delay can be reduced through the
use of pre-computation. The immediate and pre-computed control laws are as follows. In
the kth interval, the immediate part is computed
![](../../libraries/.meta/control/dcl/images/DF22_Equation-20.svg)
Next, the v(k) partial result is pre-computed for use in the (k+1)th interval.
![](../../libraries/.meta/control/dcl/images/DF22_Equation-21.svg)
The pre-computed form of DCL_DF22 is shown in the following diagrams.
*Figure: DCL_DF22 C2, C5, & L2 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_DF22_C2_C5_L2_architecture-Figure26.png)
*Figure: DCL_DF22 C3, C6, & L3 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_DF22_C3_C6_L3_architecture-Figure27.png)
Notice that pre-computation is a little different from the Direct Form 1 case because the
intermediate value exists as one of the internal states and is therefore automatically
stored as “x1” in the DCL_DF22 structure. Therefore it is not necessary to create a
separate variable to store v(k).
## ***Implementation***
All DF22 functions use a common C structure to hold coefficients and data, defined in the
header file DCL.h and DCLCLA.h.
`,
//*************************************************************************/
// DF23
//*************************************************************************/
"DF23":
`# ***Direct Form 2 (Third Order) Compensators***
The third order Direct Form 2 compensator (DF23) is similar in all respects to the DF22
compensator. Separate full and pre-computed forms are supplied in C and assembly for
computation on the FPU32, and in assembly for computation on the CLA.
The control law is the same as the DF13 compensator.
![](../../libraries/.meta/control/dcl/images/DF23_Equation-23.svg)
A diagrammatic representation of the full third order Direct Form 2 compensator is shown
below:
*Figure: DCL_DF23 C1, C4, & L1 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_DF23_C1_C4_L1_architecture-Figure28.png)
Sample-to-output delay can be reduced through the use of pre-computation, in a similar
way to the DF22 compensator. In the kth interval, the immediate part is computed.
![](../../libraries/.meta/control/dcl/images/DF23_Equation-24.svg)
Next, the v(k) partial result is pre-computed for use in the (k+1)th interval.
![](../../libraries/.meta/control/dcl/images/DF23_Equation-25.svg)
The pre-computed form of DF23 is shown in the following diagrams:
*Figure: DCL_DF23 C2, C5, & L2 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_DF23_C2_C5_L2_architecture-Figure29.png)
*Figure: DCL_DF23 C3, C6, & L3 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_DF23_C3_C6_L3_architecture-Figure30.png)
## ***Implementation***
All DF23 functions use a common C structure to hold coefficients and data, defined in the header
file DCL.h. and DCLCLA.h.
`,
//*************************************************************************/
// PID32
//*************************************************************************/
"PID32":
`# ***Fixed-Point PID Controllers***
The DCL contains one implementation of a parallel form fixed-point PID controller. The
structure is similar to the floating-point C1 controller.
The linear PID controller in the DCL32 includes the following features.
* Parallel form
* Programmable output saturation
* Anti-windup integrator reset
* Programmable low-pass derivative filter
* Feedback input to derivative path
Both PID and PI type controllers in the DCl32 library implement integrator anti-windup
reset in a similar way. A clamp is present at the controller output which allows the user to
set upper and lower limits on the control effort. If either limit is exceeded, an internal
floating-point controller variable changes from logical 1 to logical 0. This variable is
converted into Q24 format and multiplied by the integrator input, such that the integrator
accumulates successive zero data when the output is saturated, avoiding the “wind-up”
phenomenon.
The following equations describe the implementation of the PID32 controller. Note that
the storage of static variables {i14 i10 d2 d3} is not shown.
The servo error equation is
![](../../libraries/.meta/control/dcl/images/PID32_Equation-26.svg)
The proportional path equation is
![](../../libraries/.meta/control/dcl/images/PID32_Equation-27.svg)
The integral path equations are
![](../../libraries/.meta/control/dcl/images/PID32_Equation-28.svg)
![](../../libraries/.meta/control/dcl/images/PID32_Equation-29.svg)
![](../../libraries/.meta/control/dcl/images/PID32_Equation-30.svg)
The derivative path equations are
![](../../libraries/.meta/control/dcl/images/PID32_Equation-31.svg)
![](../../libraries/.meta/control/dcl/images/PID32_Equation-32.svg)
![](../../libraries/.meta/control/dcl/images/PID32_Equation-33.svg)
![](../../libraries/.meta/control/dcl/images/PID32_Equation-34.svg)
Note that the derivative coefficient c1 must be divided by two on initialization. This
element is typically much larger than c2 so we enter half its value in the code and multiply
twice. This allows greater numerical range for a given Q-format.
The output path equations are
![](../../libraries/.meta/control/dcl/images/PID32_Equation-35.svg)
![](../../libraries/.meta/control/dcl/images/PID32_Equation-36.svg)
![](../../libraries/.meta/control/dcl/images/PID32_Equation-37.svg)
![](../../libraries/.meta/control/dcl/images/PID32_Equation-38.svg)
![](../../libraries/.meta/control/dcl/images/PID32_Equation-39.svg)
The DCL_PID32 implementation is shown below:
*Figure: DCL_PID32 A1 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_PID32_A1_architecture-Figure31.png)
The linear PID_A1 controller uses a C structure to hold coefficients and data, defined in
the header file DCLC28.h. The order of these structure elements must not be changed
by the user.
`,
//*************************************************************************/
// PI32
//*************************************************************************/
"PI32":
`# ***Fixed-Point PI Controllers***
The DCL contains one implementation of a fixed-point series form PI controller. The PI is
similar in operation to the PID controller, with the removal of the derivative path.
## ***Implementation***
The following equations describe the implementation of the PI32 controller.
![](../../libraries/.meta/control/dcl/images/PI32_Equation-40.svg)
![](../../libraries/.meta/control/dcl/images/PI32_Equation-41.svg)
![](../../libraries/.meta/control/dcl/images/PI32_Equation-42.svg)
![](../../libraries/.meta/control/dcl/images/PI32_Equation-43.svg)
![](../../libraries/.meta/control/dcl/images/PI32_Equation-44.svg)
![](../../libraries/.meta/control/dcl/images/PI32_Equation-45.svg)
![](../../libraries/.meta/control/dcl/images/PI32_Equation-46.svg)
![](../../libraries/.meta/control/dcl/images/PI32_Equation-47.svg)
![](../../libraries/.meta/control/dcl/images/PI32_Equation-48.svg)
The ideal form PI implementation is shown below:
*Figure: DCL_PI A1 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_PI_A1_architecture-Figure32.png)
The linear PI controller uses a C structure to hold coefficients and data, defined in the
header file DCLC28.h. The order of these structure elements must not be changed by
the user.
`,
//*************************************************************************/
// PI2
//*************************************************************************/
"PI2":
`# ***Double Integrator PI Controller***
The DCL contains one implementation of a linear PI controller having two series
integrators. This type of controller is similar to the parallel PI controller
except that the anti-windup reset logic is more complicated.
In this controller, allowance has been made for the Kp element to be zero. This scenario
presents a problem if the controller enters saturation because without the proportional
path there is no way to recover. The PI2 resolves this by releasing the anti-windup lock
when the integrator input reverses sign. The logic has to be implemented twice, since
there are two cascaded integrators. Similar anti-windup reset logic is present in the
PI_C5 controller.
## ***Implementation***
The double integrator PI2 controller uses a C structure to hold coefficients and data,
defined in the header file DCLF32.h.
The PI2 implementation is shown below:
*Figure: DCL_PI2 C1 architecture*
![](../../libraries/.meta/control/dcl/images/figures_scaled/DCL_PI2_C1_architecture-Figure20.png)
`,
}
function get_longDescriptionObj()
{
return longDescriptionObj;
}
exports = {
get_longDescriptionObj:get_longDescriptionObj,
}