Alps Quadratur Encoder?

D

Daniel Schramm

Guest
Hallo,

ich stehe gerade vor dem Problem, dass ich einen Alps Drehimpulsgeber nicht
ordentlich ausgewertet kriege.
Bei einem Exemplar von Grayhill habe ich dagegen keine Probleme.

Der Grayhill zeigt exakt das Verhalten, das auch in der DSE-FAQ beschrieben
ist. Der von Alps dagegen hat nur folgende moegliche Stellungen:

Rechtsdrehung: 00->10->01
Linksdrehung: 00->01->10

Die 11 fehlt also komplett. Die Stellung 00 ist zwischen 2 Rastungen
untergebracht, soll also beim durchlaufen ueberhoert werden.

Der Fehler aeussert sich so, dass in Drehrichtung links nur jede 2.
Rasterstellung gezaehlt wird und bei Rechtsdrehung wilde Spruenge in sowohl
positive, als auch negative Richtung auftreten... *verzweifel*

Das ganze steckt mal wieder an einem Atmel Mega128 und soll
Interrupt-gesteuert ausgewertet werden. Mein Quellcode fuer den
Alps-Encoder sieht wie folgt aus:
(AVR-GCC)

Danke fuer Eure Hilfe

Daniel


#include <avr/signal.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include "src/global.h"
#include "src/common/enc.h"

s08 encTable[16]={0,-1,+1,0,0,0,-1,0,0,+1,0,0,0,0,0,0};
s16 encPosition=0;
u08 status=0;
u08 quadrature_value = 0;
s16 encMin=1;
s16 encMax=6;


s16 encoderGetPosition(void) {
return ( encPosition );
}

void encoderSetPosition(s16 position) {
encPosition = position;
}

void encoderInit(void) {
// configure encoder direction pins for input
cbi(DDRE, 6);
cbi(DDRE, 7);
// apply pullup resistors to direction inputs
sbi(PORTE, 6);
sbi(PORTE, 7);

cbi(EICRB, ISC61);
cbi(EICRB, ISC71);
sbi(EICRB, ISC60);
sbi(EICRB, ISC70);

quadrature_value=inp(PINE)>>6;

//enable interrupts
outp((1<<INT6)|(1<<INT7), EIMSK);
sei();
}

void encoderRange(s16 min, s16 max) {
encMin = min;
encMax = max;
}

SIGNAL (SIG_INTERRUPT6) {
quadrature_value=( (quadrature_value << 2) | ( inp(PINE) >> 6 ) ) &
0x0f;
encPosition+=encTable[quadrature_value];

if ( encPosition > encMax ) {
encPosition = encMin;
} else if (encPosition < encMin)
encPosition = encMax;
}

SIGNAL (SIG_INTERRUPT7) {
quadrature_value=( (quadrature_value << 2) | ( inp(PINE) >> 6 ) ) &
0x0f;
encPosition+=encTable[quadrature_value];

if ( encPosition > encMax ) {
encPosition = encMin;
} else if (encPosition < encMin)
encPosition = encMax;

}

--
.~. Daniel Schramm Phone: +49 231 6108112 Mail:daniel.schramm@gmx.de
/V\ Bruehlweg 36 Mobile:+49 178 8839848 ICQ: 35816985
// \\ 44379 Dortmund Fax: +49 231 96989961 WWW: pinguin.sauerland.de
/( )\ Germany
^`~'^
 
Nachtrag:

hat evtl. jemand ein Datenblatt von einem derartigen Incrementalgeber, in
dem die Impulsfolgen zu sehen sind, das wuerde schon sehr helfen...?
Bei Alps.de werde ich nicht fuendig.

Bye Daniel

--
.~. Daniel Schramm Phone: +49 231 6108112 Mail:daniel.schramm@gmx.de
/V\ Bruehlweg 36 Mobile:+49 178 8839848 ICQ: 35816985
// \\ 44379 Dortmund Fax: +49 231 96989961 WWW: pinguin.sauerland.de
/( )\ Germany
^`~'^
 
Daniel Schramm schrieb:

ist. Der von Alps dagegen hat nur folgende moegliche Stellungen:

Rechtsdrehung: 00->10->01
Linksdrehung: 00->01->10

Die 11 fehlt also komplett. Die Stellung 00 ist zwischen 2 Rastungen
untergebracht, soll also beim durchlaufen ueberhoert werden.
Der wird halt defekt sein.


