Realizo un PID utilizando libreria pero las salidas no me dan señal

#include <PID_v1.h>

// Definir pines
const int potPin = A0;    // Pin analógico para el potenciómetro
const int sensorPin = A1; // Pin analógico para el sensor de retroalimentación
const int salidaPinP = 9;  // Salida proporcional (PWM)
const int salidaPinI = 10; // Salida integral (PWM)
const int salidaPinD = 11; // Salida derivativa (PWM)
const int salidaPinTotal = 3; // Salida total (PWM)

// Variables
double setpoint, input, outputP, outputI, outputD;

// Sintonizar estas constantes para tu sistema
double kp = 12; // Constante proporcional
double ki = 0; // Constante integral
double kd = 0; // Constante derivativa

PID myPID(&input, &outputP, &setpoint, kp, ki, kd, DIRECT);

void setup() {
  Serial.begin(9600);

  pinMode(salidaPinP, OUTPUT);
  pinMode(salidaPinI, OUTPUT);
  pinMode(salidaPinD, OUTPUT);
  pinMode(salidaPinTotal, OUTPUT);
}

lee la referencia del potenciometro y la retroalimentacion la obtengo de un motor generador usado como sensor

void loop() {
  setpoint = analogRead(potPin); // Establecer el punto de referencia desde el potenciómetro
  input = analogRead(sensorPin); // Obtener la retroalimentación del sensor

  myPID.Compute(); // Calcular la salida PID

En las salidas no me da voltajes el arduino son tres salidas de las etapas de proporcionalidad, integral y derivativa, para poder testearlo con osciloscopio

  // Salidas individuales (PWM)
  analogWrite(salidaPinP, outputP);
  analogWrite(salidaPinI, outputI);
  analogWrite(salidaPinD, outputD);

  // Salida total (suma PWM) 
  int totalPWM = outputP + outputI + outputD;
  analogWrite(salidaPinTotal, totalPWM);

  // Imprimir valores para depuración
  Serial.print("Setpoint: ");
  Serial.print(setpoint);
  Serial.print(", Input: ");
  Serial.print(input);
  Serial.print(", Output P: ");
  Serial.print(outputP);
  Serial.print(", Output I: ");
  Serial.print(outputI);
  Serial.print(", Output D: ");
  Serial.print(outputD);
  Serial.print(", Output Total (PWM): ");
  Serial.println(totalPWM);

  delay(100);
}

Hola, revisa más cómo funciona la librería PID, esta te entrega una única salida en base a la entrada y los parámetros de configuración que le indicas aquí:

PID myPID(&input, &outputP, &setpoint, kp, ki, kd, DIRECT);

en este caso la salida del sistema PID está en "outputP", no te están dado los valores en los canales individuales, esto es porque nunca cambian permanecen siempre igual ya que a lo largo de todo el programa nunca se modifican por eso siempre son cero

Moderador
Titulo editado por no respetar punto 5.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.