He intentado escribir un controlador PID para controlar la potencia de salida de un láser en respuesta a la temperatura medida de algo. La medición de la temperatura puede ser muy ruidosa en ciertos rangos de temperatura, aunque la fotografía de abajo se tomó en un rango menos ruidoso.
Aquí hay una vista actual del PID en acción
Miproblemaactualnoeslaoscilaciónenlaseñaldecomandoalláser,yaqueheencontradoalgunosparámetrosdedescensoquelosuavizanmuybien.Miverdaderoproblemaeslacaídainicialenellímiteinferiordelrangodelaseñaldecomandoyluegoelascensoalosnivelesapropiados.
Unpocomásdefondo.ElPIDensímismofuncionaalusarprimerounatabladebúsquedaparaordenaralaseñaldelláserunvalor"cerrado" de lo que debería ser para que la temperatura inicial se cierre para el PID, lo hace durante X cantidad de segundos (20-30 ha funcionado) Bueno para conseguirlo a una temperatura estable).
La idea detrás de esto fue, con suerte, solucionar el problema que teníamos (estamos) teniendo en el PID inicialmente de una gran oscilación entre la señal de salida mínima y máxima. Esto es altamente indeseable y puede dañar la cosa que se está calentando.
Entonces, una vez que el tiempo del comando del valor de la tabla de búsqueda ha expirado, se le da el control al PID, en la imagen de arriba puede ver claramente cuando esto es (la caída inicial). Entonces, relativamente rápido vuelve a subir a una señal apropiada.
Lo que creo que está sucediendo es que el error anterior y los términos integrales anteriores aún no han acumulado valores adecuados (comienzan en 0) para que el PID produzca la señal de comando adecuada en el punto de ajuste deseado.
¿Es la forma de solucionar esto para inicializar el error anterior y la integral anterior a los valores cercanos a lo que son cuando el PID es estable cerca del final del gráfico?