Multifunksjonelt wattmåler med galvanisk isolasjon. Nettspenningsmåling Spenningsmåling med mikrokontroller

Et enkelt AC voltmeter med en frekvens på 50 Hz er laget i form av en innebygd modul som kan brukes enten separat eller innebygd i en ferdig enhet.
Voltmeteret er satt sammen på en PIC16F676 mikrokontroller og en 3-sifret indikator og inneholder ikke så veldig mange deler.

Hovedkarakteristikkene til voltmeteret:
Formen på den målte spenningen er sinusformet
Den maksimale verdien av den målte spenningen er 250 V;
Frekvens for målt spenning - 40…60 Hz;
Oppløsningen for å vise måleresultatet er 1 V;
Voltmeterets forsyningsspenning er 7…15 V.
Gjennomsnittlig strømforbruk - 20 mA
To designalternativer: med og uten strømforsyning om bord
Enkeltsidig PCB
Kompakt design
Visning av målte verdier på en 3-sifret LED-indikator

Skjematisk diagram av et voltmeter for måling av vekselspenning


Implementert direkte måling av vekselspenning med påfølgende beregning av verdien og utgang til indikatoren. Den målte spenningen tilføres inngangsdeleren laget på R3, R4, R5 og via skillekondensatoren C4 tilføres ADC-inngangen til mikrokontrolleren.

Motstandene R6 og R7 skaper en spenning på 2,5 volt (halve effekten) ved ADC-inngangen. Kondensator C5, med relativt liten kapasitet, omgår ADC-inngangen og bidrar til å redusere målefeil. Mikrokontrolleren organiserer driften av indikatoren i dynamisk modus basert på avbrudd fra tidtakeren.

--
Takk for oppmerksomheten!
Igor Kotov, sjefredaktør for magasinet Datagor


🕗 01/07/14 ⚖️ 19,18 Kb ⇣ 239 Hei, leser! Jeg heter Igor, jeg er 45, jeg er sibirsk og en ivrig amatørelektronikkingeniør. Jeg kom opp med, opprettet og har vedlikeholdt denne fantastiske siden siden 2006.
I mer enn 10 år har bladet vårt eksistert kun på min bekostning.

God! Freebie er over. Hvis du vil ha filer og nyttige artikler, hjelp meg!

Forord

I gamle, pre-digitale tider måtte enhver av oss nøye oss med pekermåleinstrumenter, fra vanlige klokker, vekter og slutter med... hmm, så med en gang kan vi ikke engang finne grensen for bruken deres! Vel, la oss si - et mikro- eller enda mer imponerende - picoammeter for presisjonslaboratorier. Og det var ganske mange nøyaktighetsklasser, avhengig av formålet.

For eksempel er en vanlig indikator for mengden drivstoff i en biltank det klareste eksemplet på maksimal unøyaktighet av avlesninger! Jeg kjenner ikke en eneste bilist som ville stole på denne "displaymåleren" og ikke ville fylle drivstoff på forhånd. De innbitte pessimistene til sjåførene kjørte ikke uten en dunk med drivstoff i bagasjerommet!

Men i laboratoriene, spesielt i State Verification Committee, var det brytere med speilskala og en nøyaktighetsklasse mye bedre enn 0,5.

Og nesten alle av oss var fornøyde og glade. Og hvis de ikke var fornøyd, kjøpte de mer nøyaktige instrumenter, selvfølgelig, hvis mulig!

Men nå har den digitale tidsalderen kommet. Vi var alle glade for det - nå kan vi umiddelbart se tallene på indikatorene og er fornøyd med "nøyaktigheten" som tilbys oss. Dessuten, i moderne tid, koster disse allestedsnærværende "digitalene" en størrelsesorden mindre enn de "unøyaktige bryterne" som har blitt en sjeldenhet. Imidlertid er det få som tror at mengdene som vises for oss i tall fortsatt forblir analoge, enten det er vekt eller strømstyrke - det spiller ingen rolle. Dette betyr at disse mengdene fortsatt måles analogt! Og kun for bearbeiding og presentasjon konverteres de til en digital verdi. Det er her feil skjules, noe som fører til at vi blir overrasket når to forskjellige romtermometre på samme sted viser forskjellige verdier!

Vei fra målt verdi til indikator

La oss ta en titt på hele måle-indikasjonsprosessen. Dessuten velger jeg bevisst en elektrisk mengde. For det første er vi fortsatt på nettstedet til elektronikkingeniører, ikke termiske fysikere eller bakere, må de tilgi min lisens for sammenligning! For det andre ønsker jeg å styrke resonnementet mitt med eksempler fra personlig erfaring.

Først velger jeg gjeldende styrke!

Jeg er nødt til å gjenta floskler om at for å få en digital representasjon av en analog mengde, trenger du en analog-til-digital-omformer (ADC). Men siden det i seg selv fortsatt er til liten nytte for oss, vil vi trenge andre noder for å fullføre alt planlagt. Nemlig:

  1. foran selve ADC-en trenger du en normaliseringsenhet, for eksempel: en normaliseringsforsterker eller attenuator, avhengig av forholdet mellom inngangsverdien og ADC-konverteringsområdet;
  2. dekoder etter ADC, for å representere den konverterte numeriske ekvivalenten til den digitale koden til den tilsvarende indikatoren.

