RTV forum PL | NewsGroups PL

Jak przełożyć wartości PID z Atmela do sterowania grzałką z PWM w C#?

PID z Noty Atmela

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak przełożyć wartości PID z Atmela do sterowania grzałką z PWM w C#?

Goto page 1, 2, 3  Next

Lam3r
Guest

Sun Jan 26, 2014 6:37 pm   



Witajcie,

Wziąłem sobie źródełka w C algorytmu PID z noty avr221 Atmela ale zamiast w
procesorku to odpaliłem to testowo w C# w celu pobawienia się. Napisałem
sobie programik, który mi wyświetla wszystkie zmienne i mogę sobie zadawać
wszystko.

Niby działa ale mam lamerskie pytanie, nie śmiejcie się :-)

z głównej funkcji PID dostaję int16_t i faktycznie pojawiają się tam
wartości od -32768 do +32767.
Tylko co to do diabła oznacza? Jak T zadana zrówna się z Tzmierzoną to ta
wartość się zatrzymuje i już dalej nie liczy Sad
Pomińmy ustawianie Kp, Ki, Kd, bo na to przyjdzie czas później.

Jak mam teraz przejść na sterowanie grzałką w przedziale 0 do 100% np
generując PWM czy załączając przekaźnik na ileś % czasu skoro mam dziwnie
wyglądający int16_t?

Pozdrawiam,
Lam3r

A.L.
Guest

Sun Jan 26, 2014 7:56 pm   



On Sun, 26 Jan 2014 18:37:53 +0100, "Lam3r" <Lam3r@Lam3r.pl> wrote:

Quote:
Witajcie,

Wziąłem sobie źródełka w C algorytmu PID z noty avr221 Atmela ale zamiast w
procesorku to odpaliłem to testowo w C# w celu pobawienia się. Napisałem
sobie programik, który mi wyświetla wszystkie zmienne i mogę sobie zadawać
wszystko.

Niby działa ale mam lamerskie pytanie, nie śmiejcie się :-)

z głównej funkcji PID dostaję int16_t i faktycznie pojawiają się tam
wartości od -32768 do +32767.
Tylko co to do diabła oznacza? Jak T zadana zrówna się z Tzmierzoną to ta
wartość się zatrzymuje i już dalej nie liczy Sad
Pomińmy ustawianie Kp, Ki, Kd, bo na to przyjdzie czas później.

Jak mam teraz przejść na sterowanie grzałką w przedziale 0 do 100% np
generując PWM czy załączając przekaźnik na ileś % czasu skoro mam dziwnie
wyglądający int16_t?

Pozdrawiam,
Lam3r

PID jest algorytmem ciaglym regulacji i nei nadaje sie do sterowania
grrzalka. Do sterowania grzalka stosuje sie regulatowy dwupolozeniowe,
ktore mozna usprawnic tak aby aproksymowaly regulator PI (nie pamietam
czy moga PID)

Tutaj mozesz znalezc jak

http://we.pb.edu.pl/~kaie/kaie-md/TREiT/TREiTsem4wyk10.pdf

Z grubsza, wprowadza sie dodatkowa petle sprzezenai zwrotnego wokol
przekaznika ktora to petla linearyzuje pzrekaznik

A.L.

ARO
Guest

Sun Jan 26, 2014 8:24 pm   



Użytkownik "Lam3r" <Lam3r@Lam3r.pl> napisał :

.. [...]
Quote:
z głównej funkcji PID dostaję int16_t i faktycznie pojawiają się tam
wartości od -32768 do +32767.

To są możliwości sprzętu/oprogramowania. Wartości nieskończone istnieją
tylko w teorii. Tutaj, w świecie rzeczywistym napięcie, wielkość bufora,
itd. - wszystko ma granice. No może wszystko poza ludzką głupotą. Liczba [16
bitowa ze znakiem], to zakres odpowiedzi Twojego algorytmu.


Quote:
Tylko co to do diabła oznacza? Jak T zadana zrówna się z Tzmierzoną to ta
wartość się zatrzymuje i już dalej nie liczy Sad

Bo nie masz dynamicznej odpowiedzi z obiektu regulacji. Wiesz wogóle jak
działa Twój algorytm?


Quote:
Pomińmy ustawianie Kp, Ki, Kd, bo na to przyjdzie czas później.

I tu jest pies pogrzebany. Zabawę z PIDem zawsze polecam rozpocząć od
wyłączenia calkowania i rozniczkowania. Na poczatek jechac na samym czlonie
proporcjonalnym, by zrozumieć jak to działa.


