Ein Wechselrichter mit reinem Sinus in 15 Minuten oder "Leistungselektronik - für alle"

Was ist Leistungselektronik? Ohne Zweifel - das ist die ganze Welt! Modern und voller Komfort. Viele Menschen stellen sich Leistungselektronik als etwas „Magisches“ und Fernes vor, aber schauen Sie sich um - fast alles, was uns umgibt, enthält einen Stromrichter: ein Laptop-Netzteil, eine LED-Lampe, eine USV, verschiedene Regler, Spannungsstabilisatoren und Frequenzmesser (IF) ) in der Lüftung oder im Aufzug und vieles mehr. Die meisten dieser Geräte machen unser Leben komfortabel und sicher.

Aus mehreren Gründen ist die Entwicklung der Leistungselektronik einer der schwierigsten Bereiche der Elektronik - der Fehlerpreis ist sehr hoch, während die Entwicklung von Stromrichtern immer Liebhaber, Heimwerker und nicht nur angezogen hat. Sicherlich wollten Sie ein leistungsstarkes Netzteil für Ihr Projekt bauen? Oder vielleicht Online-USV für ein paar kW und nicht pleite gehen? Oder vielleicht ein Chastotnik in der Werkstatt?

Heute werde ich über mein kleines offenes Projekt oder vielmehr über seinen Teil sprechen, der es jedem ermöglicht, in die Welt der Leistungselektronikentwicklung einzusteigen und gleichzeitig am Leben zu bleiben. Als Demonstration der Möglichkeiten werde ich zeigen, wie ein Spannungsinverter von 12 V DC auf 230 V AC mit einem Sinusausgang in 15 Minuten zusammengebaut wird. Fasziniert? Lass uns gehen!




Projektgründe


In den letzten Jahren machte die Entwicklung von Stromrichtern etwa 90% meiner Bestellungen aus. Die Hauptarbeitskosten entfallen hauptsächlich auf die Softwareentwicklung und das Prototyping. Das Schaltungsdesign und die Rückverfolgung der Gesamtplatine der Gesamtkosten betragen normalerweise nicht mehr als 10-15%. Hier kommt das Verständnis, dass der Prototyping-Prozess, der die Softwareentwicklung umfasst, irgendwie reduziert und optimiert werden muss.

Wie immer gibt es mindestens zwei Auswege: Kaufen Sie fertiges Debugging, beispielsweise bei Texas Instrumets oder Infineon. Sie sind jedoch in der Regel auf eine bestimmte Aufgabe zugeschnitten und kosten zwischen 500 und 5.000 US-Dollar. Es gibt jedoch keine Garantie dafür, dass es einen ähnlichen Auftrag gibt, und diese Investition mit hoher Wahrscheinlichkeit ist einfach wird sich nicht auszahlen.
Die zweite Möglichkeit besteht darin, es selbst zu tun, aber es ist fast dasselbe wie das Starten von "+1 Revision von Eisen", was zu zusätzlichen Kosten für den Kunden führt. Wenn dies nicht gründlich durchgeführt wird, ist wie üblich alles auf Rotz und irgendwo fällt etwas ab und bis zum Layout, den Komponenten und dem Timing.
Nach einiger Zeit machte ich auf die naheliegendste Lösung aufmerksam. Es ist so einfach und offensichtlich, dass ich mich lange gefragt habe, warum derselbe TI oder Infineon dies noch nicht getan hat. Jetzt werde ich über meine "Erleuchtung" erzählen.

Schauen wir uns einige der beliebtesten Stromrichtertopologien an:







Schauen Sie jetzt noch einmal genau hin. Ich habe speziell ohne Umreifung gemalt, nur die Schlüsselkomponenten, um es klarer zu machen. Was haben diese Topologien gemeinsam? Das erste, was auffällt, ist eine Reihe gemeinsamer Punkte:
  • Alle Topologien umfassen die Hauptkomponenten - Kondensatoren, Transistoren und Induktivität (Induktor oder Transformator). Dies sind 3 Wale der Leistungselektronik;
  • Transistoren werden überall gleich eingeschaltet und bilden die sogenannte "Halbbrücke". Fast alle Konvertertopologien werden daraus erstellt.
  • Die Option zum Einschalten des Halbbrücken + Kondensatorkopplers ändert sich nicht bei allen Topologien. Die Art der Induktivität und die Möglichkeiten zum Einschalten von Halbbrücken ändern sich.


Daraus können wir schließen, dass Sie mit einem bestimmten Standardmodul in Form einer Halbbrücke + Kondensator jeden Konverter bauen können, indem Sie nur den erforderlichen Induktor oder Transformator hinzufügen. Die naheliegende Lösung zur Vereinfachung des Prototyping war daher die Erstellung eines solchen Moduls:


Der Kampf zwischen Gut und Böse


Leider bestimmen eine begrenzte Anzahl von Stunden pro Tag und banale Faulheit ihre Bedingungen. Ich bin vor einem Jahr auf die Notwendigkeit gekommen, dieses Modul zu entwickeln, aber die Implementierung wurde ständig unter dem Motto "Ich werde es definitiv nächstes Wochenende tun!" Übertragen. .

Vielleicht wäre die Idee im Regal geblieben, wenn nicht zwei Veranstaltungen stattgefunden hätten. Erstens kamen innerhalb eines Monats zwei Kunden zu mir, und alle wollten einen Konverter, der komplex und interessant zu implementieren war, und vor allem waren sie bereit, sehr gut zu zahlen. Obwohl er aus Europa stammt, hat es sich für sie vielleicht als billig herausgestellt.)) Beide Projekte waren für mich interessant, zum Beispiel war eines davon ein „dreiphasiger Spannungsregler mit galvanischer Trennung (sic!)“, Das heißt ein dreiphasiger PFC + 3 Brückenwandler (phasenverschoben) + Synchrongleichrichter + 3-Phasen-Wechselrichter. All dies auf SiC und sehr kompakt. Im Allgemeinen nahm ich 2 Großaufträge auf, von denen jeder ~ 800 Mannstunden und einen Zeitraum von 6 Monaten hatte. Infolgedessen war ich „gezwungen“, nach Optimierungsmöglichkeiten zu suchen.

Zweitens haben mir Leute von der PCBway- Firma unerwartet geschrieben, viele haben wahrscheinlich Boards bei ihnen bestellt und angeboten, zusammenzuarbeiten. Sie unterstützen sehr aktiv Open-Hardware-Projekte, dh die Initiative von CERN - Open Source Hardware. Die Zusammenarbeit ist für beide Seiten einfach und verständlich - sie stellen mir kostenlose Gebühren für meine Projekte zur Verfügung, und ich öffne sie und stelle sie auf Anfrage an anderen Stellen auf ihre Website. Für mich wurde es eine zusätzliche Motivation, und vor allem ist mein Gewissen klar, weil Ich bestelle seit mehreren Jahren Boards für Prototypen und für die Massenproduktion erzähle ich Freunden und Partnern davon. Jetzt habe ich auch ein Brötchen in Form von kostenlosen Boards für kleine Projekte, die man oft auf dem Hub schreiben kann.

Und dann brach das Eis, es wurde beschlossen, nicht nur das zuvor beschriebene Modul, sondern eine ganze Reihe von Entwicklern der Leistungselektronik zu erstellen und es für alle offen und zugänglich zu machen.

Projektstruktur


Am Anfang des Artikels habe ich erwähnt, dass ich Ihnen heute nur einen Teil erzählen werde - dies ist das Halbbrücken-Leistungsmodul . Sie können damit allein einen Konverter erstellen, indem Sie einfach einen Steuerkreis einschrauben, z. B. STM32-Discovery, Arduino, TMS320, TL494 oder was auch immer Sie dort besitzen. Es gibt überhaupt keine Bindung an eine Plattform oder MK.

