https://obrazki.elektroda.pl/3922135000_1507536194_thumb.jpghttps://obrazki.elektroda.pl/1944236100_1507536194_thumb.jpg Większość mierników panelowych ma małe wyświetlacze. Wskazania max 1999 (gdy oparte o ICL7106/7 lub podobne) lub mniej (np 199 gdy oparte o mikrokontrolery). Wersje na mikrokontrolerach przeważnie nie mierzą wartości ujemnych. Nie spotkałem takich z opcją pomiaru relatywnego. Czasem można spotkać funkcję HOLD. O komunikacji po USART czy USB można zapomnieć. Zbudowałem miernik na ICL7135 (wskazanie max +/-19999). Funkcjonalność: - duży (36mm, wysokość cyfry 25mm) dwukolorowy (zielony przy pomiarze napięcia, czerwony dla prądu) wyświetlacz LED - pomiar napięcia w trzech zakresach: 1V, 10V, 200VDC (120AC), zmiana zakresu automatyczna - pomiar prądu w 3 zakresach: 50mA, 500mA, 20A, automatycznie 2A i 20A, ręcznie 50 i 500mA (osobne wejścia pomiarowe) - wskazanie polaryzacji wielkości mierzonej - pomiar relatywny - funkcja HOLD - interfejs USART izolowany galwanicznie (w najprostszej wersji konwerter na USB) - ostatnie nastawy zapamiętane sa w EEPROM (poza REL i HOLD) Miernik zasilany jest napięciem +/-5V i +12V, dostarczanym przez zasilacz: https://obrazki.elektroda.pl/8394250100_1507126281_thumb.jpg (w zasilaczu kondensatory opisane 47uF powinny mieć wartośc 470uF) Na fotografii widać także bocznik dla zakresu 20A. Na PCB jest miejsce na "współczesny" rezystor 10mOhm. Ten na fotografii pochodzi z starego miernika wskazówkowego (ma wartość 50mOhm, więc w programie użyto odpowiedniego mnożnika). Na PCB widać kilka "sprzętowych upgrade", na dolnej warstwie też: https://obrazki.elektroda.pl/8407387400_1507127389_thumb.jpg Ale podobno jak widać takie połączenia to urządzenie musi działać :-) Film z pomiaru napięcia. Widać "wędrowanie" kropki, czyli automatyczną zmianę zakresu: https://filmy.elektroda.pl/54_1507126579.mp4 Pomiar prądu, pomiar relatywny (żółta dioda na dole): https://filmy.elektroda.pl/49_1507126708.mp4 Funkcja HOLD (czerwona dioda na dole) automatyczna zmiana zakresu ponad 2A): https://filmy.elektroda.pl/84_1507126811.mp4 Układ pomiaru AC uruchomiłem. Niestety nie mam w tej chwili 74HC4052 i z klawiatury nie można wybierać rodzaju pomiaru AC/DC (potrzebna lutownica) USART nie jest oprogramowany. Zrobię to jak złożę 2 egzemplarz. Miernik wysyła ramki CSV z wynikiem pomiaru, wybranym zakresie pomiarowym, stanu funkcji REL i HOLD Miernik nie jest skalibrowany, bo ciężko multimetrem 3,5 cyfry kalibrować 4,5 cyfry :-) Uprzedzę pytanie, po co multiplekser do wejść ADC w AVR po co w ogóle używać ADC. Odpowiedzi: - potrzebowałem 9 wejść a Mega128 ma 8 - używam JTAG, a 4 z wejść ADC to właśnie JTAG - ADC umożliwia szybkie, niezbyt dokładne pomiary - inna wielkość może być mierzona przez AVR, a inna przez ICL (można mierzyć moc) Aktualnie oprogramowanie używa ADC, wykonuje pomiary z wszystkich wejść ale wyniki pomiaru nie sa używane. W załączniku dokumentacja. Kody źródłowe będą dostępne. Na razie wprowadzam jeszcze mniejsze lub większe poprawki i ulepszenia. PS Miernik powstał po projekcie Multimetr 4.5 cyfry "UIRftCLT ale nie po jego uruchomieniu. Przez to nie ustrzeżono sie pewnych błędów/niedociągnięć. Co bym zmienił w kolejnej wersji? - Komunikacją do LED po SPI (np drivery Allegro). Same drivery prawdopodobnie na PCB wyświetlaczy. - Odczyt z ICL7135 dwoma liniami zamiast 9-ciu. CPU zlicza timerem impulsy zegarowe ICL podczas aktywnego sygnału BUSY. Oczywiście dochodzą jeszcze sygnały takie jak PO czy OVR. Rozpatruje też użycie układu TC500. - CPU w mniejszej obudowie (powyższe zabiegi dadzą taką możliwość). - Ręczny wybór zakresu pomiarowego zworkami (upraszcza konstrukcję, nie wprowadza problemów związanych z kluczami 405x). W mierniku panelowym najczęściej jeden zakres jest wystarczający. Ewentualnie przełączany dzielnik napięcia równoległy. Wartości rezystorów w dzielniku "okrągłe", a ewentualna wymagana korekta programowa. Trochę o USART. W podstawowej wersji komunikacja przebiega po USB (konwerter na FT230). Docelowo jednak kilka mierników ma być połączonych do HUB-a. Ten będzie zbierał wyniki z mierników i wysyłał po USB. W takiej sytuacji, w HUB-ie, każdy kanał miernika (izolacja optyczna) będzie "zapętlony" (miernik będzie miał echo tego co wysyła), a wszystkie kanały będą tworzyć sumę WireAnd. Dzięki temu mierniki będą mogły "podsłuchiwać" transmisję. To zapobiegnie kolizjom. W takiej sytuacji "inteligencja" HUB-a jest żadna. Po prostu wysyła po USB wszystko co odbiera od mierników, natomiast to co otrzyma, po wzmocnieniu (74LS07) rozsyła do mierników. Osoby zainteresowane ostatnimi dniami pracy nad miernikiem zapraszam TU. Pod tym linkiem beda się także pojawiały nowe wersje programu łącznie z kodami źródłowymi. Z dn. 05-09-2017: Uruchomiłem moduł komunikacji. Na razie wysyła on co sekundę rodzaj pomiaru i jego wynik. PCB po dodaniu elementów COM: https://obrazki.elektroda.pl/5559739000_1507208429_thumb.jpghttps://obrazki.elektroda.pl/9478936500_1507208429_thumb.jpg Istnieje duże prawdopodobieństwo, ze do zakończenia konkursu, uruchomnię PCB modułu HUB-a (najpierw trzeba je zaprojektować). Wtedy można będzie zbudować na tych miernikach system pomiarowy. Poczyniłem prace przygotowawcze do pracy mierników z HUB-em. Od strony sprzętu prosty interfejs: https://obrazki.elektroda.pl/9852967100_1507278940_thumb.jpg Dane przychodzące z interfejsu USB na J17B sa rozsyłane do mierników. Dane z mierników (piny 1 złącza J2..J4) sa przesyłane do USB. Dodatkowo, dzięki U2D trafiają także do mierników. Dzięki temu można wykrywać transmisje innych mierników i kolizje. J1 decyduje, czy do USB wysyłamy tylko dane mierników, czy także echo. Stan pionu 6 J17b (linia RTS) decyduje, czy do USB będą przesyłane dane czy nie. Jak powszechnie wiadomo, gdy Windows otrzymuje dane na nieotwartym porcie COM to interpretuje je jako dane muszki/klawiatury. Efekty są zaskakujące. JP1 normalnie jest zwarta. Pomocna może być podczas pisania softu, testów. Zapomniałem o złączu do łączenia kilku HUB-ów ze sobą, ale wydaje się, że można je łączyć kaskadowo. Ostatecznie pozostaje przylutowanie 4 przewodów (masa, zasilanie, rx, tx). W danych wysyłane sa informacje o odczytanej wartości, zakresie pomiarowym i nr seryjnym. Nr seryjny wprowadzono po to, aby mierniki miały różne numery.Procedura losująca nr seryjny: void LosujSN() { byte *p=0; word sn; sn = RdEEword( &SerialNumber_EE ); if( sn!=0xFFFF && sn ) return; // Jeśli numer był wylosowany (wartośc inna niz 0 lub FFFF) to wyjdź SerialNumber += _random(); SerialNumber += TCNT3; SerialNumber += TCNT2; for(word x=0; x<RAMEND; x++) SerialNumber += *p++; // Losowość zapewnia początkowa wartość RAM for(word x=0; x<E2END; x++) SerialNumber += RdEEbyte( x ); // Wartość eprom (ofsety itp) WrEEword( &SerialNumber_EE, SerialNumber ); } Funkcja losująca jest wywoływana po pierwszym nadaniu ramki przez miernik. Aktualnie wysyłanie wygląda tak: if( !TimComTX ) // Ramka na COM-a { TimComTX = 1000; // if( !TimComRX ) // Czy timeout odbiornika minął ? { LosujSN(); //todo: Wyswietlanie wyników pomiaru zmiennoprzecinkowo (napięcie w V, prąd w A) if( RodzajPomiaru==POM_U ) { sprintf_P( str, (char*)PSTR(";%f;%d"), Napiecie, ZakresU ); PrintStringCOM( str ); TRAP; } else if( RodzajPomiaru==POM_I ) { sprintf_P( str, (char*)PSTR(";%f;%d"), Prad, ZakresI ); PrintStringCOM( str ); TRAP; } else { sprintf_P( str, (char*)PSTR(";%05d"), ICLint, 0 ); PrintStringCOM( str ); TRAP; } sprintf_P( str, (char*)PSTR(";%d;%04x"CRLF), RodzajPomiaru, SerialNumber ); PrintStringCOM( str ); //todo: test czy to co wysłano jest tym co znalazło sie w odbiorniku TRAP; } else // Timeout nie minął { TimComTX = TimComRX + _random() % 20; // Odczekaj brakujący czas + warośc losowa } } Dzięki temu miernik nie nadaje dopóki na magistrali nie ma przesyłanych informacji (TimComRX jest ustawiania po każdym znaku odebranym przez USART). Jeszcze nie zaimplementowałem mechanizmu wykrywania kolizji. Dzięki losowości czasów nadawania (ziarno jest w miarę losowe) nie powinno byc problemu z nadawaniem. Jak będzie, okaże się w praktyce.
1
4
3
AC DC+
AC
DC-
+10
1
U1
7805
VCC
1
3
C2 Vin Vout
2
D
+5
L1
DL1210-68
C3 C4
C5 C6
100nF
100nF
100uF
100uF
GND
2
C1
100nF
1000uF
C7
D2
GND
ZW1
100uF
1N4148
2
1
Vin Vout
ZW
3
Vin
D1
C9
C10
R2
-5
6
1N4148
100nF
C8 100nF 7 Vin
C111k GNDA
Vin
100uF
100uF
U3
D3
79L05
-5
GNDA
R1
1k
D4
+5
GNDA
C
5
C
J1
1
2
10V
M1
DF06S
4
3
GND
D
2
+5
GNDA
GNDA
GND
-5
B
J2
Zasilacz VCC
1 2
3 4
5 6
7 8
9 10
GND
B
+10
H1
H2
Title
OTWOR
H3
OTWOR
H4
Size
Number
Revision
A4
A
OTWOR
1
OTWOR
Date:
File:
A
4-Oct-2017
Sheet of
D:\Dokumentacje\AVT\MiernikPanelowy\PCB\Panelowy_PROTOTYP.ddb
Drawn By:
2
3
4