ATSAME70 mit PWM (Vollbrücke kommutieren)

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Finger »

Moin Jungs,

ich verzweifele hier gerade, hat jemand mit dem Ding (ARM7) Erfahrung? Ich brauche einen einstellbaren Phasenversatz zwischen zwei PWM-Kanälen und sehe nicht, wie das mit dem Ding möglich sein könnte. Konkret muß ich zwei Halbbrücken ansteuern mit 50% Dutycycle und zwischen den Halbbrücken die Signale schieben zur Kommutierung. Der Microchip-Support hat sich eher unwillig gezeigt, Beispiele dazu gibts es offenbar nicht und das Datenblatt gibt auch nicht so recht was her: https://ww1.microchip.com/downloads/en/ ... 01527E.pdf
Ich blick das nicht, irgendwelche Ideen?

Finger
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Fritzler »

E70 is aber Cortex-M7 und nich ARM7?
Himmelweiter Unterschied! *klugscheiss*
Betrifft aber nicht die Peripherie, die macht ja das PWM.

Erstmal gehören die DB Entwickler dafür geschlagen, dass das pdf sagt, dass sämtliche Kapitel in der Lesezeichenleiste ausgeklappt sein sollen.
Bei 60 Kapiteln f**kt euch...

Aber ne Rückfrage gäbs noch:
Nimmste das PWM Modul oder den TC für PWM?
Was genau haste denn schon gemacht und was zickt rum?
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Finger »

Im Moment fummel ich mit den PWM-Einheiten herum, aber ich hab so das dumpfige Gefühl, TC dafür nutzen zu müssen. Ich hab mal die Supportanfrage in den Anhang gestopft:
Anfrage Support PWM.pdf
(345.83 KiB) 57-mal heruntergeladen
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Fritzler »

MplabX?
Ich hoffe du hast viel Valium im Kaffee.

Der Witz is ja, dass im DB eine 3 Phasen FET Brücke abgebildet ist.
Allerdings in einem Anwendungsfall wie per TC die Verzögerung der Treiberstufe gemessen wird.

Beim durchscrollen gestern hab ich aber auch kein Phasenverschiebungsregister gesehen.
Also 2 Kanäle im SYNC Mode betreiben fällt wohl flach.
Das CNT Register ist dann auch nichtmal schreibbar, also man kann auch um unsync Mode nicht 2 verschiedene Werte eintragen und dann an selben CLK hängen.

Ein "Advanced Timer" eines STM32 (zB H750) kann das übrigens.
Der hat 6 Kanäle und 2 Compare Register sind vernetzbar.
CCR0 schaltet CH0 ein und CCR1 schaltetet CH0 aus

PS:
"driving two halfbrides"? :lol:
nero
Beiträge: 698
Registriert: Mo 12. Aug 2013, 11:58
Wohnort: Oberbayern

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von nero »

Also zur Beruhigung: ich sehs auch grad nicht wie das mit den PWM blöcken geradeaus gehen sollte.
Mit den TC gehts aber problemlos, da gibts 3 Vergleichsregister.

Auf die Atmel / Microchip Antwort bin ich ja gespannt. Die kommen gefühlt immer mal wieder von Praktikanten, aber funktionieren wenigstens.

Ansonsten, damit hier kein schlechtes Licht auf die MCUs fällt:
Es gibt keine ARM Microcontroller mit so sauber aufgebauter Peripherie wie die ATSAM.
Wenn man aml zB die TC in Betrieb hat, dann ist es kaum was anderes einen ADC zu starten oder RAM anzusteuern.
Alles konsequent 32bIt.
Das ist bei diesen Funktionsmonstern echt viel wert.
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Finger »

Wo wir gerade davon sprechen: wofür ist der Graycounter? Taucht im PWM-Kapitel immer mal wieder auf....
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Fritzler »

