mC mit 2 x Timer1?

Gast #1380463
Lesenswert?

Hi,
sry hab meine Frage falsch formuliert, ich brauche ein mC mit zwei 16Bit 
Timern...

@Snowman:
Liess meinen Beitrag zu Ende und dann weisst du das ich nicht zwei Timer 
um ein PWM zu erzeugen brauche sondern EIN Timer fürs PWM und EIN Timer 
um etwas zu messen bzw. eine bestimmte Zeit vorzugeben, welcher auch mit 
16Bit betrieben werden muss

Gruss
Gast #1380468
Lesenswert?

> Liess meinen Beitrag zu Ende und dann weisst du das ich nicht zwei Timer
> um ein PWM zu erzeugen brauche sondern EIN Timer fürs PWM und EIN Timer
> um etwas zu messen bzw. eine bestimmte Zeit vorzugeben, welcher auch mit
> 16Bit betrieben werden muss
und warum sollte das nicht mit einem Timer gehen? Der PWM-Timer macht ja 
eh alles in Hardware, da kann er auch noch etwas in software machen.
#1380481
Lesenswert?

Wenn die PWM 16bit hat, und du z.B. mittels Input Capture noch etwas 
messen möchtest, dann geht das wunderbar. Ansonsten muss man beim Input 
Capture den reduzierten Wertebereich des Timers halt beachten und 
mittels einer Hilfsvariable die im Timer Overflow Interrupt erhöht wird, 
kompensieren.

Machbar ist alles. Beschreib doch mal genau, was du vorhast. Es gibt mit 
Sicherheit eine Lösung.
Gast #1380488
Lesenswert?

Aha:
Muss ich will einen Motor in bestimmer Drehzahl drehen lassen können 
(mittels PWM) und das ganze auch noch überwachen. Dann muss der Timer1 
nämlich pro Sekunde einmal die abspeichern können wie viele Impulse es 
in der einen Sekunde hat diese mal 60 rechnen und schon hab ich die 
U/promin

Das mit dem messen geht schon alles (Habs mit einem optischen Drehgeber 
gemacht (schwarz,weiss))
Jetzt will ich noch dem Motor sagen können z.B. 1000 Umdrehungen die 
Minute und dann macht er das dann auch. mittels PWM...

Ich werde das Projecktchen dann auch mal noch vorstellen (Im 
Roboternetz)

Grüsse!
#1380501
Lesenswert?

Ralf schrieb:

> Den laut Peter, kann ich den 16bit Timer einsetzten für die PWM
> erzeugung und für das messen.

Vorsicht.
Die Frage ist, was du genau unter 'messen' verstehst.

Das da oben klingt so, als ob du den Timer als Zähler einsetzt. Das wird 
so nicht gehen. Der Timer muss schon frei durchlaufen können.

Also: Wie genau funktioniert deine Drehzahlmessung?
Gast #1380505
Lesenswert?

du musst ja auch nicht die Umdehungen pro minute messen, einfacher 
könnte es sein Umdehungen pro TimerOverflow.
Du hängst also dein Drehgeber an einen Externen Interupt (oder in der 
main abfragen) und erhöhst immer eine Variable.
Bei einem Overflow vom PWM-Timer braucht kannst du die Variable mit dem 
soll vergleichen und entsprechend die PWM anpassen.
Gast #1380530
Lesenswert?

@Peter
aber das Problem bei deiner Methode ist, wenn der Motor nur langsam 
dreht, dann wird es sehr oft sein, dass er misst und es noch gar keinen 
Impuls gegeben hat. Denn wenn ich den 8bit Timer verwende, dann und er 
immer bei 255 überläuft, dann ist das ja super viel mal pro sec...

@Benedikt:
Deine Idee ist auch ganz gut, aber ich würde schon gerne Umdrehungen pro 
min ausgeben...

Wie wärs hiermit:
Ich lasse den Timer immer alle 100ms überlaufen? reicht das um es mit 
dem Sollwert zu vergleichen und anzupassen?
#1380533
Lesenswert?

Ralf schrieb:
> @Peter
> aber das Problem bei deiner Methode ist, wenn der Motor nur langsam
> dreht, dann wird es sehr oft sein, dass er misst und es noch gar keinen
> Impuls gegeben hat. Denn wenn ich den 8bit Timer verwende, dann und er
> immer bei 255 überläuft, dann ist das ja super viel mal pro sec...

Du kannst ja auch nur bei jedem 10.ten Timer Overflow die bisher 
aufgelaufenen Impulse auswerten :-)
Niemand sagt, dass man bei jedem Overflow eine Aktion machen muss.

> @Benedikt:
> Deine Idee ist auch ganz gut, aber ich würde schon gerne Umdrehungen pro
> min ausgeben...

Der Rest ist einfache Mathematik.
Wenn der Abstand zwischen 2 Impulsen (hausnummer) 0.5 Sekunden war, dann 
hast du 2 Impulse in der Sekunde bzw. 120 Pulse in der Minute und der 
Motor drehte mit 120 U/min (wenn 1 Impuls einer Umrehung entspricht)
#1380538
Lesenswert?

Ralf schrieb:

> Deine Idee ist auch ganz gut, aber ich würde schon gerne Umdrehungen pro
> min ausgeben...

Ist kein Problem:
Sagen wir mal der Timer misst mit 16MHz und dein Motor macht 1000Upm, 
also 16,667Ups, dann dauert eine Umdrehung 0,06s bzw. 960000 Prozessor 
Takte. Du müsstest den 16bit Timer per Software mit einer zusätzlichen 
Variable z.B. auf 24bit erweitern.
Nun hast du also diesen Wert. Um daraus Upm zu bekommen, muss du 
16MHz*60s=960 Millionen durch den gemessen Wert teilen:
960000000/960000=1000Upm.
Ist halt etwas mehr Rechenaufwand mit solch großen Zahlen, aber das 
sollte ein AVR problemlos schaffen.
Gast #1380540
Lesenswert?

wir können leider nicht eraten wie langsam/schnell der Motor dreht, aber 
es ist sinnvoller einen schnellen rückmeldung zu erhalten als eine 
Langsame. Sonst wird das ganze regelsystem zu langsam. Wenn du immer 
1Minute lang wartest bist du die umdrehung hast dann muss es schon ein 
sehr grosser Motor sein damit das System sich überhaup einregelt.

Mache doch zur not 10 Schwarz/Weiss makierungen an deine Sensor dann hat 
der µC wenigsten etwas zu tun.
Gast #1380567
Lesenswert?

Hi,
Ich hab mich jetzt trotzdem mal für die Methode von Benedikt um 
entschieden und hab mal ein Beispiel gemacht und das ganze ausgerechnet 
(mit Taschenrechner) kann sich einer vielleicht meine Rechnungen mal 
ganz kurz ansehen? Ob ich da keinen Schritt ausgelassen habe (Bin erst 
14, da passiert mir sowas öfters mal!;)):
16Mz Quarz
Prescale 1024
Timer0
Beispiel:
Int wird zum ersten mal ausgelöst, der Timer beginnt zu zählen, 
Interrupts wird wieder ausgelöst, der Timer gibt die Zahl 124 aus.

Nun:
16000000/1024 = 15625Hz

15625/124 = 126

360/126 = 2.8

Wären das dann 2.8 Umdrehungen pro Minute? Oder hab ich da was falsch 
gemacht?

Grüsse!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren