Forum: Mikrocontroller und Digitale Elektronik ATxmega & BLDC


von erny (Gast)


Lesenswert?

Hallöle!

Ich hätte da mal ne frage an die Xmega-Profis ;)
Wieviele BLDC kann man mit einem Xmega (eurer Wahl) sensorlos steuern?
Ist das überhaupt möglich (Interrupttechnisch/Auslastungstechnisch) mehr 
als einen zu steuern?

Wäre über eine nette und aussagekräftige Antwort erfreut! ;)

Grüße,
Erny

von erny (Gast)


Lesenswert?

kleiner Nachtrag:

die ATxmegaxxA1 besitzen ja 24 PWM und 78 ext. Interrupt-Pins.
würde es nicht damit mögl. sein 4 zu steuern, da man ja für jeden BLDC 
4PWM und 3 Int's braucht?

Grüße,
Erny

von Alex S. (thor368)


Lesenswert?

Tach erny,

wie kommst du auf 4 PWM Kanäle? Meinst du wirklich BLDCs? Die sind 
normalerweise 3 Phasig.

Die minimal Lösung ist dann ein PWM Kanal(zur Stromreglung), drei 
interrupts, 6 IO pins und ein Haufen externe Logik.

Vollständig brauchst du 6 PWM Kanäle(drei Halbbrücken) und 4 ADC 
Kanäle(BEMF sensing und Stromreglung). Bei den xmegas scheiterts da an 
den PWM Kanälen. Mehr als einer ist nicht drin.

Wenn man ein paar Abstriche macht kann man mit den meisten xmegas 2 3 
Phasige BLDCs betreiben.

Thor

von erny (Gast)


Lesenswert?

Hi Thor,

Ich Meinte 4 Bldc's an einem ;) und 6PWM Kanäle. Da hab ich mich 
verschrieben ^^
Na nach meiner Rechnung sind das für 4BLDC 4x4 ADC =16 und 4x6 PWM = 24 
und die paar io Pins sind danns sicher auch kein prob oder ?
( für den A1)
http://www.atmel.com/Images/doc8067.pdf

Oder übersehe ich da was ?

Grüße
Erny

von Hui (Gast)


Lesenswert?

Wenn Du die Software dazu hinbekommst könnte das klappen ;-)

Könnte mir aber vorstellen, dass es zu Problemen kommt wenn man bei 
mehreren Motoren "gleichzeitig" kommutieren muss.
Dann treten mehrere Interrupts gleichzeitig auf und verzögern sich 
entsprechend.
Kenn mich aber mit dem XMEGA zuwenig aus um da was konkretes zu sagen zu 
können.

Ich würde da einfach vier kleine Controller nehmen das ist deutlich 
einfacher zu implementieren...

von Ern B. (ernybert) Benutzerseite


Lesenswert?

Jo so Denk ich mir das auch aber bei mit geht's eher um den Platzbedarf 
von 4 kleineren atmegas ;) Ich kann es ja auch einfach mal probieren und 
dann mal posten ob und wie :)

Joa und was ich noch mal gelesen habe ist das es sowas wie ne 
sinusansteuerung
( was die xmegas dank 12bit DAC können) von BLDCs gibt, weiß einer was 
es damit aufsich hat ?

Grüße,
Erny

von Hui (Gast)


Lesenswert?

Ern Bern schrieb:
> Joa und was ich noch mal gelesen habe ist das es sowas wie ne
> sinusansteuerung
> ( was die xmegas dank 12bit DAC können) von BLDCs gibt, weiß einer was
> es damit aufsich hat ?


Das wirst Du mit EINEM xmega für 4 Motoren ziemlich sicher nicht 
hinbekommen (jedenfalls nicht wenn Du schon fragen musst was das ist ;-) 
).
Je nach Anwendung lohnt sich der Aufwand auch gar nicht.
(Hier vermutlich Quadrocopter: Lohnt nicht!)

von Alex S. (thor368)


Lesenswert?

Sinuskommutierung hat nichts mit den DACs zu tun. Eher mit der BEMF 
Auswertung per ADCs.

Das Problem sind wie schon gesagt die PWM Kanäle. Du musst 24 PWM 
Signale GLEICHZEITIG erzeugen. Das du ohne Probleme 24 io pins als PWM 
Ausgänge umkonfigurieren kannst ist möglich. Du hasst aber maximal nur 6 
compare Einheiten (4 von T0 und 2 von T1), die auch nur 6 verschiedene 
PWM Signale erzeugen können. Das reicht nicht.

Thor

von Ern B. (ernybert) Benutzerseite


Lesenswert?

Alles klar langsam klickts :) danke an euch ;)

Grüße,
Erny

von woodym (Gast)


Lesenswert?

hallo,

im board hat Simon schon einmal einen bldc mit dem atxmega128a1 gemacht 
der 4 Motoren gesteuert hat.
Da er es für seinen Quadcopter verwendet hat und der Code noch nicht 
sauber ist (laut seiner Webseite), möchte er den Code noch nicht 
veröffentlichen. Davon abgesehen ist schon alleine die Platine recht 
beeindruckend.

bye woodym

von Alex (Gast)


Lesenswert?

