PID

La próxima clase (7/11) comenzará puntual con una breve clase para fijar ideas acerca de lazos de control seguida por las charlas de sus compañeros. El resto de la clase estará dedicado casi íntegramente a medir con los lazos que armaron, excepto la últimos 30 minutos que comenzaremos a una introducción a como organizar aplicaciones mas complejas de intrumentación.

El 14/11 deberán entregar el informe de PID.

Algunas ideas para hacer con el lazo de control:

  • Modificar los parámetros del lazo para ver “que tan bien” funciona (Diseñar e implementar una definición cuantitativa de “que tan bien”)
  • Aplicar una perturbación conocida y estudiar la capacidad del lazo + actuador para mantener el sensor en el valor de referencia en función de la frecuencia y amplitud de dicha perturbación
  • Modificar la lógica del lazo para incorporar las relaciones que conocen del sistema actuador+ sistema físico + sensor.
Finalmente, dado que para muchos de ustedes el actuador y el pertubador es un elemento del mismo tipo, estaría bueno si pueden “empeorar” el actuador, por ejemplo pasando la señal por un filtro pasa bajo.

Respecto del software, muchos se dieron cuenta que no es posible crear una simple funcion donde el output  dependa sólo del input. Un lazo de control tiene que lidear con la inercia y la histeresis de un sistema fisico y esto significa que tiene que tener memoria.

Hay varias formas de lidiar con esto:

  1. Poner el codigo del lazo y la memoria en el while.
  2. Definir variables globales que operen de memoria del lazo
  3. Que la función lazo tome alguna estructura de datos (u otros parámetros) para contener la memoria, la modifique y la devuelva.
  4. Crear una clase e instanciar un objeto
  5. Crear un generador

Muchos de ustedes implementaron la forma #1,  mezclando la lógica de adquisición con la lógica del lazo. Esto no es en general una buena idea ya que dificulta el debugging, la simulación del efecto de cada parte y la capacidad para compartir codigo.

Seria ideal que el software sea algo como lo siguiente:
while True:
   signal = <aca va el codigo que lee de la daq/placa de audio/lo que sea>
   actuador = <aca va el codigo que calcula el siguiente valor del actuador>
   aca va el codigo que escribe de la daq/placa de audio/lo que sea>(actuador)
por ejemplo:
while True:
    task.wite(lazo_calcular(task.read(), <otros_parámetros>))

(Los nombres son a gusto del usuario)

Les pido que piensen pros/contras de estas opciones y busquen implementar alguna de ellas. El lunes temprano voy a postear algunas ideas mas.

Print Friendly, PDF & Email