Goto page 1, 2 Next
Mirek
Guest
Thu Jan 22, 2026 9:53 pm
Próbuję okiełznać po raz kolejny sterowanie nadążne PID silnika z
enkoderem. Enkoder jest podłączony do Pi Pico, odczytuje go program w
PIO, a wartość czytam w micropythonie i obliczam dane dla PWM. Działa mi
to tak, że wystrojenie do +- kilkadziesiąt podziałek enkodera zachowuje
się przewidywalnie.
Ale można to zrobić praktycznie do jednej działki, i pamiętam, że ktoś
tu na grupie się chwalił że to zrobił.
Zwiększam kP, układ zaczyna nadążać, ale powoli, zwiększam dalej... już
blisko, pojawia się przerzut, jeszcze trochę i pojawiają się oscylacje.
Te oscylacje można zniwelować kD. Zwiększam kD, oscylacje zaczynają
maleć... jeszcze bardziej maleć... już prawie... i zwiększenie dalej
powoduje, że pojawiają się nowe oscylacje, tylko szybsze (krótszy okres)
i dalsze zwiększanie kD zwiększa amplitudę jeszcze bardziej.
Co tu jest grane?
Mam swoją teorię, ale zanim napiszę - może ktoś puści parę - to na pewno
szkolny błąd i znane zjawisko.
--
Mirek
J.F
Guest
Fri Jan 23, 2026 12:44 am
On Thu, 22 Jan 2026 20:53:47 +0100, Mirek wrote:
Quote:
Próbuję okiełznać po raz kolejny sterowanie nadążne PID silnika z
enkoderem. Enkoder jest podłączony do Pi Pico, odczytuje go program w
PIO, a wartość czytam w micropythonie i obliczam dane dla PWM. Działa mi
to tak, że wystrojenie do +- kilkadziesiąt podziałek enkodera zachowuje
się przewidywalnie.
Ale można to zrobić praktycznie do jednej działki, i pamiętam, że ktoś
tu na grupie się chwalił że to zrobił.
Zwiększam kP, układ zaczyna nadążać, ale powoli, zwiększam dalej... już
blisko, pojawia się przerzut, jeszcze trochę i pojawiają się oscylacje.
Te oscylacje można zniwelować kD. Zwiększam kD, oscylacje zaczynają
maleć... jeszcze bardziej maleć... już prawie... i zwiększenie dalej
powoduje, że pojawiają się nowe oscylacje, tylko szybsze (krótszy okres)
i dalsze zwiększanie kD zwiększa amplitudę jeszcze bardziej.
Co tu jest grane?
Mam swoją teorię, ale zanim napiszę - może ktoś puści parę - to na pewno
szkolny błąd i znane zjawisko.
Masz metodę Zieglera-Nicholsa:
https://www.podkontrola.pl/regulacja-w-oparciu-o-parametry-pid-cz-2/
Wyłaczasz człony D i I, podkręcasz powoli wzmocnienie, az wystąpią
oscylacje. Znalazłes wzmocnienie krytyczne Kc, i mierzysz okres
oscylacji Pc.
A następnie jak w tabelce:
Kp = 0.6*Kc
Ki = 2*Kp/Pc
Kd = Kp*Pc/8
IMO - w zależności od tego czym silnik kręci - może się okazać,
ze to krytyczne wzmocnienie jest inne, w zalezności od zadanych
obrotów.
Program jest wystarczająco szybki, nie gubi kroków z enkodera?
Enkoder bezpośrednio na osi silnika, czy po jakiejs przekładni ... bo
luzy mogą być tu wredne ...
J.
Mirek
Guest
Fri Jan 23, 2026 9:23 pm
W dniu 22.01.2026 o 23:44, J.F pisze:
Quote:
Masz metodę Zieglera-Nicholsa:
Nie sprawdza się.
Nie udało mi się doprowadzić do stabilności z jakimkolwiek Ki.
Może to jest kwestia jednostek?
Uchyb jest liczony w działkach enkodera, przyrost uchybu w działkach na
mikrosekundę, okres oscylacji to jakieś 0,2-0,5sekundy, to ki jakoś
strasznie małe wyjdzie, kd ogromne.
Kp rozumiem że w tym wzorze 1 oznacza maksymalną moc?
Quote:
IMO - w zależności od tego czym silnik kręci - może się okazać,
ze to krytyczne wzmocnienie jest inne, w zalezności od zadanych
obrotów.
Program jest wystarczająco szybki, nie gubi kroków z enkodera?
Enkoder bezpośrednio na osi silnika, czy po jakiejs przekładni ... bo
luzy mogą być tu wredne ...
Silnik kręci bezpośrednio enkoderem. próbowałem też przez przekładnie
ale nic to nie zmienia - wolniej wszystko się odbywa, ale nadal nie da
się wystroić lepiej niż +- 50 - 100 podziałek.
Kroków nie gubi, bo kroki odczytuje PIO.
Program szybki... a jaki szybki ma być? Jaki powinien być krok pomiędzy
kolejnymi obliczeniami?
--
Mirek
J.F
Guest
Fri Jan 23, 2026 11:34 pm
On Fri, 23 Jan 2026 20:23:06 +0100, Mirek wrote:
Quote:
W dniu 22.01.2026 o 23:44, J.F pisze:
Masz metodę Zieglera-Nicholsa:
Nie sprawdza się.
Nie udało mi się doprowadzić do stabilności z jakimkolwiek Ki.
Może to jest kwestia jednostek?
Być może - przy bardzo wolnym narastaniu powinno jakoś działać.
Nie mówię, że całkiem stabilnie, bo jakies tarcie i histereza silnika
dochodzi. Ale okres mógłbys wydłużać w nieskonconosc.
A z kolei szybkie procesory bardzo szybko całkują
i kiepsko różniczkują :-)
Quote:
Uchyb jest liczony w działkach enkodera, przyrost uchybu w działkach na
mikrosekundę, okres oscylacji to jakieś 0,2-0,5sekundy, to ki jakoś
strasznie małe wyjdzie, kd ogromne.
Kp rozumiem że w tym wzorze 1 oznacza maksymalną moc?
Wzmocnienie częsci P
Quote:
IMO - w zależności od tego czym silnik kręci - może się okazać,
ze to krytyczne wzmocnienie jest inne, w zalezności od zadanych
obrotów.
Program jest wystarczająco szybki, nie gubi kroków z enkodera?
Enkoder bezpośrednio na osi silnika, czy po jakiejs przekładni ... bo
luzy mogą być tu wredne ...
Silnik kręci bezpośrednio enkoderem. próbowałem też przez przekładnie
ale nic to nie zmienia - wolniej wszystko się odbywa, ale nadal nie da
się wystroić lepiej niż +- 50 - 100 podziałek.
Kroków nie gubi, bo kroki odczytuje PIO.
Program szybki... a jaki szybki ma być? Jaki powinien być krok pomiędzy
kolejnymi obliczeniami?
Na tyle szybki, żeby nie gubił impulsów z enkodera. Chyba, że masz
jakiś absolutny.
A sam regulator niekoniecznie musi być szybki - sam widzisz, że
oscylacje maja 0.2-0.5s
J.
Mirek
Guest
Sat Jan 24, 2026 4:14 pm
W dniu 23.01.2026 o 22:34, J.F pisze:
Quote:
Być może - przy bardzo wolnym narastaniu powinno jakoś działać.
Nie działa. Tak jak zauważyłeś silnik ma tarcie, zaskok magnetyczny -
jak sygnał narośnie na tyle że ruszy to przejedzie kilkadziesiąt -
kilkaset kroków i zaczyna się kołysanie.
Tak to powinno działać:
https://youtu.be/PU6tgQ84CEA
No chyba że to jest ściema i enkoder jest w rzeczywistości 100-1000 razy
dokładniejszy.
--
Mirek
Waldek Hebisch
Guest
Sat Jan 24, 2026 9:04 pm
Mirek <mirek@null.dev> wrote:
Quote:
W dniu 22.01.2026 o 23:44, J.F pisze:
Masz metodę Zieglera-Nicholsa:
Nie sprawdza się.
Nie udało mi się doprowadzić do stabilności z jakimkolwiek Ki.
Może to jest kwestia jednostek?
Uchyb jest liczony w działkach enkodera, przyrost uchybu w działkach na
mikrosekundę, okres oscylacji to jakieś 0,2-0,5sekundy, to ki jakoś
strasznie małe wyjdzie, kd ogromne.
Bez członu "całkowego" prawie niemożliwe jest uzyskanie naprawdę
małego błedu. W praktyce liczy się sumy i odwrotność okresu sterownika
PID daje współczynnik skalujący sumę do całki. Oczywiście musisz
użyć zgodne jednoski inaczej wyjdą błędne wartości współczynników.
Działki enkdera wyglądają OK, ale musisz poprawnie uwzględnić czas.
--
Waldek Hebisch
Mirek
Guest
Sun Jan 25, 2026 1:34 pm
W dniu 24.01.2026 o 15:14, Mirek pisze:
Quote:
Tak to powinno działać:
https://youtu.be/PU6tgQ84CEA
No chyba że to jest ściema i enkoder jest w rzeczywistości 100-1000 razy
dokładniejszy.
Tak mnie jeszcze nachodzi:
Przecież taki układ jest w drukarkach atramentowych. Nie przyszło mi do
głowy sprawdzić jaka tam jest rozdzielczość tego enkodera, nie mam
żadnej drukarki rozwalonej w tej chwili, bo bym sprawdził.
A może silnik musi być specjalny - w sensie nie może mieć zaskoków i
symetryczny moment w obie strony?
--
Mirek
alojzy nieborak
Guest
Sun Jan 25, 2026 3:03 pm
W dniu 2026-01-25 o 12:34, Mirek pisze:
Quote:
W dniu 24.01.2026 o 15:14, Mirek pisze:
Tak to powinno działać:
https://youtu.be/PU6tgQ84CEA
No chyba że to jest ściema i enkoder jest w rzeczywistości 100-1000
razy dokładniejszy.
Tak mnie jeszcze nachodzi:
Przecież taki układ jest w drukarkach atramentowych. Nie przyszło mi do
głowy sprawdzić jaka tam jest rozdzielczość tego enkodera, nie mam
żadnej drukarki rozwalonej w tej chwili, bo bym sprawdził.
W osi Y 200 linii na cal.
W osi X (karetka z tuszami) 200 lub 400 linii na cal.
I to to z układem optyki (rozdzielczość x4) na wyjściu układu daje
odpowiednio rozdzielczość 800-1600 pikseli na cal. Tyle co do prostych
enkoderów bez jakiejś specjalnej ochrony pyłoszczelnej.
Quote:
A może silnik musi być specjalny - w sensie nie może mieć zaskoków i
symetryczny moment w obie strony?
W drukarkach masz zwykły DC tyko wolnoobrotowy z ciut większym momentem
obrotowym.
OT
https://elm-chan.org/works/smc/report_e.html
alojzy nieborak
Guest
Sun Jan 25, 2026 3:12 pm
W dniu 2026-01-25 o 14:03, alojzy nieborak pisze:
Quote:
W dniu 2026-01-25 o 12:34, Mirek pisze:
W dniu 24.01.2026 o 15:14, Mirek pisze:
Tak to powinno działać:
https://youtu.be/PU6tgQ84CEA
No chyba że to jest ściema i enkoder jest w rzeczywistości 100-1000
razy dokładniejszy.
Tak mnie jeszcze nachodzi:
Przecież taki układ jest w drukarkach atramentowych. Nie przyszło mi
do głowy sprawdzić jaka tam jest rozdzielczość tego enkodera, nie mam
żadnej drukarki rozwalonej w tej chwili, bo bym sprawdził.
W osi Y 200 linii na cal.
W osi X (karetka z tuszami) 200 lub 400 linii na cal.
I to to z układem optyki (rozdzielczość x4) na wyjściu układu daje
odpowiednio rozdzielczość 800-1600 pikseli na cal. Tyle co do prostych
enkoderów bez jakiejś specjalnej ochrony pyłoszczelnej.
A może silnik musi być specjalny - w sensie nie może mieć zaskoków i
symetryczny moment w obie strony?
W drukarkach masz zwykły DC tyko wolnoobrotowy z ciut większym momentem
obrotowym.
OT
https://elm-chan.org/works/smc/report_e.html
Drugi raz OT
https://www.youtube.com/watch?v=qYJpl7SNoww
+
https://www.pmdcorp.com/resources/type/articles/get/mathematics-of-motion-control-profiles-article
Mirek
Guest
Sun Jan 25, 2026 3:36 pm
W dniu 25.01.2026 o 14:12, alojzy nieborak pisze:
Quote:
W osi Y 200 linii na cal.
W osi X (karetka z tuszami) 200 lub 400 linii na cal.
I to to z układem optyki (rozdzielczość x4) na wyjściu układu daje
odpowiednio rozdzielczość 800-1600 pikseli na cal. Tyle co do prostych
enkoderów bez jakiejś specjalnej ochrony pyłoszczelnej.
No i kluczowe pytanie: ile wynosi błąd sterowania - ustawia do jednej
działki?
Quote:
Krzywymi sterowania będę się bawił jak PID będzie chodził tak jak powinien.
--
Mirek
J.F
Guest
Sun Jan 25, 2026 8:07 pm
On Sun, 25 Jan 2026 14:36:45 +0100, Mirek wrote:
Quote:
W dniu 25.01.2026 o 14:12, alojzy nieborak pisze:
W osi Y 200 linii na cal.
W osi X (karetka z tuszami) 200 lub 400 linii na cal.
I to to z układem optyki (rozdzielczość x4) na wyjściu układu daje
odpowiednio rozdzielczość 800-1600 pikseli na cal. Tyle co do prostych
enkoderów bez jakiejś specjalnej ochrony pyłoszczelnej.
No i kluczowe pytanie: ile wynosi błąd sterowania - ustawia do jednej
działki?
Wcale nie musi - wystarczy, że się porusza w miarę równomiernie, potem
wystarczy wypluc kropelkę we własciwym momencie.
I ta rozdzielczość może być myląca - ona jest, bo kropelki można gęsto
pluc, pytanie na ile jest to dokładne/powtarzalne.
Quote:
J.
Mirek
Guest
Sun Jan 25, 2026 8:16 pm
W dniu 25.01.2026 o 19:07, J.F pisze:
Quote:
Wcale nie musi - wystarczy, że się porusza w miarę równomiernie, potem
wystarczy wypluc kropelkę we własciwym momencie.
Na jedno wychodzi.
Z resztą w Y musi dokładnie ustawić inaczej wyjdą smugi na wydruku.
--
Mirek
Janusz
Guest
Sun Jan 25, 2026 11:28 pm
W dniu 24.01.2026 o 15:14, Mirek pisze:
Quote:
W dniu 23.01.2026 o 22:34, J.F pisze:
Być może - przy bardzo wolnym narastaniu powinno jakoś działać.
Nie działa. Tak jak zauważyłeś silnik ma tarcie, zaskok magnetyczny -
jak sygnał narośnie na tyle że ruszy to przejedzie kilkadziesiąt -
kilkaset kroków i zaczyna się kołysanie.
Tak to powinno działać:
https://youtu.be/PU6tgQ84CEA
No chyba że to jest ściema i enkoder jest w rzeczywistości 100-1000 razy
dokładniejszy.
Nie, tam nie ma pid-a, tam sterowanie silnika musi mieć odpowiednią
rampę startową i zatrzymania
która zwalnia silnik i pozycjonuje.
Rampa to np kroki enkodera opadająco czyli np 32,16,8,4,2,1 odejmuje sie
ją od skoku i robi skok a potem kolejne małe kroczki wg ramy opadająco
aż do zera.
Oczywiście kroki mogą być mniejsze albo większe np 32,8,1, ważne żeby
wychamować silnik dokładnie na punkt.
To na filmie trudno zauważyć ale silnik zwalania przed zatrzymaniem, co
jest oczywiste bo ma swój moment i musi mieć czas aby wyhamować, właśnie
po to jest ta rampa.
A pid-a stosuje się do ciągłego sterowania np termostat czy obroty silnika.
--
Janusz
J.F
Guest
Mon Jan 26, 2026 7:22 am
On Sun, 25 Jan 2026 22:28:26 +0100, Janusz wrote:
Quote:
W dniu 24.01.2026 o 15:14, Mirek pisze:
W dniu 23.01.2026 o 22:34, J.F pisze:
Być może - przy bardzo wolnym narastaniu powinno jakoś działać.
Nie działa. Tak jak zauważyłeś silnik ma tarcie, zaskok magnetyczny -
jak sygnał narośnie na tyle że ruszy to przejedzie kilkadziesiąt -
kilkaset kroków i zaczyna się kołysanie.
Tak to powinno działać:
https://youtu.be/PU6tgQ84CEA
No chyba że to jest ściema i enkoder jest w rzeczywistości 100-1000 razy
dokładniejszy.
Nie, tam nie ma pid-a, tam sterowanie silnika musi mieć odpowiednią
Napisane, że ma.
Silnik też wygląda na DC, a nie krokowy.
Quote:
rampę startową i zatrzymania która zwalnia silnik i pozycjonuje.
A nie widać :-)
Quote:
Rampa to np kroki enkodera opadająco czyli np 32,16,8,4,2,1 odejmuje sie
ją od skoku i robi skok a potem kolejne małe kroczki wg ramy opadająco
aż do zera.
Oczywiście kroki mogą być mniejsze albo większe np 32,8,1, ważne żeby
wychamować silnik dokładnie na punkt.
To na filmie trudno zauważyć ale silnik zwalania przed zatrzymaniem, co
jest oczywiste bo ma swój moment i musi mieć czas aby wyhamować, właśnie
po to jest ta rampa.
Musi mieć czas, ale ten robi to w jedną klatkę na YT - czyli chyba w
mniej niż 1/30 s.
Quote:
A pid-a stosuje się do ciągłego sterowania np termostat czy obroty silnika.
Tu cos o większej bezwładności
https://www.youtube.com/watch?v=fusr9eTceEo
Widać, że dopiero "anti windup" uzdrawia sytuację, ale to może być
częściowo fałszywe wrażenie.
J.
J.F
Guest
Mon Jan 26, 2026 10:06 am
On Sun, 25 Jan 2026 19:16:49 +0100, Mirek wrote:
Quote:
W dniu 25.01.2026 o 19:07, J.F pisze:
Wcale nie musi - wystarczy, że się porusza w miarę równomiernie, potem
wystarczy wypluc kropelkę we własciwym momencie.
Na jedno wychodzi.
No nie, bo kropelka ma bardzo małą bezwładność :-)
Quote:
Z resztą w Y musi dokładnie ustawić inaczej wyjdą smugi na wydruku.
I ma tam enkoder czy zwykły krokowiec?
J.
Goto page 1, 2 Next