Voor het op tijd meten en vastleggen in het flashgeheugen van lange processen uitgedrukt in stroom en spanning, zoals lading - ontlading van batterijen en batterijen. Het is mogelijk om tegelijkertijd de temperatuur vast te leggen.
Parameters ingangssignaal:
huidige I = 25mka - 2a
spanning U = 0 - 5V
temperatuur t = -30 - + 120gС
tijd wordt ingesteld door het interne ingebouwde quartz horloge
Voeding:
van de bron 12v / 0.3a
Ik verbruik <70ma
Constructie:
De meter is gemonteerd op twee modules Arduino Nano aangesloten via ModBus-protocol, zie diagram. Een Arduino is gemonteerd op een riser met klemmenstroken. De modules zijn verbonden via connectoren. De draden en de modules zelf zijn geïsoleerd tegen thermische cambrische fouten.
Ingangssignalen worden gevoerd via schroefklemmen
Op het voorpaneel bevindt zich een indicator met vloeibare kristallen van de gemeten parameters en LED's die het schakelen van een bereik of buiten bereik aangeven.
De meter is gemonteerd in een behuizing van 145x85x40.
De temperatuursensor wordt uitgevoerd via de connector. Signaaloverdracht vindt plaats op een tweedraadslijn. Voedingsweerstand in de connector.
Voor eenvoudig programmeren zijn Arduino USB-connectoren extern.
Regeling
Regeling kan worden gedownload uit bestand Meter.rar
Er zijn om twee redenen twee Arduino gekozen: Arduino Nano was beschikbaar en niet genoeg op één geheugen, en het is de bedoeling om sensoren verder toe te voegen. Daarnaast wilde ik de Arduino-associatie beheersen, hiervoor werd het ModBus-netwerkprotocol gekozen. ModBus definieert één masterprocessor - Master en meerdere slaves - Slave. In dit werk is er één Slave, daarop staat een meting van temperatuur, spanning en stroom. On Master - een klok en een record voor een bestand. Het vleesgeheugen moet kleiner zijn dan 4 GB en is geformatteerd in FAT.
Omdat het de bedoeling was om stromen van μA tot A te meten, worden stromen gemeten in 4 bereiken (zie de tabel Ranges), de Arduino Slave bewaakt de overgang van het ene bereik naar het andere en vormt de overeenkomstige shuntcode voor de huidige gemeten stroom van M1-2. Wanneer u de grens van het bereik nadert, wordt het volgende bereik ingeschakeld, dat wil zeggen dat de huidige sleutel is uitgeschakeld vanaf T1-1 --- T2-2 en de volgende is ingeschakeld. In dit geval is de maximale shunt = 100 ohm constant aan. Als er een overschrijding van de waarde in het bereik is, gaan de LED's D8, D9 branden.
Huidige meting verdelen in bereiken
Uout_max = 5v KusOU = 20 Δ = Ish / 1024
De versterking van de operationele versterker M1-2 is ingesteld op = 20 en verandert dan niet. (Op het voorpaneel is het verkeerd gemonteerd).
De spanning wordt gemeten via een volger op de OU M1-1.De ingangscircuits van de op-amp en Arduino worden beschermd door diodes (zenerdiodes zitten in Arduino, maar ik ken de parameters niet, daarom is het beter om het te overdrijven).
LCD1602 is geselecteerd als een indicator. Het is verbonden met de Arduino Master. Bovendien kan de indicator eenvoudig op beide Arduino worden aangesloten door de Arduino-connectoren te wisselen. (Als de stroom is uitgeschakeld.) De verbinding met de Arduino Slave wordt weergegeven met een stippellijn (die werd gebruikt bij het schrijven van programma's). Met de hoofdverbinding (naar de master) op de LCD1602 kunnen 4 schermen worden weergegeven door de schuifschakelaar schuif p1-p2 te wisselen.
Screen1: van bovenaf de service-informatie van de uitwisseling tussen Arduino: C is het aantal uitwisselingen tussen Arduino, E is het aantal fouten tijdens de uitwisseling van Sh- nr. Van de shunt;
onderste dag - maand tijd.
Screen2: U1, I1, Shunt No., (0.00 rechtsonder reserve)
Screen3: U2, temperatuur, (ui- standby)
Screen4: SD-opname ingeschakeld, opnametijd in uren, regelnummer in bestand,
00- status stroombereik1 0-normaal 1-buiten bereik, status spanningsbereik1, vast vermogen van een externe bron
Bij aansluiting op Slave - 2 schermen. Switch p3 maakt opname in Micro Flesh-geheugen mogelijk.
De voeding is 12v geselecteerd om lineaire kenmerken van de op-amp te verkrijgen (om blokkades aan de randen van het bereik te voorkomen). Om dezelfde reden werd negatieve spanning van de shaper op KR1006VI1 gebruikt. Het gebruik van een Arduino-generator levert een minder stabiele spanning op. Om 5v-stroom te genereren, werd een step-down-converter gebruikt, maar je kunt het zonder doen door + 12V te leveren aan de VIN Arduino Nano-ingangen.
Gezamenlijke programmering Arduino heeft functies, aangezien de communicatie met de computer bezig is met het ModBus-protocol. Om een schets in een van de Arduino te laden, moet je aan de andere kant het RST-resetsignaal inschakelen. Gebruik hiervoor de jumpers Block S, Block M. Of houd de reset-knoppen op de Arduino-modules ingedrukt totdat de download is voltooid, wat minder handig is en er een kans is om de download te beschadigen. Omdat ik van plan ben mijn USB Arduino-apparaat uit te breiden, heb ik de behuizing eruit gehaald.
De transistor T5 (FR024N) moet worden gebruikt om een proces in of uit te schakelen, bijvoorbeeld het ontladen van een batterij. Hoewel het er niet bij betrokken is.
Software.
Er wordt maximaal op gekauwd dat beginners (en ikzelf) geen pijn zullen doen en als referentiemateriaal kunnen dienen, maar niet beweren optimaliteit te zijn.
Bibliotheken en programmacodes bevinden zich in het Izmeritel PRO.rar-bestand.
Schets voor de master ModBus_Master10_SD_T_10_2. Schets voor slave ModBus-Slave10_T_UI_10_2. De rest van de bibliotheek.
Geprogrammeerd in de omgeving van Arduino1.6.0. Het bevat bibliotheken SD, LiquidCrystal, Wire hoeft niet te downloaden.
De tijd in uren wordt als volgt ingesteld in Setup. Stel de realtime in en laad de schets. Geef vervolgens commentaar op de regels voor het instellen van de datum en tijd en laad de schets opnieuw.
Het resultaat van het programma is de indicatie van tijd en datum (uren), stroom, spanning, temperatuur op de LCD1602 en de opname van deze parameters in het IZMER1.TXT-bestand in het Micro Flesh-geheugen. Het bestand zal een dergelijke tabel bevatten:
0; 13/04/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; 13/04/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; 13/04/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; 13/04/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; 13/04/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; 13/04/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; 13/04/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; 13/04/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; 13/04/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; 13/04/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; 13/04/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; 13/04/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; 13/04/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; 13/04/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; 13/04/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
waar de kolommen zich bevinden nvt; Datum tijd opnametijd in uren; temperatuur gemeten spanning U1; gemeten stroom I1; de tweede gemeten spanning U2; informatie over het verlaten / ontbreken van het meetbereik; service-informatie over het aantal uitwisselingen tussen Arduino.
Het meetregistratie-interval werd gedurende 6 seconden geselecteerd, het is gemakkelijk te veranderen door de waarde van de #define CYCLE_TIME_F 3000 constante te vervangen door een andere met de formule Tsec = Constant (ms) * 2/1000 in Master.
Verder kan deze tabel worden gepresenteerd in de vorm van mooie grafieken.
Bij het schrijven van programma's gebruikte ik materialen. Ik dank de auteur.