mikrocontroller.net

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


Autor: Levin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Levin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.