Forum: Mikrocontroller und Digitale Elektronik Diskussion zum Artikel "Single Chip Frequenzumrichter" für den 2. MC Wettbewerb


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von hinz (Gast)


Lesenswert?

Du hättest nicht nochmals schreiben müssen, dass du es nicht verstanden 
hast.

von oldeurope O. (Gast)


Lesenswert?

Ja hinz, bei der nächsten Verstärkerdiskussion sage ich dann,
mein Verstärker ist absolut verzerrungsfrei. Da werden nur
Harmonische überlagert, damit er besser klingt.
Und wehe einer von euch motzt dann.

LG
old.

von hinz (Gast)


Lesenswert?

Du raffst es einfach nicht.

Eine Psychotherapie könnte dir helfen.

von Carl D. (jcw2)


Lesenswert?

Der Ahnungslooser aus der W. schrieb:
>
> Schauen wir mal nach:
>
>> https://de.m.wikipedia.org/wiki/Frequenzumrichter
>> blättere bis "Optimierung durch Überlagerung von Oberschwingungen"
>>
>> Es geht um die Ströme durch die Motorwicklungen und nicht um die
>> Spannung an den Anschlußklemmen gegen Netz-N gemessen.
>
> Hopa, da steht ja genau das was ich erklärt habe:
.
> "Die dadurch erreichte Leistungssteigerung des Frequenzumrichters sowie
> eines daran angeschlossenen Antriebs liegt in der Regel bei etwa 15 %.
> Das entspricht etwa dem Amplitudenverlust einer
> 6-Puls-Drehstrom-Gleichrichterschaltung, welcher im Zwischenkreis etwa
> 86 % der Spitzenspannung liefert."
.
> Pass mal auf:
> 325V*1,15=374V Das ist die Zwischenkreisspannung die ihr haben
> solltet.
>
> Und die Überlagerung mit Harmonischen nennt man nun mal Verzerrung.
>
> LG
> old.

Selten erlebt man jemanden, der eigentlich den Text lesen können müßte, 
aber jedes Detail missversteht. Wenn ich nicht wüßte, daß es sich um 
Darius handelt, würde ich auf Kurt tippen.

von H.Joachim S. (crazyhorse)


Lesenswert?

Ignoriert das Geschreibsel doch einfach. Diskussion ist sinnlos.

von oldeurope O. (Gast)


Lesenswert?

Carl D. schrieb:
> würde ich auf K... tippen

Aha, wo findet man seinen Frequenzumrichter für Motore?

LG
old.

von hinz (Gast)


Lesenswert?

Aus der W. schrieb:
> Carl D. schrieb:
>> würde ich auf K... tippen
>
> Aha, wo findet man seinen Frequenzumrichter für Motore?

Der Kurt hat die gleiche Krankheit wie du.

von Carl D. (jcw2)


Lesenswert?

H.Joachim S. schrieb:
> Ignoriert das Geschreibsel doch einfach. Diskussion ist sinnlos.

Deswegen hatte ich mir vor Kurzem eine Filterfunktion gewünscht, die 
würde die Bandbreite, die für die "einfach zu ignorierenden"-Beiträge 
verbraucht wird, einsparen. Und mich würde es vom Reflex befreien, 
darauf zu antworten.
Ich würde das ja auch lokal ausblenden, aber das geht auf Pads nicht.

Aber eigentlich hast du recht.

: Bearbeitet durch User
von Marvin T. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe da mal eine Frage, und ich hoffe ihr könnt mir helfen.

Ein Freund von mir baut grade ein Boot und möchte den Motor
aus einem alten Streetscooter benutzen, um es anzutreiben.

Da die Autoelektronik nicht mehr funktioniert hat er mich bei der 
Ansteuerung
um Hilfe gebeten. Ich habe daraufhin etwas recherchiert und diese 
Steuerung gefunden.
Jedoch musste ich an dem Schaltplan einige Veränderungen vornehmen,
da der Motor von einer Batterie gespeist wird und bis zu 200A ziehen 
kann.
So habe ich den Gleichrichter gestrichen und Die IGBTs durch 300A 
IGBT-Module ersetzt, welche diese Last hätten bewältigen sollen.

