Forum: Mikrocontroller und Digitale Elektronik Mega8: 2 PWM, 2 externe Counter


von Levin (Gast)


Lesenswert?

Hi,

ich versuche eine Motorreglerplatine zu bauen: 2 Motoren (PWM) und vier
Leitungen vom Inkrementalgeber (COUNT und DIR) das ganze möcht' ich
mit einem Mega8 steuern.
- PWMs mit dem 16bit Counter erzeugen
- Inkrementalgeber über die externen Trigger von Counter 0 und 1
auslesen
- Änderungen von DIR über Interrupts abfangen

Dumm nur, dass der Counter 1 entweder PWM erzeugt, oder extern
Impulse zählt. Jetzt bin ich etwas ratlos.

Wie kann ich zwei (schnelle) Signale zählen und gleichzeitig zwei PWMs
generieren? (Achso, am externen Counter 2 hängt ein Quartz, der ist
also auch weg)

Viele Grüße,
Levin

von Stefan (Gast)


Lesenswert?

Wie schnell sollen denn eine Incrementalgeber sein? Wenn Du Dir bei den
IR´s etwas Mühe gibst, sollte auch ein Software-Counter per IR für die
Incrementalgeber möglich sein. Jeweils ein Pin an einen INT-Eingang,
den zweiten kannst Du per IR-Software auswerten und damit die Richtung
feststellen. Grob geschätzt sollten so min. 50khz machbar sein.

Muss ja nicht alles Hardware sein, was glänzt.

Stefan

von Peter D. (peda)


Lesenswert?

"Wie kann ich zwei (schnelle) Signale zählen und gleichzeitig zwei
PWMs
generieren?"

Das ist natürlich wieder mal sehr exakt. Also was ist denn bei Dir
schnell ?


"(Achso, am externen Counter 2 hängt ein Quartz, der ist
also auch weg)"

Warum denn, soll das Ganze mit Stützbatterie laufen ?


Peter

von Levin (Gast)


Lesenswert?

> Was ist denn bei dir schnell?

Etwa 5kHz pro Inkrementalgeber

> Warum denn, soll das Ganze mit Stützbatterie laufen ?

Hmmm, wie meinst du das? Ich möchte den AVR mit 16MHz betreiben. Der
interne Oszillator ist nicht so schnell (sondern 1MHz, oder?)

Was hat das mit einer Stützbatterie zu tun?

Stefan:
> Grob geschätzt sollten so min. 50khz machbar sein.

Hmm, ich kann also 2*5kHz ohne größere Bedenken via Interrupt abfragen
und in jeder Interruptroutine einen externen Port auslesen und eine
globale Variable hochzählen
(und trotzdem via UART kommunizieren und PWMs generieren)

Na gut, das werd' ich mal versuchen.

Dankeschön,
Levin

von Stefan (Gast)


Lesenswert?

Der interne Takt läßt sich auch mit 8 Mhz betreiben. Funktioniert aber
zusammen mit UART nicht zuverlässig, weil seine Abweichung über den
Temperaturbereich zu groß ist.

2 * 5khz ist ja richtig langsam ;-)

Wichtig ist natürlich, dass die IRs sehr kurz sind. Das gilt für alle
IR, auch die z.B. vom UART (Ausnahme: ein IR gibt während seiner
Abarbeitung andere IR frei, aber dabei muss man wissen, was man tut
..). Dann sollte das Timing kein Problem darstellen.

Alles was auch mal eine ms warten kann, machst Du dann im main-Loop.

Stefan

von Peter D. (peda)


Lesenswert?

"Etwa 5kHz pro Inkrementalgeber"

5kHz sind ja bei 16MHz 32000 Zyklen zwischen den Interrupts, d.h. die
kann man bequem ohne Timer voll in Software zählen.
Die CPU-Auslastung ist vernachlässigbar, selbst 100kHz Zählfrequenz
sind noch kein Problem.
Es bleibt also Dir überlassen, ob Du die externen Interrupts nimmst
oder T0 und T2.




"Hmmm, wie meinst du das? Ich möchte den AVR mit 16MHz betreiben. Der
interne Oszillator ist nicht so schnell (sondern 1MHz, oder?)"

Du must Dich entscheiden.
Entweder Du nimmst den internen RC-Oszillator und wählst 1, 2, 4 oder
8MHz aus.
Oder Du schließt einen Quarz bis 16MHz an.



"Was hat das mit einer Stützbatterie zu tun?"

Den T2 kann man mit einem 32kHz Quarz weiter laufen lassen auch wenn
der Hauptquarz schläft.
Das macht aber nur dann Sinn, wenn es auf geringsten Strombedarf
ankommt.
Z.B. wenn ohne Hauptstromversorgung mit einer schwachen Stützbatterie
oder Goldcap die Uhrzeit ständig weitergezählt werden soll.
Ansonsten wäre es nur die Verschwendung zweier Portpins und eines
weiteren Quarzes.



Peter

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.