Termopara i MAX6675

Feb 27, 2023 Last reply: 3 lata temu 27 Replies

Czy każda termopara ma obudowę połączoną ze złączem? Np. taka:

formatting link
łączam toto - odczyt skacze jak głupi +-1stopień, do tego jest różnica kilku stopni jak w pobliżu jest włączony monitor (!?) To samo jak się dotknie ręką tej rurki, nie mówiąc już o połączeniu jej do masy czy z uziemieniem. Omomierz wskazuje, że obudowa nie jest odseparowana od termopary, Biorę inną, taką z miernika, ale też w rurce metalowej - to samo. Czy tak ma być, i ten układ ma to tolerować? - no jak, przy 3.3V zasilania? A może układ mam uszkodzony?


Robiłem czujniki termopar na max31860k i tam problem z fluktuacją/skaczeniem odczytu bardzo ładnie kompensowało się blokowaniem styków złącza kondensatorem 10nF oraz kolejnymi do + i -. Taki układ jest w którymś przykładzie aplikacyjnym Maxima. I faktycznie po zastosowaniu kondensatorów w moim przypadku odczyty stały się precyzyjne i stabilne. Złącze było izolowane od obudowy.

Troszkę pomogło, ale nie wiele.

Będę musiał to rozwalić i spróbować odizolować albo kupić inną.

Walczę z picoReflow - wychodzą mi absurdalne współczynniki. Czy tam z tym ki nie jest coś skopane?

formatting link
ile na zwiększanie kp przy ki=0 i kd=0 reaguje przewidywalnie, tak jak tutaj:
formatting link
tyle przy zwiększaniu ki idzie całkiem w maliny. Zwiększenie kd, przy ki=0 coś tam poprawia, ale jak się przesadzi to szaleje jak głupie, bo są zakłócenia z tej termopary i jest na przemian.

Moje doświadczenia są trochę z innego procesu (piec przemysłowy

100kW) gdzie proces zmian temperatury jest dość powolny ale są spore zakłócenia wynikające z sterowania grupowego mocą. W moim przypadku kd jest 0 i do otrzymania charakterystyki dojścia do nastawy bez oscylacji wystarczyło dobranie kp/ki, proces jest przy próbkowaniu temp. 1s. W 99% przy tych samych ustawieniach pid charakterystyka dojścia do nastawy jest bez oscylacji a w pozostałym 1% się zdarzają niewielkie oscylacje szybko stabilizujące się. Oczywiście stabilność odczytu temp. ma tutaj kluczowe znaczenie by nie powstawały przesterowania regulacji choć w teorii kd powinno stabilizować właśnie takie sytuacje. W moim przypadku nieprawidłowe odczyty są po prostu ignorowane przez algorytm. Nieprawidłowe czyli takie, które różnią się znacznie od poprzednich i odbiegają znacznie od możliwości realnych procesu. W moim przypadku to jest 2t stali rozgrzewane do 720stp więc nie jest możliwe aby kolejny odczyt (po kolejnej sekundzie) różnił się więcej niż 2-5stp. Każdy odczyt poza tym jest uznawany za błędny i ignorowany. Musisz opanować stabilność odczytu, bez tego trudno będzie dokonać (w miarę szybko) tuningu pid a co za tym idzie prawidłowej regulacji.

Ech, pamietam zadanie ze studiow - znaleźć wartosci błędne w tabelce funkcji, czyli "za bardzo odstajace od trendu". Łatwe to nie było, przy braku innych założen.

A tak mi chodzi po glowie - na ile taki regulator jest wrazliwy na nieliniowosci sterowania/procesu? Tzn chodzi mi o to, ze "wspolczynniki wzmocnienia" ("różniczkowe") w pętli mogą być różne dla innych nastaw, i układ jest stabilny np dla 500C, a w 300C oscyluje. W piecu elektrycznym ze sterowaniem grupowym raczej nie ma tego problemu, ale juz np przeplyw gazu przez zawór w zaleznosci od stopni odkrecenia wcale nie musi byc liniowy ..

J.

Hm, jesli wszyskie sa połączone ... to widac to nie przeszkadza :-) Moze odwrotnie kable podłączyleś :-) A uziemiles T- ?

formatting link
te tansze faktycznie są "grounded"

Ale wyszukac tych innych to sie chyba nie da ...

J.

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. 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... 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.

Trudno mi powiedzieć, ponieważ moje doświadczenia w tym procedie są tylko z jedną temperaturą nastawy (720C), inne temperatury nie są używane. Raz chyba było coś koło 500 ale na tych samych nastawach i nie kojarzę by wtedy wystąpiły oscylacje. Natomiast jak wspomniałem zdarzają się (mimo niezmiennych nastaw ki/kp oraz zawsze takiego samego wkładu) czasami 2 lub 3 oscylacje zanim się ustabilizuje. Przykład bez oscylacji:

http://31.182.124.137/bins/piec1.jpg Czerwona pozioma to jest nastawa, niebieska na dole to chwilowa wartość mocy 0-100%. 3 wykresy nad nastawą to temp. grzałek.

Z osylacjami:

http://31.182.124.137/bins/piec2.jpg

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]

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 dniu 28.03.2023 o 21:46, Mirek pisze:

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:

formatting link

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.

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.

W dniu 29.03.2023 o 21:01, Mirek pisze:

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.

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.

Akurat czeste rozwiaązanie, ze układ ma dwie masy - cyfrową i analogową, i w srodku nie połączone ...

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.

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?

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.

Ale taka jest wlasnie idea PID - jak error dojdzie do zera, to wlasnie czlon całkowy ma zapewnic potrzebne wysterowanie wyjscia.

Ogolnie tak samo dobrze.

J.

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.

Jak masz taki napieciowy PWM 50% o duzej czestotliwosci, to prąd na indukcyjnosci robi sie nieduzy. A silnik indukcyjnosc ma sporą.

J.

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.

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.

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.

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ą.

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 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.

Zgadza się - już się połapałem.

Ale brakuje ograniczenia integral. a to powoduje katastrofalne skutki.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required