Det finnes ferdige mikrokretser som kombinerer både en ADC og en dekoder. For eksempel ICL7136 eller lignende, brukt i multimetre.

I hovedsak er alle disse nodene i en eller annen form ganske enkelt nødvendige. Jeg har ennå ikke navngitt selve sensoren - i dette tilfellet en strøm-til-spenning-omformer, eller bare en shunt.

Så la oss kort gå gjennom hele kjeden. Strøm som flyter gjennom en shunt (en kraftig motstand med svært lav motstand) skaper en potensiell forskjell ved polene. Guten Tag, Herr Ohm! Men denne forskjellen er ganske liten og ikke alle ADC er i stand til å konvertere denne verdien fullt ut, så signalet (spenningen) fra shunten må forsterkes til en akseptabel verdi. Dette er grunnen til at en normaliserende forsterker er nødvendig. Nå vil ADC, etter å ha mottatt en fordøyelig spenning ved inngangen, utføre konverteringen med minst mulig feil. Ved utgangen får vi et tall som tilsvarer gjeldende verdi av den målte strømmen i det valgte området, som må dekodes tilsvarende for å vises på indikatoren. Konverter den for eksempel til en indikatorkode med syv segmenter.

Her ser jeg ikke behovet for å dvele mer detaljert på hvert av de ovennevnte stadiene, siden jeg i artikkelen forfølger et annet mål. Og detaljer kan finnes i overflod på Internett.

Detaljer

Jeg har den såkalte elektronisk last med strømningsindikator. Det er et grunnleggende diagram over selve lasten, men der trenger du et eksternt amperemeter for å stille inn strømmen mer nøyaktig. Jeg bestemte meg for å koble til begge enhetene for å spare plass og ikke ha en hel flokk med multimetre.

Mitt innebygde amperemeter er satt sammen og programmert på Tiny26L MK. En del av dette amperemeteret er den andre (gratis) op-ampen til LM358-brikken, som er en del av den grunnleggende ballastkretsen. De. Dette er min standardiserende forsterker fordi det maksimale spenningsfallet over shunten (5A x 0,1 ohm) kun er 0,5 volt, noe som tydeligvis ikke er nok for hele konverteringsområdet med den interne referansespenningen.

Ifølge T.O. (Engelsk = Datablad) den nominelle spenningen til den innebygde referansekilden (ION) er 2,56 volt. Veldig praktisk størrelse! I praksis blir det imidlertid ikke så bra: den justerte ION-spenningen til min MK viste seg å være 2,86 volt! Hvordan jeg bestemte dette er et eget tema. La oss fortsatt gå tilbake til en praktisk 2,56 volt. Se hva som skjer: maksimalt 0,5 volt faller på shunten, ADC konverterer maksimalt 2,56 volt. En normaliserende forsterker med en forsterkning på 5 foreslår seg selv, da vil tallet som oppnås under konverteringen ikke kreve noen avansert aritmetikk for å representere resultatet: 5 ampere = 2,5 volt = 250 enheter (for 8-bits konvertering). Du må bare multiplisere resultatet med to og sette et desimaltegn mellom hundrevis og tiere for å få en veldig praktisk representasjon: enheter, tideler og hundredeler av en ampere. Den endelige transformasjonen til syv-segmentskilt er et spørsmål om teknologi. Alt er bra, du kan implementere det i maskinvare!

Men som jeg allerede har vist med eksemplet med den innebygde ION, kan akseptabel (for ikke å nevne høy!) nøyaktighet oppnås så lett med komponentene som brukes. Du kan ta veien for å kompensere for feil matematisk ved å bruke et program i MK, selv om dette vil kreve kalibrering. Denne banen er ganske enkelt implementert i C og andre høynivåspråk. Men for meg, en sta montør, er det en ekstra hodepine å rote med matematikk ved å bruke RISC-instruksjoner!

Jeg valgte en annen vei - korrigering av forsterkningen til normaliseringsforsterkeren (NA). Du trenger ikke mye for dette – én trimmemotstand! Verdien må velges riktig slik at justeringsområdet er tilstrekkelig, men ikke overdrevet.

Valg av normaliserende forsterkerelementer

Så det er nødvendig å bestemme justeringsområdet. Det første trinnet er å bestemme toleransene til komponentene. For eksempel har shunten min en feiltoleranse på 1 %. Andre motstander i normaliseringsforsterkerkretsen kan ha en toleranse på opptil 10 %. Og ikke glem unøyaktigheten til vår ION, som i mitt tilfelle utgjorde nesten +12%! Dette betyr at det faktiske konverterte tallet vil være nesten 12 % mindre. Men siden jeg allerede kjenner denne feilen, tar jeg hensyn til den i NU gain, som skal være 5,72. Og siden de virkelige feilene til andre komponenter ikke er kjent, gjenstår det å finne maksimalt mulig totalfeil for å beregne justeringsområdet.

En enkel sum av disse "prosentene" antyder seg selv: 1 % av shunten pluss 2 ganger 10 % av op-forsterkerens tilbakemeldingsmotstander. Totalt: 21 %.

La oss se om det virkelig er slik. For å gjøre dette, la oss ta en titt på delen av diagrammet der denne NU presenteres med allerede valgte verdier:

Som du kan se, er det en ikke-inverterende forsterker med en justerbar overføringskoeffisient, teoretisk justerbar fra 4.979 til 6.735 med verdiene som er angitt i diagrammet. Men hvis vi tar i betraktning vår ±10% mulige feil for hver av motstandene, får vi, med den dårligste kombinasjonen, Ku = 5,864 - 8,009, som klart overstiger den nødvendige koeffisienten! Hvis denne kombinasjonen forekommer, må du ta andre valører. Det er bedre å umiddelbart øke verdien av innstillingsmotstanden, for eksempel til 39k. Da vil den nedre grensen for Ku være 5.454, som allerede er akseptabelt.

Vel, jeg – en “ekte radionarkoman” – måtte velge en trimmer fra det som fantes, og var rett og slett heldig som investerte i sortimentet! Hvis jeg hadde en trimmer med en annen verdi, ville det ikke ha noe å si, jeg ville beregne R2 og R3 på nytt, som i mitt tilfelle har en toleranse på 5 %, så jeg slapp å ta en trimmer til.

Overvinne dine mangler og utelatelser

Det ser ut til at alt er gjennomtenkt og beregnet - legg til et gebyr. La oss teste dette designet på et brødbrett først! Ikke før sagt enn gjort! Ku bygges om ikke helt som forventet, men innenfor grensene av det som er nødvendig. Indikatoren skulle imidlertid ikke vise 0,00 når det ikke var noen belastningsstrøm! Først av alt mistenkte jeg at programmet var i MK, men da ADC-inngangen ble kortsluttet til den vanlige ledningen, dukket de dyrebare nullene opp. Dette betyr at noe kommer til inngangen til MK, annet enn null volt. Testing med et multimeter bekreftet denne antagelsen og satte neste oppgave. Uten å gå nærmere inn på min forskning, vil jeg kun beskrive resultatet.

Årsaken viste seg å være følgende: Jeg tok helt ikke hensyn til at op-ampen jeg brukte langt fra var av beste kvalitet. Han er ikke engang såkalt. "skinne-til-skinne". Dette betyr at utgangspotensialet aldri vil nå noen av forsyningspolene, dvs. i mitt tilfelle vil det aldri være lik 0 volt! Nå, hvis den ble drevet fra en bipolar kilde, ville utgangen være forventet null. Men strømforsyningen min er unipolar og jeg hadde ikke tenkt å komplisere kretsen med noen omformer. Løsningen ble funnet i opprettelsen av et "virtuelt land", dvs. Takket være en separat strømkilde (i motsetning til den grunnleggende kretsen), var jeg i stand til å bruke en diode for å skifte potensialet til den felles ledningen i forhold til den negative polen til batteriet.

Så brettet er etset og loddet. Det er på tide å pakke dette designet inn i et etui. Noe som faktisk ble gjort. Men under drift dukket det opp en annen liten feil - drift av inngangskretsene til op-ampen. Dette kom til uttrykk i et negativt skifte i avlesningene, d.v.s. ved en strøm på et par titalls milliampere viste indikatoren fortsatt nuller, noe som ikke passet meg! Jeg ville tillate en forskyvning på flere mA - fortsatt vises ikke enheter på milliampere. Jeg måtte introdusere en skjevhetskrets til inngangen til NU.

R4- og RZ-klassifiseringene er valgt for å gi en forspenning på pluss/minus flere titalls millivolt i forhold til den "virtuelle bakken". Jeg hadde ikke noe ønske om å lage det ferdige brettet på nytt, og jeg la til den nødvendige justerbare skilleveggen i stedet for Ku-justeringen.

Generelt tilfredsstiller den resulterende enheten mine behov. Selvfølgelig kan det forbedres i lang tid, men det er ikke behov ennå!

Jeg vil snakke om den digitale delen og matematikken neste gang ved å bruke eksempelet på en volt-amperemåler i en laboratoriestrømforsyning.

Ibrahim Kamal (IKALOGIC)

Note. Det anbefales ikke å bruke kildekodeeksempler som ligger i beskrivelsesteksten i prosjektene dine. På slutten av beskrivelsen er det en lenke til et arkiv med fullstendig kildekode for prosjektet.

Denne artikkelen er for pedagogiske formål. Vi vil vurdere en maskinvareløsning og programvareimplementering i oppgaven med å måle spenningsnivået til et batteri (batteri) ved hjelp av en mikrokontroller som drives fra samme kilde. Det forutsettes at brukere er kjent med programmering av AVR-mikrokontrollere og har grunnleggende kunnskap om C-språket. Kompilatoren som brukes er WinAVR.

Selv om det er veldig enkelt, kan oppgaven med å måle forsyningsspenningen til en mikrokontroller være veldig viktig og alvorlig, spesielt i batteridrevne enheter og applikasjoner.

Det finnes mange metoder og løsninger for å overvåke batterispenningsnivåer, hvorav mange krever bruk av eksterne komponenter og sammenstillinger. Løsningen vi vurderer krever ikke eksterne komponenter vi vil kun bruke ressursene og periferiutstyret til mikrokontrolleren - den innebygde ADC.

