STM32G4xx: Impulsformung

OP #7619572
Lesenswert?

Hallo zusammen,

eine Timer (TIM3) produziert eine Impulsfolge: CCRx und ARR werden per DMA verändert. Funktioniert soweit wie gedacht.

Jetzt soll aber keine sturer Rechteckimpuls entstehen, sondern fallende und steigende Flanke sollen speziell geformt werden. Die Impulse sind minimal 500µs breit mit minimal 500µs Pause, und maximal beides 10ms.

Als quick-n-dirty habe ich jetzt einfach mal CC und Update-Interrupt des Timers genommen und in der ISR mit dem DAC1 die Impulsformung gemacht. Die Flankenform liegt dabei als Array (128-512 Elemente) vor. Das ganze ohne DMA. Ist natürlich Mist.

Jetzt brauche ich mal einen Tipp, wie das am besten löse.

Meine Idee: der Timer (TIM3) für die Impulsfolge liefert die beiden Trigger CC und Update für je einen anderen Timer. Diese anderen Timer laufen dann los mit der passenden Frequenz für die Impulsformung via DAC. Und die liefern die Trigger für den DMA-Channel für den DAC.

Geht das so? Die konkrete Frage: wie begrenze ich die "Laufzeit" der Timer für die Impulsformung?

(Firma: Jasinski) #7619951
Lesenswert?

Viel interessanter wäre die Frage bzw. Schilderung, was genau Du damit bezwecken möchtest, um sich dann eventuell überlegen zu können, ob man das alles irgendwie anders, einfacher und vor allem sicherer – womöglich mit einer passenden, anderen Hardware – lösen kann. Dass Du zu solchen merkwürdigen oder abstrusen Kunststücken mit den Timern eines STM32 greifen musst, ist nicht wirklich gut, denn bei den STM32 kann man nicht alles auf den Takt genau per Software oder auch per DMA angetriebener Hardware lösen – im Inneren eines STM32 ist einfach zu viel Peripherie drin, die miteinander mit Busmatrizen vernetzt und verzahnt ist und auch schon mal hier und dort Wartezyklen eingelegt werden, damit das alles quasi parallel und kollisionsfrei nach Wunschtakten ablaufen kann. Jitter ist bei so merkwürdig generierten Signalen eigentlich vorprogrammiert, es kann auch in dem Signalverlauf ab und zu mal zu zusätzlichen Flanken oder generell kurzzeitigem Falschlauf kommen. Auch ein Timer-Update braucht ein paar Clocks – das alles so miteinander zu koordinieren erachte ich als schwierig und damit womöglich nicht als zielführend und wirklich stabil am Ende der Geschichte, sofern Du sie überhaupt jemals schaffen würdest. Jitter wird auch bei Signalen, die man mit Interrupts generieren bzw. formen möchte, auftauchen – ab und zu ist das Signal dann z.B. ein oder gleich mehrere Clocks länger oder kürzer, manche Leute versuchen es aber trotzdem und wundern sich dann auch noch auf sonderbare Art und Weise, dass auf dem Oszilloskop ab und zu etwas auftaucht, was da nicht hingehört, oder dass das Signal eben – zwar selten, aber manchmal doch – ein wenig zittert.

#7620241
Lesenswert?

Randy B. schrieb:

Jetzt soll aber keine sturer Rechteckimpuls entstehen, sondern fallende und steigende Flanke sollen speziell geformt werden. Die Impulse sind minimal 500µs breit mit minimal 500µs Pause, und maximal beides 10ms.

Die Flankenform liegt dabei als Array (128-512 Elemente) vor.

Anstieg = 128 Takte ? Abstieg = 512 Takte ? dazwischen halten ?

Der STM32G4xx hat DAMA-MUX mit Request Generator, Trigger und Synchronisation. Damit sollte es gehen. Mal mal deinen Kurvenverlauf damit es klar wird was du willst.

OP #7620255
Lesenswert?

Hans-Georg L. schrieb:

Randy B. schrieb:

Jetzt soll aber keine sturer Rechteckimpuls entstehen, sondern fallende und steigende Flanke sollen speziell geformt werden. Die Impulse sind minimal 500µs breit mit minimal 500µs Pause, und maximal beides 10ms.

Die Flankenform liegt dabei als Array (128-512 Elemente) vor.

Anstieg = 128 Takte ? Abstieg = 512 Takte ?

Beides gleich, einstellbar.

dazwischen halten ?

klar, macht der DAC ja.

Der STM32G4xx hat DAMA-MUX mit Request Generator, Trigger und Synchronisation. Damit sollte es gehen.

Ja, ich denke, ich habe auch schon eine Lösung. Ist nur schade, das der DMAMUX nicht direkt einen anderen Timer-Event als Syncho nehmen kann, nur EXTI und LPTIM und andere DMA-Channelss (aber damit müsste es gehen).

Mal mal deinen Kurvenverlauf damit es klar wird was du willst.

Spielt eigentlich keine Rolle, einfach die Array-Elemente.

Steht aber im verlinkten Beitrag.

#7620294
Lesenswert?

Randy B. schrieb:

Hans-Georg L. schrieb:

Randy B. schrieb:

Der STM32G4xx hat DAMA-MUX mit Request Generator, Trigger und Synchronisation. Damit sollte es gehen.

Ja, ich denke, ich habe auch schon eine Lösung. Ist nur schade, das der DMAMUX nicht direkt einen anderen Timer-Event als Syncho nehmen kann, nur EXTI und LPTIM und andere DMA-Channelss (aber damit müsste es gehen).

Du kannst doch die Channel Ausgänge der Timer als Event konfigurieren. Beim H7, den ich kenne geht das.

Mal mal deinen Kurvenverlauf damit es klar wird was du willst.

Spielt eigentlich keine Rolle, einfach die Array-Elemente.

Steht aber im verlinkten Beitrag.

Der kam während ich schrieb. Hätte aber besser direkt in den Eröffnungspost gepasst.

OP #7620333
Lesenswert?

Hans-Georg L. schrieb:

u kannst doch die Channel Ausgänge der Timer als Event konfigurieren. Beim H7, den ich kenne geht das.

Vllt verstehe ich das DB falsch (getestet habe ich es noch nicht): der Request-Generator hat beim G4xx als Synchro nur eine begrenzte Auswahl an Events. Ich brauche ja einmal den Sample-Rate-Timer für den DMA-Transfer und einmal den Synchro-Trigger (CC oder Update) des Impulstimers als Synchro.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren