♫ ♩ ♪ Roman Kostrzewski ⚡ ☘ ⚡ z albumu Woda - Anioły Nocnych Burz♪ ♩ ♫
https://youtu.be/SxtOY-Pt_co
A to w mocnym nawiązaniu do ostatniego odcinka (3-C) wieczornej pisanki o SPI i Analog Discovery 2 - oczywiście, że można sobie wyobrazić zastosowanie kostki potencjometru MCP41HV51103 w układzie kontroli napięcia na bazie jakiegoś popularnego regulatora, zaraz zobaczymy.
Mega offtopic o pomiarze Iadj w LM317
Na pierwszy ogień wzięłam ogólnie znany regulator LM317 niepomna informacji z datasheet, że rezystory w dzielniku konfigurującym napięcie wyjściowe jakby rzędem wielkości odbiegają od tych 10kΩ mojego cyfrowego potencjometru i wszelkie kombinowanie i tak w efekcie da tak zwaną popelinę, a co mi tam!
Ale faktycznie, układ był totalnie nieregulowalny, za to napotkałam ciekawostkę związaną z samą aplikacją LM317 i tytułowym prądem Iadj, no a skoro udało mi się to matematycznie ogarnąć - pokazuję co i jak.
Testowe poletko doświadczalne to fotografia poniżej:
I na niej właśnie widzimy pokazywany przez Meratronik V640 (IDC@0.15mA) prąd Iadj w kwocie 50uA, zgodnej z grubsza z dokumentacją kostki. Tylko przy okazji wyszło kwadratowe jajo w postaci takiej, że po włączeniu w nóżkę ADJ mikroamperomierza - zwiększyło mi się napięcie wyjściowe! Nieznacznie i nie jest to w sumie zaskakujące - w końcu rzeczywisty przyrząd pomiarowy w jakiś tam sposób wpływa na prace układu. No ale żeby tak mój cudny V640 zepsuł wyliczony regulator? To do wyjaśnienia zatem.
Schemat układu testowego jak na rysunku:
Rezystory zmierzone omomierzem w V543, wartości pewnie niosą błąd samego miernika, ale do obliczeń zawierzam im bezkrytycznie, a wynoszą odpowiednio: R1=284Ω R2=1986Ω
Pomiary ze zwartym i aktywnym amperomierzem widzimy na zdjęciu (dwa od lewej):
No i oczywiście pada pytanie - dlaczego akurat tyle i co to ma wspólnego z parametrami miernika?
Moja teoria spiskowa brzmi następująco - napięcie Uref LM317 zsumowało się ze spadkiem napięcia na rezystancji amperomierza, takie `nowe` napięcie referencyjne, z pasożytniczą wkładką spowodowało zmianę napięcia wyjściowego.
Dla załapania kontekstu wnętrze kostki LM317: http://www.ti.com/ds_dgm/images/fbd_slvs044x.gif , a obliczeniowo to będzie tak:
Uout=Uref(1+R2/R1)
Wyliczmy sobie z tego 'hipotetyczne' Uref z jakim pracuje nasz regulator. Tak, w katalogu podają średnią wartość 1.25V, ale ona i tak ma pewien rozrzut, zatem kalkulator w dłoń:
Uref=Uout/(1+R2/R1)
najpierw podstawiamy napięcie wyjściowe przy zwartym mikroamperomierzu i mamy (chwilowo po aptekarsku, zaokrąglać będziemy kiedyś, jak ocenimy skalę wielkości ):
Uref=10.171/(1+1986/284)=1.272V
A teraz wyliczmy Uref` czyli wartość która się zrobiła na skutek włączenia V640 w układ:
Uref`=10.295/(1+1986/284)=1.288V
Oooo, no proszę - rozjechało się jakby, zgodnie z oczekiwaniami, wyliczmy o ile:
ΔUref=Uref`-Uref=0.016V
Ojtam ojtam, raptem jakieś 16 mV i tyle krzyku. No ale zerknijmy teraz na dokumentację V640, co piszą o deklarowanym spadku napięcia na zaciskach miernika w trybie amperomierza i na interesującym nas zakresie. Strona 9, akapit "Pomiar prądów stałych i zmiennych" - dla 150uA jest to 50 mV.
To dla maksymalnego wskazania dla zakresu oczywiście, zatem dla interesującego nas prądu 50uA będzie to 1/3 wartości czyli 50mV/3 czyli ... ~16mV. Tadam!
Taki właśnie spadek napięcia Ua wprowadził nam kolega wskazówkowy i on się jak widać uwikłał w równania. Na zdjęciu wyżej (pierwsze po prawo) mamy wskazywaną przez V543 wartość 15.5mV. To maleńkie wartości, plątanina kabelków też nie pomaga - ale widzimy, że rozumowanie ma chyba jakiś sens.
Aha, możemy przyjąć, że pomiar spadku napięcia na mikroamperomierzu nie wprowadził szkodliwego rozpływy prądów - rezystancja wewnętrzna neonowego V543 skutecznie przed tym broni. No i gdyby tak było, z chwilą pomiaru ruszyła by się wskazówka na V640, a nic takiego nie miało miejsca.
Weryfikacja tego spostrzeżenia już zupełnie dla ciekawości - a weźmy i zmierzmy ten prąd Iadj innym przyrządem. No to wyciągamy UM112 jako amperomierz na zakresie 0.1mA.
Jak widać odczyt już nie jest taki okrągły - 48uA, ale to i tak teraz detal - napięcie wyjściowego rozjechane jeszcze bardziej. Liczymy zatem, jak poprzednio:
Uref=10.170/(1+1986/284)=1.272V
a dla zepsutego Uout, z aktywnym miernikiem LM112:
Uref`=10.405/(1+1986/284)=1.302V
Ponownie delta:
ΔUref=Uref`-Uref=0.030V jako nasze hipotetyczne Ua.
I chwila prawdy: http://multimetry.tzok.eu/galeria/UM-112_1.jpg dla zakresu DC 0.1mA mamy podane 0.06V, a ponieważ operujemy wartością prądu w połowie zakresu to należy nam się wyliczone powyżej 30mV. Ot i całą filozofia, wszystko się spina idealnie.
A na koniec fotka z pomiarów - pierwsza po prawo to spadek napięcia na zaciskach UM112
Może ktoś zapyta, po jasną choinkę tak się podniecać takimi drobiazgami? W sumie można wzruszyć ramionami i lecieć dalej przez siebie, ale chyba warto wiedzieć jakie skutki uboczne niesie zapięcie przyrządu, szczególnie gdy pracujemy z tak małymi sygnałami. A jak widać konsekwencje podłączenia zupełnie biernego amperomierza typu UM112 są całkiem widoczne, skok napięcia wyjściowego o prawie 200mV w skali 10V daje tu do myślenia, a dziwadła trzeba zawsze sprawdzać. I wracamy do tematu głównego...
UL7523
Głównego bohatera wieczorynki - kostkę UL7523 naszej rodzimej produkcji CEMI widzimy na fotografii poniżej:
Układzik z wycyrklowanym na 10V napięciem wyjściowym widzimy na schemacie:
Kostka pracuje ze zredukowanym przez dzielnik R1/R2 napięciem referencyjnym, ustawiło się na jakieś 3V z grosikami, i to jest minimalne napięcie jakie będzie miał nasz regulator.
Napięcie maksymalne aplikacji wynika ze wzorku:
Uout=Uref*(R6+R4+R5)/R6
gdzie R5 to nasz cyfrowy nibypotencjometr zaszyty w układzie U1.
Łatwo sobie zweryfikować, jakie wartości przyjmie napięcie wyjściowe, zależenie od położenia cyfrowego suwaka, dzielącego nasze 10kΩ na 255 wartości - dla trzech skrajnych zrobimy to przy pomocy aplikacji WaveForms:
Mając instalację pod ręką można przy okazji zbadać sobie, o ile mV zmieni się napięcie wyjściowe przy zmianie jednego bitu słowa sterującego, zrobimy to także w trzech miejscach, aby nie było dyskusji na temat ewentualnej nieliniowości - tabelka:
Kod: Zaznacz cały
dane Uout V/bit
FF 10.506 0.027
FE 10.479
...
81 6.961 0.028
80 6.933
...
01 3.396 0.030
00 3.366
Jak widać, możemy spokojnie przyjąć środkową wartość - 28mV/bit, małe sprawdzenie:
167*0.028=4.67, to tego dodajemy minimalną wartość regulacji (dla 0h) czyli 3.36 i mamy widoczne powyżej 8V z drobnym okruszkiem. Tu daje się we znaki obecność pasożytniczej rezystancji cyfrowego suwaka, która w sumie wypadałoby uwzględniać w obliczeniach, ale najwięcej złego robi niska rozdzielczość potencjometru - granulacja na poziomie 255 nie pozwoli nam na mega dokładne ustalenie wartości.
wielowątkowość - wszystko na raz
I dlatego demko aplikacji w Pascal będzie zrobione tak, że Analog Discovery 2 będzie nie tylko zadawało cyfrową wartość do potencjometru, ale także będzie mierzyło aktualne napięcie wyjściowe i korygowało nastawę, tak aby uzyskać oczekiwaną wartość.
Cała aplikacja dostępna jest tu: https://github.com/bienata/AnalogDiscov ... M723_mtd_1
Chce tu przy okazji zwrócić uwagę na pewną nowość - a mianowicie - jest to programik wielowątkowy, no a dokładnie - dwuwątkowy. Po prostu - proces regulacji napięcia wyjściowego to nieustanne odczyty bieżącej wartości i korekcja ustawień potencjometru, tego nie da się w sensowny sposób wpleść w pętlę główną okienkowej aplikacji. Albo inaczej - obliczenia i komunikacja z Analog Discovery 2 wykonywane w pętli głównej (czyli głównym wątku) spowodują, że program będzie się ciął jak emo po śmierci chomika i okienko zupełnie straci responsywność. Wystarczy jednak całe przetwarzanie zapakować w nadpisaną metodę Execute własnej klasy dziedziczonej z TTHread i sterowanie zasilaczem będziemy mieli jakby w tle. Oczywiście o wątek poboczny trzeba zadbać - w FormCreate okna głównego tworzymy jego egzemplarz, w FormClose - nakazujemy zakończyć pracę i zwalniamy zasoby. Do komunikacji pomiędzy wątkami służy specjalnie oddelegowana metoda UpdateVoltageSettings, która pobiera nastawę suwaka z okna oraz odświeża odczyt napięcia na podstawie tego, co zmierzyło AD2.
Sam algorytm regulacji to pewna wariacja na temat regulacji nadążnej - wartość docelowa jest osiągana na podstawie znaku wartości błędu (różnica zadajnik-pomiar), szybkość regulacji określa kwant, z jakim modyfikujemy wartość potencjometru. Można chwilę poeksperymentować z różnymi ustawieniami podawanymi w Inc/Dec wartości roboczej dla potencjometru - zobaczymy jak osiąga się kompromis pomiędzy dokładnością regulacji i szybkością stabilizacji wyniku, ot - zabawka na zimowy wieczór. Zapraszam na filmik:
https://youtu.be/fAcX33NATAw
Z tradycyjnych wniosków to może takie: nawet z drobiazgu w postaci wpięcia mikroamperomierza można zrobić temat na poemat. Cyfrowy potencjometr nadaje się do pracy w aplikacji LM723, ale aby go opanować numerycznie trzeba się nieco nagimnastykować, to nie jest rasowy przetwornik C/A tylko bez urazy - garść rezystorów. No i po trzecie - WaveForms SDK jak się okazało nie sprawia problemów w aplikacjach wielowątkowych i obsługę AD2 możemy scedować na wątki pracujące w tle. I tym optymistycznym akcentem mówię - dobranoc.
#slowanawiatr