Controlling is a core application for embedded control. Hence some sources of controlling algorithm are part of the emC sources. It is the experience for many years. Some experience in Simulink are also present.
The controlling FBlocks are the core algorithm in C which run in Simulink blocks too.
It is part of
emC/Ctrl/T1_Ctrl_emC contains some basic smoothing blocks in float and integer.
Because this header may always included, in controlling algorithm T1 Blocks are often used, here is a definition of
#define NOM_i16_Ctrl_emC 27720
which is the nominal value for
1.0 in integer 16-bit resolution. This value allow an overdrive with 118% which is sufficient for proper algorithm for limitation. It is a number which can be divided by 1 … 12, 14, 15, 16, 18, 20, 21, 22, 24, 27, 28, 30, 33, 35, 36, ,40, 42, 44, 45, 50, 60, etc. It may be a point of interest for some algorithm.
The basic idea for the angle is: -180° … 0 … +179.999° are mapped to -32768 … 0 … 32767 in integer range.
With this approach the angle is defined in this range. A swinging around 179 ... -179° is not a problem if differences are used (without overflow handling as usual in C/+, also in Java etc.).
Conversion routines between rad and
int32 angle representation are a simple conversion to/from float and multiplication, fast if the processor supports float.
Especially a smoothing block for angle values prevent the problem of swinging around the 180° value, the smoothing works well.
A PID control needs a longer integrator value.
The floating variant would be need double arithmetic if float should be used anytime.
A better solution is using
int32 for the integrator (may be sufficient enough), or
int32 enhances the integral part by 8 binary digits, about 2..3 decimal digits,
or for high resolution
int64 has the same resolution as double.
Only the numeric range is limited to a given one. But this is usual anyway proper.
Often an integer variant of the controller is sufficient. The inputs and outputs may be 16 bit width. The integrator has 32 bit, recommended also for poor 16 bit processors.
This is a filter adequate a L-C oscillation circuit. It can be used to filter harmonics and disturbing signals. See OrthBandpass.html
This blocks can smooth signals by a smoothing mean value and access to values in the past. Especially the problem of drifting in time of the mean value by small inaccuracy of the last bits of floating values is solved.
It is an interpreter for any mathematic calculation. It runs fast enough for free applications.
The formula can be given by String expressions, which are parsed.