Do pomiaru i utrwalania w pamięci flash długich procesów wyrażonych prądem i napięciem, takich jak ładowanie - rozładowywanie akumulatorów i akumulatorów. Możliwe jest jednoczesne ustalenie temperatury.
Parametry sygnału wejściowego:
prąd I = 25mka - 2a
napięcie U = 0 - 5 V.
temperatura t = -30 - + 120 gС
czas jest ustalany przez wewnętrzny zegarek kwarcowy
Odżywianie:
ze źródła 12v / 0.3a
Zużycie <70ma
Konstrukcja:
Licznik jest zmontowany na dwóch modułach Arduino Nano podłączony przez protokół ModBus, patrz schemat. Jeden Arduino jest zamontowany na pionie z blokami zacisków. Moduły są połączone za pomocą złączy. Druty i same moduły są izolowane od uszkodzeń termiczno-cambrycznych.
Sygnały wejściowe są podawane przez zaciski śrubowe
Na panelu przednim znajduje się wskaźnik ciekłokrystaliczny mierzonych parametrów i diody LED wskazujące przełączanie zakresu lub poza zakresem.
Miernik jest zamontowany w obudowie 145x85x40.
Czujnik temperatury jest przeprowadzany przez złącze. Transmisja sygnału jest zorganizowana na linii dwuprzewodowej. Rezystor zasilający w złączu.
Dla ułatwienia programowania złącza USB Arduino są zewnętrzne.
Schemat
Schemat można pobrać z pliku Meter.rar
Wybrano dwa Arduino z dwóch powodów: Arduino Nano były dostępne i niewystarczające w jednej pamięci i planowane jest dalsze dodanie czujników. Ponadto chciałem opanować asocjację Arduino, do tego został wybrany protokół sieciowy ModBus. ModBus definiuje jeden procesor główny - Master i kilka slaveów - Slave. W tej pracy jest jeden Slave, na nim jest pomiar temperatury, napięcia i prądu. On Master - zegar i zapis do pliku. Pamięć ciała musi być mniejsza niż 4 GB i sformatowana w FAT.
Ponieważ zaplanowano pomiar prądów od μA do A, prądy mierzone są w 4 zakresach (patrz tabela zakresów), Arduino Slave monitoruje przejście z jednego zakresu do drugiego, tworząc odpowiedni kod bocznikowy dla mierzonego prądu z M1-2. Zbliżając się do granicy zakresu, włączany jest następny zakres, to znaczy aktualny klucz z T1-1 --- T2-2 jest wyłączony, a następny włączony. W takim przypadku maksymalny bocznik = 100 omów jest stale włączony. W przypadku przekroczenia wartości w tym zakresie diody D8, D9 świecą.
Podział pomiaru prądu na zakresy
Uout_max = 5v KusOU = 20 Δ = Ish / 1024
Wzmocnienie wzmacniacza operacyjnego M1-2 jest ustawione na 20, a następnie nie zmienia się. (Na panelu przednim jest źle zamontowany).
Napięcie jest mierzone przez popychacz na OU M1-1.Obwody wejściowe wzmacniacza operacyjnego i Arduino są chronione przez diody (diody Zenera są w Arduino, ale nie znam parametrów, dlatego lepiej przesadzić).
LCD1602 jest wybrany jako wskaźnik. Jest podłączony do Arduino Master. Ponadto wskaźnik można podłączyć do obu Arduino, po prostu przełączając złącza Arduino. (Gdy zasilanie jest wyłączone.) Połączenie z Arduino Slave jest pokazane linią przerywaną (która była używana podczas pisania programów). Przy głównym połączeniu (do Master) na LCD1602 można wyświetlić 4 ekrany, przesuwając suwak p1-p2.
Screen1: z góry informacja serwisowa o wymianie między Arduino: C to liczba wymian między Arduino, E to liczba błędów podczas wymiany numeru Sh-bocznika;
dolny dzień - czas miesiąca.
Screen2: U1, I1, numer bocznika, (0,00 dolna prawa rezerwa)
Screen3: U2, temperatura, (standby)
Screen4: Nagrywanie SD włączone, czas nagrywania w godzinach, numer linii w pliku,
00- stan zakresu prądu1 0-normalny 1-poza zakresem, stan zakresu napięcia1, stała moc zewnętrznego źródła
Po podłączeniu do Slave - 2 ekrany. Przełącznik p3 umożliwia nagrywanie w pamięci Micro Flesh.
Zasilacz jest wybierany 12 V, aby uzyskać charakterystykę liniową wzmacniacza operacyjnego (aby uniknąć blokad na krawędziach zakresu). Z tego samego powodu zastosowano ujemne napięcie z urządzenia kształtującego przy KR1006VI1. Korzystanie z generatora Arduino wytwarza mniej stabilne napięcie. Aby wygenerować moc 5 V, zastosowano konwerter obniżający napięcie, ale można to zrobić, dostarczając + 12V do wejść VIN Arduino Nano.
Wspólne programowanie Arduino ma funkcje, ponieważ komunikacja z komputerem jest zajęta protokołem ModBus. Aby załadować szkic do jednego z Arduino, na drugim musisz włączyć sygnał resetowania RST. Aby to zrobić, użyj zworek Block S, Block M. Lub naciśnij i przytrzymaj przyciski resetowania na modułach Arduino, aż pobieranie zostanie zakończone, co jest mniej wygodne i istnieje możliwość uszkodzenia pobierania. Ponieważ planuję rozbudować urządzenie USB Arduino, wyciągnąłem obudowę.
Tranzystor T5 (FR024N) ma służyć do włączania / wyłączania procesu, na przykład rozładowania akumulatora. Chociaż nie jest zaangażowany.
Oprogramowanie
Maksymalnie żuje się, że początkujący (i ja sam) nie zaszkodzą i mogą służyć jako materiał odniesienia, ale nie twierdzą, że są optymistami.
Biblioteki i kody programów znajdują się w pliku Izmeritel PRO.rar.
Szkic dla mistrza ModBus_Master10_SD_T_10_2. Szkic dla slave ModBus-Slave10_T_UI_10_2. Reszta biblioteki.
Programowany w środowisku Arduino 1.6.0. Zawiera biblioteki SD, LiquidCrystal, Wire nie trzeba pobierać.
Czas w godzinach ustawia się w Setup w następujący sposób. Ustaw czas rzeczywisty i załaduj szkic. Następnie skomentuj linie do ustawienia daty i godziny i ponownie załaduj szkic.
Wynikiem programu będzie wskazanie godziny i daty (godziny), prądu, napięcia, temperatury na LCD1602 oraz zapis tych parametrów w pliku IZMER1.TXT w pamięci Micro Flesh. Plik będzie zawierać tabelę tego rodzaju:
0; 04/13/2019; 00:11:10; Zap (h) = 0,05; tc = 29,31; U1 = 1,71; I1 = 0,00; P1 = 0,00; U2 = 0,14; DiaI norma; DiaU norma; C = 762
1; 04/13/2019; 00:11:16; Zap (h) = 0,05; tc = 29,38; U1 = 1,79; I1 = 0,00; P1 = 0,00; U2 = 0,19; DiaI norma; DiaU norma; C = 788
2; 04/13/2019; 00:11:22; Zap (h) = 0,05; tc = 29,38; U1 = 1,54; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 813
3; 04/13/2019; 00:11:28; Zap (h) = 0,05; tc = 29,31; U1 = 1,30; I1 = 0,00; P1 = 0,00; U2 = 0,17; DiaI norma; DiaU norma; C = 839
4; 04/13/2019; 00:11:34; Zap (h) = 0,05; tc = 29,31; U1 = 1,90; I1 = 0,00; P1 = 0,00; U2 = 0,17; DiaI norma; DiaU norma; C = 864
5; 04/13/2019; 00:11:40; Zap (h) = 0,05; tc = 29,25; U1 = 1,53; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 890
6; 04/13/2019; 00:11:46; Zap (h) = 0,05; tc = 29,19; U1 = 2,03; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 915
7; 04/13/2019; 00:11:52; Zap (h) = 0,05; tc = 29,13; U1 = 1,81; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 941
8; 04/13/2019; 00:11:58; Zap (h) = 0,05; tc = 29,00; U1 = 1,30; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 966
9; 04/13/2019; 00:12:04; Zap (h) = 0,07; tc = 28,94; U1 = 1,25; I1 = 0,00; P1 = 0,00; U2 = 0,17; DiaI norma; DiaU norma; C = 992
10; 04/13/2019; 00:12:10; Zap (h) = 0,07; tc = 29,00; U1 = 1,85; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 1017
11; 04/13/2019; 00:12:16; Zap (h) = 0,07; tc = 29,00; U1 = 1,21; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 1043
12; 04/13/2019; 00:12:23; Zap (h) = 0,07; tc = 28,94; U1 = 1,55; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 1068
13; 04/13/2019; 00:12:29; Zap (h) = 0,07; tc = 28,88; U1 = 1,82; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 1094
14; 04/13/2019; 00:12:35; Zap (h) = 0,07; tc = 28,88; U1 = 1,30; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 1119
gdzie kolumny znajdują się nie dotyczy; Data czas czas nagrywania w godzinach; temperatura zmierzone napięcie U1; zmierzony prąd I1; drugie zmierzone napięcie U2; informacja o wyjściu / braku zakresu pomiarowego; informacje serwisowe o liczbie wymian między Arduino.
Interwał rejestracji pomiaru został wybrany na 6 sekund, łatwo go zmienić, zastępując wartość stałej #define CYCLE_TIME_F 3000 inną formułą Tsec = Constant (ms) * 2/1000 w Master.
Ponadto tabelę tę można przedstawić w postaci ładnych wykresów.
Podczas pisania programów korzystałem z materiałów. Wyrażam wdzięczność autorowi.