STM32L152 Regelung mit ADC, DAC und DMA

Gast #4077871
Lesenswert?
• ▲
▼
Hallo zusammen,

ich brauche mal ein bisschen Hilfe für den richtigen Weg.

Ich möchte gern mit dem ADC einen Istwert einlesen und die errechnete 
Stellgröße mit dem DAC ausgeben.

Im Interrupt klappt das auch schon Wunderbar. Der Controller hat nur 
leider kaum für anderes mehr Zeit, da die Regelung mit 1µs getaktet 
wird.

Jetzt möchte ich das ganze einmal mit DMA probieren, also der ADC 
schreibt mithilfe von DMA in den Speicher und der DAC setzt das ganze 
Analog aus dem Speicher um. Ist das überhaupt der richtige Weg?

Ich habe schon angefangen dieses zu programmieren. Einlesen vom ADC in 
den Speicher mit DMA funktioniert schonmal. Das Ausgeben mit dem DAC 
auch, hier benutze ich einen Timer als Trigger(geht das auch anders?). 
Ich habe nur keine Ahnung wo ich die Berechnung der Stellgröße 
durchführen kann?

vielen Dank
Gast #4077883
Lesenswert?
• ▲
▼
Mit DMA werden die Daten nur von einer Speicherstelle zu einer anderen 
transportiert. Eine Berechnung muss durch die CPU erfolgen.

Wie schnell muss dein Regler sein? Was willst du damit regeln?
Gast #4078010
Lesenswert?
• ▲
▼
Hallo,

eine Spannung soll geregelt werden und diese halt im 1µs Takt. Es sollen 
verschiedene Kurvenverläufe dargestellt werden, als Stellglied benutze 
ich einfach den DAC und einen Spannungsfolger. Also der Regelkreis ist 
relativ Simpel. Nur mit der Umsetzung auf den µC bin ich noch nicht 
zufrieden. Vielleicht ist das auch der Falsche Ansatz mit DMA. Ich 
wollte, bis auf die Berechnung die CPU völlig raushalten, aber umso mehr 
ich darüber nachdenke ist die Rechnung notwendig und im Interrupt auch 
der größte Teil der Arbeitszeit, oder?
#4078027
Lesenswert?
• ▲
▼
@ Michael (Gast)

>eine Spannung soll geregelt werden und diese halt im 1µs Takt.

Kann es sein, dass du eher 1ms meinst? 1µs (MIKROSEKUNDE) ist auch für 
einen schnellen ARM ziemlich wenig!

> Es sollen
>verschiedene Kurvenverläufe dargestellt werden, als Stellglied benutze
>ich einfach den DAC und einen Spannungsfolger. Also der Regelkreis ist
>relativ Simpel.

Da braucht man aber sicher NICHT 1µs Takt.

> Nur mit der Umsetzung auf den µC bin ich noch nicht
>zufrieden. Vielleicht ist das auch der Falsche Ansatz mit DMA. Ich
>wollte, bis auf die Berechnung die CPU völlig raushalten,

Da nützt dir DMA aber kaum was, weil pro Regeldurchlauf einmal der ADC 
gelesen, der Ausgangswert mittles CPU berechnet und einmal die neue 
Stellgröße per DAC ausgegeben wird.

> aber umso mehr
>ich darüber nachdenke ist die Rechnung notwendig und im Interrupt auch
>der größte Teil der Arbeitszeit, oder?

Sieht so aus.
Gast #4078107
Lesenswert?
• ▲
▼
Hallo,

1µs ist schon richtig. Ich weiß, dass das wenig ist. Das Signal welches 
ich mir erzeugen  will ist aber nur 100µs lang und damit habe ich schon 
nur 100 Stützstellen. Ich muss auch nicht viel rechnen ein P-Regler 
reicht aus, da die Regelstrecke schon einen Integrierenden Anteil hat. 
Ich suche nur nach der besten Möglichkeit, das ganze umzusetzen. Wie 
gesagt im Interrupt läuft das ganze schon, aber ich habe keine Zeit mehr 
für anderes. Der Controller läuft mit 16Mhz.
Gast #4078114
Lesenswert?
• ▲
▼
Michael schrieb:
> 1µs ist schon richtig. Ich weiß, dass das wenig ist.
[...]
> Der Controller läuft mit 16Mhz.

