mikrocontroller.net

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


Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mathias A. (matti83)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mathias A. (matti83)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mathias A. (matti83)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mathias A. (matti83)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.