Quote:
Jak mam teraz przejść na sterowanie grzałką w przedziale 0 do 100% np
generując PWM czy załączając przekaźnik na ileś % czasu skoro
mam dziwnie wyglądający int16_t?

Przeskaluj go. Zaprzeganie PIDa do regulacji temperatury jest lekko na
wyrost. Do takich spraw wystarcza regulator dwustanowy z odpowiednią
histerezą. Jeżeli chodzi o cele edukacyjne, to nikt nikomu niczego nie
broni. Jednak z Twoich eksperymentow wniosek może być taki, że do płynnego
manipulowania mocą grzałki wystarczy sam człon P.

pzdr
--
ARQ

J.F.
Guest

Sun Jan 26, 2014 8:41 pm   



Dnia Sun, 26 Jan 2014 12:56:25 -0600, A.L. napisał(a):
Quote:
On Sun, 26 Jan 2014 18:37:53 +0100, "Lam3r" <Lam3r@Lam3r.pl> wrote:
z głównej funkcji PID dostaję int16_t i faktycznie pojawiają się tam
wartości od -32768 do +32767.
Tylko co to do diabła oznacza? Jak T zadana zrówna się z Tzmierzoną to ta
wartość się zatrzymuje i już dalej nie liczy Sad

Bo tak to ma dzialac - jak temperatura jest wlasciwa, to znaczy ze
wartosc wyjsciowa jest dobra :-)

Quote:
Jak mam teraz przejść na sterowanie grzałką w przedziale 0 do 100% np
generując PWM czy załączając przekaźnik na ileś % czasu skoro mam dziwnie
wyglądający int16_t?

PID jest algorytmem ciaglym regulacji i nei nadaje sie do sterowania
grrzalka. Do sterowania grzalka stosuje sie regulatowy dwupolozeniowe,

Eee tam nie nadaje. Nadaje, tylko trzeba miec mozliwosc sterowania
moca w sposob ciagly. Czy to zasilacz/przelacznik PWM, czy tyrystorowy
sterowany fazowo (w sumie tez PWM), czy silniczek krecacy
autostransformatorem, czy jakis wzmacniacz magnetyczny - zalezy jaka
grzalka :-)

Musisz to sprzac z ukladem wykonawczym, w taki sposob ze np wartosc 0
powoduje odlaczenie zasilania, 10000 zasilanie pelna moca, a 5000
zasilanie polowa mocy itp.
Czy wartosci skrajne maja byc 0 i 10000, -32000 i +32000 czy
np -200 i +200 - temat na dluzsza dyskusje.

Albo zrobic jak ponizej:

Quote:
ktore mozna usprawnic tak aby aproksymowaly regulator PI (nie pamietam
czy moga PID)

Na studiach jakos sprytnie zapetlalismy standardowy regulator PID i
przekaznik, ze wychodzil z tego PWM.

Quote:

Chcesz go dobic ? Kolega sie przyznaje ze Lamer, a Ty mu wyzsza
automatyke serwujesz :-)

Quote:
Z grubsza, wprowadza sie dodatkowa petle sprzezenai zwrotnego wokol
przekaznika ktora to petla linearyzuje pzrekaznik

J.

Mirek
Guest

Sun Jan 26, 2014 9:37 pm   



On 26.01.2014 20:41, J.F. wrote:

Quote:
Czy wartosci skrajne maja byc 0 i 10000, -32000 i +32000 czy
np -200 i +200 - temat na dluzsza dyskusje.

Zgodnie z teorią -200 powinno chłodzić z mocą powiedzmy 200, 0 - nie
robić nic, a +200 grzać z mocą 200.
W praktyce pewnie i tak będzie można dobrać parametry PID żeby działąło
dobrze.

--
Mirek.

Mirek
Guest

Sun Jan 26, 2014 9:47 pm   



On 26.01.2014 20:24, ARO wrote:

Quote:
Zaprzeganie PIDa do regulacji temperatury jest lekko na
wyrost.

Dlaczego? Odpowiednio nastrojony powinien dobrze reagować na zmiany
temperatury zewnętrznej, na otwarcie okna - szybko wyrównuje do zadanej
i nie przegrzewa.

--
Mirek.

A.L.
Guest

Sun Jan 26, 2014 10:05 pm   



On Sun, 26 Jan 2014 20:41:14 +0100, "J.F."
<jfox_xnospamx@poczta.onet.pl> wrote:

Quote:
Dnia Sun, 26 Jan 2014 12:56:25 -0600, A.L. napisał(a):
On Sun, 26 Jan 2014 18:37:53 +0100, "Lam3r" <Lam3r@Lam3r.pl> wrote:
z głównej funkcji PID dostaję int16_t i faktycznie pojawiają się tam
wartości od -32768 do +32767.
Tylko co to do diabła oznacza? Jak T zadana zrówna się z Tzmierzoną to ta
wartość się zatrzymuje i już dalej nie liczy :-(

Bo tak to ma dzialac - jak temperatura jest wlasciwa, to znaczy ze
wartosc wyjsciowa jest dobra :-)

Jak mam teraz przejść na sterowanie grzałką w przedziale 0 do 100% np
generując PWM czy załączając przekaźnik na ileś % czasu skoro mam dziwnie
wyglądający int16_t?

PID jest algorytmem ciaglym regulacji i nei nadaje sie do sterowania
grrzalka. Do sterowania grzalka stosuje sie regulatowy dwupolozeniowe,

Eee tam nie nadaje. Nadaje, tylko trzeba miec mozliwosc sterowania
moca w sposob ciagly.


Zawsze mozan wlozyc gacie przez glowe. tylko to nie najleo\pszy sposob

A.L.

ARO
Guest

Sun Jan 26, 2014 10:41 pm   



Użytkownik "Mirek" <i_tak@zaspamowany.adres> napisał :


Quote:
Zaprzeganie PIDa do regulacji temperatury jest lekko na
wyrost.

Dlaczego? Odpowiednio nastrojony powinien dobrze reagować na zmiany
temperatury zewnętrznej, na otwarcie okna - szybko wyrównuje do zadanej i
nie przegrzewa.

W rzeczy samej milordzie. Wszystko zależy od tego czego wymaga obiekt
regulacji. W praktyce sprawa zdeydowanie się upraszcza, bo element
wykonawczy (grzałka) zmienia stan obiektu tylko w jedną stronę - tylko
grzeje - stąd moja propozycja. Gdyby natentomiast element wykonawczy działał
obustronnie - grzał i chłodził w zależności od stopnia wysterowania -
zastosowanie PIDa dałoby świetny efekt.

Najprostsze rozwiązania są najlepsze, chyba że chodzi o sztukę dla sztuki
lub zwyczajne zdobycie wiedzy. Popełniaj mnóstwo błędów - wyciagaj z nich
lekcje.

pzdr
--
ARQ

Mario
Guest

Sun Jan 26, 2014 11:00 pm   



W dniu 2014-01-26 22:41, ARO pisze:
Quote:
Użytkownik "Mirek" <i_tak@zaspamowany.adres> napisał :


Zaprzeganie PIDa do regulacji temperatury jest lekko na
wyrost.

Dlaczego? Odpowiednio nastrojony powinien dobrze reagować na zmiany
temperatury zewnętrznej, na otwarcie okna - szybko wyrównuje do
zadanej i nie przegrzewa.

W rzeczy samej milordzie. Wszystko zależy od tego czego wymaga obiekt
regulacji. W praktyce sprawa zdeydowanie się upraszcza, bo element
wykonawczy (grzałka) zmienia stan obiektu tylko w jedną stronę - tylko
grzeje - stąd moja propozycja.

Grzanie PIDem ma swoje zalety. Układ szybko dogrzeje się do zadanej
temperatury i nie będzie oscylował wokół niej.

Quote:
Gdyby natentomiast element wykonawczy
działał obustronnie - grzał i chłodził w zależności od stopnia
wysterowania - zastosowanie PIDa dałoby świetny efekt.

Wtedy radziłby sobie z przypadkami szybkiego podskoku temperatury z
innych źródeł jak na przykład piekarnik i kuchenka :)


--
pozdrawiam
MD

Mario
Guest

Sun Jan 26, 2014 11:00 pm   



W dniu 2014-01-26 19:56, A.L. pisze:
Quote:
On Sun, 26 Jan 2014 18:37:53 +0100, "Lam3r" <Lam3r@Lam3r.pl> wrote:

Witajcie,

Wziąłem sobie źródełka w C algorytmu PID z noty avr221 Atmela ale zamiast w
procesorku to odpaliłem to testowo w C# w celu pobawienia się. Napisałem
sobie programik, który mi wyświetla wszystkie zmienne i mogę sobie zadawać
wszystko.

Niby działa ale mam lamerskie pytanie, nie śmiejcie się :-)

z głównej funkcji PID dostaję int16_t i faktycznie pojawiają się tam
wartości od -32768 do +32767.
Tylko co to do diabła oznacza? Jak T zadana zrówna się z Tzmierzoną to ta
wartość się zatrzymuje i już dalej nie liczy Sad
Pomińmy ustawianie Kp, Ki, Kd, bo na to przyjdzie czas później.