Vi vil bruke ATMEGA48 mikrokontroller, men programkoden er fullt kompatibel med ATMEGA88, ATMEGA168, ATMEGA328 mikrokontrollere. I tillegg, ved å korrigere kildekoden litt, kan du bruke denne løsningen på AVR-mikrokontrollere med en innebygd ADC.

Brukere lurer sannsynligvis på: "Er prosessen med å måle forsyningsspenningen til en mikrokontroller virkelig så komplisert?" For å løse dette problemet har vi en mikrokontroller og vi må konvertere den analoge spenningsverdien til en digital verdi som kan brukes av mikrokontrolleren for videre beregninger og handlinger.

Du vil sannsynligvis si: «Så hva er i veien? Vi vil koble den positive polen til batteriet som mikrokontrolleren får strøm fra til inngangen til ADC og konvertere spenningsverdien til en digital verdi!"

Men i dette tilfellet vil du ta feil, det er ikke så enkelt. Problemet er at spenningskilden brukes til å drive selve mikrokontrolleren (Vcc) og også som en spenningsreferanse for ADC.

Hvis du ser på dette problemet fra et matematisk synspunkt, hvis du forstår problemet. Generelt er forholdet mellom den målte spenningen og den digitale verdien konvertert av 8-bits ADC som følger:

,

Hvor ADC_VALUE- verdien oppnådd under analog-til-digital konvertering,
V_mål- målt spenningsverdi, V_REF- referansespenning for ADC.

Nå, i henhold til betingelsene for problemet vårt, vet vi det V_mål = V_REF = Vcc og som et resultat vil resultatet av ligningen alltid være en verdi lik 255 og den vil ikke endre seg når batterispenningen endres. Denne situasjonen vil alltid oppstå ved måling av batterispenning, som også brukes som spenningsreferanse.

For å løse problemet uten å bruke noen eksterne komponenter, har AVR-mikrokontrolleren en svært nyttig innebygd komponent kalt en intern Band Gap Reference Voltage. Utgangsspenningen til denne kilden er omtrent 1,1 V, og den forblir uendret når temperaturen og forsyningsspenningen til mikrokontrolleren endres. Denne spenningen kan påføres ADC-inngangen, som enhver ekstern spenning, med det eneste unntaket at dette gjøres i programvare, uten å inkludere ekstra eksterne komponenter.

Selv om denne noden ikke er designet for vårt spesifikke formål, vil vi bruke den i vår oppgave med å måle forsyningsspenningen til en mikrokontroller.

Tenk på ligningen vår

ADC_VALUE = V_mål * 255/V_REF ,

Men, bestemmer seg for å måle referansespenningen V_BG, får vi følgende uttrykk

ADC_VALUE = V_BG * 255/V_REF

Og siden i vårt tilfelle er ADC-referansespenningen lik Vcc(hovedpoenget med problemet vårt), så vil ligningen ta formen

ADC_VALUE = V_BG * 255/Vcc

Å vite det V_BG=1,1 V, fra ligningen kan vi beregne forsyningsspenningen til mikrokontrolleren

Vcc = 1,1 * 255/ADC_VALUE

Takket være det siste uttrykket vil du kunne beregne den faktiske verdien av strømforsyningsspenningen til mikrokontrollerenheten din uten å bruke noen eksterne komponenter.

La oss se på et eksempel på implementering.

Skjematisk diagram

Vi bruker tre NiCad-batterier for å drive mikrokontrolleren. Forsyningsspenningen, med fulladede batterier, vil være 4,2 V. Vi må slå på LED-en koblet til PB0-porten hvis spenningen er under 3,2 V.

Oppføring

#inkluder avrio.h #inkluder avrinterrupt.h
// Globale variabler
float vcc;//variabel for å holde verdien til Vcc
void setup_adc(void)
{
ADMUX = 0xE; //Sett inn Band Gap-spenningen som ADC-inngang
ADCSRA = (1ADEN)|(1ADATE)|(1ADIE)|(1ADSC)|5;
}
ISR(ADC_vect) //ADC Slutt på konverteringsavbrudd
{
usignert char adc_data;
adc_data = ADC>>2; //les 8 bits verdi
vcc = 1,1 * 255 / adc_data;
}
// Hovedprogram
// ***********************************************************
int main(void)
{
DDRB = DDRB | (1PB0); //sett PB0 som utgang (for LED).
sei(); //Aktiver avbrudd setup_adc();
//sett opp ADC

mens (1)
{
// Uendelig sløyfe
hvis(vcc< 3.2)
{
PORTB |= (1PB0);
}
ellers
{
PORTB &= ~(1PB0);
}
}
}

Vær oppmerksom på at spenningen V_BG vil være forskjellig for forskjellige mikrokontrollere, spesielt fra forskjellige batcher, og kan være i området 1,01 V - 1,2 V, derfor vil kalibrering være nødvendig. Derfor, hvis den beregnede verdien av Vcc ved hjelp av denne koden er feil, må du gjøre følgende: måle forsyningsspenningen Vcc med et voltmeter og bruke ligningen nedenfor og vite verdien ADC_VALUE, beregne verdi V_BG

Vi går videre til den siste delen av sensorgjennomgangssyklusen, der vi skal se på DC- og AC-strøm- og spenningssensorer. For alle andre sensorer som ikke var inkludert i hovedserien, vil vi lage flere anmeldelser når de plutselig trengs i fremtidige artikler.
Denne artikkelen åpner en ny serie materialer om måling av strømkvalitetsparametere, som vil inkludere problemer med å koble strøm- og spenningssensorer til en mikrokontroller, vurdering av algoritmer for drift av strømkvalitetsanalysatorer, betydningen av visse strømkvalitetsindikatorer og hva de betyr . I tillegg vil vi berøre temaet som bekymrer mange om nøyaktigheten av digitalisering og databehandling, nevnt i kommentarene til den første artikkelen.

Strømsensorer

Måleshunt

Den enkleste og mest nøyaktige måten å måle strøm på. Som du vet, når strømmen flyter gjennom en aktiv motstand, oppstår det et spenningsfall over den, proporsjonalt med den målte strømmen. Flott, vi tar en motstand og plasserer den i den åpne kretsen til den målte kretsen:


Figur 10: Strømsensor strømshunt
Spenningsfallet over shunten er proporsjonalt med strømmen som passerer:
(10)
Følgelig, avhengig av nødvendig spenning ved sensorutgangen, velger vi den nødvendige shuntmotstanden. Men! Spenningsfallet over shunten vil føre til tap og varme, derfor er vi ved høye strømmer tvunget til å nøye oss med lave inngangsspenningsverdier for å begrense tap. Disse kommersielt produserte karene gir en standard utgangsspenning på 75mV:

Figur 11: Strømshunt av typen ShSM
De fleste shuntmålehoder er kalibrert til 75mV. Vær oppmerksom på det andre paret skruer - de er designet spesielt for tilkobling til en måleenhet for å redusere tap.
For å måle strøm ved bruk av slike shunter kreves bruk av operasjonsforsterkere. Samtidig er gjennomsnittlig forsterkning 20-40, som er innenfor mulighetene til mye brukte operasjonsforsterkere. I prinsippet kan dette gjøres på grunnlag av én bipolar transistor.
Vi får følgende diagram:


Figur 12: Bruke en operasjonsforsterker som forsterker
Det bør tas i betraktning at ved måling av vekselstrøm vil utgangssignalet være bipolar og operasjonsforsterkeren må drives fra en bipolar strømkilde.
Bare i tilfelle, la oss se hvordan opplegget vårt fungerer:


Figur 13: Simulering av strømsensorforsterker
Vi bruker 75mV til inngangen, multipliser med 20, ved utgangen har vi et signal med en amplitude på 1,5V for en strøm på 10A. I den neste artikkelen vil vi finne ut hvorfor et bipolart signal er dårlig.
Fordeler:

  • høy nøyaktighet;
  • bredt spekter av spenninger og frekvenser;

Feil:

  • det er ingen galvanisk isolasjon;
  • lav effektivitet.
Instrument strømtransformator

En målestrømtransformator er en transformator, hvis primærvikling er koblet til en strømkilde, og sekundærviklingen er koblet til måleinstrumenter eller beskyttende automatiske enheter.
Strømtransformatorer brukes til å måle strømmer i høystrømskretser, ofte med høyt potensial. For eksempel ønsket vi å måle strømmen i et 10 kV-nett. Eller vi ønsker å få en enkel og relativt billig måte for galvanisk isolasjon av den målte strømkretsen til 220V-enheten vår. Hovedproblemet med strømtransformatorer er at de kun kan måle vekselspenning.
Strømtransformatoren er alltid belastet. Hvis sekundærviklingen til strømtransformatoren er åpen, vil det oppstå et potensial på et par tusen kilovolt på den, noe som vil skade personell og deaktivere enheten ved å bryte gjennom isolasjonen.
Transformatorer kommer med en innebygd primærvikling. For eksempel:

Figur 14: Coilcraft CS2106L Series Strømtransformator
Enten disse elefantene, som har noe som en primær vikling i form av en enorm buss, eller til og med et vindu for å føre ledninger gjennom den


Figur 15: Industriell multi-amp strømtransformator
Den største ulempen med en strømtransformator er at den kun fungerer ved en viss frekvens. Et skritt til venstre, et skritt til høyre – utførelse. Metallkjernen har skylden.
Men fjerner vi den får vi en lufttransformator, eller såkalt. Rogowski spole:

Figur 16: Rogowski-spolekoblingsskjema
I motsetning til andre sensorer som krever interaksjon med den målte kretsen, kan Rogowski-spolen installeres på toppen av ledningene til den målte kretsen som et belte.
Noen måleinstrumenter er utstyrt med følgende sensorer:


Figur 17: Rogowski spolesensor
Omfanget av målte strømmer er fra titusener til tusenvis av ampere, men de lider av lav nøyaktighet.
Fordeler:

  • galvanisk isolasjon;
  • arbeid med høye strømmer på tusenvis av ampere;

Feil:

  • måler kun vekselstrøm i et visst frekvensområde (bortsett fra Rogowski-spolen);
  • endrer fasen på signalet og krever kompensasjon
Hall effekt strømsensorer

Sensorer av denne typen bruker effekten av en potensialforskjell som oppstår når en strømførende leder plasseres i et magnetfelt.

Figur 18: Halleffekt
Når vi lager en sensor, tar vi en magnetisk krets, fører ledningen til kretsen som måles gjennom den, og plasserer en Hall-sensor i delen av den magnetiske kretsen, og oppnår en åpen strømsensor:


Figur 19: Åpen type Hall effekt strømsensor
Fordelen med en slik sensor er dens enkelhet. Ulempen er tilstedeværelsen av kjerneskjevhet, og øker derfor ikke-lineariteten til avlesningene.
La oss legge til en vikling til kjernen og føre gjennom den en strøm proporsjonal med den målte strømmen:


Figur 20: Kompenserende Halleffektstrømsensor
Med null kjernebias øker vi lineariteten til sensoren og dens nøyaktighetsklasse. Imidlertid er en slik sensor i utformingen nær strømtransformatorer, og følgelig øker kostnadene betydelig.
Som transformatorer er det typer sensorer som lar deg føre en strømledning gjennom dem:


Figur 22: Halleffektstrømsensor
Det finnes sensorer med delt kjerne - men kostnadene deres er rett og slett utenfor listene.
Sensorer med integrert strømkrets basert på Hall-effekten med galvanisk isolasjon på 2,1 kV og 3 kV er produsert av Allegro. På grunn av sin lille størrelse gir de ikke høy nøyaktighet, men de er kompakte og enkle å bruke.


Figur 23: Allegro ACS754 strømsensor

  • ACS712 sensor – måling av like- og vekselstrøm opp til 30A med en nøyaktighet på ± 1,5 %
  • ACS713-sensor – optimalisert for DC-strømmåling opp til 30A. Har dobbelt så høy følsomhet som sin universelle motpart.
  • ACS754 sensor – måling av like- og vekselstrøm opp til 200A med en nøyaktighet på ± 1,5 %
  • ACS755-sensor – optimalisert for DC-strømmåling.
  • Sensor ACS756 er en sensor for måling av like- og vekselstrøm opp til 100A med en forsyningsspenning på 3-5V.


Figur 24: Sensor utgangsspenning versus strøm
Fordeler:

  • bredt spekter av målte strømmer med frekvenser opp til 50-100 kHz og høyere;
  • måler like- og vekselstrøm.
  • galvanisk isolasjon

Feil:

  • Dyr
Ytterligere lenker:

DC-måletransformatorer analogiu.ru/6/6-2-2.html
Rogowski-spoler www.russianelectronics.ru/leader-r/review/2193/doc/54046
Hall-effekt på Wikipedia: ru.wikipedia.org/wiki/Hall_Effect
Hallsensorer robocraft.ru/blog/electronics/594.html
Danilov A. Moderne industrielle strømsensorer www.soel.ru/cms/f/?/311512.pdf
Design av kretser basert på den analoge forsterkeren HCPL-7851 www.kit-e.ru/assets/files/pdf/2010_04_26.pdf

Konklusjon

Jeg satte meg selv i oppgave å lage en gjennomgang av sensorene som oftest brukes av fellesskapet når jeg utvikler ulike enheter. De fleste sensorene ble ikke inkludert i syklusen bare av den grunn at de ikke vil være nødvendig i nær fremtid for materialene mine, men noen av dem er i planene. Jeg vil definitivt lage et eget materiale med akselerasjons- og vinkelhastighetssensorer, et kompass og eksempler, så følg med for nye artikler!

Voltmetre på en mikrokontroller - hva kan være enklere? Dette gjelder når vi snakker om å måle likestrøm, eller å bestemme øyeblikkelige vekselstrømverdier. Men dimensjonen effektiv verdi vekselspenning, spesielt ikke-sinusformet skjemaer er en ikke-triviell oppgave. Det kan imidlertid også løses, og det på en ganske enkel og rimelig mikrokontroller av AVR-familien.

Denne artikkelen er mer en diskusjon om emnet enn en beskrivelse av et spesifikt prosjekt. Hensikten er å lede tanken i riktig retning, identifisere mål, fallgruver, legge ut en "pilot" for å omgå dem... Slik at alle uavhengig kan implementere det uttalte prinsippet.

Så, først, en mikro-ekskursjon inn i teorien. Som du vet, er den effektive verdien av vekselstrøm og spenning verdien som tas i beregningene av frigjort varme eller kraft. For likestrøm er den effektive verdien lik amplituden, gjennomsnittet og momentan for vekselstrøm, disse er alle forskjellige størrelser.

Øyeblikkelig AC spenningsverdi er det absolutte spenningsnivået på et bestemt tidspunkt, en enkelt avlesning. Amplitude verdi er den største verdien av sinusbølgen (eller annen kurve for en ikke-sinusformet bølgeform) over en periode. Amplitudeverdien tas modulo, dvs. Det er ingen minus og pluss amplitude. Gjennomsnittlig verdi, som følger av selve begrepet, er summen av alle øyeblikkelige verdier (prøver) for en periode, delt på antall prøver. Matematisk er det integralen av øyeblikkelige verdier over en periode. Åpenbart, for en sinusformet form, vil gjennomsnittsverdien over perioden være null. Hvis formen på spenningskurven er forvrengt, kan gjennomsnittsverdien over perioden vise seg å være ikke-null - da kalles det konstant komponent vekselspenning. Endelig, nåværende eller effektiv spenningsverdien er en verdi numerisk lik halvparten av integralet av kvadratet av de øyeblikkelige spenningsverdiene over perioden. Derfor kalles det også rot betyr kvadrat spenning.

