Skocz do zawartości

Niepoprawny odczyt napięcia w lutownicy


Mechano

Pomocna odpowiedź

Cześć,

Zwracam się do Was o pomoc w zdiagnozowaniu i poprawieniu buga w budowanej przeze mnie lutownicy.  Najpierw krótki opis, co właściwie buduję.

Bazuję na projekcie Electroboom'a z yt (tutaj link do oryginalnego artykułu), schemat w dużej części oparłem na jego, do zbudowania wykorzystałem podłużny kawałek płytki uniwersalnej. Lutownica wykorzystuje groty T12 (dosyć tanie na ebayu), mają tylko dwa, wspólne wyprowadzenia do termopary i do grzałki. Sygnał z termopary jest wzmacniany na pojedynczym lm358, za sterowanie grzałką odpowiada mosfet typu P, całością steruje arduino pro mini, dodatkowo na płytcejest wyświetlacz oled. Lutownicę zasilam z zasilacza atx do prób z grzałką, poza tym z usb (objawy są te same). Cały schemat wygląda tak:

2133612949_schematlutownica.thumb.png.16b04bac7aff984f72127f5cb7883d83.png

Napięcie wychodzące ze wzmacniacza w temperaturze pokojowej grota to ok 40mV, porównuję to z multimetrem i jest porównywalnie ale tylko do momentu, w którym w programie sprawdzam tylko temperaturę, przeliczam na mV i wyświetlam w terminalu. Wtedy jak podgrzewam grot z zewnątrz to napięcie zmienia się (zgadza się z multimetrem i zachowuje się całkiem spokojnie).

  for(int i=0;i<10;i++){
    adc = analogRead(THERMOCOUPLE);
    //Serial.print(adc);
    Serial.print(" ");
    odczyt = odczyt + adc;
   }
  Serial.print(odczyt);
  Serial.print(" ");
  odczyt = odczyt / 10; //srednia z pomiarow
  Serial.print(odczyt);   Serial.print(" ");
  napiecie = odczyt * (1.1 / 1024.0); //napiecie ze wzmacniacza
  Serial.print(napiecie);
  Serial.print("V ");
  napiecie=napiecie*1000; //napiecie w mV ze wzmacniacza
  Serial.print(napiecie);
  Serial.print("mV");
  Serial.println();

Problem pojawia się gdy chcę do tego dodać sterowanie grzałką, dodaję wyłączenie tranzystora, robię pomiar i wysterowuję tranzystor (na razie nie ma żadnej pętli sterowania ani niczego takiego):

analogWrite(HEATER, 0); //wylaczenie tranzystora
    delay(1);
    odczyt = read_temperature();  // funkcja z electronoobs.com
analogWrite(HEATER, nastawa); 

Jeżeli dodam takie wstawki do kodu to napięcie na wyjściu wzmacniacza spada do ok. 30mV (i utrzymuje się stabilnie), a procesor mierzy jakieś śmieci i pokazuje coś w przedziale 9-42mV. Jeżeli usunę te wstawki i odłączę na chwilę całość od prądu to wyniki wracają do normy.

Czy to może mieć związek ze źle sterowanym tranzystorem, złym zasilaniem (mam sporo kondensatorów na płytce), szumiącym wzmacniaczem czy może mam jakiegoś oczywistego bubla, którego nie widzę. Proszę o porady co może być nie tak, co mierzyć, na co zwracać uwagę.

Będę wdzięczny za wszelką pomoc.

Link do komentarza
Share on other sites

A czy w oryginalnym schemacie nie było tam czasem drugiej diody do zasilania na wejściu tego wzmacniacza? Nie tak dawno na forum była omawiana podobna stacja i zdaje się, że była tam dioda do zasilania aby nie było wysokiego napięcia na wejściu wzmacniacza o czym wspomniał @marek1707. Ja bym dał tam 2 diody schotky od masy do wejścia i od wejścia do 5V.

Link do komentarza
Share on other sites

Takie dwie diodki dobrze sprawdzają się na wejściach, gdzie normalnie sygnał jest sensowny, a tylko od wielkiego dzwonu dostajesz jakieś zakłócenie impulsowe, które zwierane jest przez jedną z diodek do masy lub wyprowadzane do pojemności powieszonych na plusie zasilania przez drugą. W przypadku gdy po chamsku i celowo dostajesz wysokie DC, to odprowadzanie tego do własnego zasilania wygląda jak sikanie pod fotel. Ponieważ napięcie z termopary jest naprawdę małe, zamiast kilkuwoltowego Zenera wystarczy wręcz wstawić tę samą zwykłą diodę 1N4001, ale odwrotnie niż zrobił to autor czyli katodą do masy.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