Der TC wirds wohl auch nicht können, der hat nur 3 Compare Register und du brauchst 4 für 2 Signale mit Phase X und immer 50% DC.
In den Beispielbildern is immer nur zu sehen, dass dann einer der beiden PWM Ausgänge kürzer an is als der Andere, aber nicht verschoben.
Zudem kannste dann auch die Periode nurnoch 2^n Einstellen, weil RC als Stopregister nicht mehr herhalten kann.
atsam_shift.PNG
2 TC kanäle nehmen mit einem verstezten Counter geht auch hier wieder nicht, das Counterregister is nur lesbar.
nero hat geschrieben: Mi 16. Jun 2021, 10:01 Es gibt keine ARM Microcontroller mit so sauber aufgebauter Peripherie wie die ATSAM.
So könn sich geschmäcker teuschen.
Ich hasse die Atmel ARM Periph :twisted:
Die verkaufens als Vorteil, dass auc neuere SoCs die alte Periph haben mit man nich viel umschreiben muss.
Hat den großen nachteil, dass diese ganze unfunktionale alte Grütze mitgezogen wird.
Vor allem die "Doku" zB zum XDMA, wo geschrieben wird, dass es prios gibt.
Es steht aber dann nicht weiter im Text welcher kanal welche prio hat... :roll:
Beim SDIO sind Ablaufdiagramme direkt falsch und/oder widersprechen dem Lauftext wie mans bedienen soll.
Deren SD "Treiber" hat direkt nen Bug womit ne SD Karte nur mitm halben Takt läuft.

Aber ja, die 16bittigkeit der STM HW nervt etwas, aber sie ist sowas von mächtig.

Hier der STM32 Timer, das geht direkt laut DB:
stm_pwm.PNG
Aber die HW is sicher schon fertig und ein SoC Tausch nicht möglich?
Finger hat geschrieben: Mi 16. Jun 2021, 10:06 Wo wir gerade davon sprechen: wofür ist der Graycounter? Taucht im PWM-Kapitel immer mal wieder auf....
Fürn Schrittmotortreiber.
nero
Beiträge: 698
Registriert: Mo 12. Aug 2013, 11:58
Wohnort: Oberbayern

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von nero »

Sync haben die Timer; Dann bischen mit den WAVSEL spielen Ohne das jetzt konkret gemacht zu haben, denke ich schon das es ~irgendwie~ gehen sollte
ich seh grad noch in 50.7.14:
Sollte doch geheh einen PWM und einen TC zu nutzen.
Damit sollts gehen


Und bei 300Mhz FCPU kann man das was der Timer nicht kann dann ja in Software nachbilden :-p



Wenn die PWM Frequenz nicht zu genau sein muss, dann am einfachsten 2 Timer in Sync mit Ra1 = 0, Rc1 = 0xFF und Ra2 = 0 + phi, Rc2 = 0xFF + phi. WAVSEL = 0b00



Den Geschmack muss es ja nicht treffen. Aber sauber ists eben. Dafür aber auch weniger Funktionen.
Vor allem die "Doku"
...
direkt falsch und/oder widersprechen
...
"Treiber" hat direkt nen Bug
Dazu einfach Ja
Schau dir die Codebeispiele besser garnicht an.

Hier verwende ich auch nur noch STM23 als MCU (und paar Atmega328 in QFN für ganz Mini Aufgaben)
Zuletzt geändert von nero am Mi 16. Jun 2021, 11:51, insgesamt 2-mal geändert.
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Fritzler »

Moment, das könnt doch per TC gehen.
Nimmste 2 TC und jeder TC hat den gleichen Zählerwert (die könn ja gleichzeitig starten).
RC ist Top und dann wird pro TC RA/RB verschoben.

Nee, geht auch wieder nicht nur die Paare RA/RB und RA/RC können flankieren.
Was für eine deppert schlechte Periph ist das denn bitte?!
Kannste RC doch nicht als counterreset nutzen, sondern nur top (0xFFFFU).

