Forum: Mikrocontroller und Digitale Elektronik mC mit 2 x Timer1?


von Ralf (Gast)


Lesenswert?

Guten Mittag!
Ich such einen Mikrocontroller mit zwei Timer1? Denn ich muss ein PWM 
signal erzeugen und auch noch was messen mit einer 16bit auflösung

Ralf

von Christian R. (supachris)


Lesenswert?

Muss es ein AVR sein? Für solche Timer-Sachen bietet sich der MSP430 an, 
das ist ein riesiger Timer mit µC Kern dran :)
Da hättest du je nach Größe einen Timer A mit 3 CCR und einen Timer B 
mit 7 CCR Blöcken....also jede Menge PWM und Messung...

von Christian (Gast)


Lesenswert?

zweimal Timer?

also die 1 ist ja die Bezeichnung des Timers. Dann suchst du also einen 
mC mit zwei Timern die beide die selbe Bezeichnung haben?

Ich denke du solltest deine Frage neu Formulieren. Suchst du einen mC 
mit zwei 16 Bit Timern? Da gibt es hunderte. ZB haben das alle größeren 
ATMegas.

Mfg

von Master S. (snowman)


Lesenswert?

wie denkst du, dass es möglich ist, zwei timer, die gleich heissen, 
anzusteuern? was es gibt: uC mehreren timern (die aber unterschiedlich 
heissen: Timer1, Timer2,..). und wozu brauchst du zwei timer um eine 
PWM zu gegnerieren?

von Ralf (Gast)


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

von Peter (Gast)


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.

von Ralf (Gast)


Lesenswert?

Also kann ich mit dem Timer1 ein PWM erzeugen und gleichzeitig noch bis 
zu einem überlauf zählen lassen (ganz unabhängig vom PWM)

Gruss

von Peter (Gast)


Lesenswert?

ja

von Benedikt K. (benedikt)


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.

von Ralf (Gast)


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!

von gast (Gast)


Lesenswert?

hat er doch geschrieben ...


1x 16 bit PWM
1x timer für andere sachen

sowas hat fast jeder AVR ... und kann das auch

von Benedikt K. (benedikt)


Lesenswert?

Brauchst du für die Drehzahlregelung wirklich eine 16bit PWM? 8bit 
sollte normalerweise auch reichen.

von Ralf (Gast)


Lesenswert?

Hi,
Ich stellte mein Projekt nur kurz vor weil Benedikt fragte was ich 
vorhatte. Das machbar ist weiss ich jetzt schon.

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

von Ralf (Gast)


Lesenswert?

@Benedikt:
Ich könnte natürlich auch den 8bit Timer verwenden und eine Variable 
hochzählen lassen so das nur bei einem bestimmten überlauf gespeichert 
wird. Aber es wurde ja gesagt es ginge auch, wenn ich beides mit dem 
Timer1 mache, also wieso denn nicht...

Grüsse!

von Karl H. (kbuchegg)


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?

von Benedikt K. (benedikt)


Lesenswert?

Eine Sekunde lang die Impulse zählen ist für eine Regelung sowieso 
suboptimal, denn erst nach 1 Sekunde kann eine Abweichung korrigiert 
werden. Das ist sehr langsam. Besser ist, den Abstand 2er Impulse 
messen. Dann kann der Timer auch konstant mit einer festen Frequenz 
laufen.

von Peter (Gast)


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.

von Ralf (Gast)


Lesenswert?

Danke für die Antworten!
Ich werde mir das ganze nochmal durch den Kopf gehen lassen!

Liebe Grüsse!

von Ralf (Gast)


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?

von Karl H. (kbuchegg)


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)

von Ralf (Gast)


Lesenswert?

Ja stimmt eigentlich...

Und wie wärs mit meiner Idee?

von Benedikt K. (benedikt)


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.

von Peter (Gast)


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.

von Ralf (Gast)


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!

von Ralf (Gast)


Lesenswert?

Neee... stimmt nicht! Wartet noch einbisschen...

von Ralf (Gast)


Lesenswert?

Hi,
Jetzt hab ichs!
Das wären dann 126 x 60 Umdrehungen pro Minute...
Stimmt das?

von Benedikt K. (benedikt)


Lesenswert?

Ralf schrieb:

> Nun:
> 16000000/1024 = 15625Hz
>
> 15625/124 = 126
>
> 360/126 = 2.8

Wie kommst du auf 360?
Pro Minute hast du 15625Hz*60s=937500 Impulse

937500 / 126 = 7440 Umdrehungen pro Minute

von Ralf (Gast)


Lesenswert?

126 x 60 = 7560 sollte doch auch gehen? ABer irgendwie ist das nicht 
dasselbe wie du bekommst, woran kann das liegen?

Grüsse!

von Benedikt K. (benedikt)


Lesenswert?

Ja, stimmt, du hast recht.
Ich hatte die 126 genommen, aber die sind ja schon geteilt. 
937500/124=7560,48387 ist also der korrekte Wert.

von Ralf (Gast)


Lesenswert?

Hi,
Ich habs!
Du Hast durch 126 geteilt anstatt durch 124. Das war meine Schuld denn 
ich hab da einen falschen Schritt gemacht!
Danke euch für die Hilfe!

Liebe Grüsse!

von Ralf (Gast)


Lesenswert?

da war ich zu langsam!

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.