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
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
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
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
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...
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
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!)
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
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
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.
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
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
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 ;-)
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
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.
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
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
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
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.