Also RA/RC als PWM DC und Phase sowie timertop als reset des timers.
WAVSEL = 00

CPU Takt is egal, wenns zu sehr jittert explodiert dir vllt was hinten drann.
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Finger »

So, mit zwei TC-Einheiten funktioniert das, aber habt ihr ne Idee, wie ich da (ohne externe Hardware) Totzeiten implementieren könnte? Ich sehe gerade den Wald vor lauter Bäumen nicht.
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Fritzler »

Dafür musste 4 TC nehmen und alles per Hand machen.
Beim nächsten mal STM32 verbauen :twisted:

Es gibt ja 4 TC zu 3 Subblöcken.
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Finger »

Nope, ich hab da nur 3. Da gibt es eine Verknüpfung zur PWM-Einheit, aber die blicke ich nicht....
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Fritzler »

Ne, Atmel hat da ne völlig bekloppte Philosopie was Timer angeht.
3 Sone Timer sind zu einem TC zusammengefasst und 4 der TC gibts.

Normalerweise ist ein Timer das was ein Zählregister hat mit eventuellem Compare Registern.

Vom TC geht laut DB nur ein FAULT Signal zu den PWM, sonst nix?
(Kap. 50.6.18)
nero
Beiträge: 698
Registriert: Mo 12. Aug 2013, 11:58
Wohnort: Oberbayern

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von nero »

