Estoy buscando urgentemente el código MATLAB del algoritmo de control PID de posición.
/*========================================== === ======================================
Cuando se utiliza un microcontrolador como CPU de control, simplifíquelo ligeramente, los parámetros PID específicos deben determinarse mediante experimentos en objetos específicos.
Debido a las limitaciones de la velocidad de procesamiento del microcontrolador y los recursos de RAM, generalmente no se utilizan operaciones de punto flotante, pero todos los parámetros son números enteros.
Al final de la operación, se divide por 2 n datos de potencia (equivalente a un cambio). Operaciones similares de punto fijo pueden mejorar en gran medida la velocidad de operación.
De acuerdo con los diferentes requisitos de precisión del control, cuando los requisitos de precisión son altos, se debe prestar atención a retener el "resto" causado por el desplazamiento y realizar la compensación del resto.
Este programa es solo el marco básico del algoritmo pid comúnmente utilizado y no incluye la parte de procesamiento de entrada y salida.
============================================ = ===================================*/
# include & ltstring. h & gt
# incluir & ltstdio.h & gt
/*======================== = =================================================== = =====
Función PID
La función PID se utiliza principalmente para
aplicaciones de control. PID Calc realiza una iteración del algoritmo PID.
Cuando la función PID está funcionando, main es solo un programa virtual que muestra
el uso típico.
Función PID
La función PID se utiliza principalmente para aplicaciones de control. La calculadora PID realiza el algoritmo iterativo de PID. Aunque la funcionalidad PID funciona,
es principalmente un programa ficticio que demuestra usos típicos.
============================================ = =====================================*/
estructura typedef PID {
Valor establecido doble; //Establecer el valor esperado objetivo
Proporción doble; //Constante proporcional
Integral doble // Constante entera Constante entera
p>
Doble derivada; // Constante diferencial derivada constante
double LastError // Error [-1]
Doble último error; // Error [-2 ] p>
Doble SumError//Suma de errores
} PID
= = = = = = = = = = = = = = = = = = = = = = = = = Parte de cálculo de Pid = = = = = = = = = = = = = = = = = = = =
Pidcalc doble (PID *PP, siguiente punto doble)
{
Error doble, error;
Error = PP-> punto de ajuste - siguiente punto // desviación
PP-& gt;SumError+= Error; //entero
dError = PP-& gt;LastError-PP-& gt;PrevError//diferencia actual
PP-& gt ;prev error = PP->LastError
PP->LastError=error;
return(PP->advance *error//término proporcional
+PP-& gt; Entero * PP -& gt; SumError //Término integral
+PP-& gt; Derivada * Error // Término diferencial
) ;
}
/* = = = = = = = = = = = = = = = Inicializar la estructura PID = = = = = = = = = = = = = = = = = = = = = = = = = = = =
PIDInit no válido (PID *pp)
{
memset (pp, 0, tamaño de (PID));
}
/* = = = = = = = = = = = = = = = = Programa principal = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Doble sensor (vacío) //Función de sensor virtual { return 100.0;}
Ejecutor no válido (doble rDelta) //Función de ejecutor virtual {}
Administrador de vacío (no válido)
{
PID sPID / / Estructura de control PID Estructura de control PID
Enrutador dual; // Respuesta PID (salida) Respuesta PID (salida)
Enjuague doble // Retroalimentación PID (entrada) Retroalimentación PID (entrada); )
PIDInit(&sPID); //Estructura de inicialización
sPID. Escala = 0,5; //Establecer coeficiente PID Establecer coeficiente PID.
sPID. Puntos = 0,5;
sPID. Derivada = 0,0;
sPID. Punto de ajuste = 100.0; //Establecer PID Establecer punto de ajuste de PID
for(;;)
{//El procesamiento PID simulado es el procesamiento PID más simulado.
rIn = sensor(); //Leer entrada Leer entrada
rOut = PID calc(& sPID, rIn); //Realizar iteración PID
actuador (enrutador); //El impacto del cambio deseado afecta el cambio deseado
}