6 minut temu, marek1707 napisał:

W przypadku gdy po chamsku i celowo dostajesz wysokie DC, to odprowadzanie tego do własnego zasilania wygląda jak sikanie pod fotel.

Chyba trochę przesadziłeś z tym sikaniem ;P takiego prądu nawet kiepsko filtrowane zasilanie prawie nie poczuje ale ten pomysł z diodą do masy jak najbardziej trafny. Dzięki temu zamiast 2 diod będzie 1.

Nie wiadomo też czy nie będzie odbić z samej grzałki bo jeśli będą po odłączeniu tranzystora to i tak trzeba zenera albo diodę do + i -. Być może właśnie do tego ona tam służy wnioskując po schemacie.

Link do komentarza
Share on other sites

"Chyba trochę przesadziłeś"

Nie, bo nie po to bierzesz stabilizator żeby robił ładne 5V aby za chwilę wstrzykiwać w tę linię dodatkowy, zaśmiecony prąd. Wartość <1mA może wydawać się mała dopóki Twój układ tyle nie pobiera. A teraz wyobraź sobie, że usypiasz procesor i całość bierze 0.5mA. Co wtedy dzieje się z szyną zasilania? Jedzie w górę, bo przecież stabilizator nie umie pochłaniać prądu a tylko wypuszczać i zamiast 5V masz np. 8V czyli takie napięcie przy którym ktoś wreszcie te nadmiarowe 0.2mA z Vcc wciągnie. Takiego stałego dopływu nie wyrównają kondensatory, bo to nie ten przypadek więc mówienie o filtrowaniu lepszym czy gorszym jest nie na miejscu. To DC, i musisz jakoś go zagospodarować, bo przecież do 7805 "od tyłu" nie wpłynie. Dlatego napisałem, że tą metodą można wycinać krótkie nano- lub mikrosekundowe szpilki, które pojemności na linii zasilania są w stanie zmagazynować, ale nie długotrwałe dopływy. Oczywiście gdy całość pobiera 50mA to nic się nie stanie, po prostu ze stabilizatora wypłynie w pewnej chwili 0.7mA mniej, ale to może być szybki sygnał i jakieś wahania linii Vcc mogą następować. Jeśli jest ono na dodatek referencją ADC (jak to często w Arduino bywa), to wdeptujesz w kłopoty. Co prawda w kodzie widzę, że Kolega @Mechano używa odniesienia 1.1V, ale i tak odprowadzanie prądów z niekontrolowanych źródeł do własnej szyny zasilania (na którą trzeba chuchać i dmuchać) jest dla mnie co najmniej złą praktyką inżynierską.

Jeśli już dwie diody to w tym przypadku włączone przeciwsobnie:

  • zwykła krzemowa katodą do masy (załatwia problem +12V i szpilek dodatnich nie obcinając mV z termopary),
  • Schottky anodą do masy (szpilki ujemne).

Pamiętaj, że na wejściu wzmacniacza (i większości scalaków) jest już dioda krzemowa wynikająca z technologii separowania wszystkiego od podłoża chipu a jej też nie chcemy włączać - stąd Schottky i stąd ograniczenie tego typu wzmacniaczy na obecność napięć ujemnych na wejściach (tylko do 200-300mV poniżej GND bo dalej zaczynają płynąć prądy wejść i ich specyfikacja nie jest dotrzymywana).

Edytowano przez marek1707
  • Lubię! 1
Link do komentarza
Share on other sites

Faktycznie nie pomyślałem, że napięcie na wyjściu stabilizatora z czasem mogło by tak wzrosnąć, aż sprawdzę to praktycznie czy rzeczywiście taka sytuacja może się zdarzyć, najwyżej zepsuje stabilizator w imię nauki. Nie przyszło mi do głowy, że taki malutki prąd może w takim układzie narobić zamieszania.  Wygląda więc na to, że najsensowniej jednak będzie dać tam diodę zenera, która załatwi obie sprawy na raz, utrzyma odpowiednie napięcie na wejściu wzmacniacza i zniweluje napięcie ujemne powstające na indukcyjności grzałki kiedy tranzystor zostanie wyłączony.  Precyzja samego pomiaru napięcia termopary w tych warunkach to już zupełnie inny temat ale jakieś niewielkie opóźnienie po wyłączeniu tranzystora faktycznie może być konieczne aż się ustabilizuje napięcie na kondensatorze przy wejściu wzmacniacza.

Link do komentarza
Share on other sites