Also wenn ich das Datenblatt richtig verstanden habe, haben die 0-Timer 
4 CC-Kanäle und die 1-Timer 2 CC-Kanäle - zusammen also 6 PWMs pro Port.
Müsste also locker für 4 x 3 Phasen reichen.
Die Frage ist aber, ob man die Phasenweiterschaltung und die Regelung 
schnell genug hinbekommt. Da die Dutycycle-Register der Timer nicht 
hintereinander liegen, kann man mit einer DMA nicht mal die 3 Kanäle 
eines BLDCs ansteuern.

von Simon K. (simon) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich habe mit einem ATxmega128A1 schon erfolgreich 4 BLDC Motore 
angesteuert :-)

von Alex S. (thor368)


Lesenswert?

Schaltung?

von Simon K. (simon) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier noch ein Schaltplanausschnitt dazu. Ich kann nur nicht mehr den 
geflickten Draht, der quer über den Prozessor geht zuordnen.

Alles da, genug PWM und 4 Komparatoren.

Achso, MOSFET Treiber waren IR2104 (IN/SD Eingänge) und MOSFETs 
IRLR7843.

Die PWM liegt also an Px0...Px2

von Alex S. (thor368)


Lesenswert?

OK, die INs der IR2104 kriegen ihr PWM. Aber auf Px0,1,2,3 liegen nur 
OC0A,B,C,D. Das bedeutet auf jedem 0. bit bzw. 1. bzw. 2. bzw. 3. kommt 
das selbe raus. Wie regelst du da die Motoren einzeln?

Thor

von Simon K. (simon) Benutzerseite


Lesenswert?

Alex S. schrieb:
> OK, die INs der IR2104 kriegen ihr PWM. Aber auf Px0,1,2,3 liegen nur
> OC0A,B,C,D. Das bedeutet auf jedem 0. bit bzw. 1. bzw. 2. bzw. 3. kommt
> das selbe raus. Wie regelst du da die Motoren einzeln?

Das habe ich jetzt nicht ganz parsen können.

An jedem Port hängen 2 Timer, mit je 4 oder 2 Output-Compare Outputs. 
Der Timer, der an Px0...Px3 liegt hat 4 OCs und auch 4 Compare Register 
um 4 unabhängige PWM einstellen zu können.
Davon brauche ich 3 um die PWM für einen BLDC Motor einstellen zu 
können. Der IR2104 erzeugt dann die Deadtime und steuert die MOSFETs an.

Und die Timer der einzelnen Ports sind natürlich unabhängig.

EDIT: Es ist aber auch schon ein paar Jahre her, als ich das Dingen 
gebaut habe. Ich kann mich also auch nicht mehr an ALLES erinnern ;-)

von Alex S. (thor368)


Lesenswert?

Mhh, dann sind die Datenblätter von Atmel sehr missverständlich. Wenn 
man sich die "Pinout and Pinfunctions" im Datenblatt ansieht taucht da 
auf den Ports immer nur

Px0 = OCR0A
Px1 = OCR0B
Px2 = OCR0C
Px3 = OCR0D

auf. Nach bisheriger Namenskonvention bedeutete das, dass sich die 
Compare Einheiten von Timer 0 auf jeden beliebeigen Port multiplexen 
lassen. Aber auch nicht mehr.

Was du sagst ergibt Sinn aber ich suche immer noch vergeblich im 
Datenblatt nach einem konkreten Hinweis. Wo zum Teufel steht das?

Thor

von Simon K. (simon) Benutzerseite


Lesenswert?

Alex S. schrieb:
> Mhh, dann sind die Datenblätter von Atmel sehr missverständlich. Wenn
> man sich die "Pinout and Pinfunctions" im Datenblatt ansieht taucht da
> auf den Ports immer nur

Zeig mal ein solches Datenblatt her. Da hatte ich eigentlich noch nie 
Missverständnisse mit.

von Basti M. (counterfeiter)


Lesenswert?

Seh da keine Probleme:

Px0 = OCR Timer 0 Register A

Es gibt auf -fast- jedem Port beim XMega (außer ADC und keine vollen 8 
Bit Ports) einen Timer 0 und Timer 1...

Man halt tatsächlich soviel PWM Pins wie auf der Hersteller-Seite 
angepriesen sind ;)


Grüße

Basti

von Alex S. (thor368)


Lesenswert?

Naja, bei den mega AVRs werden die timer halt mit timer 0, timer 1, 
timer 2, timer 3 bis timer x durchgezählt. Das es bei den xmega mehrere 
"timer 0" gibt wahr nicht so direkt ersichtlich.

Aber dann ist das ja jetzt geklährt.
Thor

von Alex S. (thor368)


Lesenswert?

Ah, und @Simon:
Das "ATxmega64A1/128A1/192A1/256A1/384A1 Preliminary" (und alle andere 
für den Prozessor verfügbare Doku) 
(http://www.atmel.com/Images/doc8067.pdf). Kapitel 29.2 Tabellen 29-3 
bis 29-6. Es immer nur die Rede von OCR0A,B,C,D. Das das verschiedene 
timer sind wird daraus nicht direkt ersichtlich.

Thor

von Simon K. (simon) Benutzerseite


Lesenswert?

Alex S. schrieb:
> Naja, bei den mega AVRs werden die timer halt mit timer 0, timer 1,
> timer 2, timer 3 bis timer x durchgezählt. Das es bei den xmega mehrere
> "timer 0" gibt wahr nicht so direkt ersichtlich.
>
> Aber dann ist das ja jetzt geklährt.
> Thor

Achso, ja das steht in der Spaltenüberschrift des Ports dran. TCC0, 
TCD0, usw.

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.