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
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
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.
>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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.