Contents — find the section you need

Change parameters and verify

Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.

Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.

The experiment controls are in English.

Open experiment panel in a new tab

Download reproduction source

Un pequeño modelo ejecutable facilita la inspección de los cambios de ganancia PID y la saturación del actuador. Estos resultados se calcularon el 7 de septiembre de 2026 con Python 3.12.3. Se trata de simulaciones numéricas, no de mediciones ni de un modelo de motor identificado.

Modelo y condiciones

La planta es \ddot y+2\dot y+y=u. La salida y y el control u están normalizados; el tiempo se expresa en segundos. La salida inicial, la velocidad y la integral son cero. El objetivo es 1 desde el tiempo cero, y luego 0,4 desde los 6 segundos. El paso es de 0,005 segundos en el intervalo de 0 a 12 segundos, lo que proporciona 2401 muestras por caso.

El controlador es u=K_pe+K_iI-K_d\dot y_m, con e=r-y_m. Aquí, y_m es la salida medida. La derivada actúa sobre ella en lugar del objetivo. Las ganancias de referencia son K_p=3, K_i=2 y K_d=1. La integración y la diferenciación utilizan explícitamente el paso de tiempo; la planta utiliza la integración semiimplícita de Euler. Consulte Fundamentos de PID para conocer los principios.

Ejecutar el código

Guarde pid_lab.py en un directorio de trabajo vacío y ejecute lo siguiente. Solo requiere la biblioteca estándar de Python y sobrescribe los archivos de resultados con los mismos nombres.

python3 --version
python3 pid_lab.py

Genera el CSV y el resumen JSON. Para regenerar la figura, guarde y ejecute plot_pid.py en el mismo directorio. La representación gráfica se verificó con matplotlib 3.6.3. Las columnas del archivo CSV son escenario, tiempo, objetivo, salida, control e integral.

Comparación de retardo y saturación

Diagram 1 · Use the button to switch views
Salida y control PID simulados con un retardo de medición de 0,4 segundos, un límite de control de 0,8 y integración condicional

El gráfico superior muestra la salida; el inferior, el control. La línea negra representa el objetivo. Las etiquetas de los escenarios coinciden con el archivo CSV, y aw indica la función anti-saturación.

Escenario Cambio Salida a los 12 s Error absoluto integrado
nominal Sin retardo, control limitado a ±3 0,4008 1,7913
retardo_0,4s Medición con retardo de 0,4 s 0,3883 1,8860
limit_0.8_aw Control ±0.8, integración condicional 0.4003 3.3424
limit_0.8_no_aw Control ±0.8, integración sin restricciones 0.6602 5.0996

El error absoluto integrado utiliza la integración rectangular izquierda en el intervalo de 0 a 12 segundos. Sus unidades son segundos de salida normalizada, no el error de posición física en metros. Inspeccione la oscilación y el esfuerzo de control, así como la muestra final.

La función anti-saturación no aumenta la capacidad del actuador

En equilibrio, esta planta tiene y=u, por lo que un límite de control de 0.8 no puede alcanzar un objetivo de 1. Si el error continúa acumulándose, la integral puede requerir una entrada excesiva incluso después de que el objetivo baje a 0.4. El código rechaza la integración que llevaría a una mayor saturación, mientras que permite la integración que ayuda a salir de ella.

Esto modifica el estado interno del controlador, no el motor ni la capacidad de la fuente de alimentación. Lograr que el objetivo sea alcanzable es una decisión aparte.

Modificar una ganancia a la vez

from pid_lab import simulate
for kp in (1., 3., 6.):
    rows = simulate("gain", kp=kp)
    print(kp, max(row[3] for row in rows if row[1] < 6))

Comparar el pico durante el intervalo objetivo inicial. Luego, variar solo ki y, posteriormente, solo kd, registrando también el esfuerzo de control máximo. No todas las ganancias son mejores; repetir las comparaciones con retardo y saturación.

Límites y siguientes comprobaciones

El modelo excluye el ruido de medición, la fricción, la cuantización, la fluctuación de la comunicación y el filtrado de derivadas. Reducir a la mitad el paso de tiempo: si la respuesta cambia sustancialmente, investigar primero la aproximación numérica. No copiar estas ganancias en el hardware sin identificar la planta y hacer coincidir las unidades y las escalas de tiempo. Continuar con MPC para estudiar las restricciones del problema de control.

Ejecutar el mismo cálculo localmente

Extraiga el archivo ZIP de código fuente ejecutable completo, o guarde el punto de entrada del experimento, los núcleos generados y el código fuente PID original en una carpeta. PID utiliza la biblioteca estándar de Python; Kalman e ICP requieren NumPy. Los comandos originales para la generación de figuras siguen estando disponibles.

python3 experiment.py pid --parameters '{"kp":3,"ki":2,"kd":1,"delay":0,"limit":3,"antiwindup":true}' > result.json

Establezca el retardo en 0,4 o el límite en 0,8 y compare el IAE y la salida final con y sin anti-windup.

Code, data and reproduction

The ZIP contains the same computation code as the browser, synthetic data and comparison cases. These are not physical measurements.

Download reproduction package · Instructions (EN/JA) · Files and experiment conditions (JSON)

Extract the ZIP into a new directory, then run:

python3 reproduce.py --experiment pid

This Lab compares 4 cases. PID uses Python’s standard library; Kalman/ICP require NumPy. See the instructions for dependencies and tested versions.

Related reading

Study control with constraintsIntroducción a la ingeniería de control: Control predictivo basado en modelos: Actuando dentro de las restriccionesExplore another aspect of this fieldLab de MPC: volver a resolver una secuencia de curvatura dentro del horizonte y los límites de direcciónExplore another aspect of this fieldLab de comparación de seguimiento de trayectoria: ejecute PP, APP, RPP, Stanley y MPC en las mismas condiciones