logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[AT90PWM3B][C] Regulator PID do sterowania silnikiem BLDC

futshak401 15 Paź 2011 21:07 2822 3
  • #1 10031264
    futshak401
    Poziom 10  
    Witam.
    Obecnie walczę z regulatorem PID do sterowania silnikiem BLDC. Idea jest taka, że regulator jako sygnał sterujący zwraca liczbę którą podstawiam do rejestrów odpowiedzialnych za generacje przebiegów PWM.

    Problem polega na tym że przy zadawaniu prędkości maksymalnej (3500 obr/min) silnik rozpędza się do około 1100-1200 obr/min i do tego nie bardzo trzyma prędkość tzn prędkość bardzo skacze.

    Poniżej zamieszczam fragment kodu odpowiadającego za regulator PID i podstawianie otrzymanej wartości pod odpowiednie rejestry (nastawy są na razie wzięte z kosmosu ;) )

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #2 10031856
    felekfala
    Poziom 19  
    Po pobieżnym przejrzeniu kodu narzuciły mi się dwa błędy.
    Po pierwsze mnożysz liczby zmiennoprzecinkowe przez stałoprzecinkowe w Twoim wypadku short. Kompilator nie zwraca pewnie błędu bo przy #define nie podaje się typu.
    Druga sprawa źle realizujesz całkowanie.

    Oczywiście mogę nie mieć racji.
  • #3 10200589
    bubu2606
    Poziom 15  
    Witam,
    czy udało się uruchomić ten regulator??
  • #4 10201218
    Krotki
    Poziom 14  
    Jak na mój gust w ogóle pominąłeś czas próbkowania w regulatorze dyskretnym.

    Powinienes iść w stronę:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Oczywiście jeżeli tą funkcje wykonujesz w przerwaniu od timera, to czas próbkowania jest stały i nie trzeba go obliczać.

    Kod pochodzi ze strony:
    http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/

    Warto poczytać !

    Mam nadzieje ze to choć trochę pomoże.
REKLAMA