Gruß Dieter
 
Dieter Wiedmann wrote:

Daniel Schramm schrieb:

ist. Der von Alps dagegen hat nur folgende moegliche Stellungen:

Rechtsdrehung: 00->10->01
Linksdrehung: 00->01->10

Die 11 fehlt also komplett. Die Stellung 00 ist zwischen 2 Rastungen
untergebracht, soll also beim durchlaufen ueberhoert werden.

Der wird halt defekt sein.
Jepp, war er *grummel*

Danke Daniel

--
.~. Daniel Schramm Phone: +49 231 6108112 Mail:daniel.schramm@gmx.de
/V\ Bruehlweg 36 Mobile:+49 178 8839848 ICQ: 35816985
// \\ 44379 Dortmund Fax: +49 231 96989961 WWW: pinguin.sauerland.de
/( )\ Germany
^`~'^
 
Daniel Schramm wrote:


Der wird halt defekt sein.

Jepp, war er *grummel*
mit einem funktionierendem Impulsgeber klappt das Programm von gerade
uebrigens mit folgender Tabelle:

s08 encTable[16]={0,-1,+1,0,0,0,0,0,0,0,0,0,0,+1,-1,0};

(Die Zwischenstellungen 11 und 00 werden dabei sauber ignoriert.
Habe uebrigens auch gerade bemerkt, dass manche Drehbeber von Alps
00 und 11 als zwischenschritte haben, andere diese jedoch als statische.
Bei denen von Grayhill sind alle 4 Stellungen auf Rastungen zu finden.)

Bye Daniel

--
.~. Daniel Schramm Phone: +49 231 6108112 Mail:daniel.schramm@gmx.de
/V\ Bruehlweg 36 Mobile:+49 178 8839848 ICQ: 35816985
// \\ 44379 Dortmund Fax: +49 231 96989961 WWW: pinguin.sauerland.de
/( )\ Germany
^`~'^
 
Hallo Daniel,

ich glaube nicht, dass Dein ALPS kaputt ist, die sind meienr Erfahrung
nach alle so, wenn Du mit dem Oszi nachmisst, kannst Du sehen, dass
Gray-Code 'rauskommt, nur nicht immer in der richtigen Reihenfolge...
Ich verwende bei den ALPS (STEC16) folgende Schaltung (2x):

+5V
|
4k7
|
ALPS--+--+---47k---+---+----Quadraturdecoder
| | | Eingang
+---->|---+ 4n7
Diode |
GND

Dabei die Diode bei einem Kanal so 'rum und beim anderen Kanal
andersrum. Welche Richtung an welchen Kanal weiss ich gerade nicht,
einfach ausprobieren. Mit einem Schmitt-Trigger Eingang werden aus den
Signalen dann halbwegs brauchbare phasenverschobene Signale. Damit geht
die Quadraturdekodierung dann.

Gruss
Hartmut
 
On Wed, 07 Apr 2004 19:56:46 +0200, Hartmut Schaefer
<Hartmut.Schaefer@hartmut-schaefer.de> wrote:

Hi!

Rechtsdrehung: 00->10->01

ich glaube nicht, dass Dein ALPS kaputt ist, die sind meienr Erfahrung
nach alle so, wenn Du mit dem Oszi nachmisst, kannst Du sehen, dass
Gray-Code 'rauskommt, nur nicht immer in der richtigen Reihenfolge...
Beim Gray wechselt aber gerade nie mehr als eine Leitung gleichzeitig
den Zustand. Daniel schreibt zwar nicht, wie er die Signale
aufgenommen hat, aber wenns denn wirklich so ist, dann wird das Ding
wohl wirklich kaputt sein.

Gruß,
Michael.
 
Hallo Michael,

ich glaube nicht, dass Dein ALPS kaputt ist, die sind meienr Erfahrung
nach alle so, wenn Du mit dem Oszi nachmisst, kannst Du sehen, dass
Gray-Code 'rauskommt, nur nicht immer in der richtigen Reihenfolge...