Doch 2 PWM Channel nehmen und die Phase über verzögerten Start per Timer vorgeben?
Also etwa:
Phasenupdate: PWM1 overflow IRQ abwarten, dort TC starten (die Laufzeit gibt die Phase vor), im Timer_IRQ dann PWM2 Startsignal setzen (so viel ich überflogen habe genügt es CHIDx im PWM_ENA Register zu setzen. (das könnte also ein winziger Fast interrupt sein)

Irgendwie schon Murks, aber wenn die Phasenauflösung erreicht wird, warum nicht.
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Finger »

Hmmm, ich hatte vergesen das ich hier einen SAME70Q21 habe, der hat nur drei TC-Einheiten. Gestolpert bin ich über Seite 1500 vom Datenblatt "Syncronization with PWM", deren Inhalt ich aber noch nicht geblickt habe.
Was wird da womit verhäkelt? Kann mich da jemand auf den richtigen Weg schubsen?

Was eine Lösung per ISR angeht, das würde ich in dem sehr kritischen Bereich gerne vermeiden (wenn möglich), ganz einfach weil da hinten ein Haufen Leistungselektronik mit 60kW dranhängt, da darf nix schiefgehen. Die SIC-Treiber werden zwar das schlimmste verhindern, aber im Grenzbereich muss das trotzdem stabil laufen.
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Fritzler »

Finger hat geschrieben: Fr 18. Jun 2021, 10:23 SAME70Q21 habe, der hat nur drei TC-Einheiten
Sicher?
Laut DB hat der 12 TC Channel.
Also 4 TC Blöcke zu den 3 Subblöcken.
Ja diese behinderte Zählweise der atsam nervt total.
Das hat mir viel Kopfzerbrechen bereitet bei der Entwicklung eines C++ Timerinterfaces für ein paar SoC Linien.

Du bräuchtest also 2 Hauptblöcke zu 2 Subblöcken für dein Vorhaben.
1 Hauptblock macht eine PWM Phase und die Subblöcke jeweils eine Polarität mit Deadtime.
Aber auch hier kann es zu ungewollten Phasenverschiebungen kommen, weil dann 2 Hauptblöcke gestartt werden müsen statt 4 syncbare Subbblöcke.

Es ändert sich also nicht viel daran, dass dieser SoC völlig unbrauchbar für die Aufgabe ist.

"Syncronization with PWM" finde ich im DB nicht mit der Textsuche.
Kapitelnummer?
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Finger »

Kapitel 50.6.14 ist das, Seite 1500... im Datenblatt "SAM E70/S70/V70/V71 Family".

Ich kam auf drei TC-Einheiten, weil Harmony mir nur drei zur Konfiguration anbietet....

*FUCK* *FUCK* *FUCK*

Du hast ja so recht, es sind 4. *Augenroll* JETZT wirds interessant....
1 Hauptblock macht eine PWM Phase und die Subblöcke jeweils eine Polarität mit Deadtime.
Da muss ich eben kurz drüber nachgrübeln :D
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Fritzler »

Was nutzt du auch den properitären Zusammenklickscheiss.
Das hatte noch nie funktioniert.
Das ist genauso gut wie CubeMX, also zu nix zu gebrauchen :twisted:

Es gibt den CMSIS mit allen Reg/Bit defs und schon gehts los :mrgreen:

Der PWM Ausgang kann chipintern geroutet werden und dann die TC Kanäle triggern.
Also der Timer kann das als Capture Input nutzen.
Damit haste aber immer noch keine Totzeiten.
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Finger »

Was nutzt du auch den properitären Zusammenklickscheiss.
:mrgreen: Ich frag dich in dreißig Jahren nochmal, ob du immer noch Lust hast auf der untersten Ebene rumzustochern :mrgreen:
Ne im Ernst, ich find das gut....
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Fritzler »

Na ganz im Gegenteil.
Ich würde mich ja tierisch freuen, wenn mir mal jemand Arbeit abnehmen würde.
Aber diese Tools sind ALLE so verbuggt und unausgereift sowie softwaretechnisch diletantisch, dass der Blutdruck unten bleibt wenn man sselber macht.
Von const correctness redne wir mal lieber garnicht erst...
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Finger »

So wie ich das sehe kann ich mir aussuchen:

Phasenverschiebung XOR Totzeiten

Soll heiße, ich sehe da keine Möglichkeit, weil ich hier ZWEI Compare-Register bräuchte, aber nur eines habe. Und Clock für die Timer verzögert zu starten ist alles andere als deterministisch *Gotteslästerlichfluch*
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von Fritzler »

Ich bau grade aus spaß das Ganze mal mitm STM32 Timer.
(nicht jeder STM32 hat einen 6 Kanal Advanced Timer mit async PWM, F4 hats nicht, aber L4 und H7 schon, weitere vllt auch).

Wie soll man eigentlich 100% DC PWM mit Phasenversatz machen? :lol:
nero
Beiträge: 698
Registriert: Mo 12. Aug 2013, 11:58
Wohnort: Oberbayern

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von nero »

Lösungen
etwa in der reihenfolge der gutigkeit
a) passende MCU wählen
b) Auf Totzeit pfeifen, das muss die Hardware machen. Inkl verhindern dass überhaupt zwei transistoren im Zweig an sein können.
c) Soft PWM. :-D


50% PWM is ja nachm gleichrichten wieder 100%
Benutzeravatar
sukram
Beiträge: 3063
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von sukram »

Die hässlichste Variante: 3x Attiny85 als PWM Generator, deren Ausgänge dann jeweils mit AND Gattern auf die Brücke schalten. Der zweite Eingang zum AND kommt aus deinem Prozessor und schaltet die PWM mit Phasen/Totzeit entsprechend zu.
tswaehn
Beiträge: 1
Registriert: So 16. Sep 2018, 20:38

Re: ATSAME70 mit PWM (Vollbrücke kommutieren)

Beitrag von tswaehn »

https://ww1.microchip.com/downloads/en/ ... 02757A.pdf

Abschnitt 6

So und so ähnlich machen das viele Controller. Vielleicht passt das für die Anwendung.

Es geht vermutlich darum, dass high-side und low-side driver der h-Bridge nicht gleichzeitig aktiv sind. Was eben viele Controller bereits können. Meist gibt man nur die Schaltzeit oder ein schaltzeit-Äquivalent an.
Antworten