Jak to jest z tym zakresem napięć wejściowych konkretnie dla LM358, jak rozumieć te teksty z dokumentacji LM358-N TI

Cytat

The input common-mode voltage of either input signal voltage should not be allowedto go negativeby morethan0.3 V (at 25°C). The upper end of the common-modevoltage range is V+−1.5 V (at 25°C), but either or both inputs can go to 32 V without damage(26 V for LM2904), independent of the magnitude of V+.

Cytat

Large differential input voltages can be easily accommodatedand, as input differential voltage protection diodes are not needed, no large input currents result from large differential input voltages.The differential input voltage maybe larger thanV+ without damaging the device. Protection should be provided to prevent the input voltages from going negative more than −0.3 VDC(at 25°C). An input clamp diode with a resistor to the IC input terminal can be used.

 

Co do problemu, nie negując niczego co zostało wcześniej napisane, może MOSFET po podaniu PWM wzbudza się i zaczyna sam oscylować.

Link do komentarza
Share on other sites

@marek1707, @atMegaTona

Dziękuję za uwagi i spostrzeżenia, już odpowiadam.

Przede wszystkim,  ten typ grota rzeczywiście ma tylko dwa wyprowadzenia i szeregowo połączone termoparę i grzałkę (obrazek pochodzi z tego tematu na hackaday).

grot.thumb.png.9ea859b304185ba2861a50cdadfbd2be.png

Dlatego algorytm odczytu temperatury w tym przypadku powinien wyglądać mniej więcej tak:

  • wyłączenie zasilania grzałki,
  • chwila opóźnienia na ustabilizowanie się wzmacniacza,
  • wywołanie funkcji read_temperature(),
  • włączenie grzałki,

Czas między punktem 1 i 3 bazowałem na tym co było w oryginalnym artykule (a i tak go wydłużyłem z 300us do tej 1ms). Dalsze zwiększenie zawsze jest w opcji.

Na wejściu wzmacniacza oprócz rezystora i kondensatora jest wlutowana dioda Schottkyego, konkretnie SK23B ale właśnie anodą do masy. Jak teraz o tym myślę to chyba przy montażu musiałem pomylić to z zenerką. Aktualnie nie mam dostępu do oscyloskopu, chociaż chętnie bym spojrzał jak to wygląda. W ostateczności postaram się go jakoś pożyczyć.

Czyli podsumowując, powinienem do diody schottkyego na wejściu dodać zwykłą, krzemową włączoną anodą do wejścia wzmacniacza i katodą do masy?

Link do komentarza
Share on other sites

No tak, to absolutne minimum uchroni wzmacniacz przed wpychaniem mu prądu do wejścia. Kolejna sprawa to ustalenie ile czasu potrzebuje ten układ na "ochłonięcie", bo przecież nawet te 0.6V na diodzie doprowadza wzmacniacz x201 do nasycenia. Albo szukaj oscyloskopu albo skorzystaj z procesora jaki masz na pokładzie. Jeśli po wyłączeniu grzałki (ale nie przez analogWrite(0) tylko normalnie najpierw ją włącz na powiedzmy 500ms a potem wyłącz zwykłym digitalWrite żebyś miał jakiś determinizm czasowy) będziesz wykonywał w pętli analogRead() i wyniki zapisywał do tablicy to właśnie zrobiłeś prosty oscyloskop. Zobacz ile musisz wykonać takich pomiarów aby wyniki zaczęły przypominać to czego oczekujesz i tyle. Zamiast zapisywać do tablicy możesz zwyczajnie czekać w pętli while() aż pomiar z wyjścia wzmacniacza będzie np. niższy niż ileśtam mV jednocześnie zliczając liczbę pomiarów w jakiejś zmiennej. To także da jakąś estymację czasu. Skoro masz kilkukilohercowy ADC to skorzystaj z niego 🙂 

  • Lubię! 2
Link do komentarza
Share on other sites

Jest progres.

Dodałem jedną diodę prostowniczą na wejściu wzmacniacza i widać poprawę.

Za pomocą funkcji micros() wypisywałem sobie jednocześnie odczytywane napięcie z termopary i czas działania. Na tej podstawie po wyłączeniu grzałki sprawdzałem ile czasu wymaga ustabilizowanie się napięcie (jako stabilne przyjąłem dwa identyczne pomiary), wychodziło regularnie ok. 5-6ms więc dla pewności ustawiłem delay na 10ms. W ten sposób odczyt napięcia działa całkiem nieźle również dla wyższych temperatur.

