Forum: Digitale Signalverarbeitung / DSP / Machine Learning GPIO Ansteuerung ohne CPU


von Kai Z. (liquidsteel)


Lesenswert?

Hallo,

ich bin so ziemlich neu in der DSP Materie und hab ein kleines Problem. 
Und zwar will ich Impulse via GPIO ausgeben. Das bekomme ich noch hin :) 
Die Impulse sollen mm Impulse sein. Also 1 Impuls = 1 mm. Die Impulse 
gehen halt dann zu einem Zähler der sozusagen die Länge besimmt. Der 
Minimale Abstand zweier Impulse ist durch die vorliegende Applikation 
auf 20us beschrenkt. In meinem Code benutze ich jedoch Funktionen die 
weitaus länger dauern. Ich wollte es eigentlich per Abfrage eines 
Timer-Registers machen und bei erreichen des Counters nen Impuls per 
GPIO ausgeben, jedoch kann ich ja nicht alle 20us Abfragen, da die 
Software auf der DSP für einen loop ca. 300us braucht und ich außerdem 
Funktionen aus ner Library benutze die schon länger brauchen wie die 
Ausgabe zweier Impulse.

Gibt es da vlt. irgendwelche Tricks, oder hat jemand ein 
Lösungsvorschlag?

Gruß
Kai

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Kommt auf den Prozessor an.
Beim TMS320 gibt es dafür das eCap Modul. Andere Prozessoren haben oft 
ähnliche Capturefunktionen. Ansonsten einfach per GPIO-Interrupt und 
Timerabfrage.

20µs ist ja nicht schnell, das geht problemlos per Interrupt.

Grüße,

Peter

von Paulchen Panther (Gast)


Lesenswert?

PWM?

von Kai Z. (liquidsteel)


Lesenswert?

Peter Diener schrieb:
> Beim TMS320 gibt es dafür das eCap Modul.

Ja ich benutze einen TMS320C674x DSP. Hab erlichgesagt übersehen, dass 
man das eCAP Modul auch als Ausgang nutzen kann. Also das man den eCAP 
als PWM nutzen kann, das meinst du, richtig?

Peter Diener schrieb:
> Ansonsten einfach per GPIO-Interrupt und
> Timerabfrage.

Kann ein Timer Interrups bzw. allgemeiner Interrupt eine 
Interuptfunktion auslösen mittem im Laufendem Programm? Also wenn die 
CPU gerade was anderes Berechnet und dann ein Interrupt kommt und eine 
andere Berechnung auslöst und dann automatisch zur vorherigen 
zurückkehrt? Weil meines Verständnisses nach kann ich ja nicht ständig 
irgendein Interrupt register abfragen ob ein Interrupt auftrat.

Paulchen Panther schrieb:
> PWM?

Die 'nomrallen' PWM Module in der DSP haben leider nur einen 16bit 
Counter, damit kann ich nicht meinen Ausgabe-Puls-Frequenzbereich 
abdecken.

Das eCAP hat glücklicherweise einen 32 bit counter, das sollte reichen. 
Werde es erstmal damit probieren.

Danke für die schnellen Antworten.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

>Weil meines Verständnisses nach kann ich ja nicht ständig
>irgendein Interrupt register abfragen ob ein Interrupt auftrat.

Genau dafür sind Interrupts doch da, damit man eben nicht das Flag 
pollen muss, sondern automatisch eine Interrupt Service Routine 
angesprungen wird und danach automatisch zur vorherigen Position 
zurückgesprungen wird.

Eigentlich habe ich gedacht, es geht um das Messen einer Pulsweite. Aber 
ich glaube, das eCap kann auch als PWM betrieben werden, nur nicht mit 
so hoher Auflösung wie das ePwm Modul.

>damit kann ich nicht meinen Ausgabe-Puls-Frequenzbereich
>abdecken.

Warum nicht? Man kann dynamisch die Vorteiler ändern, wenn man andere 
Zeiten braucht. Man kann auch einfach die high-resolution extension vom 
ePwm nehmen, wenn es die in dem verwendeten Prozessor gibt.

Grüße,

Peter

von Kai Z. (liquidsteel)


Lesenswert?

Peter Diener schrieb:
> Aber
> ich glaube, das eCap kann auch als PWM betrieben werden, nur nicht mit
> so hoher Auflösung wie das ePwm Modul.

Doch, wenn das eCAP im PWM Modus betrieben wird, dann hat man jeweils 
ein 32 bit Register fuer Period und einen fuer Counts. Die normallen PWM 
Ausgaenge haben nur 16 bit. Da sind Welten dazwischen.

Peter Diener schrieb:
> Warum nicht? Man kann dynamisch die Vorteiler ändern, wenn man andere
> Zeiten braucht. Man kann auch einfach die high-resolution extension vom
> ePwm nehmen, wenn es die in dem verwendeten Prozessor gibt.

Zwar hat die DSP den High Resolution PWM, jedoch ist das ja nur eine 
Interpolation der fallenden bzw. steigenden Flanke eines Pulses. Man 
kann damit aber nicht den Frequenzbereich vergroessern sonder bekommt 
nur eine hoehere Aufloesung.
Klar koennte man den Prescale noch dazuschalten, aber das ist nicht 
zweck der Sache. In meinem fall muesste ich im worst case jede 300us den 
Prescaler aendern.

Ich bin bereits an der konfiguration des eCAP dran, meiner Meinung nach 
ist er am besten dafuer geeignet.

von Kai Z. (liquidsteel)


Lesenswert?

Das mit dem eCAP Modul funktioniert bestens und ist sehr einfach. Hätte 
zwar eine bisschen höhere Genauigkeit erwartet (hab so durchschnittlich 
nen Fehler von nem zehntel promil) aber aus der DSP ist wahrscheinlich 
nicht mehr rauszuholen.
Danke für die Tips!

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.