Inhoudsopgave:
- Benodigdheden
- Stap 1: Wat is netstroom?
- Stap 2: Hoe stroom naar het net te duwen?
- Stap 3: De uitgangsspanning produceren met PWM
- Stap 4: Stroom meten
- Stap 5: De uitvoer filteren
- Stap 6: Fase en frequentie synchroniseren
- Stap 7: Anti-eilanden
Video: Grid Tie Inverter - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:15
Dit is een vlezig project, dus zet je schrap!
Grid tie-omvormers stellen u in staat om stroom in een stopcontact te duwen, wat een geweldig vermogen is. Ik vind de vermogenselektronica en besturingssystemen die betrokken zijn bij hun ontwerp interessant, dus heb ik er zelf een gebouwd. Dit rapport deelt wat ik heb geleerd en documenteert hoe ik dingen heb gedaan. Ik zou geïnteresseerd zijn in eventuele opmerkingen die u had (behalve die over het niet knoeien met het elektriciteitsnet).
Alle concepten zijn schaalbaar, maar deze opstelling had een maximale output van 40 watt voordat de filterinductoren begonnen te verzadigen. De uitgangsstroom was sinusvormig met THD < 5%.
Bekijk de software op mijn GitHub
Benodigdheden
- Ik heb het ontwikkelbord STM32F407 gebruikt. Het werkt op 168 MHz en heeft 3 ingebouwde ADC's die elk een 12-bits resolutie hebben van meer dan 2,4 MSPS (miljoen samples per seconde). Dat is gestoord!
- Ik heb het ontwikkelbord DRV8301 gebruikt. Hierin bevindt zich een 60v H-Bridge samen met de benodigde gate drivers, stroomshunts en stroomshuntversterkers. Super aardig!
- Ik gebruikte een 230-25v ringkerntransformator met 2 uitgangskranen. Hierdoor hoefde ik niet direct netspanning te produceren maar kon ik werken met piekspanningen van 40 volt. Veel veiliger!
- Ik heb een lading spoelen en condensatoren met elkaar verbonden om de L- en C-waarden te krijgen die ik voor het filter wilde.
- Een oscilloscoop en differentiële sonde zijn essentieel voor een project als dit. Ik heb een picoscoop
Stap 1: Wat is netstroom?
Wat je bij een stopcontact (in het VK) krijgt, is een sinusvormig signaal van 50Hz 230v RMS met een zeer lage impedantie. Daarover een paar dingen te zeggen:
50Hz - Netfrequentie wordt zeer nauwkeurig op 50Hz gehouden. Het varieert enigszins, maar 90% van de tijd ligt het tussen 49,9-50,1Hz. Kijk hier. Je kunt je voorstellen dat alle enorme generatoren in elektriciteitscentrales door het hele land tegelijk draaien. Ze draaien synchroon en produceren voor ons een sinusvormig signaal van 50 Hz. Hun gecombineerde enorme rotatietraagheid kost tijd om te vertragen of te versnellen.
In theorie, als er een ENORME belasting op het net zou worden aangesloten, zou dit de generatoren van het land beginnen te vertragen. Als reactie daarop zouden de jongens in het controlekantoor van het National Grid elektriciteitscentrales vragen hun ketels op te stoken, de verwarming op te voeren en die generatoren harder te dwingen om aan de vraag te voldoen. Zo zijn vraag en aanbod in een continue dans met elkaar.
Nog iets te zeggen over het 50Hz-signaal. Hoewel het heel licht varieert rond 50 Hz, zorgen de jongens bovenaan ervoor dat de gemiddelde frequentie over de dag precies 50 Hz is. Dus als het netwerk 10 minuten op 49,95 Hz staat, zorgen ze ervoor dat het later op 50,05 Hz draait om het exacte aantal cycli op 50 Hz x 60 seconden x 60 minuten x 24 uur = 4, 320, 000/dag te brengen. Dat doen ze precies met behulp van International Atomic Time. Huishoudelijke, kantoor- en industriële apparaten kunnen daarom de netfrequentie gebruiken om de tijd bij te houden. Dit wordt bijvoorbeeld vaak gedaan met mechanische socket-timers.
230v - Dit is de RMS-spanning (Root Mean Square) van het 50Hz-signaal. Het daadwerkelijke signaal zwaait tot een piek van 325v. Dit is belangrijk om te weten, want als u een omvormer bouwt, moet u zulke hoge spanningen produceren als u stroom door de stekkers wilt laten vloeien.
In werkelijkheid zijn de spanningen die u bij een stekker in uw huis ziet nogal variabel. Dat komt door spanningsval over de weerstand in draden, connectoren, zekeringen, transformatoren enz. Overal is weerstand. Als je een elektrische douche inschakelt die 11 kilowatt trekt (dat is ~ 50 Ampère), dan zal zelfs 0,2 ohm weerstand je 10 volt laten vallen. Je kunt dit zien als de lichten die een heel klein beetje dimmen. Grote motoren, zoals die in stofzuigers, trekken enorme stromen terwijl de motor op snelheid komt. Zo zie je vaak een licht flikkeren van de lampen als je ze aanzet.
Mijn punt is dat de netspanning veel variabeler is. Hier in het VK zou het 230v moeten zijn met een tolerantie van +10% / -6%. U kunt plotselinge veranderingen en fluctuaties verwachten als grote belastingen in de buurt worden in-/uitgeschakeld. Denk aan wasdrogers, waterkokers, ovens, stofzuigers etc.
Sinusvormig - Het signaal zou een mooie zuivere sinusgolf moeten zijn, maar in werkelijkheid zuigen sommige niet-lineaire apparaten hun stroom op van bepaalde punten in de sinusgolfcyclus. Dit introduceert vervorming en daarom is het signaal geen perfecte sinusgolf. Niet-lineaire belastingen omvatten doorgaans computervoedingen, tl-lampen, opladers, tv's, enz.
Totale harmonische vervorming (THD) kwantificeert dit in de golfvorm. Er zijn regels voor hoe schoon de output van een omvormer moet zijn. Als het geen voldoende schoon signaal kan produceren, wordt het niet goedgekeurd voor verkoop. Dit is belangrijk omdat harmonische inhoud in het netwerk de efficiëntie van sommige aangesloten apparaten vermindert (vooral oneven harmonischen). Ik geloof dat de maximaal toegestane THD 8% is
Lage impedantie - Bij het overwegen van een netgekoppelde omvormer is dit belangrijk om te overwegen. Er zijn allerlei soorten belastingen aangesloten op het lichtnet, waaronder inductieve, resistieve en soms capacitieve belastingen. De impedantie is dus onbekend en veranderlijk. De weerstand is erg klein, wat betekent dat als u een hoge stroombelasting aansluit, de spanning helemaal niet zal dalen.
Stap 2: Hoe stroom naar het net te duwen?
Om stroom het net in te sturen, moeten we een signaal synthetiseren dat exact overeenkomt met de frequentie en fase van het lichtnet, maar met een spanning die iets hoger is.
Vanwege de lage weerstand van het net is het moeilijk om precies te weten hoeveel hoger je die spanning moet maken. En aangezien de RMS-spanning fluctueert, moeten we ervoor zorgen dat we mee fluctueren. Gewoon een vast 50Hz-spanningssignaal produceren dat iets hoger is dan de netspanning, gaat niet werken!
PI Controle van de uitgangsstroom
Wat we nodig hebben, is een regelkring waarbij we de momentane stroom meten die we in het net duwen en automatisch onze uitgangsspanning aanpassen om de stroom te leveren die we willen. Dit zal onze output effectief transformeren in een stroombron (in plaats van een spanningsbron) die meer geschikt is voor het aansturen van lage impedanties. Dit kunnen we bereiken door gebruik te maken van een PI (Proportional Integral) regelkring:
PI-regellussen zijn fantastisch! Er zijn 3 delen voor hen:
- De gemeten waarde - De stroom die we in het stopcontact steken
- Het instelpunt - De stroom die we in het lichtnet willen duwen
- De output - De te genereren signaalspanning:
Elke keer dat we het PID-algoritme aanroepen, passeren we de meest recente stroommeting en het gewenste instelpunt. Het zal een willekeurig getal retourneren (evenredig met de te genereren uitgangsspanning).
Ons PID-regelalgoritme stelt ons in staat om op elk moment de gewenste uitgangsstroom te kiezen. Om een sinusvormige uitgangsstroom van 50 Hz te produceren, moeten we onze gevraagde stroom continu op een sinusvormige manier veranderen.
Het PID-algoritme wordt elke 100us genoemd (wat overeenkomt met 200 keer per 50Hz-cyclus). Elke keer dat het wordt opgeroepen, kan het directe aanpassingen maken aan de uitgangsspanning en dus indirect de uitgangsstroom aanpassen. Als resultaat produceren we een getrapte stroomuitvoer die vergelijkbaar is met die in de afbeelding, waarbij elke stap elke 100us optreedt. Dat geeft voldoende resolutie.
Voorwaartse controle
We kunnen de werklast van de PI-controller enorm verminderen door ook een feedforward-controller toe te voegen. Dit is makkelijk! We kennen de geschatte uitgangsspanning die we moeten genereren (hetzelfde als de momentane netspanning). De PI-controller kan dan worden overgelaten om de kleine extra spanning toe te voegen die nodig is om een uitgangsstroom aan te sturen.
Op zichzelf stemt de feedforward-controller de uitgangsspanning van de omvormer af op de netspanning. Er mag geen stroom vloeien als we goed genoeg bij elkaar passen. De feedforward controle doet dus 99% van de output controle.
Vanwege de lage weerstand van het net zou elk verschil in onze FF-uitgangsspanning en de netspanning resulteren in een grote stroom. Ik heb daarom een bufferweerstand van 1 ohm toegevoegd tussen de omvormer en het net. Dit introduceert wel verliezen, maar ze zijn vrij klein in het grote geheel.
Stap 3: De uitgangsspanning produceren met PWM
Hoewel we indirect de uitgangsstroom regelen, is het een uitgangsspanning die we op elk moment genereren. We gebruiken PWM (Pulse Width Modulation) om onze uitgangsspanning te produceren. PWM-signalen kunnen eenvoudig worden geproduceerd door microcontrollers en ze kunnen worden versterkt met behulp van een H-brug. Het zijn eenvoudige golfvormen die worden gekenmerkt door 2 parameters, de frequentie F en de duty cycle D.
Een PWM-golfvorm schakelt tussen 2 spanningen, in ons geval 0v en Vsupply
- Met D = 1,0 is de PWM-golfvorm eenvoudig DC bij Vsupply
- Met D = 0,5 krijgen we een blokgolf met een gemiddelde spanning van 0,5 x Vsupply, (dwz D x Vsupply)
- Met D = 0,1 krijgen we een gepulste golfvorm met een periodegemiddelde van 0,1 x Vsupply
- Met D = 0.0 is de output een flatline (DC bij 0v)
De gemiddelde spanning is het belangrijkste. Met een laagdoorlaatfilter kunnen we alles verwijderen behalve de gemiddelde DC-component. Dus door de PWM-duty cycle D te variëren, kunnen we elke gewenste gelijkspanning maken. Lief hoor!
Een H-brug gebruiken
Een H-Bridge is opgebouwd uit 4 schakelelementen. Dit kunnen BJT's, MOSFET's of IGBT's zijn. Om de eerste helft (0 - 180 graden) van de sinusgolf te produceren, stellen we fase B laag in door Q3 uit en Q4 aan te zetten (dwz PWM toepassen met D = 0). Vervolgens voeren we onze PWMing uit op fase A. Voor de tweede helft, waar VAB negatief is, stellen we fase A laag in en passen we onze PWM toe op fase B. Dit staat bekend als bipolaire schakeling.
De MOSFET's in de H-brug moeten worden aangestuurd door een gate-driver. Dit is een onderwerp op zich, maar een simpele chip kan het oplossen. Het DRV8301-ontwikkelbord bevat handig de H-Bridge, gate-drivers en stroomshunts voor ons, waardoor dit project een stuk eenvoudiger wordt.
Stap 4: Stroom meten
Elke poot van de H-brug heeft een shuntweerstand en een differentiële versterker. Onze shunts zijn 0,01 ohm en onze versterkers zijn ingesteld op een versterking van 40. Daarom ontwikkelt 1 Amp 10mV over de shunt die vervolgens wordt versterkt tot 400mV.
De uitgangen van de shuntversterkers worden gelezen door de 12-bits ADC's op de STM32F407 die in continue conversiemodus werken. De ADC's zijn ingesteld om elke shunt te samplen op 110KSPS en de DMA-controller schrijft de conversies automatisch naar een circulaire buffer van 11 woorden in RAM. Wanneer een stroommeting gewenst is, roepen we een functie aan die de mediaanwaarde van deze buffer van 11 woorden teruggeeft.
Aangezien we elke PID-iteratie (bij 10 KHz) huidige metingen opvragen, maar onze 11-woord ADC-buffers vullen met een snelheid van 110 KHz, zouden we elke PID-iteratie volledig nieuwe gegevens moeten krijgen. De reden voor het gebruik van een mediaanfilter is omdat PWM-switching pieken in de mix kan introduceren en mediaanfilters onechte ADC-samples zeer effectief uitroeien.
Een belangrijk punt om hier te maken: welk been van de H-brug gebruiken we voor stroommetingen? Nou, het hangt af van welk been we momenteel PWMen en welke laag wordt gehouden. Het been dat laag wordt gehouden, is het been waarvan we onze stroom willen meten, omdat er altijd stroom door de shuntweerstand aan die kant stroomt. Ter vergelijking: aan de kant die wordt PWMed, wanneer de high-side MOSFET is ingeschakeld en de low-side is uitgeschakeld, stroomt er geen stroom door de low-side shunt. We veranderen dus op welk been we de stroom meten op basis van de uitgangspolariteit van de omvormer. Je kunt dit duidelijk zien op de afbeelding, die de uitvoer van een van de shuntversterkers over een periode laat zien. Uiteraard willen we metingen doen tijdens het vlotte stukje.
Om te helpen bij het debuggen van onze huidige metingen. Ik heb de digitaal-naar-analoog-converter op de STM32F407 ingesteld. Ik schreef de huidige metingen die ik kreeg en bekeek de output. Je kunt dit zien in de uiteindelijke afbeelding, het blauwe is de spanning over de uitgangsbufferweerstand (dwz de uitgangsstroom / 1,1 ohm) en het rode signaal is onze DAC-uitgang.
Stap 5: De uitvoer filteren
Het uitgangsfilter is een belangrijk onderdeel van het ontwerp. We hebben er deze kenmerken van nodig:
- Blokkeer alle hoogfrequente schakelingen maar geef een 50Hz-signaal door
- Lage verliezen
- Niet om te resoneren!
- Om te gaan met de betrokken stromen en spanningen
De fouriertransformatie van een PWM-signaal met frequentie F, Duty cycle D, tussen 0 - Vsupply volt is: (D x Vsupply) + sinusgolven op de grondfrequentie F, en harmonischen daarna
Dit is briljant! Het betekent dat als we ons PWM-signaal door een laagdoorlaatfilter plaatsen dat de PWM-basis en alles daarboven blokkeert. We blijven alleen achter met de DC-spanningsterm. Door de duty-cycle te variëren, kunnen we gemakkelijk elke gewenste spanning produceren tussen 0 - Vsupply, zoals uitgelegd.
Op basis van de hierboven genoemde gewenste eigenschappen kunnen we het uitgangsfilter ontwerpen. We hebben een laagdoorlaatfilter nodig dat gemaakt is met minimale weerstand om verliezen te voorkomen. Daarom gebruiken we gewoon spoelen en condensatoren. Als we een resonantiefrequentie tussen 1 - 2KHz kiezen, vermijden we resonantie omdat we geen signalen in de buurt van die frequentie injecteren. Hier is ons filterontwerp. We nemen onze output als de spanning over C1.
Door L1 = L2 = 440uH, C1 = 8.4uF te kiezen, berekenen we een resonantiefrequentie van 1.85KHz. Dit zijn ook realistische componentwaarden.
Het is van vitaal belang om ervoor te zorgen dat onze smoorspoelen niet beginnen te verzadigen bij de stromen die we verwachten. De smoorspoelen die ik heb gebruikt, hebben een verzadigingsstroom van 3A. Dit zal de beperkende factor zijn voor het uitgangsvermogen van ons circuit. De nominale spanning van de condensator is ook belangrijk om te overwegen. Ik gebruik wat keramiek van 450v, wat in dit geval erg overdreven is!
De bode-plot (voor iets andere L/C-waarden) is gegenereerd met behulp van LTspice. Het laat ons de verzwakking zien die wordt veroorzaakt door verschillende ingangsfrequenties. We kunnen de resonantiefrequentie duidelijk zien bij 1.8KHz. Het laat zien dat een 50Hz-signaal bijna volledig onvervalst is, terwijl ik je kan vertellen dat een 45 KHz-signaal wordt verzwakt met 54dB!
Dus laten we onze PWM-draaggolffrequentie kiezen als ~ 45 KHz. Door hogere PWM-draaggolffrequenties te kiezen, kan de filterfrequentie hoger worden gemaakt. Dat is goed omdat het de L- en C-waarden kleiner maakt. Dat betekent kleinere en goedkopere componenten. Het nadeel is dat hogere PWM-schakelfrequenties grotere verliezen in de transistorschakelaars introduceren.
Stap 6: Fase en frequentie synchroniseren
Synchronisatie met de netfase en frequentie is wat een netgekoppelde omvormer maakt. We gebruiken een digitale implementatie van een PLL (Phase Locked Loop) om nauwkeurige fasevolging van het netsignaal te bereiken. Dit doen wij door:
- Bemonstering van de netspanning
- Een eigen lokaal sinusvormig signaal van 50 Hz produceren
- De fase vergelijken tussen ons lokale signaal en het netsignaal
- De frequentie van het lokale signaal aanpassen totdat het faseverschil tussen de 2 signalen nul is
1) Bemonstering van de netspanning
We configureren een 3e ADC-kanaal om de lijnspanning te lezen. Dit krijgen we door een transformatorkraan te verdelen zoals weergegeven. Dit levert een geschaalde spanning op die varieert van ongeveer 1,65 V en die precies de netspanning weergeeft.
2) Produceren van een lokaal 50Hz sinusvormig signaal Het produceren van onze eigen lokale 50Hz sinusgolf is eenvoudig. We slaan een opzoektabel op met 256 sinuswaarden. Onze gesimuleerde sinuswaarde wordt eenvoudig verkregen met behulp van een opzoekindex die stapsgewijs door de tabel roteert.
We moeten onze index met precies de juiste snelheid verhogen om een 50Hz-signaal te krijgen. Namelijk 256 x 50 Hz = 12, 800/s. We doen dit door timer9 te gebruiken die is geklokt op 168MHz. Door 168MHz/12800 = 13125 kloktikken te wachten, zullen we onze index op de juiste snelheid zetten.
3) Het vergelijken van de fase tussen ons lokale signaal en het netsignaal Dit is het coole deel! Als je het product van cos(wt) x sin(wt) over 1 periode integreert, is het resultaat nul. Als het faseverschil iets anders is dan 90 graden, krijg je een getal dat niet nul is. Wiskundig:
Integraal [Asin(t) x Bsin(t + φ)] = Ccos(φ)
Dit is geweldig! Hiermee kunnen we het netsignaal sin(ωt) vergelijken met ons lokale signaal sin(⍵t + φ) en een waarde krijgen.
Er is echter een probleem dat moet worden aangepakt: als we willen dat onze signalen in fase blijven, moeten we onze lokale frequentie aanpassen om de Ccos(φ)-term maximaal te houden. Dit zal niet erg goed werken en we krijgen een slechte fase-tracking. Dit komt omdat de d/dφ van ɑcos(φ) 0 is bij φ = 0. Dit betekent dat de Ccos(φ)-term niet erg zal variëren met faseveranderingen. Slaat dat ergens op?
Het zou veel beter zijn om het gesamplede netsignaal 90 graden in fase te verschuiven, zodat het cos (ωt + φ) wordt. Dan hebben we dit:
Integraal[Asin(t) Bcos(t + φ)] = Csin(φ)
Het introduceren van een faseverschuiving van 90 graden is eenvoudig, we voegen gewoon onze ADC-netspanningsmonsters in het ene uiteinde van een buffer en nemen ze er later een aantal monsters uit, wat overeenkomt met een faseverschuiving van 90 graden. Aangezien de netfrequentie nauwelijks varieert van 50 Hz, werkt een eenvoudige tijdvertragingstechniek uitstekend.
We vermenigvuldigen nu ons 90 graden faseverschoven netsignaal met ons lokale signaal en houden een lopende integraal van het product over de afgelopen periode (dwz over de laatste 256 waarden).
Het resultaat dat we kennen, zal nul zijn als de 2 signalen precies 90 graden uit elkaar worden gehouden. Dit is fantastisch omdat het de faseverschuiving ongedaan maakt die we zojuist op het netsignaal hebben toegepast. Ter verduidelijking, in plaats van de integrale term te maximaliseren, proberen we deze nul te houden en verschuiven we ons netsignaal in fase. De faseverschuivingen van 90 graden die door deze 2 veranderingen worden geïntroduceerd, heffen elkaar op.
Dus als Integral_Result < 0 we weten dat we onze lokale oscillatorfrequentie moeten verhogen om deze weer in fase te brengen met het lichtnet, en vice versa.
4) De frequentie van het lokale signaal aanpassen Dit bit is eenvoudig. We passen eenvoudig de periode tussen verhogingen aan via onze index. We beperken hoe snel we het faseverschil kunnen corrigeren door in wezen onechte dingen eruit te filteren. Dit doen we met behulp van een PI-controller met een zeer kleine I-term.
En dat is het. We hebben onze lokale sinusgolfoscillator (die het instelpunt van de uitgangsstroom instelt) vergrendeld om in fase te zijn met de netspanning. We hebben een PLL-algoritme geïmplementeerd en het werkt als een droom!
Het verhogen van de frequentie van onze lokale oscillator vermindert ook de faseverschuiving op het netsignaal. Omdat we de frequentie-aanpassing beperken tot +/- 131 tikken (+/- ~1%), beïnvloeden we de faseverschuiving maximaal met +/- 1°. Dit maakt helemaal niets uit terwijl de fasen synchroniseren.
Theoretisch zouden we onze fasevergrendeling verliezen als de netfrequentie meer dan 0,5 Hz zou afwijken. Dit komt door onze bovenstaande beperking van hoeveel we onze lokale oscillatorfrequentie kunnen aanpassen. Dat zal echter niet gebeuren tenzij het net op het punt staat uit te vallen. Onze bescherming tegen eilandbewoners treedt op dit moment sowieso in werking.
We voeren een nuldoorgangsdetectie uit bij het opstarten om ons best te doen om de signalen in fase te starten vanaf de offset.
Stap 7: Anti-eilanden
Wikipedia heeft een geweldig artikel over eiland- en anti-eilandtechnieken. Het impliceert ook dat mensen meer dan nodig sissen en klappen als het over dit onderwerp gaat. "Oh, je kunt niet je eigen omvormer voor het elektriciteitsnet bouwen, je zult iemand vermoorden, enz."
Zoals beter uitgelegd door het wikipedia-artikel, hanteren we een aantal veiligheidsmaatregelen die samen voldoende bescherming bieden (naar mijn mening):
- Onder/overspanning
- Onder/Over frequentie
We kunnen deze situaties detecteren door eenvoudig onze gesamplede geschaalde netspanning te analyseren. Als er iets misgaat, schakel dan de H-brug uit en wacht tot alles weer normaal wordt.
Aanbevolen:
Off-grid voeding: 5 stappen (met afbeeldingen)
Off Grid Power Supply: Dit project is een stil, binnenvriendelijk alternatief voor een generator op gas. Als je apparaten oplaadt, lampen gebruikt of zelfs een elektromotor voor een beperkte tijd laat draaien, is deze off-grid voeding een geweldige metgezel voor kamperen of noodsi
De Holi-Tie: 8 stappen (met afbeeldingen)
De Holi-Tie: Dit is de Holi-Tie, een feestelijke stropdas die is ontworpen om tijdens de feestdagen te worden gedragen. Losjes gebaseerd op de Ampli-Tie van Becky Stern die een Flora-bord gebruikt, gebruikt de Holi-Tie een Circuit Python Express (CPX)-microcontroller om de NeoPixel-animaties en