Hallo! Ich möchte mit einem Atmega644 einen Encoder eines Wechselstrommotors auslesen. Dessen 2 Signale werden bei höchster Motordrehzahl mit 30kHz eintrudeln. Den µC treibt ein 16MHz Quarz. Viiiel mehr hat der µC nicht zu tun als die Drehgeschwindigkeit und -richtung festzustellen und dementsprechend einen Schrittmotor zu anzutreiben. Zur Abfrage der gerade anliegenden Signalpegel dachte ich, die Ports mit einem Timer bei -meinetwegen- 50kHz abzufragen. Das ist ja doch recht flink. Daher, Frage: Wie erkenne ich, wie viel Zeit der µC für Was benötigt und ob er sich zeitlich verschlucken wird? Ich habe kein Gefühl dafür, ob 50kHz nun für einen bei 16MHz schuftenden µC sportlich oder gemütlich sind. Beste Grüße
@ Stephan (Gast) >Viiiel mehr hat der µC nicht zu tun als die Drehgeschwindigkeit und >-richtung festzustellen und dementsprechend einen Schrittmotor zu >anzutreiben. Soll der Schrittmotor genausoschnell laufen? ;-) >Zur Abfrage der gerade anliegenden Signalpegel dachte ich, die Ports mit >einem Timer bei -meinetwegen- 50kHz abzufragen. Das ist ja doch recht >flink. Kann man machen. >Daher, Frage: Wie erkenne ich, wie viel Zeit der µC für Was >benötigt und ob er sich zeitlich verschlucken wird? Durch die Simulation der Interruptroutine. Siehe Interrupt. >Ich habe kein Gefühl >dafür, ob 50kHz nun für einen bei 16MHz schuftenden µC sportlich oder >gemütlich sind. 16 MHz = 16 Takte/us bzw. 320 in 20us. geht so, da kann man schon was mit anstellen.
16000000 / 50000 = 320 d.h. der µC hat zwischendurch 320 Takte Zeit. 320 Takte das sind über den Daumen irgendwas bei 280 Instruktionen (gesunder Mix aus 1-Takt und 2-Takt Befehlen vorausgesetzt). Das ist schon was, wenn man sich dabei allerdings auch nicht verzetteln darf. Additionen kann ein AVR in wenigen Takten bearbeiten, Divisionen dauern aber schon wesentlich länger. D.h. du hast ein wenig Zeit, viel ist es aber nicht. Die andere Sache ist die: wie schlimm ist es denn wirklich, wenn du mal mit der Auswertung der Pulse vom Encoder ein wenig hinterher hinkst. So ein Motor hat eine träge Masse, der ändert seine Drehgeschwindigkeit von einer µs zur nächsten nicht merklich.
:
Bearbeitet durch User
Falk Brunner schrieb: > Durch die Simulation der Interruptroutine. Siehe Interrupt. Bin auf Kriegsfuss mit AVRStudio Simulator :( Falk Brunner schrieb: > Soll der Schrittmotor genausoschnell laufen? ;-) Nein, da geht´s gemächlicher zu. Karl Heinz schrieb: > du hast ein wenig Zeit, viel > ist es aber nicht. Wenn ich gelegentlich noch mit der UART etwas empfange: besteht die Gefahr (/wie verhindert man sie) dass sich die ISR ins Gehege kommen?
Und natürlich die Fragen: Was genau wird gemessen? Analoges Signal ist bei 50kHz nicht mehr drin da sind bei zwei Kanälen so 20kHz die Grenze (und außerhalb der Spezifikation). Digitales Signal: Wie genau muß die Zeit sein? Reicht 50kHz per Polling mit ebendieser Auflösung, oder mußt Du genauer sein und mit Interrupts messen? Es ist eine handvoll Detailfragen, die die Machbarkeit entscheidend beeinflussen.
Stephan schrieb: > Wenn ich gelegentlich noch mit der UART etwas empfange: besteht die > Gefahr (/wie verhindert man sie) dass sich die ISR ins Gehege kommen? Die ISR kurz halten (beide). Du hast 320 Takte Zeit, die eine Polling-Isr warten kann, ehe das erste mal ein derartiger Interrupt verloren geht. Das reicht locker, um 1 Zeichen von der UART zu holen und in einen Ringbuffer zu stellen.
Stephan schrieb: > Wenn ich gelegentlich noch mit der UART etwas empfange: besteht die > Gefahr (/wie verhindert man sie) dass sich die ISR ins Gehege kommen? Während der UART was empfängt, funkt er nicht dazwischen. Mit dem Stopbit (bei asynchroner Übertragung) feuert er aber dann seinen Interrupt, und den musst du eben innerhalb der 280 Instruktionen abarbeiten und zwar so, das der Encoderroutine auch noch Zeit bleibt.
Er ist schnell genug. Beitrag "4-fach Flankenauswertung per Interrupt mit ATmega48/88" Du solltest Dir aber schon vorher klar werden, was sonst noch gefordert wird. Stephan schrieb: > Wenn ich gelegentlich noch mit der UART etwas empfange: besteht die > Gefahr (/wie verhindert man sie) dass sich die ISR ins Gehege kommen? Baudrate nicht zu hoch ansetzen und Status-Flag vom UART pollen. Einfacher ist es allerdings, die ser. Übertragung per IIC zu erledigen. Dabei kann - solide Programmierung vorausgesetzt - kein Zeichen verloren gehen.
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.