Diferencia entre revisiones de «Controlador PID»

De Proyecto Butiá
Saltar a: navegación, buscar
Línea 20: Línea 20:
 
pid.Kp = 10
 
pid.Kp = 10
 
pid.Ti = 100
 
pid.Ti = 100
pid.out_min, pid.out_max = -1, 1
 
 
pid.setpoint = 1.5
 
pid.setpoint = 1.5
 
</syntaxhighlight>
 
</syntaxhighlight>
  
También es posible inicializar el controlador pasándole una tabla al instanciarlo. El equivalente de los antgerior
+
También es posible inicializar el controlador pasándole una tabla al instanciarlo. El equivalente de lo anterior:
 +
 
 +
<syntaxhighlight lang="lua">
 +
local pid = controller.get_pid({Kp = 10, Ti = 100, setpoint = 1.5})
 +
</syntaxhighlight>
 +
 
 +
Cualquiera de los parametros puede ser cambiado en cualquier momento. Los parámetros son:
 +
 
 +
Kp, Ti, Td : ganancia, tiempo integral y tiempo diferencial, tal como se definen en [http://en.wikipedia.org/wiki/PID_controller#Alternative_nomenclature_and_PID_forms]
 +
 
 +
out_min, out_max : valores mínimo y máximo admitidos de la salida (la salida se trunca al este rango)
 +
 
 +
setpoint : valor de referencia que el controlador persigue.
 +
 
 +
Para utilizar el controlador, deberá invocarse al controlador pasándole el valor controlada:
 +
 
 +
<syntaxhighlight lang="lua">
 +
while true do
 +
  -- read value "v"
 +
  local out=pid(v)
 +
  -- apply output "out"
 +
end
 +
</syntaxhighlight>
 +
 
 +
Si el valor de referencia varia muy frecuentemente (por ejemplo, porque es la salida de otro pid), se puede pasar directamente al controlador al invocarlo. El atributo setpoint se actualizará automáticamente
 +
 
 +
<syntaxhighlight lang="lua">
 +
  local out=pid(v, reference)
 +
</syntaxhighlight>
 +
 
 +
 
 +
Programa de ejemplo, que implementa el butia equilibrista:
 +
 
 +
<syntaxhighlight lang="lua">
 +
asasd
 +
</syntaxhighlight>

Revisión del 19:50 24 jul 2011

La librería implementa controladores PID[1], expresados en notación standard[2].

La librería se carga haciendo

local controller = require("controller")

Luego, los controladores se instancian invocando

local pid = controller.get_pid()

Ademas del método get_pid(), se pueden invocar get_pi y get_p, que devuelven controladores proporcional-integral y proporcional, respectivamente.

Una vez obtenido un controlador, se lo configura con los parámetros deseados

pid.Kp = 10
pid.Ti = 100
pid.setpoint = 1.5

También es posible inicializar el controlador pasándole una tabla al instanciarlo. El equivalente de lo anterior:

local pid = controller.get_pid({Kp = 10, Ti = 100, setpoint = 1.5})

Cualquiera de los parametros puede ser cambiado en cualquier momento. Los parámetros son:

Kp, Ti, Td : ganancia, tiempo integral y tiempo diferencial, tal como se definen en [3]

out_min, out_max : valores mínimo y máximo admitidos de la salida (la salida se trunca al este rango)

setpoint : valor de referencia que el controlador persigue.

Para utilizar el controlador, deberá invocarse al controlador pasándole el valor controlada:

while true do
  -- read value "v"
  local out=pid(v)
  -- apply output "out"
end

Si el valor de referencia varia muy frecuentemente (por ejemplo, porque es la salida de otro pid), se puede pasar directamente al controlador al invocarlo. El atributo setpoint se actualizará automáticamente

  local out=pid(v, reference)


Programa de ejemplo, que implementa el butia equilibrista:

asasd