Nur ist dies nicht das ganze Projekt, sondern ein Teil)) Woraus besteht der fertige Stromrichter? Zuallererst benötigt das Netzteil ein bestimmtes Steuermodul, um zu verstehen, was passiert, Sie benötigen eine Anzeige und um zu verstehen, was aus sicherer Entfernung passiert, benötigen Sie auch eine Schnittstelle, zum Beispiel Modbus RTU oder CAN.

Infolgedessen sieht die allgemeine Struktur des Projekts folgendermaßen aus:



Wahrscheinlich werde ich in Zukunft auch ein Programm zur Berechnung von konventionellen und planaren Transformatoren und Drosseln schreiben. So weit so. Die verschiedenen Teile des Diagramms in Entwurfsform wurden bereits implementiert und in zwei Projekten ausgeführt. Nach geringfügigen Verbesserungen werden auch Artikel darüber geschrieben und der Quellcode wird verfügbar sein.

Halbbrücken-Leistungsmodul


Jetzt ist es Zeit, sich den heutigen Helden genauer anzusehen. Das Modul ist universell und ermöglicht die Arbeit mit Mosfet- und IGBT-Transistoren, sowohl Niederspannungs- als auch Hochspannungsschaltern bis zu 1200 V.

Modulfunktionen:
  • Galvanische Trennung der Steuerseite (digital) der Stromversorgung. Durchschlagspannung der Isolierung 3 kV;
  • Die oberen und unteren Tasten sind unabhängig voneinander. Jeder hat seinen eigenen galvanisch getrennten Treiber und einen galvanisch getrennten Gleichstrom / Gleichstrom.
  • Der moderne Treiber von Infineon - 1EDC60I12AHXUMA1 wird angewendet. Der Impulsöffnungs- / Schließstrom beträgt 6A / 10A. Maximale Frequenz - 1 MHz (bis 1,5 MHz stabil getestet);
  • Hardware-Stromschutz: Shunt + Operationsverstärker + Komparator + Optokoppler;
  • Der maximale Strom beträgt 20A. Es ist nicht durch Schlüssel begrenzt, sondern durch die Größe des Kühlers und die Dicke der Kupferpolygone.


Die erste Revision des Moduls erscheint im Artikel, es ist voll funktionsfähig, aber es wird eine zweite Revision geben, bei der rein konstruktive Fehler beseitigt und die Steckverbinder durch bequemere ersetzt werden. Nachdem er die Dokumentation ausgefüllt hatte, warf er den Gerber in PCBway und nach 6 Tagen klopfte der Kurier an meine Tür und gab mir einen solchen Zauber:



Eine Woche später brachten die Hunde endlich Komponenten aus einem schönen Haushaltsgeschäft. Als Ergebnis wurde alles montiert:





Bevor wir fortfahren, schauen wir uns den Schaltplan des Moduls an. Sie können es hier herunterladen - PDF .

Es gibt nichts Kompliziertes oder Magisches. Die übliche Halbbrücke: 2 Schlüssel unten, 2 oben, Sie können jeweils einen löten. Der Fahrer, wie oben aus der 1ED-Familie geschrieben, ist sehr böse und unsterblich. Überall an der Stromversorgung gibt es eine Anzeige, einschließlich +12 V am DC / DC-Ausgang. Das UND-Logikelement ist geschützt. Wenn der Strom überschritten wird, gibt der Komparator +3,3 V aus, beleuchtet den Optokoppler und zieht einen der UND-Eingänge auf Masse, was bedeutet, dass die Einrichtung von log.0 und das PWM-Signal von den Treibern verschwinden. UND mit 3 Eingängen wurde speziell verwendet, in der nächsten Revision plane ich, Schutz vor Überhitzung durch den Kühler zu schaffen und das Fehlersignal auch dort zu starten. Alle Quellen finden Sie am Ende des Artikels.

Wir bauen das Wechselrichter-Layout zusammen


