mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Quadraturencodersignal erzeugen


Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu Testzwecken benötige ich ein Quadraturencodersignal (also das mit den 
2 um 90° verschobenen Rechtecksignalen) von 1 bis 10kHz. Bislang habe 
ich das recht aufwändig mit einem AVR und Timeroverflow bei 1/4 der 
Gesamtfrequenz gelöst, die Lösung lastet aber je nach Geschwindigkeit 
den AVR voll aus und die Auflösung ist auch nicht ganz das was ich mir 
wünschen würde...
Gibt es eigene ICs die sowas erzeugen?

Autor: Helmut Lenzen (helmi1)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo mit den beiden Flip-Flops machts du schon mal aus dem 4-fachen 
Takt
ein 0 Grad und ein 90 Grad signal.
Die Clock must du dann nur noch geeignet Takten


Gruss Helmi

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe da auch mal ein etwas aufwendigere Schaltung gebaut um einen 
Sin-Cos Geber zu simulieren. Ich habe das mit 2 AD9850 DDS Generatoren 
geloest.
Man konnte dort die Frequenz und den Phasenwinkel einstellen. Frequenz 
in mHz Schritten. Aber wie gesagt das ist die Nobelversion.

Gruss Helmi

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es den AVR Timer im PWM Modus zu betreiben?

16-bit Timer (z.B. PFC-PWM). Die beiden CMP-Match auf die Pins. Das 
sollte doch gehen. Die Frage ist, wie die Ausgabe aktualisiert werden 
soll....

Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PWM geht leider nicht da man damit nur 0° oder 180° Phasenverschobene 
Signale erzeugen kann.
An eine Lösung mit DDS habe ich auch mal gedacht, aber das erschien mir 
dann doch übertrieben da ich ja nur Rechtecksignale brauche.
Ich werds mal mit einfachem PWM + der Flipflopschaltung versuchen...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, ja richtig. Man kann ja den Nullpunkt nicht (BOTTOM) nicht 
verschieben. Aber mit 2 Timern im PWN Modus, die über den gleichen 
Prescaler gehen und synchron laufen? Dann sollte ein RS-Flipflop helfen.
Mit CMP-A setzen und mit CMP-B löschen.... Dann sollte eine fast 
IRQ-freie
Implementierung gehen.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andere AVR-Lösung (nicht getestet, deswegen keine Garantie):

Ein Timer/Counter im Non-PWM-Mode, zwei Compare-Matches auf diesem
Timer als Toggle-on-Match konfiguriert. Die Compare-Werte werden so
festgelegt, dass sie die Hälfte des Zählermaximums auseinanderliegen.
Ab da läuft alles ohne weiteren Softwareeingriff, auch mit Frequenzen
deutlich über 10 kHz.

Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man denn 2 Compare-Matches auf einen Timer machen? War mir nicht 
bekannt, wäre aber natürlich ideal...
Wegen der Auflösung benötige ich auch einen 16Bit Timer und davon 2 
erübrigen fällt schwer (hab nur einen)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Also in der Zeit, die ihr hier braucht um das auszudiskutieren, hätte 
man das ganze mit einem Taktgenerator, einem 4017 und 4 Dioden 
mindestens 20x aufbauen können.

MfG Spess

Autor: DSP-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihhh, löten...
Auf nem ordentlichem DSP ist das höchstens ein Zehnzeiler in Assembler.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Man kann natürlich auch mit Kanonen nach Spatzen schießen. Auch wenn es 
manche hier nicht wahrhaben wollen: es gibt noch Elektronik jenseits von 
AVR, ARM, DSP....

MfG Spess

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Lukas Slz:

> Kann man denn 2 Compare-Matches auf einen Timer machen? War mir
> nicht bekannt, wäre aber natürlich ideal...

Jeder AVR mit mehr als 8 Beinchen hat einen 16-Bit-Timer mit zwei
Output-Compares (OC1A und OC1B).


@spess53:

> Man kann natürlich auch mit Kanonen nach Spatzen schießen. Auch wenn
> es manche hier nicht wahrhaben wollen: es gibt noch Elektronik
> jenseits von AVR, ARM, DSP....

Auch ich bin ein Freund einfacher Lösungen. So gefällt mir die
Schaltung von Helmut Lenzen mit einem 7474 sehr gut. Allerdings
braucht man hier noch den Takt. Dieser soll, wenn ich Lukas richtig
verstanden habe, auch noch variabel und vielleicht sogar über einen PC
o.ä. einstellbar sein. Möglicherweise soll auch die Drehrichtung des
simulierten Encoders im Betrieb geändert werden können. Da er sowieso
schon einen AVR einsetzt, ist es doch das einfachste, diesen
weiterzuverwenden und die Software etwas zu optimieren. Als Ergebnis
hat man alle o.g. Funktionen in einem einzigen IC vereinigt, das nicht
einmal arg viel kostet.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Also in der Zeit, die ihr hier braucht um das auszudiskutieren, hätte
> man das ganze mit einem Taktgenerator, einem 4017 und 4 Dioden
> mindestens 20x aufbauen können.

Schon, aber das hier ist ja auch ein "Mikrocontrollerforum" und keine
"Wie bau ich mir ein CMOS-Grab" oder so, Forum ;-)

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei einem 7474 kann man noch nicht von einem TTL Grab reden

Und es steht auch Elektronik drueber


Gruss Helmi

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wenn mich alles täuscht, heißt das hier '... und Elektronik'. Vielen 
'Programmierern' hier könnte etwas mehr Elektronikwissen nicht schaden.

MfG Spess

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dazu ein kleine Stück Software:
DDRA = 255;
DDRB = 127;


int main(void) { 
   while (1) {
      if ((PINA & (1<<PA0)) && (PINA & (1<<PA1))) 
         PORTB |= (1<<1);
      else
         PORTB &= ~(1<<1);

      if ((PINA & (1<<PA2)) && (PINA & (1<<PA3))) 
         PORTB |= (1<<2);
      else
         PORTB &= ~(1<<2);

      if ((PINA & (1<<PA4)) && (PINA & (1<<PA5))) 
         PORTB |= (1<<3);
      else
         PORTB &= ~(1<<3);

      if ((PINA & (1<<PA6)) && (PINA & (1<<PA7))) 
         PORTB |= (1<<4);
      else
         PORTB &= ~(1<<4);
   }
}

7400 war gestern :-))

Gruss
Andy

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du sagst es Spess53

Gruss Helmi

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.