package org.vishia.exampleJava2C.java4c;
/**This class provides a simple PID-Controller generateable to C with 16-bit arithmetic and 32-bit-integrator.
*
* @author JcHartmut
*
*/
public class PID_controller
{
/**The integral value of the controller. */
int intVal = 0;
/**The last value to build the difference. */
short lastForDiff;
/**The I amplification, unit per sample step. Range -1.00000 to 0.99998 coded with 0x8000...0x7FFF*/
short kI = 0x4000;
/**The P amplification. Range -32.768 to 32.767 coded with 0x8000...0x7FFF. The value 1.0 is 0x0400. */
short kP = 0x400;
/**The D amplification. Range -32.768 to 32.767 coded with 0x8000...0x7FFF. The value 1.0 is 0x0400. */
float kD = 0;
public short process(short input)
{
intVal += (input * kI);
return (short)( (intVal >> 16) + input);
}
/**Gets the value of the internal integrator for displayment. The value is shown in float with position after decimal
point
* as low value. The 1.0-unit is equal to 1 mV output value while controlling.
* @return
*/
public float getIntg() { return intVal/65536.0F; }
}