Forum: Mikrocontroller und Digitale Elektronik PWM Tastverhältnis mit STM32F103


von Mathias (Gast)


Lesenswert?

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

von Mathias A. (matti83)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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.

von Mathias A. (matti83)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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.

von Mathias A. (matti83)


Lesenswert?

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

von Mathias A. (matti83)


Lesenswert?

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