Problem jaki zauważyłem to bardzo zaszumiony pomiar w momencie kiedy całość jest zasilana z zasilacza a nie z usb (nie zasilam wtedy grzałki, tylko mikrokontroler i wzmacniacz). W 10 próbkach, z których wyciągam średnią są odchyłki:

  • dla 50mV z termopary rozstrzały są od ~10 do nawet ~70mV,
  • dla 300mv >  +- ~50mV
  • dla 800mV > +- ~60mV

Te różnice to kwestia filtracji zasilania, szumów wzmacniacza czy może jeszcze czegoś innego? Dodam tylko, że przy zasilaniu z usb te różnice wynoszą maksymalnie kilka mV, również dla większych wartości.

Drugi problem jaki widzę, to zbyt duże wzmocnienie sygnału z termopary. Używam wewnętrznego napięcia odniesienia 1.1V a przy temperaturze topnienia cyny mikrokontroler mierzy już ok 900-1000mV. W teorii wystarczyło by już zmniejszenie wzmocnienia o dwukrotnie ale dla bezpieczeństwa chyba lepiej byłoby je zmniejszyć 3- albo i 4-krotnie. Jak myślicie?

Dzięki za dotychczasową pomoc!

Link do komentarza
Share on other sites

17 minut temu, Mechano napisał:

Problem jaki zauważyłem to bardzo zaszumiony pomiar w momencie kiedy całość jest zasilana z zasilacza a nie z usb (nie zasilam wtedy grzałki, tylko mikrokontroler i wzmacniacz). W 10 próbkach, z których wyciągam średnią są odchyłki:

  • dla 50mV z termopary rozstrzały są od ~10 do nawet ~70mV,
  • dla 300mv >  +- ~50mV
  • dla 800mV > +- ~60mV

Te różnice to kwestia filtracji zasilania, szumów wzmacniacza czy może jeszcze czegoś innego? Dodam tylko, że przy zasilaniu z usb te różnice wynoszą maksymalnie kilka mV, również dla większych wartości.

Hmm.. jak by to w słowa ubrać nie będąc inżynierem.. Pierwsze co mi przychodzi do głowy to faktycznie jest to spowodowane szumem z zasilacza, który ma z grzałki trampolinę ( cewka wygląda jak sprężyna i podobnie się zachowuje w stosunku do napięcia pod wpływem prądu 😉 ). Faktycznie trochę duże te odchyłki, możesz spróbować dodać niedużą pojemność pomiędzy TEMP_SENSE a 12V powinno poprawić stabilność na wejściu, dodatkowo odfiltrować zasilanie samego wzmacniacza, chociaż jakiś prosty filtr LC przy samym pinie zasilania,  bo być może to wzmacniacz wprowadza szum.

Też się czasem z szumem zmagałem, najczęściej pomagało filtrowanie zasilania wzmacniaczy i odsprzęganie indukcyjności kondensatorami . Zdarzało się również, że zakłócenia wchodziły w rezonans z pojemnościami - czasami pomogła wymiana kondensatorów ceramicznych na inne lub zmiana pojemności. Jak by się nie starać tak wszystkiego nie ogarnie teoretycznie, trzeba kombinować.

Link do komentarza
Share on other sites

Nie wiemy co to za zasilacz, ale popularne wtyczkowe bywają bardzo zaśmiecone. Pokaż jak to wszystko masz połączone (bo może to być problem jednoczesnego podłączenia do kompa, zasilania z czegoś innego i jeszcze długiego kabla lutownicy) a w międzyczasie zrób po prostu filtr na wejściu z zasilacza. Jak rozumiem będziesz tędy zasilał także grzałkę, więc układ nie powinien być bardzo stratny dla DC. Szumiący zasilacz może wpływać albo na kabel lutownicy albo wchodzić przez zasilanie. Zewrzyj wejście wzmacniacza do masy gdzieś blisko jego pinów i zobacz czy nadal widzisz odchyłki. Walka z takimi objawami jest trudna. Trzeba uzbroić się w kilka dławików i kondensatorów i zwyczajnie próbować. Zacząłbym od wejścia 7805, bo przez niego zakłócenia przechodzą jak ludzie po pasach. Możesz spróbować dławika common mode i dwóch kondensatorów po 100nF na samym kablu zasilacza.

Zakres napięć wejściowych powinien jak najlepiej pokrywać zakres przetwornika. Jeśli uważasz, że napięcia wejściowe jeszcze sporo urosną względem tego co masz teraz to rzeczywiście można trochę zdjąć wzmocnienia. Na pewno nie trzy razy, bo tu żadnego niebezpieczeństwa nie ma. Napięcie wyższe niż VREF zostanie zmierzone jako 1023, ale dopóki nie przekracza zasilania ADC nic scalakom nie grozi.

  • Lubię! 2