Wie soll das gehen. Der Controller macht in 1µs im besten Fall 16 
Befehle. Interrupt-Latenz mit Rücksprung ist sicher größer.

Selbst in einer Endlosschleife wirds schwierig, da was sinnvolles zu 
machen.
Gast #4078225
Lesenswert?
• ▲
▼
Michael schrieb:
> Entschuldigung, war nicht böse gemeint.
>
> Ich wollte nur sagen, ob mit DMA oder Interrupt, zeitlich bringt mir das
> nicht viel.

Doch, wenn man Daten ohne CPU von A nach B kopieren will.

Wie sieht deine Regelstrecke denn aus? Wenn da schon ein I Anteil ist, 
wirds so ganz schnell ja nicht sein.
Gast #4078252
Lesenswert?
• ▲
▼
Mit einer Endlosschleife in Assembler könntest du es vielleicht 
schaffen, auf die 16 Takte zu kommen, wenn das tatsächlich nur eine 
Multiplikation ist.

Wenn den Controller einfach mal auf 32 MHz laufen lassen würdest, 
hättest du schon doppelt so viel Zeit. Die STM32 gehen bis 180 MHz hoch, 
und du hast dir den langsamsten ausgesucht...
Gast #4078621
Lesenswert?
• ▲
▼
Also es geht um einen Piezoaktuator, welcher ja nichts anderes als ein 
Kondensator ist. Die Kapazität liegt bei ca. 1nF. Wird der Piezo geladen 
so dehnt er sich aus und umgekehrt(Piezoelektrischer Effekt). Die 
Spannung beträgt hierbei 0-40V. Der Weg liegt hierbei auch im µm 
Bereich. Diesen möchte ich Regeln, was ja auch schon funktioniert. Der 
Sollwert sind Kurven die um die 100µs lang sind. Es geht darum 
speziellen Ultraschall zu erzeugen.
Gast #4078689
Lesenswert?
• ▲
▼
Und wo ist da eine Regelschleife? Das hört sich mehr nach einer 
Steuerung an. Deine Kurven können zeitversetzt gelesen und ausgegeben 
werden. Dann macht DMA wieder Sinn. Daten per DMA speichern, die Werte 
im Block verarbeiten und dann wieder per DMA ausgeben.
#4078749
Lesenswert?
• ▲
▼
@ Michael (Gast)

>Bereich. Diesen möchte ich Regeln, was ja auch schon funktioniert.

Kaum, denn sonst würdest du ja nicht schreiben, dass es in 1us nicht 
geht.

> Der
>Sollwert sind Kurven die um die 100µs lang sind. Es geht darum
>speziellen Ultraschall zu erzeugen.

Das ist noch lange keine REGELUNG! Wenn man nur einen Spannungsverlauf 
ausgeben will, macht man das sehr einfach mit DMA und einem Timer. Die 
CPU hat da gar nichts zu tun. Das ist dann aber keine Regelung, sondern 
reiner Stellbetrieb.
Gast #4078795
Lesenswert?
• ▲
▼
Hallo,

die Spannung wird natürlich am Piezo gemessen, welche die Istgröße ist. 
Eine Steuerung reicht hier nicht aus. Die Steuerbarkeit ist leider nicht 
gegeben,
es gibt nämlich Störgrößen im System.

Ich habe geschrieben, das es funktioniert, ich aber für andere Dinge 
keine Zeit mehr habe. Deshalb wollte ich die CPU möglichst raushalten.
Gast #4078822
Lesenswert?
• ▲
▼
Ich verstehe jetzt die beiden Punkte
1. Eine vorgegebene Kurve per DAC ausgeben
2. Die ausgegebene Spannung per P Regler verstärken

Das erste kann gut der uC per DMA machen und
Das zweite per OP, wie schon einer geschrieben hat

Der uC hat dann noch sehr viel Platz für andere Spielereien.
Gast #4078826
Lesenswert?
• ▲
▼
3. Er soll aber offensichtlich auch eine Abweichung ausregeln können.
(Ich habe keine Ahnung wie sich die Ausdehnung des Aktors auf die 
angelegte Spannung auswirkt, um die Längendifferenz messen zu können)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.