Jak mam teraz przejść na sterowanie grzałką w przedziale 0 do 100% np
generując PWM czy załączając przekaźnik na ileś % czasu skoro mam dziwnie
wyglądający int16_t?

Pozdrawiam,
Lam3r

PID jest algorytmem ciaglym regulacji i nei nadaje sie do sterowania
grrzalka. Do sterowania grzalka stosuje sie regulatowy dwupolozeniowe,
ktore mozna usprawnic tak aby aproksymowaly regulator PI (nie pamietam
czy moga PID)

Jaka cecha grzałki uniemożliwia sterowanie nią w sposób ciągły?


--
pozdrawiam
MD

Lam3r
Guest

Sun Jan 26, 2014 11:14 pm   



Mogę spróbować sterowania fazowego
"Mirek" <i_tak@zaspamowany.adres> wrote in message
news:lc3rmf$st$1@node2.news.atman.pl...
Quote:
On 26.01.2014 20:41, J.F. wrote:

Czy wartosci skrajne maja byc 0 i 10000, -32000 i +32000 czy
np -200 i +200 - temat na dluzsza dyskusje.

Zgodnie z teorią -200 powinno chłodzić z mocą powiedzmy 200, 0 - nie robić
nic, a +200 grzać z mocą 200.
W praktyce pewnie i tak będzie można dobrać parametry PID żeby działąło
dobrze.

Właśnie edukuję się z PID i chcę sobie coś zbudować na czym będę robił
eksperymenty.
Dalej nie rozumiem jak mam to przeliczyć na wypełnienie. Grzałeczkę chcę dla
zabawy, bo szybko zestawiłem stanowisko. Mogę użyć lutownicy nawet.
A jak często mam wykonywać taki algorytm? Dla grzania to ile razy na sekundę
czy lepiej raz na sekundę czy jak ? Mogę zrobić nawet sterowanie fazowe
ssr-em ale potrzebyję "wypełnienie" od 0 do 100 okresów. A może od zera do
50 okresów, a może do 1000 okresów ?

Lam3r
Guest

Sun Jan 26, 2014 11:25 pm   



"J.F." <jfox_xnospamx@poczta.onet.pl> wrote in message
news:1wwjrj4dh85ub.1oxdotfoa7iy0.dlg@40tude.net...

Quote:
Musisz to sprzac z ukladem wykonawczym, w taki sposob ze np wartosc 0
powoduje odlaczenie zasilania, 10000 zasilanie pelna moca, a 5000
zasilanie polowa mocy itp.
Czy wartosci skrajne maja byc 0 i 10000, -32000 i +32000 czy
np -200 i +200 - temat na dluzsza dyskusje.

Czyli chwila...

Jeżeli mam int16_t -32k...+32k

Czy to co na minus to oznacza, że miałbym chłodzić? Chłodzenia nie mam więc
mogę jedynie dojść od góry do zera i ujemne ignorować. Jako wyłączenie ?
Pozostaje 0 .. +32767 ale to dużo działek. Mam to przeskalować np podzielić
przez 128 czy coś w tym stylu ?
On się zachowuje dziwnie. Jak włączam program z Tzadaną = Tzmierzoną to zroi
na zero. Jak lekko udaję, że obiekt się chłodzi to wolno liczy w górę. Jak
się temperatury wyrównają to liczenie staje i zostaje na tylu ile naliczył.
Wcale do zera nie wraca. jak naliczył 5000 to tam się zatrzyma.
Może to problem braku odpowiedzi układu. Ja kręcę gałeczką programową
suwakiem sobie zmieniam. Spróbuję dopisać jakąś "odpowiedż" programową np 1
stoien C na 10-20 sekund pełnej mocy i odpowiednio mniej przy PWM-ie ale nie
wiem jak to przeliczyć ten int16_t na pwm Smile

janusz_k
Guest

Sun Jan 26, 2014 11:26 pm   



W dniu 26.01.2014 o 23:14 Lam3r <Lam3r@lam3r.pl> pisze:

Quote:
Mogę spróbować sterowania fazowego
"Mirek" <i_tak@zaspamowany.adres> wrote in message
news:lc3rmf$st$1@node2.news.atman.pl...
On 26.01.2014 20:41, J.F. wrote:

Czy wartosci skrajne maja byc 0 i 10000, -32000 i +32000 czy
np -200 i +200 - temat na dluzsza dyskusje.

Zgodnie z teorią -200 powinno chłodzić z mocą powiedzmy 200, 0 - nie
robić nic, a +200 grzać z mocą 200.
W praktyce pewnie i tak będzie można dobrać parametry PID żeby działąło
dobrze.

