Forum: Mikrocontroller und Digitale Elektronik STM32G4xx: Impulsformung


von Randy B. (rbrecker)


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?

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Randy B. schrieb:

> Jetzt soll aber keine sturer Rechteckimpuls entstehen, sondern fallende
> und steigende Flanke sollen speziell geformt werden.

Was soll denn das für eine "spezielle" Form sein? Und wozu soll die 
dienen?

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


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.

: Bearbeitet durch User
von Randy B. (rbrecker)


Lesenswert?

Ob S. schrieb:
> Randy B. schrieb:
>
>> Jetzt soll aber keine sturer Rechteckimpuls entstehen, sondern fallende
>> und steigende Flanke sollen speziell geformt werden.
>
> Was soll denn das für eine "spezielle" Form sein? Und wozu soll die
> dienen?

Ist alles hier beschrieben:

Beitrag "40MHz RC-Testsender als 2-FSK"

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Randy B. schrieb:

> Ist alles hier beschrieben:
>
> Beitrag "40MHz RC-Testsender als 2-FSK"

OK, das Ziel ist mir jetzt klar.

Bleibt die Frage: Was soll der Timer dabei? Du kannst doch das komplette 
Signal per DMA-gefüttertem DAC erzeugen.

von Hans-Georg L. (h-g-l)


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.

von Randy B. (rbrecker)


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.

von Randy B. (rbrecker)


Lesenswert?

Ob S. schrieb:
> Bleibt die Frage: Was soll der Timer dabei? Du kannst doch das komplette
> Signal per DMA-gefüttertem DAC erzeugen.

Sample-Rate

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Randy B. schrieb:
> Ob S. schrieb:
>> Bleibt die Frage: Was soll der Timer dabei? Du kannst doch das komplette
>> Signal per DMA-gefüttertem DAC erzeugen.
>
> Sample-Rate

Was soll damit sein? Wenn dein Einwurf "RAM" gelautet hätte, hätte ich 
eventuell Verständnis aufgebracht.

von Hans-Georg L. (h-g-l)


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.

von Randy B. (rbrecker)


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.

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.