Forum: Mikrocontroller und Digitale Elektronik Quadraturencodersignal erzeugen


von Luky S. (luky)


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?

von Helmut L. (helmi1)


Angehängte Dateien:

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

von Helmut L. (helmi1)


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

von Matthias (Gast)


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

von Luky S. (luky)


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

von Matthias (Gast)


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.

von yalu (Gast)


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.

von Luky S. (luky)


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)

von spess53 (Gast)


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

von DSP-Fan (Gast)


Lesenswert?

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

von spess53 (Gast)


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

von yalu (Gast)


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.

von Matthias (Gast)


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 ;-)

von Helmut L. (helmi1)


Lesenswert?

Bei einem 7474 kann man noch nicht von einem TTL Grab reden

Und es steht auch Elektronik drueber


Gruss Helmi

von Spess53 (Gast)


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

von Andy (Gast)


Lesenswert?

Dazu ein kleine Stück Software:
1
DDRA = 255;
2
DDRB = 127;
3
4
5
int main(void) { 
6
   while (1) {
7
      if ((PINA & (1<<PA0)) && (PINA & (1<<PA1))) 
8
         PORTB |= (1<<1);
9
      else
10
         PORTB &= ~(1<<1);
11
12
      if ((PINA & (1<<PA2)) && (PINA & (1<<PA3))) 
13
         PORTB |= (1<<2);
14
      else
15
         PORTB &= ~(1<<2);
16
17
      if ((PINA & (1<<PA4)) && (PINA & (1<<PA5))) 
18
         PORTB |= (1<<3);
19
      else
20
         PORTB &= ~(1<<3);
21
22
      if ((PINA & (1<<PA6)) && (PINA & (1<<PA7))) 
23
         PORTB |= (1<<4);
24
      else
25
         PORTB &= ~(1<<4);
26
   }
27
}

7400 war gestern :-))

Gruss
Andy

von Helmut L. (helmi1)


Lesenswert?

Du sagst es Spess53

Gruss Helmi

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.