Beim Gray wechselt aber gerade nie mehr als eine Leitung gleichzeitig
den Zustand.
Deswegen schrieb ich ja auch "nicht immer in der richtigen
Reihenfolge...", da haette ich wohl noch ein Ironie-Tag einfuegene
sollen. Der Alps vermurkst die Flanken abhaengig von der Drehrichtung,
so dass eben keine sauberen 90° verschobenen Signale 'rauskommen. Die
Alps, die ich einsetze, haben sich genauso benommen wie von Daniel
beschrieben, deshalb nehme ich an, dass es sich um das gleiche Problem
handelt.
Beispiel: Wenn man die Schalter im Alps gegen Masse schalten laesst und
einen Pull-Up verwendet, sind die Ausgaenge im Ruhezustand auf 11.
Bei Drehung im Uhrzeigersinn:
11 10 00 11, wobei der Wechsel von 00 auf 11 eben manchmal ueber 10 oder
01 laeuft, je nachdem, wie es der Schalter gerade mag oder was die
Dekodierung draus macht (Abstand der beiden Flanken wenige ns).
Im Uhrzeigersinn:
11 00 10 11, Wechsel von 11 auf 00 siehe oben.

Hinweis an Daniel: Wenn es ein STEC16 ist: Von vorne gesehen muss an den
linken Pin die Diode mit der Kathode angeschlossen werden, rechts mit
der Anode.

Gruesse
Hartmut
 
Hartmut Schaefer wrote:

Hallo Hartmut,

nach Austausch des Gebers habe ich jetzt auch festgestellt das die Impulse
von dem Drehgeber eine Katastrophe sind, wahnsinnig am Prellen und
eigentlich wirklich ein Fall fuer Deie Schaltung + Schmitt-Trigger.

Ich hatte jetzt allerdings keine Lust, die Hardware zu aendern und habe die
Entprellung per Software realisiert.

Dise mechanischen Dinger von Alps sind wirklich eine Katastrophe im
Vergleich zu den optischen von Grayhill, die liefern perfekte Signale und
jeder Gray-Code ist eine eigene Position.

Wenn jemand Interesse an der kompletten Software hat, schicke ich sie gerne
per PM zu.

Bye Daniel

--
.~. Daniel Schramm Phone: +49 231 6108112 Mail:daniel.schramm@gmx.de
/V\ Bruehlweg 36 Mobile:+49 178 8839848 ICQ: 35816985
// \\ 44379 Dortmund Fax: +49 231 96989961 WWW: pinguin.sauerland.de
/( )\ Germany
^`~'^
 
Meinereiner hat den auch verwendet, aber ohne Probleme. Ich setze eine
(MAWIN sei Dank) Statemachine ein und verwende bei den a & B Leitungen 100nF
gegen Masse. Pullup kommt vom Prozessor intern und schalten tut der Encoder
(ich weiss, tuten tut nur der Nachtwächter) gegen Masse. Damit habe ich nie
Probleme gehabt. Schönere Drehencoder sind aber die von Bourns und
günstiger. Da habe ich mal 50000 Umdrehungen gemacht und alle 1000 eine
Impulsantwort. Das ist von Anfang bis Ende genausogut und per C gegen Masse
auch gut hinzubekommen. Die optischen sind halt dann doch deutlich teurer.

Bye
Carsten
"Daniel Schramm" <daniel@pinguin.sauerland.de> schrieb im Newsbeitrag
news:40752611@olaf.komtel.net...
Hartmut Schaefer wrote:

Hallo Hartmut,

nach Austausch des Gebers habe ich jetzt auch festgestellt das die Impulse
von dem Drehgeber eine Katastrophe sind, wahnsinnig am Prellen und
eigentlich wirklich ein Fall fuer Deie Schaltung + Schmitt-Trigger.

Ich hatte jetzt allerdings keine Lust, die Hardware zu aendern und habe
die
Entprellung per Software realisiert.

Dise mechanischen Dinger von Alps sind wirklich eine Katastrophe im
Vergleich zu den optischen von Grayhill, die liefern perfekte Signale und
jeder Gray-Code ist eine eigene Position.

Wenn jemand Interesse an der kompletten Software hat, schicke ich sie
gerne
per PM zu.

Bye Daniel

--
.~. Daniel Schramm Phone: +49 231 6108112
Mail:daniel.schramm@gmx.de
/V\ Bruehlweg 36 Mobile:+49 178 8839848 ICQ: 35816985
// \\ 44379 Dortmund Fax: +49 231 96989961 WWW:
pinguin.sauerland.de
/( )\ Germany
^`~'^

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.654 / Virus Database: 419 - Release Date: 06.04.2004
 

Welcome to EDABoard.com

Sponsor

Back
Top