https://www.reichelt.de/igbt-array-modul-halbbruecke-1200-v-300-a-c2-0-gehaeuse-gd300hfy120c2s-p290179.html?&trstct=pos_1&nbc=1

Beim ersten Test haben wir dann langsam angefangen und bis ca. 10hz 
hochgedreht. Nachdem der Motor fast eine Viertel Umdrehung geschafft 
hatte
sind zwei der IGBT-Module, alle IR 2110 Driver und der 12V DC/DC-Wandler 
in rauch aufgegangen. Die Optokoppler habe ich selbstverständlich wie in 
der Beschreibung erwähnten durch den Typ HCPL3180 ersetzt, um die 12v 
nutzen zu können.

Nun die große Frage, was habe ich falsch gemacht?

Ich wäre für jegliche Hilfe sehr dankbar.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Marvin T. schrieb:
> Nun die große Frage, was habe ich falsch gemacht?

Du hast vermutlich die falsche Schaltung gewählt. Solche Motoren haben 
Sensoren und die muss man auch nutzen. Du schreibst nichts über die 
verwendete Motorspannung, IGBT sind für Hochvolt Anwendungen gut, für 
Niedervolt sind MOSFets besser.

Motoren mit Sensoren lassen sich preiswert mit BLDC Controllern aus dem 
Internet antreiben. Frequenzumrichter sind eher für Drehstrommotoren 
ohne Sensoren.
Wenn man unbedingt einen BLDC mit diesem FU ansteuern will, muss man 
darauf achten, das der Strom nicht zu gross wird. Ein Sensorcontroller 
schaltet die Wicklung um, indem er den Sensoren folgt, ein grösserer 
Strom dreht dabei den Motor schneller.
Ein FU regelt das in einem festen Verhätnis von Spannung zu Frequenz, 
was für BLDC nicht gut geeignet ist.

von Marvin T. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Matthias,

vielen Dank für deine schnelle Antwort. In der Tat verfügt der Motor 
über Sensoren (siehe Bild). Ich gehe davon aus, dass es sich hierbei um 
Hallgeber handelt. So scheinst du damit recht zu haben. Jedoch sind es, 
wenn ich mich nicht verzählt habe, 16 Stück. Dass ist nicht durch 3 
teilbar, daher wird das Auslesen wieder sehr speziell oder ich muss 
diese durch eigene ersetzen, was auch wieder nicht leicht ist, da der 
Winkel ja stimmen muss.

Da ich den Motor jedoch nicht regeln, sondern nur steuern wollte hoffte 
ich, dass es mit einem Drehfeld für normal Drehstromasynchronmotoren 
auch geht.

der Motor wird übrigens mit einer Spannung von ca. 400V betrieben und 
wird mit einer Leistung von 47kW angegeben. Daher habe ich auch nach 
einer Schaltung gesucht, bei der Die MOSFETs oder IGBTs auch 
außenliegend und leicht gegen größere zu tauschen sind.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Marvin T. schrieb:
> Jedoch sind es,
> wenn ich mich nicht verzählt habe, 16 Stück.

Wieviele Anschlüsse kommen denn für die Sensoren aus dem Motor raus?
Üblich sind 5 Drähte für 3 Sensoren und 8 Drähte für 6 Sensoren.
Wenn es ein spezieller Motor ist, brauchst du eben auch einen speziellen 
Controller. Ohne Sensoren ist es so gut wie unmöglich, den Motor mit 
vernünftigem Drehmoment anzufahren und zu betreiben.

Gut geeignet ist zur Selbstanpassung das Projekt aus AVR447, einer 
Appnote von Atmel/Microchip zur Sinusansteuerung von BLDC mit Sensoren:
https://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en591447
Der Grossteil deiner derzeitigen Hardware ist weiterverwendbar, denn 
mein FU ist sozusagen ein Spinnoff dieser Appnote.

Die Sensoren resynchronisieren den Ponter in die Tabelle - aber das 
steht alles in den Notes.

