Skocz do zawartości

Pomocna odpowiedź

Napisano

Dzień dobry mam problem prawdopodobnie z kodem z PID w esp32 w sterowanie silnikiem DC z enkoderem, mianowicie, podczas regulacji przy setpoincie ustawionym na 1000obr/min predkosc dochodzi do 500 obr/min sygnał pwm wynosi okolo PWM=150 a następnie spada do około 70 przy probie podnoszenia wartosci Kp wartość niby wzrasta lecz nie daje to zbytnio duzej roznicy. Czy mogłby ktoś zerkność na moj kod regulacji PID? image.thumb.png.737dabfec35ee9d8d30973f695eecfd7.png

 

/* ====== PID  ====== */

  unsigned long now = micros();

  float dt = (now - lastMicros) / 1000000.0; // czas w sekundach

  if (dt < PID_DT) return; // sterowanie co 10ms

  lastMicros = now;

  // Pomiar prędkości na podstawie enkodera

  long cnt = encoderCount;

  long delta = cnt - lastEncoderCount;

  lastEncoderCount = cnt;

  speed = delta / dt; // impulsy / sekunda

  error = setpoint - speed;

  float error_norm = error / MAX_SPEED;

  integral += error_norm * dt;

  integral = constrain(integral, -100.0, 100.0);

  float derivative = (error_norm - lastError) / dt;

  lastError = error_norm;

  float output = kp * error_norm + ki * integral + kd * derivative;

  output = constrain(output, 0.0, 1.0);

  int pwm = output * PWM_MAX;

  ledcWrite(PWM_PIN, pwm);

 

 

  • Lubię! 1

Hej,

po pierwsze... wrzucaj kod używając "Wstaw kod programu", znacznie lepiej się to czyta.

A co do układu: 

  1. Jak zliczasz impulsy enkodera i na jakim rdzeniu obsługujesz PID? Jeżeli na tym samym mogą wystąpić problemy (miałem tak z jednoczesną obsługą RX i TX modułów radiowych przy 2Mbps)
  2. Jakie są parametry silnika, bo może mieć on po prostu zbyt dużą inercję dla danego napięcia i będzie miał problem by działać prawidłowo.
  • 2 tygodnie później...

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...