La oss nå tenke på hvordan denne teorien vil hjelpe oss med å løse problemet vårt. I en MK har vi å gjøre med en ADC, som (til en viss tilnærming) er i stand til å gi oss individuelle spenningsavlesninger, dvs. den kan bestemme øyeblikkelige spenningsverdier. Det er lett å forstå at for å bestemme den effektive verdien vi trenger integrere(de. oppsummere) kvadrater av ADC-resultater, tatt med jevne mellomrom i løpet av en periode målt spenning. Hvorfor snakker jeg ikke om behovet for å dele summen av kvadrater i to, selv om teorien ser ut til å kreve dette? Ja, fordi ADC gir oss resultatet i abstrakte tall, skilt fra virkeligheten. For å få en reell verdi fra denne abstraksjonen, må vi fortsatt multiplisere dem med en slags dimensjonskoeffisient, som kan ta hensyn til den samme divisjonen med 2. La meg forklare: hvis "ett trinn" av ADC tilsvarer 0,02 V-spenning, så for å konvertere til reelle volt, må vi multiplisere ADC-resultatet med 0,02. Hvis vi i løpet av beregningsprosessen må dele disse verdiene med 2, er det ikke lettere å multiplisere umiddelbart med en faktor på 0,01V?!

La oss skissere algoritmen til programmet vårt. Generelt vil det være slik:

  1. Få N ADC-prøver med jevne mellomrom i løpet av en periode av den målte spenningen.
  2. Kvaddra resultatene og summer.
  3. Ta kvadratroten av den resulterende summen.
  4. Multipliser resultatet med skaleringsfaktoren og vis resultatet på indikatoren.

For at vårt voltmeter skal vise verdien kontinuerlig, må denne algoritmen utføres syklisk.

La oss nå gå inn i detaljene. Først av alt, la oss bestemme antall prøver N. Det ser ut til at alt er enkelt: jo større det er, jo mer nøyaktig blir resultatet. Og dette er sant, men vi bør ikke glemme at vi ikke har en superdatamaskin til rådighet, men bare en AVR-mikrokontroller, hvis evner er svært begrensede.

Først av alt er det en begrensning på hastigheten til ADC. Atmel anbefaler å bruke en ADC når du kjører med klokkehastighet ikke mer enn 200 kHz, ellers vil feilen i resultatene øke. Én ADC-målesyklus varer (i steady state) 13 sykluser, dvs. med noen triks, vil vi ikke kunne bruke ADC oftere enn 15384 ganger per sekund hvis vi ønsker å få alle 10 bitene av resultatet riktig. La oss finne ut hva vi får som resultat. Varigheten av nettspenningsperioden er 20 ms. Med den ovennevnte prøvetakingsfrekvensen vil vi rett og slett ikke rekke å få mer enn 307 prøver i løpet av en periode. Selvfølgelig, hvis du ofrer litt nøyaktighet, kan du øke hastigheten på ADC og følgelig antall prøver per periode.

En annen viktig begrensning er hastigheten på matematiske operasjoner. Kvadring er en veldig kostbar prosedyre når det gjelder antall mikrokontroller-sykluser, og hvis du utfører integrasjon "on the fly", dvs. Når resultater kommer fra ADC, vil en samplingsfrekvens på 15K være uoppnåelig selv i teorien. Det er bare én vei ut - å raskt samle den nødvendige mengden data i en matrise, og deretter sakte behandle den. Og her kommer vi over den tredje begrensningen - mengden RAM. Teoretisk vil det maksimale antallet samples fra 307 og 10-biters tall kreve 614 byte RAM for lagring, som allerede er mer enn hele tilgjengelig minne i mange MK-er, og for for eksempel Atmega8 er det mer enn halvparten. Men for å fungere trenger vi fortsatt plass til stabelen, for andre mellomliggende variabler... Altså antall prøver N=307 kan betraktes som absolutt maksimal for alle MK-er med RAM-kapasitet på 1K eller mindre.

For å fylle utvalget av prøver bruker vi et avbrudd på slutten av ADC-syklusen. Det vil si at vi vil definere en indeksvariabel som peker til neste element i matrisen vår, og i behandleren av dette avbruddet vil vi lagre ADC-resultatet i matrisen ved denne indeksen og øke indeksen. Siden det ifølge våre beregninger skulle gå 20 millisekunder fra øyeblikket av den første prøven til den siste (307.), kan vi anta at vi har løst problemet med å oppnå øyeblikkelige spenningsverdier for en periode. Det er imidlertid nødvendig å kontrollere om indeksen går utover tillatt verdi, d.v.s. sjekke for å se om vi har laget mer enn 307 prøver? Naturligvis må du være sikker på at tidspunktet for alle tilleggsberegninger ikke vil øke frekvensen for mottak av prøver, ellers vil store feil være uunngåelige.