Ich habe lange darüber nachgedacht, wie man die Funktionsweise des Moduls demonstriert, damit es nicht sehr langweilig, nützlich und nicht sehr schwierig wird, sodass jeder es wiederholen kann. Deshalb habe ich an einem Spannungswechselrichter angehalten. Sie werden verwendet, um mit Sonnenkollektoren zu arbeiten. Wenn etwas auf der Niederspannungsseite riecht, ist es nicht beängstigend, aber auf der Hochspannungsseite, wenn Sie es einschalten, legen Sie Ihre Hände nicht hinein.

Der Wechselrichter selbst ist schändlich einfach, übrigens ist MAP Energy einfach so genietet, hier ein Beispiel für die kommerzielle Umsetzung dieser Idee. Die Aufgabe des Wechselrichters besteht darin, aus einer 12-V-Gleichspannung eine sinusförmige Variable mit einer Frequenz von 50 Hz zu bilden, da damit ein herkömmlicher Transformator mit 50 Hz an die Arbeit gewöhnt ist. Ich benutze eine Art Sowjet, wie OSM, 220V Fabrikwicklung und wird als sekundäre verwendet, und die primäre ~ 8V wird mit einem Kupferbus gewickelt. Es sieht so aus:



Und dieses Monster ist nur 400 Watt! Das Gewicht des Transformators beträgt nach den Empfindungen etwa 5 bis 7 kg. Wenn Sie ihn auf Ihr Bein fallen lassen, werden sie definitiv nicht in die Armee aufgenommen. Tatsächlich ist dies das Minus von Wechselrichtern mit "Eisen" -Transformatoren, sie sind riesig und schwer. Ihr Plus ist, dass diese Wechselrichter sooooooo einfach sind, keine Erfahrung erfordern und natürlich billig sind.

Verbinden wir nun die Module und den Transformator. Tatsächlich sollte das Modul für den Entwickler einfach als „Black Box“ dargestellt werden, die einen Eingang von 2 PWMs und 3 Leistungsausgängen hat: VCC, GND und den Halbbrückenausgang selbst.



Ziehen wir nun aus diesen "Black Boxes" unseren Wechselrichter:



Ja, es wurden nur 3 externe Elemente benötigt: ein Transformator + LC-Filter. Für letzteres habe ich einfach eine Drossel hergestellt, indem ich den Draht vom Modul zum Transformator auf einen Ring aus Kool Mu-Material der Größe R32 mit einer Permeabilität von 60 und einer Induktivität von etwa 10 μH gewickelt habe. Natürlich sollte die Drossel berechnet werden, aber wir brauchen 15 Minuten.)) Wenn Sie so etwas mit 400 W fahren, benötigen Sie im Allgemeinen einen Ring der Größe R46 (dies ist der Außendurchmesser). Kapazität - 1-10 uF Film, das ist genug. Tatsächlich können Sie den Kondensator nicht als Wirtschaftlichkeit einstellen, da die Wicklungskapazität des Transformators fehlerfrei ist. Im Allgemeinen haben die Chinesen und MAP genau das getan.)) Der Induktor sieht folgendermaßen aus:



Es bleibt eine Testlast auf den Ausgang zu werfen, ich habe ein paar 20 W LED-Lampen (nichts anderes war direkt zur Hand), sie selbst essen 24 W, aber die Effizienz. Der Leerlaufstrom des Transformators beträgt ebenfalls etwa 1A. Mit Batterie werden ca. 5A gegessen. Als Ergebnis haben wir einen solchen Stand:



Das Layout verwendet auch die Delta HR12-17-Batterie bei 12 V und einer Kapazität von 17 A * h. Wir werden den Konverter von der STM32F469-Discovery-Debug-Karte aus steuern.

Code