: Bearbeitet durch User
von Marvin T. (Gast)


Lesenswert?

Matthias S. schrieb:
> Wieviele Anschlüsse kommen denn für die Sensoren aus dem Motor raus?

Insgesamt 6. scheinbar handelt es sich um einen Array an Spulen, welche 
zusammen irgendwie zurückmelden wie der Motor steht. Ich werde die Tage 
mal ein Oszilloskop dranhalten und schauen was passiert, wenn ich drehe 
und ob es in einem erkennbaren Zusammenhang mit den Sinuskurven des 
Motors steht.

Ich möchte mich nochmal für deine Hilfe bedanke. Ich habe mir die 
AppNote angesehen und muss leider zugeben, dass dies mein Wissen 
momentan noch etwas übersteigt und es wohl noch einige Zeit dauern wird, 
bis ich das für einen 328P funktionierend kompiliert bekomme.

Ich habe mich daher etwas umgeschaut und bei Mouser diesen Chip 
gefunden:

https://www.mouser.de/ProductDetail/Texas-Instruments/UCC2626PWG4?qs=eJkN62t4xTVYX2WmK6NrjQ==&mgh=1&vip=1&gclid=Cj0KCQjw16KFBhCgARIsALB0g8KhsYobRQDgokWWmPJpyrXfuxa7x8KiECcu80lPDAO7WISFdYcEa6waApQVEALw_wcB

Der sollte machen was ich brauche und kann auch mit den IR2110 arbeiten, 
so kann ich einen großen Teil deiner Schaltung übernehmen und den Chip 
mit einem Arduino und einem DAC ansteuern.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Marvin T. schrieb:
> Der sollte machen was ich brauche

Das wissen wir noch nicht. Denn auch dieser Chip benötigt drei 
Hallsensoren, um die 6 Sektoren des Motors zu detektieren.
Du solltest also mal einen Oszi daran hängen und den Motor händisch 
drehen.
Wenn die Sensoren Speisung benötigen, wirst du da nix sehen. Dann muss 
erstmal geklärt werden, wie die Versorgung funktioniert.

Das ist übrigens, wie du schon gemerkt hast, kein einfacher Spass. Mir 
sind schon bei unseren 4kW/48V Radnabenmotoren des öfteren die Endstufen 
explodiert. Also obacht und erstmal mit geringer Spannung testen. Der 
Motor sollte auch mit 40-50V schon willig drehen.
Gut geeignet als MC sind übrigens die XMega wegen der AWEX Einheit oder 
die STM32 mit Advanced Timer. Ich habe damals AVR447 mit reichlich 
Konsolenunterstützung (Messwerte und Debug) auch auf diese MC portiert.

von Marvin T. (Gast)


Lesenswert?

Matthias S. schrieb:
> Das wissen wir noch nicht. Denn auch dieser Chip benötigt drei
> Hallsensoren, um die 6 Sektoren des Motors zu detektieren.

Ja, das ist technisch korrekt, da habe ich mich etwas unklar 
ausgedrückt.

Mittlerweile habe ich einige Stunden Recherche hinter mir und bin auf 
folgende Lösung gekommen. Ich werde die eingebauten Sensoren entfernen 
und 12 Magneten auf dem Metall oben anbringen. Dazu werde ich erstmal 
einen Adapter mit dem 3D-Drucker drucken (als Prototyp), in welchem ich 
diese in gleichmäßigen Abstand einlassen kann. Dann werde ich drei 
Hallsensoren anhand von Oszilloskope Bildern so ausrichten, dass die 
beim händischen Drehen des Motors induzierten Wellen mit den 
Schaltstellen der Hallsensoren wie in der vom Hersteller des Drivers 
mitgelieferten Grafik übereinstimmen. Anschließend werde ich mit einem 
Labornetzteil langsam Strom und Spannung erhöhen, und schauen, ob es 
funktioniert.

