Forum: Mikrocontroller und Digitale Elektronik Wie schnell ist er denn nun?


von Stephan (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ 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.

von Karl H. (kbuchegg)


Lesenswert?

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
von Stephan (Gast)


Lesenswert?

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?

von Walter T. (nicolas)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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.

von Stephan (Gast)


Lesenswert?

Vielen dank erstmal!

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.