PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C167 und Verarbeitung von TTL-Rechtecksignale



Naeel
13.12.2006, 09:47
Hallo an alle,

kann mir jemand helfen. Ich habe einen magnetischen Inkrementalgeber der mir Rechtecksignale A /A B /B ausgibt. Kann ich diese mit meinem c167 mikrocontroller auslesen?

Danke

Jaipur
13.12.2006, 12:36
kommt ganz darauf an wie schnell sich der inkrementalgeber maximal drehen soll. unter der rubrik ac characteristics müsstest du diese daten dann nachlesen. also wie schnell sich die signale ändern dürfen damit der c167 diese auch mitbekommt...

Naeel
13.12.2006, 12:47
Aber kann er grundsätzlich das. Und wo könnte ich nachlesen wie solche C-Programme ausschauen?

Jaipur
13.12.2006, 13:25
ich kann dir keine allgemeine antwort auf die frage geben, es ist auch davon anhängig um welche spannungspegel es sich bei dem inkrementalgeber handelt... und dann müsste ich noch die datenblätter vom inkrmentalgeber und vom C167 lesen und dann müsste ich mir noch gedanken darüber machen wo der inkrementalgeber eingesetzt werden soll. also wie schnell er sich drehen kann/darf. der inkrementalgeber hat selbst eine maximale grenze.

gunzelg
13.12.2006, 18:27
Hallo Naeel

zunächst musst du die Pegel klären. Dann hat ein uC keine Schnittstelle für diese Art Sensor. Aber das ist kein Problem. Du brauchst grundsätzlich ein A- und ein B-Signal. (Wenn du nur die Drehzahl willst, also kein Richtungssignal reicht dir sogar das A oder das B-Signal.) Du schliesst eines der Signale an einen digitalen Port des C167, der Interrupt-fähig ist. In der ISR frägst du den jeweils anderen Pegel ab, Das sagt dir die Drehrichtung. Der Rest, also was du überhaupt brauchst, wie Drehgeschwindigkeit oder Position ist alles dein Problem, das musst du entsprechend programmieren.

Gerhard

Naeel
13.12.2006, 22:14
Vielen Dank Jaipur und Gerhard

Also ich brauche schon eine Richtungsrekennung. Aber wieso hat man eigentlich A und dann noch /A invertiert und bei B genauso. Und welche Vorteile/Nachteile bringt mir ein sin/cos Encoder?Die Pegel sind Standard TTL 5V.

Vielen Dank nochmal

SprinterSB
13.12.2006, 23:13
Softwaremässig könnte es so ähnlich aussehen:



#define DREH_INVALID -128

char drehgeber_step (unsigned char a0, unsigned char a1)
{
static const char drehgeber_trainsitions[] =
{
0, 1, -1, DREH_INVALID,
-1, 0, DREH_INVALID, 1,
1, DREH_INVALID, 0, -1,
DREH_INVALID, -1, 1, 0
};

static unsigned char a_alt;

unsigned char a = a_alt;

if (a0) a |= (1 << 2);
if (a1) a |= (1 << 3);

a_alt = a >> 2;

return drehgeber_trainsitions[a];
}


Das ist so simpel, daß ich mit den Kommentar spare ;-)
In die Funktion kommt man rein mit den beiden Werten für A (zB a0) und B (zB a1). Wenn du A und B andersrum zuordnest, bekommst du die Drehrichtung genau andersrum.

Zu Anfang des Programms musst du die Routine einmal mit den Portwerten aufrufen, um a_alt richtig zu initialisieren (den return-Wert wirfst du weg).

Entweder du machst das in einer ISR oder per Poll.

Die Code ist Standard-C und nicht speziell für C16x.

Der C16x hat doch nen Quadratur-Decoder...oder war das TriCore? :-k