Link do komentarza
Share on other sites

Mała aktualizacja. Przede wszystkim, przepraszam za tak długą przerwę. Po prostu organizuję teraz pewien event w wolnym czasie i nie mam go wiele więcej na żaden projekt ale o nim nie zapomniałem! Przez cały ten czas nie zaglądałem nawet do tego tematu, żeby się nie nakręcać i nie dekoncentrować.

Znalazłem wreszcie chwilę czasu i w pewien dosyć dziwny sposób pośrednio wpadłem na winowajcę (chociaż na razie tego sam nie rozumiem).

Chodzi o to, że zawsze robiąc projekt tego typu zaczynam od programów obsługujących poszczególne bloki, tutaj osobno był to pomiar temperatury, grzałka, wyświetlacz, przyciski. Gdy stwierdzę, że działają one jak powinny to zlepiam je w całość i dodaję do takiego programu potrzebne funkcje, ficzery itd.

W tym momencie mam stary program, w którym jest wszystko co wyżej i był bazowany na projekcie z pierwszej strony, który nigdy nie działał dobrze (tutaj mam też poprawiony pomiar temperatury). Jest też drugi program, który pisałem sam od zera i mam tam tylko prostą obsługę przycisków, grzałki i termopary.

Różnica w funkcjonalności jest znaczna (w przedstawionej sytuacji całość zasilam z zasilacza, nie z usb) - pierwszy program ma takie rozrzuty mierzonej wartości jak opisywałem ostatnio i na nim prowadziłem wtedy test. Dzisiaj odpaliłem na tym drugim, żeby nie używać wyświetlacza, który teraz jest mi niepotrzebny i Eureka! wyniki są całkiem stabilne, kolejno wyświetlane w monitorze wartości różnią się tylko o kilka jednostek, nie ma żadnych wachnięć przy grzaniu albo chłodzeniu. Byłem całkiem pod wrażeniem bo nie widziałem tutaj problemu (tego co wyżej). Wgrałem więc z powrotem pierwszy program i poniekąd znowu Eureka! wrócił stary błąd. Co więcej, jeśli teraz wgram znowu drugi program to wachnięcia się utrzymują ale gdy odłączę lutownicę od zasilacza i podłączę jeszcze raz jest znowu stabilnie. Na razie nie chcę Wam pokazywać obu programów tylko pobawię się w detektywa i spróbuję sam znaleźć błąd. Jakby co to wiem gdzie się udać. Dzięki bardzo bo już dużo pomogliście i sam bym pewnie na te rzeczy nie wpadł. Niestety kolejna aktualizacja może się pojawić dopiero w ciągu kilki dni.

  • Lubię! 1
Link do komentarza
Share on other sites

Chyba znalazłem problem. Analizowałem kod po kawałku i okazuje się, że problem leży bezpośrednio w obecności wyświetlacza w lutownicy. Do działającego kodu dodałem jego obsługę i wyświetlam jakieś proste rzeczy w stylu dwa stałe napisy i dwie zmieniające się liczby. Kiedy wyświetlacz jest wpięty w płytkę (4 goldpiny) i działa to odczyt skacze jak wcześniej opisywałem. Kiedy uruchomię lutownicę bez niego albo wyjmę go w czasie pracy (chociaż pewnie nie powinienem) to odczyt się stabilizuje w ciągu jednej - dwóch sekund. Jeżeli teraz włożę wyświetlacz to nie uruchamia się (bo inicjalizacja jest tylko w setup()) i wyniki nadal są dobre.

Na tej podstawie wnioskuję, że to problemy z zasilaniem. Dodałem dwa kondensatory 100nF, jeden na module wyświetlacza, drugi na płytce lutownicy, na goldpinach. Niestety to nic nie dało i wynik nadal skacze. Próbowałem też podłączać wyświetlacz na przewodach, żeby odsunąć go od wzmacniacza ale to też nic nie daje. Może powinienem dołożyć kondensator jeszcze przy wzmacniaczu? I do tego jakiś dławik, tylko pytanie jakieś wartości i czy w jakimś konkretnym miejscu czy tuż przy wzmacniaczu? Ostatni pomysł jaki mam to rozdzielenie zasilania na część cyfrową i analogową i połączenie ich dopiero przy stabilizatorze.

Wbrew pozorom to dla mnie całkiem ciekawa lekcja obserwowania takich zjawisk na żywym organizmie własnej konstrukcji i pierwszy raz się z czymś takim na poważnie spotykam.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.