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
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...
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
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?
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
> 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.
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
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.
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!
hat er doch geschrieben ... 1x 16 bit PWM 1x timer für andere sachen sowas hat fast jeder AVR ... und kann das auch
Brauchst du für die Drehzahlregelung wirklich eine 16bit PWM? 8bit sollte normalerweise auch reichen.
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.
@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!
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?
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.
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.
Danke für die Antworten! Ich werde mir das ganze nochmal durch den Kopf gehen lassen! Liebe Grüsse!
@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?
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)
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.
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.
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!
Hi, Jetzt hab ichs! Das wären dann 126 x 60 Umdrehungen pro Minute... Stimmt das?
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
126 x 60 = 7560 sollte doch auch gehen? ABer irgendwie ist das nicht dasselbe wie du bekommst, woran kann das liegen? Grüsse!
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.
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!
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.