Gleichzeitiger Start aller ADCs (STM32H750) nicht synchron!

Gast #7846939

Mahlzeit...

Der H750 hat 3 ADCs und diese möchte ich zeitgleich über einen Timer triggern. Scheint auch (soweit) gut zu funktionieren.

Problem: Zwischen ADC1, 2 und 3 liegen etwa 8 µs Versatz. Von ADC1 und ADC3 sommit 16 µs Versatz. Starten also doch nicht gleichzeitig?

Ist das einfach so? Erwarte ich etwa zu viel von dem Chip? Oder hab ich doch was übersehen?

Angehängte Dateien:
Persönliche Seite

Moin,

Das funktioniert. Ich frage mich eher wie misst du deine 8us?

Deine Config sieht auch erstmal gut aus. Du musst bedenken dass der DMA auch etwas Zeit braucht. Auf dem internen Bus ist auch was los. Und die End of conversion Interrupts kommen auch nicht gleichzeitig sondern je nach Prio hinter einander weg. Wann er genau den Sample Kondensator anzieht ist schwer zu sagen.

gruß

Tec

Gast

Die Application note AN3116 beschreibt unter Punkt 2, dass man nur ADC1 und ADC2 in dual mode laufen lassen kann. ADC3 läuft immer unabhängig. Daher habe ich halt alle auf indipendet gestellt und gleichzeitig getriggert.

Für den Test gebe auf alle drei ADCs ein 10kHz Sinus. Schreibe die Daten mit DMA weg und plotte das ganze (siehe Anhang).

Mhhh... vielleicht liegts auch an DMA oder am Ram? Habs mit unterschiedlichen DMAs probiert, Ergebnis war identisch.

Im Netz hab ich nur gelesen, dass ein Delay bekannt sei (nicht offiziell). Allerdings keine Infos darüber, woher dieses Delay kommt.

Angehängte Dateien:

Vielleicht nur eine Idee. Verwendest du den selben DMA Controller für die drei ADCs? Vielleicht kann er nur eine Kopievorgang machen, dh. für die drei muss er es nacheinander machen.

Versuch Mal, für jede ADC einen individuellen DMA Controller zu verwenden.

Gast

Michael W. schrieb:

Was ist an obigem Bild eigentlich soo schwer zu verstehen...?

dann bitte mal die [code] funktion automatisch begrenzen oder mal ne zeilenzahl nennen, ab wann etwas zu lang ist. ich finde es nicht zu lang. so ist es ja wohl eine sehr schwammige Regel

Gerrit G. schrieb:

dann bitte mal die [code] funktion automatisch begrenzen oder mal ne zeilenzahl nennen, ab wann etwas zu lang ist. ich finde es nicht zu lang. so ist es ja wohl eine sehr schwammige Regel

Erstens und zweitens ist es nicht »code« sondern »c«

Und wenn das Ergebnis sowieso schon aussieht wie ausgekotzte Buchstabensuppe, dann wird's durch mehr Länge nicht besser.

Gerrit G. schrieb:

so ist es ja wohl eine sehr schwammige Regel

Das ist so oft besprochen worden dass du das mit deiner 10-jährigen Zugehörigkeit zum Forum eigentlich wissen solltest. Ich nehme an dass auch dein Bildschirm nicht so gross ist dass deine Source im Ganzen zu sehen ist. Ausserdem wird die Source ungünstig dargestellt. Muss man das alles erst in Worte fassen?

Unglaublich wie sinnlos hier durch gedankenloses Posting Resourcen verschwendet und heisse Luft (Leerzeilen) produziert wird.

Gast

Wastl schrieb:

Gerrit G. schrieb:

Daher habe ich halt alle auf indipendet gestellt

Nein! Sondern:

Du hast halt alle auf "independent" gestellt.

ok, es reicht... dieses forum verkommt so langsam.

spart euch jede weitere antwort. ich muss hier mittlerweile nämlich durch ziemlich viele nutzlose kommentare scrollen. da komm ich leider nicht mehr mit...

Persönliche Seite

Gerrit G. schrieb:

Die Application note AN3116 beschreibt unter Punkt 2, dass man nur ADC1 und ADC2 in dual mode laufen lassen kann. ADC3 läuft immer unabhängig. Daher habe ich halt alle auf indipendet gestellt und gleichzeitig getriggert.

Für den Test gebe auf alle drei ADCs ein 10kHz Sinus. Schreibe die Daten mit DMA weg und plotte das ganze (siehe Anhang).

Mhhh... vielleicht liegts auch an DMA oder am Ram? Habs mit unterschiedlichen DMAs probiert, Ergebnis war identisch.

Im Netz hab ich nur gelesen, dass ein Delay bekannt sei (nicht offiziell). Allerdings keine Infos darüber, woher dieses Delay kommt.

Benutze mal bitte die injected conversion ohne DMA und Plotte das. An deiner Methodik sehe ich jetzt keinen Fehler ich habe hier aber einen f730 der das problemlos kann ohne für mich messbaren Versatz und 8us sind für mich da ein riesiger Versatz alles über 1us würde bei meiner Anwendung sofort auffallen.

Gerrit G. schrieb:

Für den Test gebe auf alle drei ADCs ein 10kHz Sinus. Schreibe die Daten mit DMA weg und plotte das ganze (siehe Anhang).

Der (interpolierende) Plot nützt nicht so wirklich viel. Interessant ist die Lage der einzelnen Abtastpunkte. Ob die Daten verzögert ankommen, sollte doch bei vernünftiger Pufferung nicht die große Rolle spielen. Entscheidend ist, wann abgetastet wurde, d.h. liegen die Abtastpunkte der drei Kanäle im steilen Teil des Signals auf gleicher Höhe oder sind sie gestaffelt.

Bevor diese Frage nicht beantwortet ist, lohnt es nicht, im Code rumzustochern.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über ein Jahr alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.