Ursprünglich war geplant, meine STM32VL-Disco, die 2010 auf der Ausstellung eingegangen war, zur Kontrolle zu verwenden. In diesem Layout war es jedoch so, dass sie sterben musste, als der gesamte Code geschrieben und das Layout gestartet wurde. Ich habe die Oszilloskopsonden vergessen und 2 Erden kombiniert, Amen. Infolgedessen wurde alles auf STM32F469NIH6 neu geschrieben. Es war dieses Debugging, das zur Hand war, sodass es zwei Projekte geben wird: Für den F100 und für den F469 werden beide überprüft. Das Projekt wurde für TrueSTUDIO erstellt, die Eclipse-Version von ST.

Fußtuch-Code
#include "main.h" /********************************************* Sinus table **********************************************************/ uint16_t sinData[240] = {0,13,26,39,52,65,78,91,104,117,130,143,156,169,182,195,207,220,233,246,258,271,284,296,309,321,333,346,358,370, 382,394,406,418,430,442,453,465,477,488,500,511,522,533,544,555,566,577,587,598,608,619,629,639,649,659,669,678,688,697, 707,716,725,734,743,751,760,768,777,785,793,801,809,816,824,831,838,845,852,859,866,872,878,884,891,896,902,908,913,918, 923,928,933,938,942,946,951,955,958,962,965,969,972,975,978,980,983,985,987,989,991,993,994,995,996,997,998,999,999,999, 999,999,999,998,997,996,995,994,993,991,989,987,985,983,980,978,975,972,969,965,962,958,955,951,946,942,938,933,928,923, 918,913,908,902,896,891,884,878,872,866,859,852,845,838,831,824,816,809,801,793,785,777,768,760,751,743,734,725,716,707, 697,688,678,669,659,649,639,629,619,608,598,587,577,566,555,544,533,522,511,500,488,477,465,453,442,430,418,406,394,382, 370,358,346,333,321,309,296,284,271,258,246,233,220,207,195,182,169,156,143,130,117,104,91,78,65,52,39,26,13,0}; uint16_t sinStep; uint8_t sinStatus; /******************************************** Used functions ********************************************************/ void StartInitClock (void) { RCC->CR |= RCC_CR_HSEON; // Enable HSE while (!(RCC->CR & RCC_CR_HSERDY)); FLASH->ACR |= FLASH_ACR_LATENCY_5WS; RCC->PLLCFGR = 0x00; RCC->PLLCFGR |= RCC_PLLCFGR_PLLM_3; // Div for HSE = 8 RCC->PLLCFGR |= RCC_PLLCFGR_PLLN_4 | RCC_PLLCFGR_PLLN_5 | RCC_PLLCFGR_PLLN_6 | RCC_PLLCFGR_PLLN_7; // PLL mult x240 RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC; // Source HSE RCC->CR |= RCC_CR_PLLON; while((RCC->CR & RCC_CR_PLLRDY) == 0){} RCC->CFGR &= ~RCC_CFGR_SW; RCC->CFGR |= RCC_CFGR_SW_PLL; // Select source SYSCLK = PLL while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1) {} // Wait till PLL is used RCC->CR |= RCC_CR_PLLSAION; while ((RCC->CR & RCC_CR_PLLSAIRDY) == 0) {} } void EnableOutputMCO (void) { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // Enable clock port A GPIOA->MODER &= ~GPIO_MODER_MODER8; GPIOA->MODER |= GPIO_MODER_MODER8_1; // Alternative PP GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR8; // Very high speed RCC->CFGR |= RCC_CFGR_MCO1; // Source PLL RCC->CFGR &= ~RCC_CFGR_MCO1PRE; // Div = 1 } void InitIndicatorLED (void) { /* * LED1 - PG6 * LED2 - PD4 * LED3 - PD5 * LED4 - PK3 */ RCC->AHB1ENR |= RCC_AHB1ENR_GPIOGEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOKEN; GPIOG->MODER &= ~GPIO_MODER_MODER6; GPIOG->MODER |= GPIO_MODER_MODER6_0; // Output PP GPIOD->MODER &= ~GPIO_MODER_MODER4; GPIOD->MODER |= GPIO_MODER_MODER4_0; // Output PP GPIOD->MODER &= ~GPIO_MODER_MODER5; GPIOD->MODER |= GPIO_MODER_MODER5_0; // Output PP GPIOK->MODER &= ~GPIO_MODER_MODER3; GPIOK->MODER |= GPIO_MODER_MODER3_0; // Output PP } void EnableIndicatorLED (void) { GPIOG->BSRR |= GPIO_BSRR_BR_6; GPIOD->BSRR |= GPIO_BSRR_BR_4; GPIOD->BSRR |= GPIO_BSRR_BR_5; GPIOK->BSRR |= GPIO_BSRR_BR_3; } void InitLowPWM (void) { /* * TIM1-CH1 - PA8 * TIM1-CH1N - PB13 */ RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; /*********** GPIO **********/ GPIOA->MODER &= ~GPIO_MODER_MODER8; GPIOA->MODER |= GPIO_MODER_MODER8_1; // Alternative output PP GPIOA->AFR[1] |= GPIO_AFRH_AFRH0_0; // Select TIM1-CH1 GPIOB->MODER &= ~GPIO_MODER_MODER13; GPIOB->MODER |= GPIO_MODER_MODER13_1; // Alternative output PP GPIOB->AFR[1] |= GPIO_AFRH_AFRH5_0; // Select TIM1-CH1N /*********** Timer *********/ TIM1->PSC = 2400-1; // div for clock: F = SYSCLK / [PSC + 1] TIM1->ARR = 1000; // count to 1000 TIM1->CR1 &= ~TIM_CR1_CKD; // div for dead-time: Tdts = 1/Fosc = 41.6 ns TIM1->CCR1 = 500; // duty cycle 50% TIM1->CCER |= TIM_CCER_CC1E | TIM_CCER_CC1NE; // enable PWM complementary out to PB15 and to PA10 TIM1->CCER &= ~TIM_CCER_CC1NP; // active high level: 0 - high, 1 - low TIM1->CCMR1 &= ~TIM_CCMR1_OC1M; TIM1->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; // positiv PWM1_CH3 and PWM1_CH3N TIM1->BDTR &= ~TIM_BDTR_DTG; // clear register TIM1->BDTR |= TIM_BDTR_DTG_2 | TIM_BDTR_DTG_1 | TIM_BDTR_DTG_0; // value dead-time: = 31*Tdts = 32*41,6ns = 1.29us TIM1->BDTR |= TIM_BDTR_MOE | TIM_BDTR_AOE; // enable generation output and dead-time TIM1->CR1 &= ~TIM_CR1_DIR; // count up: 0 - up, 1 - down TIM1->CR1 &= ~TIM_CR1_CMS; // aligned on the front signal: 00 - front; 01, 10, 11 - center TIM1->CR1 |= TIM_CR1_CEN; // start count } void InitSinusPWM (void) { /* * TIM3-CH1 - PB4 * TIM3-CH2 - PC7 */ RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; /*********** GPIO **********/ GPIOB->MODER &= ~GPIO_MODER_MODER4; GPIOB->MODER |= GPIO_MODER_MODER4_1; // Alternative output PP GPIOB->AFR[0] |= GPIO_AFRL_AFRL4_1; // Select TIM3-CH1 GPIOC->MODER &= ~GPIO_MODER_MODER7; GPIOC->MODER |= GPIO_MODER_MODER7_1; // Alternative output PP GPIOC->AFR[0] |= GPIO_AFRL_AFRL7_1; // Select TIM3-CH2 /*********** Timer *********/ TIM3->PSC = 5-1; // div for clock: F = SYSCLK / [PSC + 1] TIM3->ARR = 1000; // count to 1000 TIM3->CCR1 = 0; // duty cycle 0% TIM3->CCR2 = 0; // duty cycle 0% TIM3->CCER |= TIM_CCER_CC1E; // enable PWM out to PA8 TIM3->CCER &= ~TIM_CCER_CC1P; // active high level: 0 - high, 1 - low TIM3->CCER |= TIM_CCER_CC2E; // enable PWM complementary out to PA9 TIM3->CCER &= ~TIM_CCER_CC1P; // active high level: 0 - high, 1 - low TIM3->CCMR1 &= ~(TIM_CCMR1_OC1M | TIM_CCMR1_OC2M); TIM3->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1; // positiv PWM1_CH1 and PWM1_CH2 TIM3->CR1 &= ~TIM_CR1_DIR; // count up: 0 - up, 1 - down TIM3->CR1 &= ~TIM_CR1_CMS; // aligned on the front signal: 00 - front; 01, 10, 11 - center TIM3->CR1 |= TIM_CR1_CEN; // start count } void InitStepSinus (void) { RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; // enable clock for basic TIM6 TIM6->PSC = 5-1; // div, frequency 24 kHz TIM6->ARR = 1000; // count to 1000 TIM6->DIER |= TIM_DIER_UIE; // enable interrupt for timer TIM6->CR1 |= TIM_CR1_CEN; // start count NVIC_EnableIRQ(TIM6_DAC_IRQn); // enable interrupt TIM6_DAC_IRQn } /************************************* Main code *********************************************/ int main (void) { StartInitClock(); // EnableOutputMCO(); InitIndicatorLED(); InitLowPWM(); InitSinusPWM(); InitStepSinus(); EnableIndicatorLED(); while(1) { } } /****************************** Interrupts ******************************************************/ void TIM6_DAC_IRQHandler (void) { TIM6->SR &= ~TIM_SR_UIF; if (sinStatus == 0) {TIM3->CCR1 = sinData[sinStep];} if (sinStatus == 1) {TIM3->CCR2 = sinData[sinStep];} sinStep++; if (sinStep >= 240) { sinStep = 0; sinStatus = sinStatus ? 0 : 1; } } 


