-
11. Data: 2023-03-29 00:20:10
Temat: Re: Termopara i MAX6675
Od: Ceat <c...@a...net>
W dniu 28.03.2023 o 21:46, Mirek pisze:
>...
> skrót:
> integral += error * timeDelta * ki
> Nie działa prawidłowo. ponieważ w przypadku niezerowego integral, a
> zerowego error - wynikowe integral zostaje stałe, niezerowe.
> Jeszcze gorzej to wygląda w przypadku wersji z Wikipedii.
>
W stanie ustalonym _całość_ sygnału na wyjściu pochodzi z integratora!
Części proporcjonalna i różniczkująca są zerowe.
Poczytaj dobre wyjaśnienie zawiłości:
http://brettbeauregard.com/blog/2011/04/improving-th
e-beginners-pid-introduction/
-
12. Data: 2023-03-29 21:01:11
Temat: Re: Termopara i MAX6675
Od: Mirek <m...@n...dev>
On 29.03.2023 00:20, Ceat wrote:
> W stanie ustalonym _całość_ sygnału na wyjściu pochodzi z integratora!
> Części proporcjonalna i różniczkująca są zerowe.
>
Masz rację, przekombinowałem.
Jeżeli błąd jest zero, a jest jakaś siła zaburzająca to przecież output
nie może być zero. To jest oczywiste w przypadku grzałki. ale ja
ostatnio bawiłem się silnikiem z enkoderem i zacząłem drążyć temat czemu
PWM nie jest zero i silnik brzęczy skoro jest dokładnie na zadanej pozycji.
> Poczytaj dobre wyjaśnienie zawiłości:
> http://brettbeauregard.com/blog/2011/04/improving-th
e-beginners-pid-introduction/
No ciekawe - muszę sprawdzić to z derivative kick, bo przy małych
ruchach tak właśnie mam: silnik rusza z kopa i czasem przelatuje za daleko.
--
Mirek.
-
13. Data: 2023-03-30 01:04:09
Temat: Re: Termopara i MAX6675
Od: Ceat <c...@a...net>
W dniu 29.03.2023 o 21:01, Mirek pisze:
> ostatnio bawiłem się silnikiem z enkoderem i zacząłem drążyć temat czemu
> PWM nie jest zero i silnik brzęczy skoro jest dokładnie na zadanej pozycji.
W znanych mi rozwiązaniach napędów DC z enkoderem silnik jest zasilany
przebiegiem prostokątnym bipolarnym. Po osiągnięciu pozycji docelowej
przebieg ma wypełnienie 50%, wartość średnią 0 ale wartość skuteczną
równą amplitudzie przebiegu. Dzięki temu rozwiązaniu silnik "stoi jak
zamurowany" (i nie ma spadku momentu/mocy przy małych prędkościach, co
występuje przy sterowaniu PWM unipolarnym).
-
14. Data: 2023-03-30 19:32:35
Temat: Re: Termopara i MAX6675
Od: Mirek <m...@n...dev>
On 30.03.2023 01:04, Ceat wrote:
> W znanych mi rozwiązaniach napędów DC z enkoderem silnik jest zasilany
> przebiegiem prostokątnym bipolarnym. Po osiągnięciu pozycji docelowej
> przebieg ma wypełnienie 50%, wartość średnią 0 ale wartość skuteczną
> równą amplitudzie przebiegu. Dzięki temu rozwiązaniu silnik "stoi jak
> zamurowany" (i nie ma spadku momentu/mocy przy małych prędkościach, co
> występuje przy sterowaniu PWM unipolarnym).
O widzisz - tego nie wiedziałem. Będę musiał popróbować.
Widzę dwa problemy: nie będę mógł skorzystać ze sprzętowego PWM -
znaczna komplikacja programu, będę musiał też jakoś ograniczać prąd żeby
nie przegrzać silnika.
Może trzeba jednak nie 50% w prawo i 50% w lewo tylko np 10% w prawo i
10$ w lewo i w ten sposób ograniczyć prąd?
Albo wykorzystać 2 PWM-y i jednym sterować kierunkiem a drugim regulować
prąd?
Sterownik ma wejścia prawo, lewo i enable - do tej pory na enable daję
PWM, a lewo lub prawo wybieram kierunek. Jeśli prawo i lewo ma ten sam
stan, to zwiera silnik i PWM-em można regulować hamowanie.
--
Mirek.
-
15. Data: 2023-03-30 20:50:17
Temat: Re: Termopara i MAX6675
Od: "J.F" <j...@p...onet.pl>
On Thu, 2 Mar 2023 20:31:07 +0100, Mirek wrote:
> On 2.03.2023 15:15, J.F wrote:
>> A uziemiles T- ?
>>
> No właśnie to uziemienie powodowało największe zakłócenia.
> Przyjrzałem się tej płytce - nie dość, że zamienione są wyprowadzenia:
> gruba masa jest połączona z nóżką 2 a cienka ścieżka do zacisku T- idzie
> od nóżki 1. A działa dlatego, że przy zacisku T- jest połączenie do masy.
> Rozdłubałem to i podłączyłem wg noty aplikacyjnej i... nie działa. Tzn.
> scalak się komunikuje, ale wskazuje 0stopni.
> Wychodzi na to, że ten scalak to chamska podróba, która nie ma w ogóle
> wejścia różnicowego.
Ale co zarzucasz - Maxim popełnił błąd projektowy, czy na płytce jest
jakas podróba i to daleka od oryginału?
Kośc wymaga podłączenia T- do masy.
Ale owszem - wydaje się, ze "gruba" (cyfrowa masa) powinna byc
podłaczona do nózki 1.
A jak rozdłubales, to połączyles potem 2 do masy?
Wczesniej cos tam działało, to i teraz powinno.
> No więc nie może to działać dobrze - po prostu nie
> ma fizycznie takiej możliwości. Dziwi mnie tylko dlaczego nóżka T- nie
> jest połączona z masą wewnątrz układu...
Akurat czeste rozwiaązanie, ze układ ma dwie masy - cyfrową i
analogową, i w srodku nie połączone ...
> ale skoro nawet płytka nie
> udaje poprawnej aplikacji tego układu to nie ma się czemu dziwić.
>
> Teraz co do programu - ki jest ewidentnie skopane.
> liczy go tak:
>
> self.iterm += (error * timeDelta * self.ki)
> output = self.kp * error + self.iterm + self.kd * dErr
>
> a powinno być wg wikipedii tak:
>
> integral := integral + error × dt
> output := Kp × proportional + Ki × integral + Kd × derivative
>
> Czyli przez ki mnożymy wynik a nie tylko timeDelta.
> Znów nie chce mi się wierzyć, że nikt tego wcześniej nie odkrył i tylko
> ja mam z tym problem.
Jesli nie zmieniasz Ki w trakcie pracy, to na jedno wychodzi.
w wersji wiki jest on uwzględniony w output, w wersji programu w
w iterm, roznica wychodzi dopiero gdy Ki zmieniasz -
w wiki natychmiast mnozona jest cala całka, czyli suma z historii,
w programie tylko nowe dane maja nowy wspolczynnik.
Zakladam, ze Ki zmieniasz rzadko, więc to bez wiekszego znaczenia
J.
-
16. Data: 2023-03-30 21:03:44
Temat: Re: Termopara i MAX6675
Od: "J.F" <j...@p...onet.pl>
On Tue, 28 Mar 2023 21:46:05 +0200, Mirek wrote:
> On 20.03.2023 20:13, Mirek wrote:
>> On 2.03.2023 20:31, Mirek wrote:
>>> Teraz co do programu - ki jest ewidentnie skopane.
>>> liczy go tak:
>>>
>>> self.iterm += (error * timeDelta * self.ki)
>>> output = self.kp * error + self.iterm + self.kd * dErr
>>>
>>> a powinno być wg wikipedii tak:
>>>
>>> integral := integral + error × dt
>>> output := Kp × proportional + Ki × integral + Kd × derivative
>>>
>>
>> Bzdury pisałem - wychodzi przecież na to samo.
>> Ale picoReflow nadal nie ogarnięty,
>>
> Ja rozumiem, że nikogo to nie interesuje, albo nikt nie wie, a u tych,
> którzy wiedzą mam już cichego plonka (zresztą z wzajemnością ;) ), ale
> mimo to podzielę się swoimi "odkryciami":
>
> Jedyna wersja, która jako-tako działa:
> integral = (ki * integral) + (error * timeDelta * ki)
> następnie ograniczamy integral, np. od -1 do 1 żeby nie szybowało w
> kosmos:
> integral = sorted(-1,integral,1)[1]
Nie ma lepszej metody ograniczenia?
Bo jak na to patrze, to włos mi sie jerzy.
No i tu:
-jest istotne czy ten integral zawiera Ki, czy nie,
-czy zakres -1...+1 jest własciwy?
> skrót:
> integral += error * timeDelta * ki
> Nie działa prawidłowo.
Stop. Zrobiłes cos zupelnie innego.
integral += error * timeDelta * ki
liczy w miare prawidło całke.
Tzn jesli integral wynosi np 0.5, a error dojdzie do 0,
to integral sie już nie zmienia.
w twojej wersji
integral = (ki * integral) + (error * timeDelta * ki)
w takim przypadku integral (początkowe 0.5) bedzie w kazdym kroku
mnozone przez Ki.
Dla Ki>1 bedzie uciekal w strone nieskonczonosci.
Dla Ki<1 (i >0) bedzie asymptotycznie dochodzil do zera.
> ponieważ w przypadku niezerowego integral, a
> zerowego error - wynikowe integral zostaje stałe, niezerowe.
Ale taka jest wlasnie idea PID - jak error dojdzie do zera, to wlasnie
czlon całkowy ma zapewnic potrzebne wysterowanie wyjscia.
> Jeszcze gorzej to wygląda w przypadku wersji z Wikipedii.
Ogolnie tak samo dobrze.
J.
-
17. Data: 2023-03-30 21:13:46
Temat: Re: Termopara i MAX6675
Od: "J.F" <j...@p...onet.pl>
On Thu, 30 Mar 2023 01:04:09 +0200, Ceat wrote:
> W dniu 29.03.2023 o 21:01, Mirek pisze:
>> ostatnio bawiłem się silnikiem z enkoderem i zacząłem drążyć temat czemu
>> PWM nie jest zero i silnik brzęczy skoro jest dokładnie na zadanej pozycji.
>
> W znanych mi rozwiązaniach napędów DC z enkoderem silnik jest zasilany
> przebiegiem prostokątnym bipolarnym. Po osiągnięciu pozycji docelowej
> przebieg ma wypełnienie 50%, wartość średnią 0 ale wartość skuteczną
> równą amplitudzie przebiegu. Dzięki temu rozwiązaniu silnik "stoi jak
> zamurowany" (i nie ma spadku momentu/mocy przy małych prędkościach, co
> występuje przy sterowaniu PWM unipolarnym).
Eee .. o jakim silniku mowa?
DC z magnesami i szczotkami?
To
a) silnikowi prawie wszystko jedno, czy ma zasilanie 0V,
czy takie +/- z wypelnieniem 50%, ktore powoduje prąd o sredniej 0,
i jakiej tam skladowej przemiennej - niewielkiej.
Za "sztywnosc" odpowiada enkoder i regulator - zejdze z zadanej
pozycji, to poplynie prąd korygujący
b) prąd koncowy nie musi być zerowy, jesli silnik musi pokonac jakis
moment zewnętrzny (np robot trzyma 100kg na wyciągnietym ramieniu)
J.
-
18. Data: 2023-03-30 21:17:12
Temat: Re: Termopara i MAX6675
Od: "J.F" <j...@p...onet.pl>
On Thu, 30 Mar 2023 19:32:35 +0200, Mirek wrote:
> On 30.03.2023 01:04, Ceat wrote:
>> W znanych mi rozwiązaniach napędów DC z enkoderem silnik jest zasilany
>> przebiegiem prostokątnym bipolarnym. Po osiągnięciu pozycji docelowej
>> przebieg ma wypełnienie 50%, wartość średnią 0 ale wartość skuteczną
>> równą amplitudzie przebiegu. Dzięki temu rozwiązaniu silnik "stoi jak
>> zamurowany" (i nie ma spadku momentu/mocy przy małych prędkościach, co
>> występuje przy sterowaniu PWM unipolarnym).
>
> O widzisz - tego nie wiedziałem. Będę musiał popróbować.
> Widzę dwa problemy: nie będę mógł skorzystać ze sprzętowego PWM -
> znaczna komplikacja programu, będę musiał też jakoś ograniczać prąd żeby
> nie przegrzać silnika.
> Może trzeba jednak nie 50% w prawo i 50% w lewo tylko np 10% w prawo i
> 10$ w lewo i w ten sposób ograniczyć prąd?
Jak masz taki napieciowy PWM 50% o duzej czestotliwosci,
to prąd na indukcyjnosci robi sie nieduzy.
A silnik indukcyjnosc ma sporą.
> Albo wykorzystać 2 PWM-y i jednym sterować kierunkiem a drugim regulować
> prąd?
> Sterownik ma wejścia prawo, lewo i enable - do tej pory na enable daję
> PWM, a lewo lub prawo wybieram kierunek. Jeśli prawo i lewo ma ten sam
> stan, to zwiera silnik i PWM-em można regulować hamowanie.
J.
-
19. Data: 2023-03-30 21:38:35
Temat: Re: Termopara i MAX6675
Od: Mirek <m...@n...dev>
On 30.03.2023 20:50, J.F wrote:
> Kośc wymaga podłączenia T- do masy.
No to jak to ma działać, skoro czujnik (punkt pomiaru) ma połączenie z
obudową?
IMHO potrzebne jest wejście różnicowe. Może być połączone z masą, ale
tylko w jednym punkcie, a ten punkt jest przy obudowie czujnika, a przy
scalaku nie może być drugiego.
> Ale owszem - wydaje się, ze "gruba" (cyfrowa masa) powinna byc
> podłaczona do nózki 1.
Nie no to tylko tak wygląda. W rzeczywistości masa jest do 1, a T- jest
dodatkowo połączone z masą przy zaciskach śrubowych.
> A jak rozdłubales, to połączyles potem 2 do masy?
>
> Wczesniej cos tam działało, to i teraz powinno.
>
No niestety, wygląda na to, że kostka nie przeżyła operacji i nie działa
już wcale.
Chcę kupić jakąś płytkę - widziałem podobne, ale z innym rysunkiem
ścieżek - może nie mają tego błędu.
Albo kupię samą kostkę, ale na spokojnie - na razie mam pilniejsze projekty.
> Akurat czeste rozwiaązanie, ze układ ma dwie masy - cyfrową i
> analogową, i w srodku nie połączone ...
>
Ale to nie jest masa analogowa - wejście jest różnicowe(?)
Z resztą gdzieś widziałem schemat bez połączenia tego wejścia z masą
(może błędny). W każdym razie skądś się wzięło w moim przypadku to, że
dotknięcie palcem powodowało błąd rzędu kilkunastu stopni nie
wspominając już o połączeniu obudowy z masą.
--
Mirek.
-
20. Data: 2023-03-30 22:00:10
Temat: Re: Termopara i MAX6675
Od: Mirek <m...@n...dev>
On 30.03.2023 21:03, J.F wrote:
> On Tue, 28 Mar 2023 21:46:05 +0200, Mirek wrote:
>> integral = sorted(-1,integral,1)[1]
>
> Nie ma lepszej metody ograniczenia?
> Bo jak na to patrze, to włos mi sie jerzy.
Jak? no posortuj, i weź środkowy (z ([0],[1],[2]))
Bardziej intuicyjne może i jest z IF-ami, ale więcej pisania,
no i to jest Python, a w Pythonie wszystko co możesz zrobić jednym
poleceniem zadziała szybciej.
>
> No i tu:
> -jest istotne czy ten integral zawiera Ki, czy nie,
> -czy zakres -1...+1 jest własciwy?
No ja tego też nie jestem pewien, ale z ograniczeniem przynajmniej jakoś
działa.
Bawiąc się piecykiem nie doszedłem do tego - każde wprowadzenie ki
powodowało wyjście regulacji w kosmos.
Teraz bawię się silnikiem i z ograniczeniem przynajmniej widzę jakiś
sens wprowadzenia ki - dociąga do zadanej wartości nawet jak wzmocnienie
jest za małe żeby ruszyć silnikiem jak jest te parę kroków od celu.
Oczywiście ki zwiększa przerzut i oscylacje, więc trzeba wprowadzić kd i
koło się zamyka.
>
>> skrót:
>> integral += error * timeDelta * ki
>> Nie działa prawidłowo.
>
> Stop. Zrobiłes cos zupelnie innego.
Zgadza się - już się połapałem.
>> Jeszcze gorzej to wygląda w przypadku wersji z Wikipedii.
>
> Ogolnie tak samo dobrze.
Ale brakuje ograniczenia integral. a to powoduje katastrofalne skutki.
--
Mirek.