Außerdem habe ich auch die eingebauten Sensoren gemessen. Leider ohne 
Erfolg. Ich gehe daher davon aus, dass Spannung in die Spulen induziert 
wird und der Strom sich durch die Induktivität beim Vorbeidrehen des 
Innenteils verändert. Sollte es so sein, sehe ich für mich leider keine 
Möglichkeit diese auszulesen. Da dies momentan auch meine einzige 
Theorie ist, sehe ich momentan generell keine Möglichkeit diese 
auszulesen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Marvin T. schrieb:
> Außerdem habe ich auch die eingebauten Sensoren gemessen. Leider ohne
> Erfolg.

Hallsensoren benötigen eine Speisespannung, sonst passiert da gar nix.

von Norbert H. (ottoco)


Lesenswert?

Hier bitte ich um Hilfe zum 3-Phasen Frequenzumrichter mit AVR
Die gesamte Schaltung ist übersichtlich und vermutlich leicht 
nachzubauen. Ich beschäftige mich jedoch seit geraumer Zeit mit den 
Microcontrollern. Um die Programme in Diese zu laden habe ich mir das 
Board von aTeVaL 2.0 gekauft. Das Board funktioniert einwandfrei und ich 
habe damit auch schon fertige Programme auf den z.B. ATMEGA328P geladen 
(einfache Blinkprogramme).
Leider bekomme ich das Programm , 3-Phasen Frequenzumrichter, nicht 
geladen, es kommen folgende Fehlermeldungen

recipe for target'main.o'failed
vfd.h:No such file or directory

Als Sofware verwende ich Atmel Studio 7
Der dargestellte Fehler liegt sicherlich an mir da ich mich mit der 
Software noch nicht so gut auskenne,aber vielleicht kann mir da mal 
jemand unkompliziert weiterhelfen.
Sollte es allerdings zu kompliziert werden lege ich das Projekt erst 
einmal in die Schublade.
Ich bedanke mich dennoch im Voraus für eine Hilfestellung.

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Am einfachsten ist es, das Projekt zu importieren, denn es war ein AVR 
Studio 4 Projekt. Import findest du unter File-> Import...-> AVR Studio 
4 Project.
Vorasugesetzt, alle Dateien liegen im gleichen Ordner, suchst du im 
folgenden Dateidialog das *.aps für das Projekt.

Stelle in den Properties (Project -> 'VFD_Sinus_ATnnn Properties') in 
Device den richtigen MC für dein Projekt ein (bei dir ATMega328).
Drücke F7 um das Projekt zu bauen.

Der Solution Explorer sollte etwa so aussehen, wie im angehängten Bild.

Einfacher ist es, die passende HEX Datei für deinen MC aus den HEX 
Dateien rauszufischen und die auf deinen MC zu flashen.

: Bearbeitet durch User
von Norbert H. (ottoco)


Lesenswert?

Hallo Matthias,
vielen Dank für die schnelle Antwort, ich werde mich am Wochenende damit 
beschäftigen und hoffe doch das ich es hinbekomme,werde auf jeden Fall 
schreiben ob es geklappt hatt
nochmals danke

von Spimash (spimash)


Lesenswert?

Hallo Matthias,

Vielen Dank für Ihr Projekt. Ich habe ein paar Fragen zum 
SpeedController-Verfahren.

Erste Frage: Den anderen Einträgen nach zu urteilen, darf der Inco-Wert 
255 nicht überschreiten. Aber

gemäß dieser Zeile aus main.c:
OutputValue += PID_Controller(incrementSetpoint, 
((uint16_t)Inco),(pidData_t *) &pidParameters);
Inco = (uint16_t)outputValue;

und dieses von pid.c:
int16_t PID_Controller(int16_t setPoint, int16_t processValue, pidData_t 
*pid_st)
{
...
  if(ret > MAX_INT) // MAX_INT = 32767
   {
     ret = MAX_INT;
   }
   sonst if(ret < -MAX_INT)
   {
     ret = -MAX_INT;
   }
   return((int16_t)ret);
}