Im Allgemeinen beschrieb er in einem anderen Artikel ausführlich und klar, wie man ein sinusförmiges Signal erzeugt, wie man Code schreibt und so weiter. Sie können es hier lesen.

Hast du gelesen Willst du sammeln? Behalte das Projekt:


Wir führen den Code aus, bewaffnen uns mit einem Oszilloskop und gehen weiter. Zunächst überprüfen wir das Vorhandensein eines Signals am Eingang der Treiber. Es sollte folgendermaßen aussehen:



Es ist erwähnenswert, dass ich 2 Signale gebe, die einen Sinus auf einer Halbbrücke (Modul) und 50 Hz auf 2 Signalen zeichnen. Darüber hinaus ist eine Diagonale "rot + gelb" und die andere "blau + grün". In dem Artikel, den ich oben gegeben habe, wird dies ausführlich geschrieben, wenn Sie es plötzlich nicht mehr verstehen. Jetzt, als die Signale kamen, schalteten wir sowohl Halbbrücke + 12V als auch GND von der Labornetzversorgung ein. Sofort rät der Akku nicht, wenn Sie irgendwo einen Fehler machen, kann etwas durchbrennen. Der Schutz auf der Platine schützt vor Überstrom, aber nicht vor offensichtlichen Pfosten, wenn Plus und Minus verwechselt werden, aber der Labortechniker spart. 12V und 1A reichen für Tests aus. Wir nehmen die Sonde des Oszilloskops, ihren Erdungsdraht zum Ausgang der ersten Halbbrücke und die Sonde selbst zum Ausgang der anderen Halbbrücke, und es sollte ein solches Bild geben:



