Control PID---basado en la simulación de python

    PID es un modelo de control muy clásico. Utiliza P (proporcional), I (diferencial) y D (integral) para cooperar entre sí para realizar el control de lazo cerrado de una señal y, al mismo tiempo, puede hacer la forma de onda de la señal cambia suavemente en lugar de abruptamente. Lo siguiente es principalmente para simular el proceso de PID combinando un programa de control de velocidad implementado por python.

Blog de referencia: Motor Control Advanced - PID Speed ​​Control_pid Speed ​​​​Control Algorithm_Programmer Blog-CSDN Blog 

Tabla de contenido

breve descripción 

P (proporción)

yo (diferencial)

D (Puntos)

Ajuste de velocidad basado en Python

Kp=0,01,Ki=0,Kd=0

Kp=0,01,Ki=0,01,Kd=0

Kp=0,01,Ki=0,01,Kd=0,01


breve descripción 

    El control PID se divide en métodos de control incremental y posicional, porque el tipo posicional se usa más, por lo que me centraré en el tipo posicional (el tipo incremental está en el blog al que me refiero, si está interesado, puede aprenderlo usted mismo) ).

    El control PID posicional se compone principalmente de tres partes : P (proporcional), I (diferencial) y D (integral) El siguiente es un diagrama de bloques estructural simple.

     Suponiendo que la configuración actual es la velocidad, se puede ver que al usar la velocidad objetivo-velocidad real, se puede obtener un error. De acuerdo con este error, la cantidad de corrección requerida actual se corrige para el valor real a través del cálculo y la suma de la tres cantidades de P, I y D. Luego haga que el valor real final siga acercándose al valor objetivo.

La siguiente es una explicación separada de PID:

P (proporción)

    La cantidad de cambio reflejada aproximadamente por P está relacionada con la brecha entre el valor actual y el valor objetivo. Cuanto mayor sea la brecha, mayor será la cantidad.      Toma como ejemplo a Sokoban, cuanto más lejos estés del destino, más fuerza usas, para que puedas llegar al destino más rápido. Por el contrario, si estás muy cerca del destino, necesitas usar menos fuerza en este tiempo, de lo contrario perderá peso se desviará más del objetivo.

yo (diferencial)

    I refleja aproximadamente el tamaño de la resistencia, que se refleja como una derivada en el caso continuo, pero en el caso discreto de ingeniería general, es la diferencia entre los dos errores de medición, es decir, la diferencia entre el error actual y el error anterior. 

    Esto es en realidad equivalente al papel de la resistencia. No importa cómo lo ajuste, lo cambiaré en la dirección opuesta. Esto es muy efectivo cuando el balance final está oscilando y puede reducir significativamente la amplitud de la oscilación.

D (Puntos)

    D es aproximadamente el método de ajuste para diferentes etapas, que está relacionado con la suma del error del ajuste.

    Esta cantidad es principalmente para resolver el problema del equilibrio estático. Si hay una piscina con un nivel de agua esperado, hay descarga y fuga de agua. Si un estado es completamente consistente, entonces P e I también son completamente consistentes con el estado anterior, entonces el estado todavía está en este estado después del ajuste, y caerá en un bucle sin fin. En este momento, se necesita la cantidad D. Dado que esta cantidad está directamente relacionada con la suma del error, entonces cada ajuste, el error aumentará , entonces la cantidad del próximo ajuste será diferente de esta vez, y este ciclo sin fin se puede romper.

Ajuste de velocidad basado en Python

Lo siguiente es principalmente para establecer un modelo de ajuste de velocidad para el modelo PID. Tome como ejemplo el ajuste de velocidad de 60 a 100. El requisito de precisión final es 0.001. Puede sentir el efecto de cada cantidad.

Para estabilizar el efecto, configuré varios coeficientes para que sean relativamente pequeños. Si son demasiado grandes, es muy probable que al final sean directamente NaN. Puede ajustar la configuración de los parámetros usted mismo.

el código se muestra a continuación:

from matplotlib import pyplot as plt

def PID(now_v,expc_v):
    Kp = 0.01
    Ki = 0
    Kd = 0
    sum_err = 0
    v_list = []
    err = expc_v - now_v
    err_last = err  # 上一次的输出,先初始化为一致
    cnt = 0
    while abs(err) > 0.001:  # 误差还在范围外
        err = expc_v - now_v
        sum_err += err
        uk = Kp*err + Ki * sum_err + Kd * (err-err_last) # 确定本次输出
        # now_v = now_v + uk + random.uniform(0,0)  # 更新当前速度,加入一个扰动
        now_v = now_v + uk
        err_last = err
        v_list.append(now_v)
        cnt += 1
    print(cnt)
    plt.plot(v_list)
    plt.show()

if __name__ == '__main__':
    PID(60,100)

Kp=0,01,Ki=0,Kd=0

En este momento, significa que solo se usa P para controlar, y el siguiente proceso de ajuste se encuentra después de ejecutar

Se ve muy ideal, porque esta situación en sí misma es ideal. Si agrego un elemento de perturbación, se volverá así, agregando la velocidad al elemento de perturbación aleatoria.

now_v = now_v + uk + random.uniform(-0.1,0.1)  # 更新当前速度,加入一个扰动

 Después de la prueba, las perturbaciones relativamente pequeñas aún pueden converger rápidamente, pero si la perturbación es relativamente grande, como (-2,2), será como la siguiente

 No converge hasta alrededor de las rondas 5000. A medida que aumenta el error, este será mayor en este momento, por lo que solo depender de P para controlar es adecuado para situaciones ideales.

Kp=0,01,Ki=0,01,Kd=0

En este momento, se agrega la cantidad de I. Esta cantidad es principalmente para eliminar el choque, que puede eliminar algunas influencias externas. También establezca la perturbación aleatoria de (-2,2), de la siguiente manera:

 Se encuentra que el requisito de precisión se logra en alrededor de 2500 rondas, pero desde el punto de vista experimental, el efecto no es muy evidente, probablemente porque los parámetros no se han ajustado bien.

Kp=0,01,Ki=0,01,Kd=0,01

En este caso se suma el ajuste del término de error acumulativo, que es el proceso PID completo.

Aún en el caso de un error aleatorio de (-2,2), el número relativo de ajustes para esta combinación será ciertamente un poco menor.

 Los anteriores son algunos entendimientos personales sobre PID, que es una depuración simple, sin un ajuste de parámetros real, es solo un registro.

Supongo que te gusta

Origin blog.csdn.net/weixin_60360239/article/details/130415274
Recomendado
Clasificación