Właśnie edukuję się z PID i chcę sobie coś zbudować na czym będę robił
eksperymenty.
Dalej nie rozumiem jak mam to przeliczyć na wypełnienie. Grzałeczkę chcę
dla zabawy, bo szybko zestawiłem stanowisko. Mogę użyć lutownicy nawet.
Ale to masz zbyt małą bezwładność, grzałkę daj do garka z wodą i wsadź tam

też czujnik temp np ds18s20 lub podobny, podłaczasz go pod rs-a są
schematy w sieci i czytasz po 1-wire temp.


Quote:
A jak często mam wykonywać taki algorytm? Dla grzania to ile razy na
sekundę czy lepiej raz na sekundę czy jak ? Mogę zrobić nawet sterowanie
fazowe ssr-em ale potrzebyję "wypełnienie" od 0 do 100 okresów. A może
od zera do 50 okresów, a może do 1000 okresów ?
Jak grzałka to możesz zamiast pwm-a stosować półokresy do sterowania,

czyli sterujesz najlepiej przez tranzystor tym ssr-em grzałką. Ustalasz
okres pracy, liczba z pid-a wtedy będzie czasem właczenia a pozostały czas
okresu jest wyłączona.

--

Pozdr
Janusz

Lam3r
Guest

Sun Jan 26, 2014 11:35 pm   



"janusz_k" <Janusz_kk@o2.pl> wrote in message news:op.xabfazg6n0u1o8@moj...

Quote:
Ale to masz zbyt małą bezwładność, grzałkę daj do garka z wodą i wsadź tam
też czujnik temp np ds18s20 lub podobny, podłaczasz go pod rs-a są
schematy w sieci i czytasz po 1-wire temp.

Dam sobie radę z tym. Sam układ ma małe znaczenie w tej chwili. Czy z NTC
czy PTC czy DS18 to bez znaczenia teraz.Mnie o teorię chodzi :-)

Quote:
Jak grzałka to możesz zamiast pwm-a stosować półokresy do sterowania,
czyli sterujesz najlepiej przez tranzystor tym ssr-em grzałką. Ustalasz
okres pracy, liczba z pid-a wtedy będzie czasem właczenia a pozostały czas
okresu jest wyłączona.

Ale jaki czas ? Na wyjściu PID mam int16_t, która się zmienia dziwnie.
Czasem doliczy do maximum, a czasem ledwo setkę i co z ujemnymi liczbami?
Jak to przeskalować na 0..100% ?

ARO
Guest

Sun Jan 26, 2014 11:59 pm   



Użytkownik "Lam3r" <Lam3r@Lam3r.pl> napisał :

Quote:
Czyli chwila...

Jeżeli mam int16_t -32k...+32k

Czy to co na minus to oznacza, że miałbym chłodzić? Chłodzenia nie mam
więc mogę jedynie dojść od góry do zera i ujemne ignorować. Jako
wyłączenie ?
Pozostaje 0 .. +32767 ale to dużo działek. Mam to przeskalować np
podzielić przez 128 czy coś w tym stylu ?

Bingo!


Quote:
On się zachowuje dziwnie. Jak włączam program z Tzadaną = Tzmierzoną to
zroi na zero. Jak lekko udaję, że obiekt się chłodzi to wolno liczy w
górę. Jak się temperatury wyrównają to liczenie staje i zostaje na tylu
ile naliczył.

....a jak temperatura wzrosnie, to wartosc ktora regulator do tej pory
naliczyl, bedzie maleć. Tak działa całkowanie. Regulator "uznał" że sygnał
który podaje na wyjściu jest odpowiedni by zachować zerowy uchyb regulacji.
Stąd nie zmienia stanu.

Zasada działania takiego regulatora wygląda łopatologicznie tak:
człon P: amplituda sygnału sterującego (na wyjsciu z regulatora) będzie
proporcjonalna do wielkości uchybu;
człon I: sumuje w czasie wartość uchybu i da sygnał tym większy im dłużej
ten uchyb będzie trwał, a amplituda sygn. ster. narośnie tym szybciej im
większa będzie wartość uchybu - to jest dokładnie to co zaobserwowałeś;
człon D: amplituda sygn. ster. jest proporcjonalna do prędkości zmian
uchybu. Różniczkowanie zapobiega powstawaniu oscylacji z dwóch pozostałych
członów.


pzdr
--
ARQ

Goto page 1, 2, 3  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Jak przełożyć wartości PID z Atmela do sterowania grzałką z PWM w C#?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map