Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

PID,Simulink,mikrokontrolery - Jak wykorzystać nastawy wyznaczone w Simulinku

01 Sep 2015 03:06 1329 7
  • Level 10  
    Witam wyznaczyłem nastawy dyskretnego regulatora PID w Simulinku do mojego obiektu. Ale zastanawiam się jak wykorzystać te nastawy do sterowania obiektem rzeczywistym, czyli jak zaimplementować je w mikrokontrolerze? W bloczku PID w simulinku jest wzór transmitancji "compensator formula" :
    PID,Simulink,mikrokontrolery - Jak wykorzystać nastawy wyznaczone w Simulinku

    Czy ten wzór należy przerobić na wersję rekurencyjną i wykorzystać bezpośrednio w programie? Czy jakoś inaczej należy do tego podejść? Jeśli ktoś już się z tym problemem spotkał i go rozwiązał to proszę o podzielenie się doświadczeniami.


    Pozdrawiam
  • Automation specialist
    Witam,

    Możesz bezpośrednio wygenerować kod do PLC lub mikrokontrolera
    z przedstawionego bloku PID.

    Pozdrawiam,
  • Level 10  
    Dzięki za zainteresowanie tematem, próbuję zrobić robota balansującego na dwóch kołach. Użyłem twojego wzoru ale wydaje mi się, że całość nie działa prawidłowo wartość sterowania, która wychodzi z regulatora narasta liniowo zamiast szybkich, skokowych zmian a gdy kąt odchylenia zmienia znak na przeciwny regulator nie reaguje szybką zmianą znaku sterowania na przeciwny tylko powoli zmniejsza je co w praktyce oznacza, że robot się przewróci. W załączniku zamieszczam plik z pomiarami w lewej kolumnie wartość odchylenia w radianach a w prawej sterowanie wychodzące z regulatora. Załączę też funkcję PID jaką mam aktualnie w mikrokontrolerze:
    Code: c
    Log in, to see the code


    Mógłbyś wytłumaczyć jak wygenerować taki wzór w simulinku? Jeszcze chciałbym wspomnieć, że testy przeprowadzam ruszając ręką płytkę z czujnikami a nie w robocie.
  • Automation specialist
    Witam,

    Poszukaj pod hasłem "Simulink Coder" np. Link

    Źle podchodzisz do tematu. Wzór który jest na bloczku mówi Ci jaką masz
    transmitancję regulatora PID a generowanie kodu zajmuje się Simulink Coder.
    Twoje zdanie to określenie transmitancji regulatora PID oraz dobór parametrów.
    Resztę zrobi Simulink. Możesz wskazać architekturę mikrokontrolera oraz
    ustalić szereg parametrów w celu wygenerowania odpowiedniego kodu.
    Trzeba trochę posiedzieć nad tym ale potem będziesz mógł szybko coś
    prototypować.

    Pozdrawiam,

  • Level 34  
    Obiekt robota balansującego to odwrócone wahadło. Na PID tego nie robiłem, przypuszczam, że 1 regulator tu nie wystarczy. Proponuję LQR, materiałów od groma, temat jest dorobkiem naukowym wielu osób.
  • Automation specialist
    Witam,

    Tak jak zostało wspomniane robot balansujący to wahadło odwrócone.
    Może jak najbardziej zacząć od regulatora PID i nawet dodać regulator
    feedforward a potem przejść do innych regulatorów. Proszę zwrócić
    uwagę że wahadło odwrócone to układ nieliniowy lecz ma balansować
    w określonym zakresie ruchu. Można wykonać linearyzację układu w zadanym
    puncie pracy i do tego punktu dobrać regulator.

    Jeżeli zajdzie potrzeba stosowania dwóch regulatorów to nie jest to problem.
    W Matlabie można wykorzystać funkcję looptune i automatycznie można
    dostrajać parametry np. dwóch regulatorów PID. Dodatkowo na etapie
    strojenia regulatorów nakładamy wymagania jakościowe regulacji.
    Wachlarz możliwości jest duży. Najważniejszy jest model obiektu.

    Pozdrawiam,
  • Level 10  
    A więc tak przerobiłem sobie wzór transmitancji z bloczku PID w simulink na wzór rekurencyjny i otrzymałem coś takiego:

    PID
    sterowanie(i)=uchyb*(P+D*N)+uchyb_1*(-2*P-P*N*Ts+I*Ts-2*D*N)+uchyb_2*(P-P*N*Ts-I*Ts+I*N*(Ts*Ts)+D*N)-sterowanie_1*(-2+N*Ts)-sterowanie_2*(1-N*Ts);

    Wrzuciłem to do mikro i dostałem taki przebieg (wartość odchylenia 0 czujnik w bezruchu):
    PID,Simulink,mikrokontrolery - Jak wykorzystać nastawy wyznaczone w Simulinku

    Widać, że wartość sterowania rośnie co jest spowodowane członem całkującym. Jak przeciwdziałać takiemu zachowaniu?

    Dla PD

    sterowanie(i)= uchyb*(P+D*N)+ uchyb_1*(-P+P*N*Ts-D*N)-sterowanie_1*(-1+N*Ts);

    Wykres:
    PID,Simulink,mikrokontrolery - Jak wykorzystać nastawy wyznaczone w Simulinku

    Widać, że regulator zachowuje się prawidłowo jakieś niewielkie sterowanie będące wynikiem niedokładnego pomiaru.

    Potem zebrałem pomiary gdy czujnik był w ruchu:

    PID:

    PID,Simulink,mikrokontrolery - Jak wykorzystać nastawy wyznaczone w Simulinku

    PD:
    PID,Simulink,mikrokontrolery - Jak wykorzystać nastawy wyznaczone w Simulinku

    Wygląda na to, że regulator PD działa prawidłowo a w PID występuje windup całkowania, który nie wiem jak ograniczyć.

    Nastawy dobierałem według modelu matematycznego.
    Wygenerowałem również kod w matlabie do mikro ale nic z niego nie rozumiem więc dałem sobie spokój.