Wo ist der Sinus, den du fragst? Tatsache ist, dass der Eingangswiderstand des Oszilloskops groß ist und keine Last darstellt, sodass der Strom nicht fließt und es keinen Ort gibt, an dem der Sinus gewonnen werden kann. Fügen Sie eine Last hinzu, ich habe eine 90-Ohm-Last aus 10-Ohm-Widerständen hergestellt, indem ich einfach 9 Teile in Reihe geschaltet habe. Wir schließen die Last an die Ausgänge der Halbbrücken an und sehen das folgende Bild:



Hast du das gleiche Es ist also Zeit, Induktor, Transformator und Last anzuschließen und zu starten. Achtung! Sie können dieses Modell nicht ohne Last einschalten, da der Ausgang im Leerlauf bis zu 350 ... 380 V betragen kann. Damit dies keine Last oder Betriebssystem benötigt. Wir werden nicht den letzten haben, dies ist das Thema eines separaten Artikels, Sie können als Wahlfach den einfachsten P-Controller befestigen, Sie haben bereits eine Projektvorlage.

Einbeziehung


Nach dem Einschalten erhalten wir ungefähr 230 V am Ausgang, der Ausgang ist sicherlich nicht stabilisiert und wird 230 V + -30 V schweben. Für Tests wird es gehen. In einem anderen Artikel werden wir das Layout fertigstellen, wenn ich mich entscheide, über P- und PI-Regler und deren Implementierung zu sprechen.

Jetzt können Sie das Ergebnis der Arbeit genießen und bei Bedarf alles in eine Schachtel packen und sogar auf dem Bauernhof oder auf dem Land anwenden, um sich mit Licht und anderen Annehmlichkeiten zu versorgen.



Sie haben wahrscheinlich eine Verzögerung zwischen dem „Klicken“ bemerkt, dh dem Einschalten des Discovery und dem Einschalten der Lampen - dies ist die Zeit, die der MK für die Initialisierung aufgewendet hat. Diese Verzögerung kann verringert werden, indem eine einzelne Ziffer gleichzeitig in das Register geschrieben wird, anstatt den Registereintrag in mehrere Zeilen aufzuteilen. Ich habe es nur zur Veranschaulichung zerquetscht. Obwohl dies nicht beängstigend ist, ist die Verzögerung mit dem HAL-Code dreimal länger und die Leute leben irgendwie damit))

Bis ich vergaß, die Quelle des Projekts:

  • Schematische Darstellung - PDF
  • Stückliste - Excel
  • Gerber-Dateien - RAR


Es bleibt abzuwarten, wie es mit den Temperaturen auf dem Brett ist, wenn es besonders heiße Stellen gibt. 5-6A ist sicherlich nicht genug, aber wenn es einen Durchgangsstrom oder einen schwerwiegenden Fehler gibt, reicht dies aus, um das Board in einen Wasserkocher zu verwandeln:



Wie Sie sehen können, ist das heißeste Element das DC / DC-Modul für die galvanische Trennung, das 2 Watt beträgt, es erwärmt sich auf 34 Grad, also auch ein Shunt. Die Transistoren und der Kühler selbst haben nach 30 Minuten Betrieb des Wandlers eine Umgebungstemperatur.

Danke und Pläne


In naher Zukunft habe ich vor, über das DSP-Board zu schreiben und es nicht über die Debugging-Erkennung, sondern über das "spezialisierte" Modul zu verwalten. Boards der 2. Revision kamen von derselben PCBway zu ihm, ich warte auf die Komponenten und schreibe sofort.

Ich hoffe, Ihnen hat der Artikel und die Idee selbst gefallen. In Zukunft werde ich auf denselben Modulen zeigen, wie man einen Chastotnik, einen MPPT-Controller oder vielleicht etwas anderes Interessantes zusammenbaut. Wenn Sie Fragen haben, zögern Sie nicht, diese in den Kommentaren oder in der PM zu stellen. Wenn Sie plötzlich keinen vollständigen Account mehr haben, werde ich versuchen, alle Fragen zu beantworten.

Nun ein paar dank PCBway , es ist eigentlich sehr gut, dass sie die Open Source Engine unterstützen. Bald könnten die Hardware-Hersteller sogar Software-Autoren hinsichtlich der Anzahl und Qualität von Open-Source-Projekten einholen.

Source: https://habr.com/ru/post/de428550/


All Articles