Tenk deg at vi endelig mottok vårt utvalg av prøver, og nå må vi behandle det. Kan du tenke deg å kvadre på assemblerspråk? Hva med å trekke ut kvadratrøtter? Alt kan selvfølgelig løses, men det er mye enklere å bruke de innebygde funksjonene til C-språket kvadrat Og sqrt. Herfra er det 2 uunngåelige konklusjoner: vi lager programmet i C og alle de tidligere argumentene krever justeringer... Denne fantastiske konklusjonen bør forstås som følger: C er et språk på høyt nivå, og derfor betydelig tregere enn assembler. Dette betyr at avbruddshåndteringsprosedyrer kan kreve mer tid enn vi forventet, dvs. forstyrre de harmoniske beregningene av antall og frekvens av prøver. Dette betyr at det er viktig å kontrollere utførelsestiden for kritiske deler av programmet vårt (for eksempel i samme AVR Studio), og hvis det viser seg at prøvetakingsperioden er betydelig lengre enn den beregnede, foreta justeringer av alle beregninger - fra antall prøver til ADC-frekvensen. Men la oss glemme det et øyeblikk.

Så, målingene og beregningene er over. Det gjenstår å organisere resultatet av resultatene. Her er, som de sier, omfanget bredt: fra syv-segmentindikatorer med dynamisk display til LCD-tegndisplayer eller overføring av resultater via UART til en datamaskin. Bare husk at dynamisk visning også fungerer via avbrudd, dvs. kan forvrenge tidsintervallene for innhenting av prøver.

Jeg håper prinsippet er klart. Nå noen ord om problemene som ikke er berørt. Først av alt, alle våre tanker knyttet til målingen nettverk spenning, dvs. spenning med frekvens 50 Hz. Ved andre frekvenser vil programmet vårt gi resultater med feil. Størrelsen på denne feilen vil være minimal hvis den faller innenfor 20 ms heltall antall perioder spenning (for symmetriske bølgeformer - halve sykluser). Hvis antall hele perioder (halvsykluser) ikke er et heltall, vil feilen være maksimal, og arten av voltmeteravlesningene vil ha form av "slag". Siden det er forgjeves å forvente høy nøyaktighet fra numerisk integrasjon med et antall sampler over en periode på mindre enn flere titalls, vil den øvre frekvensverdien for den målte spenningen i realiteten ikke være mer enn 200 Hz. Kort sagt, vi vil fortsatt lage en enhet bare ved 50 Hz. Selv om det ved 25 vil fungere ganske bra. Selvfølgelig vil enheten vise riktig verdi for enhver form for vekselspenning 50 Hz, så vel som for likestrøm.

Skjematisk diagram av Proteus-prosjektet

For å bekrefte alle beregningene ovenfor (og for å bekrefte dem), gir jeg et spesifikt eksempel på implementeringen av et voltmeter. Jeg satte ikke sammen en ekte krets, jeg begrenset meg til et prosjekt i proteus. Imidlertid bekreftet resultatene oppnådd under modellering fullt ut det ovennevnte og lar oss hevde at den virkelige kretsen med minimale modifikasjoner (strømforsyning og beskyttelseskretser) vil fungere. Den foreslåtte fastvaren for MK er fullt funksjonell - modifiser kretsen, lag et kretskort og bruk det. Jeg gjorde det imidlertid på min måte, dvs. litt annerledes enn jeg nettopp fortalte deg. Det viktigste som er feil i programmet mitt er antall prøver i arrayet: Jeg har dem 256 . På grunn av dette måtte jeg forlate den "naturlige" frekvensen til prøvene og knytte dem til en timer, dette krevde igjen å heve driftsfrekvensen til ADC til 250 kHz (med en MK-klokkefrekvens på 8 MHz). Forresten, å få 250 kHz for ADC fra den innebygde RC-generatoren til megaen er mye enklere enn 200, så det er mulig at når du skriver ditt eget program, vil du også bli tvunget til å følge min vei ...

Prosjekt for Proteus 7.1 Pro SP2 og fastvarefilen kan lastes ned i . I prosjektet er den delen som er selve voltmeteret sirklet med en stiplet linje. Og til venstre er kilden til testsignalet. Inngangsbroen og spenningsdeleren må være utformet med en reserve for inngangsspenningen det er bedre å velge 1000-volts dioder, de vil helt sikkert tåle det. Det er bedre å lage skillet nøyaktig som vist i diagrammet - fra tre motstander, fordi en motstand med passende verdi tåler kanskje ikke høye spenninger. Det er enda bedre å ta flere motstander, det vil være lettere å velge delingskoeffisienten. Diagrammet viser ikke mange nyanser, for eksempel en beskyttende stabilisator ved ADC-inngangen, men dette er bare nyanser. Min firmware gir måling av spenninger opp til 710V, med en feil på ikke mer enn 2V for en sinusformet spenningsbølgeform. For andre spenningsformer kan feilen øke, men ikke mye. Jeg tror det definitivt vil passe innenfor 5%. For en enkel enhet med en skala på 10-700V, er det ikke dårlig, er det ikke? Fastvaren har en funksjon: hvis en spenning med en amplitudeverdi på mer enn 1000V (omtrent) påføres inngangen, vil enheten vise symbolet " E"- overbelastning. Dette vil skje selv om den effektive verdien er betydelig mindre enn 700V.

Kun registrerte brukere kan legge igjen kommentarer.
Registrer deg eller logg inn på kontoen din.