Der Inco-Wert kann viel kleiner als 0 und viel mehr als 255 sein. 
Aufgrund des oben Gesagten kann ich nicht verstehen, wie das 
funktioniert? Es ist klar, dass wir den AmplitudeValue weiter auf 2550 
begrenzen, aber warum Werte auf Inco 16bit anwenden, die nicht größer 
als 8bit sein sollten, ist unklar.


Zweite Frage: Warum teilen wir amplitudeValue durch 10? Wenn dadurch 
Gleitkommawerte vermieden werden sollen, erhalten wir sie bei der 
Division durch zehn immer noch.

Ich wäre Ihnen SEHR dankbar, wenn Sie antworten. Danke schön.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Spimash schrieb:
> Der Inco-Wert kann viel kleiner als 0 und viel mehr als 255 sein.
> Aufgrund des oben Gesagten kann ich nicht verstehen, wie das
> funktioniert?

Die Werte werden bei den Extremen geklemmt auf 0 bzw. 255, zur 
Skalierung passend und auch zur Vermeidung von Race Conditions.

Die PID Routine ist aus einer anderen AVR AppNote (AVR221) und ist so 
mit 16 Bit übernommen worden.

Spimash schrieb:
> erhalten wir sie bei der
> Division durch zehn immer noch.

Werden aber wieder auf int gecastet.

von Spimash (spimash)


Lesenswert?

Vielen Dank für die schnelle Antwort!

Bei der externen Steuerung wird die SpeedController-Prozedur aufgerufen. 
Die für die Steuerung über das Display vorgegebenen Einschränkungen zur 
Inco-Änderung gelten daher bei diesem Verfahren nicht.
Wo beschränkt sich Inco? Schließlich:

OutputValue += PID_Controller(incrementSetpoint, 
((uint16_t)Inco),(pidData_t *) &pidParameters);

Inco = (uint16_t)outputValue;

In der ersten Zeile weisen wir Inco 16bit zu und in der zweiten 
ebenfalls.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Spimash schrieb:
> In der ersten Zeile weisen wir Inco 16bit zu und in der zweiten
> ebenfalls.

Und wenn du ein Stückchen weiter liest, kommt da die clamp Routine, die 
die Werte runterskaliert.
Übrigens kann es gut sein, das du da Probleme entdeckst. Die PID Sache 
ist nicht besonders gut getestet und es kann gut sein, das da was faul 
ist. Aber da kannst du jetzt ja selber Hand anlegen.

: Bearbeitet durch User
von Spimash (spimash)


Lesenswert?

Ja, ja, ich habe weitergelesen. Es gibt eine Einschränkung, aber nicht 
Inco, sondern Amplitude. Ich dachte, dass es vielleicht irgendwo eine 
direkte Einschränkung der Inco-Variablen oder eine umgekehrte 
Konvertierung auf 8 Bit gab.

Nochmals vielen Dank für die Antworten, es ist etwas klarer geworden. 
Muchas gracias, Amigo!

von Spimash (spimash)


Lesenswert?

Nochmals viele Grüße, Matthias!
Ich bin fast fertig mit dem Lesen des Codes, also bin ich bald hinter 
Ihnen.) Ich stecke bei der Skalierung fest. Ich verstehe nicht, was du 
meintest.
Hier ist diese Zeile:

#ifdef PURE_SINE_DRIVE
    tempU = 128 - ((uint16_t)(amplitude * tempU) >> 9);
    tempV = 128 - ((uint16_t)(amplitude * tempV) >> 9);
    tempW = 128 - ((uint16_t)(amplitude * tempW) >> 9);

Im Wesentlichen wird hier beschrieben, dass der Maximalwert nun nicht 
256, sondern 128 beträgt. Warum wird das gemacht? Warum kann ich es 
nicht bei 256 belassen?

Für den Hinweis wäre ich dankbar.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Spimash schrieb:
> Warum kann ich es
> nicht bei 256 belassen?

Weil die Sinuskurve symmetrisch zur virtuellen Nullinie sein soll. Das 
steht aber auch im Kommentar 2 Zeilen dadrüber:
/* Scale sine modulation values to the current amplitude.
 * Pure sine drive needs to be symmetrical to zero
 * Motor drive doesn't
 */

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.