Hallo Ihr Controller-Profis, ich muss einen STM32F103 auf einem Keil-Starter-Kit dazu bringen 5 PWM Signale so genau wie möglich zu messen und das Tastverhältnis zu berechnen. Mein riesiges Problem ist, dass ich keine Erfahrungen mit MicroControllern habe. Ich habe allerdings keine Probleme C zu programmieren. Mein erstmal größtes Problem ist, dass ich nicht weiß, wie ich die Eingänge bearbeite um dann mit C zu verarbeiten. Ich benötige also die Lücke zwischen dem Signal, welches am Port anliegt und dem Inhalt einer Variable (z.B. PWM_Signal_1) welche ich dann auf steigende und fallende Flanken auswerte. Das Tastverhältnis und die Berechnung ist also nicht dass Problem, sondern die Abfrage der Ports! Ich hoffe, ihr könnt mir weiterhelfen! Mathias
Hallo also, nun mit Login! Ich habe nun weitere Ideen zur Umsetzung meines Programms, benötige aber immer noch Hilfe! Also grundsätzlich habe ich mehrere Fragen: 1.: Das PWM Signal, dass ich messen will hat eine Frequenz von bis zu 32kHz und das Tatsverhältnis liegt zwischen 10% und 90%! Frage: wie muss ich meine Eingänge einstellen? 2.: Ich wollte an meinen Ports einfach einen Timer starten, wenn die Eingangsspannung größer 2.5V wird (positive Flanke). Wenn die Spannung kleiner 2.5V wird (negative Flanke) speicher ich die Zeit in eine Variable ab und warte noch die nächste positive Flanke ab, speicher diese Zeit auch ab und setze den Timer wieder auf null, damit ich die nächste Periode erfassen kann. Die weitere Berechnung ist klar! Frage: Kann ich dass so machen? 3. Frage: Wie muss ich die benötigten Timer einrichten? 4. Frage: Kann ich dass alles in einer fünffachen Ausführung parallel machen? (Ich benötige ja 5 PWM-Signale gleichzeitig ohne Verzögerung, da ich die Signal miteinander verrechnen muss!) Ich hoffe dass sich jetzt, nach meiner weiteren Erläuterung der Probleme, jemand meiner annimmt! Grüße aus dem Rheingau, Mathias
Mathias Armbrüster schrieb: > Frage: wie muss ich meine Eingänge einstellen? Wenn sie auf 2,5V reagieren sollen, dann müssen Komparatoren davor. > Frage: Kann ich dass so machen? Lass den Timer durchlaufen, aber verwende den Capture Modus der Timer. Der speichert den aktuellen Timerwert im Capture-Register und löst einen Interrupt aus. Jeder der allgemeinen Timer hat 4 solcher Capture-Kanäle. Was aber etwas knackig wird: Nehmen wir an, es kommen 5 PWM Signale mit 32KHz und 10% Tastverhältnis rein, zufälligerweise synchron. Eine Periode ist ~30µs, d.h. die Flanken eines Eingangs liegen ~3µ auseinander. Damit nichts verloren geht müssten die Interrupts aller 5 Kanäle innerhalb dieser 3µs den Wert auslesen und die zu erkennende Flanke umstellen. Das ist eng. Besser: Jedes PWM Signal an 2 Capture-Kanäle des gleichen Timers legen. Einer nur für die positive Flanke, einer nur für die negative. Dann sind es nur noch 5 Interrupts alle 30µs, was kein Problem darstellt.
Danke für deine Antwort! > Was aber etwas knackig wird: Nehmen wir an, es kommen 5 PWM Signale mit > 32KHz und 10% Tastverhältnis rein, zufälligerweise synchron. Eine > Periode ist ~30µs, d.h. die Flanken eines Eingangs liegen ~3µ > auseinander. Damit nichts verloren geht müssten die Interrupts aller 5 > Kanäle innerhalb dieser 3µs den Wert auslesen. Das ist möglich, aber > eng. Wir können die Frequenzen der Sensoren auch verkleinern, haben noch keine Erfahrungswerte bekommen! > Besser: Jedes PWM Signal an 2 Capture-Kanäle des gleichen Timers legen. > Einer für die positive Flanke, einer für die negative. Dann sind es nur > noch 5 Interrupts alle 30µs, was kein Problem darstellt. Das hört sich sehr gut an! Wie ganz oben zu lesen ist dies meine erstes uControler-Projekt und ich habe echte Probleme mit dem einrichten der Eingänge! Kannst du mir da Tipps geben oder ein Beispiel, welches ein PWM einliest? Ich programmiere mit Keil, habe aber auch Yagarto und Eclipse installiert (Tip von unserem Informatiker! Für einen E-Techniker finde ich aber Keil leicher!) Ich benötige alos hauptsächlich Unterstützung um Signal in Variablen einzulesen! Mathias
Du wirst nicht drum herum kommen, dich etwas intensiver in die Programmierung von Mikrocontrollern und speziell der STM32-Timer einzulesen. Ist etwas Arbeit, aber die werde ich dir nicht abnehmen. Ich gehe davon aus, dass es bei Keil einige Beispiele gibt. Die werden aber nicht direkt dein Problem lösen.
Entschuldigung, wenn du dass falsch verstanden hast! Ich wollt nicht, dass du mir die Arbeit machst! Ich will mich ja auch einarbeiten, ich dachte da auch an irgend ein Beispiel, welches ein PWM einliest. Hast du Tipps für mich, mit was ich mich da am besten einlese? Mathias
Hallo, nach vielen demotivierenden Stunden mit der reference manuel, dem Datenblatt, meinem PCs und des Demoboard habe ich eine Ausgabe an der Seriellen Schnittstelle. Das Problem ist, dass ich keine Werte außer 0000... bekomme! Nun habe ich die Frage, ob die Register nicht gefüllt werden, oder ob ich sie nicht richtig auslese. Kann ich mit diesen Befehlen meine Register von Tim2 Ch1 und Ch2 auslesen, oder funktioniert das nicht? float Periode, DutyCycle; Periode = TIM2->CCR1; DutyCycle = TIM2->CCR2; Grüße, Mathias
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.