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
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
"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
> 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
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
"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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.