Forum: Mikrocontroller und Digitale Elektronik pulse direction signal zu encoder a b?


von prinz3nroll3 (Gast)


Lesenswert?

Hallo,
ich habe ein Schritt und Richtungssignal (TTL) und würde dies gerne in 
ein
A/B Signal wie von einem Encoder wandeln (TTL).


Gint es fertige ICs oder Lösungen?


Danke

von Thomas R. (tinman) Benutzerseite


Lesenswert?

http://www.mikrocontroller.net/articles/Drehgeber

nur in die andere richtung, VHDL ist da kannst also ein CPLD dafür 
nehmen (oder TTL grab bauen)

von prinz3nroll3 (Gast)


Lesenswert?

Hallo,
mhh finde beides nicht so gut :(


danke

von Falk B. (falk)


Lesenswert?

@  prinz3nroll3 (Gast)

>mhh finde beides nicht so gut :(

Deine Wandlung von Richtung/Takt in A/A ist auch sehr unüblich. Kann man 
aber einfach per Mikrocontroller oder Hardware machen, ist ja nix weiter 
als eine Tabelle mit 4 Einträgen. Bei einem Schritt vorwärts geht man 
zum nächsten Eintrag, beim Schritt rückwärts logischerweise rückwärts. 
Das Ganze in TTL Logik ist ne nette kleine Aufgabe für 
Studenten/Schüler.

MfG
Falk

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas R. schrieb:
> (oder TTL grab bauen)
Das wird bestenfalls ein kleines Gräbchen:
es ist ja nur ein Gray-Zähler mit Richtungsumschaltung...

von Klaus W. (mfgkw)


Lesenswert?

Ich schlage da wieder das unbeliebte GAL vor...

von Falk B. (falk)


Lesenswert?

@  Klaus Wachtler (mfgkw)

>Ich schlage da wieder das unbeliebte GAL vor...

Schon mal an die Klimaerwärmung gedacht . . .? ;-)

Ohne es jetzt genau geprüft zu haben würde ich mal sagen, dass man das 
mit weniger als 5 TTL-ICs bauen kann.

MFG
Falk

von Klaus W. (mfgkw)


Lesenswert?

Falk Brunner schrieb:
> Schon mal an die Klimaerwärmung gedacht . . .? ;-)

Warum wusste ich das vorher?  :-))

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Falk Brunner schrieb:
> dass man das mit ... TTL-ICs bauen kann.
Schon mal an die Klimaerwärmung gedacht...?   ;-)

von Falk B. (falk)


Lesenswert?

@  Lothar Miller (lkmiller) Benutzerseite

>> dass man das mit ... TTL-ICs bauen kann.
>Schon mal an die Klimaerwärmung gedacht...?   ;-)

Jaja, 74HC ist logisch noch TTL, elektrisch halt nicht mehr . . .

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

So, hier die Lösung mit drei stromsparenden CMOS-ICs, ohne 
Programmierung, machen locker 10 MHz mit.

MfG
Falk

von prinz3nroll3 (Gast)


Lesenswert?

Hallo,
mensch wie cool ist das denn ;)


Vielen dank eine integrierte Lösung habe ich nicht gefunden und
gibt es scheinbar nicht -> diskret aufbauen.

Die Lösung wurde hier ja schon geposted dafür nochmals vielen dank!


Danke für die Antworten.


Grüße

von prinz3nroll3 (Gast)


Lesenswert?

Hallo,


ich habe mal noch eine Frage an  falk:

Wie bist du auf die Schaltung gekommen?


Vielen dank :)

von Falk B. (falk)


Lesenswert?

@  prinz3nroll3 (Gast)

>Wie bist du auf die Schaltung gekommen?

Ich hab meinen Voodoopriester gefragt. ;-)

Ganz einfach.

1.) Wahrheitstabelle aufstellen
2.) KV-Diagramm erstellen
3.) Terme aus KV Diagramm ablesen
4.) ODER in NAND sowie dadurch automatisch AND in NAND wandeln, dadurch 
nur ein Typ von Logik IC notwendig, 74HC00.
5.) Schaltplan in Eagle zeichnen

1.-4. hab ich auf nem alten Briefumschlag gemacht ;-)

MFG
Falk

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Bei Schritt 3 kann man auch erkennen, dass da was mit EXOR und EXNOR zu 
machen ist (das ist ja auch irgendwie naheliegend beim Gray-Code) und 
erhält dann die Lösung mit 2 ICs.... ;-)

Und natürlich wegen der Klimaerwärmung: HC-MOS ICs verwenden...

von prinz3nroll3 (Gast)


Lesenswert?

Hallo,
auf die Vereinfachung komme ich wenn ich die Funktion aus dem Schaltbild 
lese.
Leider weiß ich nicht wie ihr auf die Wahrheitstabelle kommt.
Das ist schon alles "so lange" her duck

Eingangssignale sind ja DIR & STEP Ausgang ist A und B.

Danke :)

von Falk B. (falk)


Lesenswert?

1
Wahrheitstabelle für Gray Zähler, vorwärts rückwärts
2
3
    aktuell  neu
4
DIR B  A     B' A'
5
0   0  0     0  1    vorwärts, neuer Code aus nachfolgender Zeile
6
0   0  1     1  1
7
0   1  1     1  0
8
0   1  0     0  0
9
1   0  0     1  0    rückwärts, neuer Code aus vorhergehender Zeile
10
1   0  1     0  0
11
1   1  1     0  1
12
1   1  0     1  1

von Falk B. (falk)


Lesenswert?

Und hier das KV Diagramm für A'

1
     A 0110
2
DIR  B 0011 
3
---- +-------
4
 0   | 1100    
5
 1   | 0011

Und hier das KV Diagramm für B'

1
     A 0110
2
DIR  B 0011 
3
---- +-------
4
 0   | 0110
5
 1   | 1001

Womit wir ablesen können.

1
A' = (!B and !DIR) or (  B and DIR) = !(B XOR DIR)
2
B' = ( A and !DIR) or ( !A and DIR) =   A XOR DIR

Ich hatte das XOR übersehen und mit DeMorgans Theorem die OR in NAND 
überführt. Einfach die gesamte Gleichung DOPPELT invertieren, dabei 
werden die Einzelterme invertiert und aus OR wird AND. Damit hat man am 
Ende reine NAND-Gatter.

1
A' = (!B and !DIR) or (  B and DIR) = !(!(!B and !DIR) and !(  B and DIR))
2
B' = ( A and !DIR) or ( !A and DIR) = !(!( A and !DIR) and !( !A and DIR))

Mfg
Falk

P S Naja, aber pädagogisch war des jetzt weniger wertvoll  . . . :-0

von jens (Gast)


Lesenswert?

wie kann man das auf einen com port legen (rs232)

mfg jens

von Falk B. (falk)


Lesenswert?

@jens (Gast)

>wie kann man das auf einen com port legen (rs232)

Was soll denn das werden?

von jens (Gast)


Lesenswert?

eine schritt überwachrung für schrittmotoren

von Falk B. (falk)


Lesenswert?

Und was soll dann dieser Encoder dabei machen? Ne Schritt überwachung 
macht man doch eher mit einem Drehgeber an der Last, da merkt man, 
ob man Schritte verliert.

MFg
Falk

von jens (Gast)


Lesenswert?

so und jetzt mal für dume also für mich grins

ist das nicht das gleiche

von Falk B. (falk)


Lesenswert?

Nö.

Ein Drehgeber wandelt die physikalische Drehbewegung der LAST in den 
Gray-Code. Ein parallel zu deinem Schrittmotor laufender Encoder wird 
IMMER den richtigen Code anzeigen, wie willst du dann einen 
Schrittfehler feststellen?

MFG
Falk

von jens (Gast)


Lesenswert?

ah ok gut zu wiessen


und was kann ich jetzt nehmen

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Du mußt die berechnete Position (aus der Schrittmotorsteuerung) mit der 
realen Position (z.B. von einem Drehgeber) vergleichen...

von jens (Gast)


Lesenswert?

ich habe einen drehgeber brauche den auf rs232

von Klaus W. (mfgkw)


Lesenswert?

Dann fehlt ein Controller dazwischen und eine halbwegs bemühte 
Rechtschreibung, sowie eine irgendwie geartete Suchfunktion.
Wie man mit einem AVR eine Drehgeber anspricht steht im Tutorial,
ebenso wie RS232 auf einem AVR.

Oder brauchst du jemanden, der dir das alles baut?
Für Geld geht das.

von jens (Gast)


Lesenswert?

was würde es kossten

von Karl H. (kbuchegg)


Lesenswert?

> was würde es kossten

was genau ist denn zu machen?

das hier

> ich habe einen drehgeber brauche den auf rs232

ist mir zu wenig, als dass ich eine Stundenzahl nennen würde.
Was ist mit Hardware?
Welcher Encoder?
Über welche Pulszahlen reden wir?
Was ist wenn die RS232 nicht mit dem Encoder mithalten kann?
Wie exakt soll RS232 eingehalten werden? Handshake ja/nein. Wenn ja: 
welches? TTL-RS232 oder volles mit +-12V?
Was genau soll über die RS232 übertragen werden?

Und das sind jetzt nur die Fragen, die mir in 20 Sekunden eingefallen 
sind und ohne deren Beantwortung ich auf keinen Fall mich irgendwie aus 
dem Fenster lehnen würde :-)

von Klaus W. (mfgkw)


Lesenswert?

Kommt drauf an:

- Welcher Drehgeber?

- Mit welcher Frequenz kommen die Signale?

- Wieviele Schritte sollen maximal summiert werden können?

- Geht es nur um die a/b-Signale, oder auch um Nullpunkt?

- Was soll über RS232 geliefert werden? Nur die gezählten
  inkrementellen Schritte, oder Absolutwerte? Ggf. wie wird
  der Nullpunkt gesetzt?

- Einzelexemplar oder mehrere?

- Professionelle Platine oder frei verdrahtet?
  Oder nur die Schaltung, und du baust selber?

- Auch Programmierung auf der PC-Seite, oder kannst
  du das selber?

Ohne vernünftige Beschreibung kann dir niemand den Aufwand schätzen.

von Alexander S. (slashb32)


Lesenswert?

Hallo,
Ich bin auf der suche nach einer Schaltung, das einen 2 bit Gray-Code 
erzeugen kann. Dieser soll einen Drehimpulsgeber ersetzen.
Ich baue gerade ein Handrad für eine CNC-Maschine. Nun will ich zwei 
Tasten + bzw. - integrieren, die folgende Aufgaben haben sollen.
Wenn ich eine von den Tasten + bzw. - drücke, soll meine Achse 
verfahren. Bei der verwendeten software istdies leider nicht möglich, so 
will ich meinen vorhandenen Drehimpilsgeber Hardware überbrücken und 
einen 2 Bit Gray Code erzeugen und mit den Tastern + bzw. - verbinden um 
so meine Achsen zu verfahren.
nun zu meiner eigentlichen Frage, eigent sich die oben gezeigte 
Schaltung dazu oder nicht?
Oder weiß von euch einer, wo ich einen Schaltung finden kann, die einen 
2 bit Gray code erzeuegen kann?

Bin für jede hilfe Dankbar

von Falk B. (falk)


Lesenswert?

@Alexander Schöll (slashb32)

>nun zu meiner eigentlichen Frage, eigent sich die oben gezeigte
>Schaltung dazu oder nicht?

Eher nicht, denn man muss aus den beiden Tasten ein Vorwärts- und 
Rückwärtssignal generieren.

>Oder weiß von euch einer, wo ich einen Schaltung finden kann, die einen
>2 bit Gray code erzeuegen kann?

Das kann jeder kleine Mikrocontroller, ein kleiner AVR mit 8 Pins reicht 
locker.

MFG
Falk

von Klaus W. (mfgkw)


Lesenswert?

Mit dem Tutorial und dem Artikel über Drehgeber kann man das bauen,
mit einem kleinen Controller ist das nicht schwer.
Traust du dir das zu?
Welche Vorkenntnisse hast du?
Welche Bereitschaft, Zeit und Energie zu spendieren?

von Alexander S. (slashb32)


Lesenswert?

Vorkenntnisse in C++ und Programmierung von Microcontroller sind 
vorhanden, der Zeitaufwand sollte ich aber in Grenzen halten max. ein 
paar Stunden. habt ihr schon ne Idee, wie man dass realisieren kann.
Hardware- lösung kennt ihr keine?

von Klaus W. (mfgkw)


Lesenswert?

Dann ist das doch ziemlich geradlinig:
Ein MC (AVR oder was dir gefällt) liest zwei Taster aus (mit
Entprellung), und erzeugt gemäß der gewünschten Drehrichtung
die Schrittfolge.
Die wiederum ist im Artikel über Drehgeber zu finden.

Ohne MC sollte es mit etwas Nachdenken auch mit ein paar
74HC... gehen. Vielleicht gibt es sogar einen davon, der
aus Schritt und Richtung die Folge erzeugt; müsste man
mal die Liste durchsehen.

Oder gleich ein GAL brennen...

von Alexander S. (slashb32)


Lesenswert?

Bin neu hier im Forum, wo finde ich denn denn Artikel vom Drehgeber, 
kann ihn auf anhieb nicht finden.
Danke für eine Ratschläge

von Alexander S. (slashb32)


Lesenswert?

Schau mir gerade das IC L297 an, meinst du es könnte mit diesem IC 
klappen?

von Klaus W. (mfgkw)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Das ist doch ein Schrittmotortreiber. Was willst du denn mit dem?

von Klaus W. (mfgkw)


Lesenswert?

Der L297 ist für Ansteuerung von Schrittmotoren.
Ich glaube nicht, daß man den 1:1 dafür mißbrauchen kann.
Er macht etwas ähnliches, aber ohne die Überdeckung der Impulse.

von Klaus W. (mfgkw)


Lesenswert?

Oder vielleicht doch.
Wenn ich mir im Datenblatt die Ausgänge A und C anschaue, sieht
das schon so aus.
Die An-/Auszeiten sind nicht gleich lang, wäre also wenn überhaupt
dann eine Krücke.

von Alexander S. (slashb32)


Lesenswert?

wäre mal ein Versuch wert.
Hab eh noch ein Zuhause rumliegen.

von Klaus W. (mfgkw)


Lesenswert?

Wenn, dann sieht der "Normal Drive Mode" am besten aus.
Sag Bescheid, ob es geht!

von Alexander S. (slashb32)


Lesenswert?

Die Zeiten sind doch gleich, oder täusch ich mich da?

von Karl H. (kbuchegg)


Lesenswert?

Dann musst du aber bei jedem Tastendruck, wenn ich mich jetzt nicht 
verzählt habe, 5 Pulse in den 297 reinschicken.

D.h. du brauchst den 297, einen 555 als Pulsgeber, einen Zählerbaustein, 
irgendwas als Gate.
Die Tasten sind noch nicht entprellt und wie das mit Vorwärts/Rückwärts 
funktioniert hab ich mir auch noch nicht überlegt.

Da ist dann doch ein Tiny einfacher.
(Sofern man den Programmer dazu schon hat)

von Karl H. (kbuchegg)


Lesenswert?

Karl heinz Buchegger schrieb:
> Dann musst du aber bei jedem Tastendruck, wenn ich mich jetzt nicht
> verzählt habe, 5 Pulse in den 297 reinschicken.

5 warn zu viel. Selbst im Half Steo Mode.
Aber auch bei Normal Mode braucht man doch 2 Pulse pro Encoderschritt.

von Alexander S. (slashb32)


Lesenswert?

Dann entscheid ich mich doch lieber für eine Lösung in AVR.
Habt ihr vielleicht schon was fertiges für mich?
Da meine ersten Erfahrungen doch schon ein wenig her sind und ich schon 
ein wenig eingerostent bin!?

von Klaus W. (mfgkw)


Lesenswert?

Das übt!

von Karl H. (kbuchegg)


Lesenswert?

Alexander Schöll schrieb:
> Dann entscheid ich mich doch lieber für eine Lösung in AVR.
> Habt ihr vielleicht schon was fertiges für mich?
> Da meine ersten Erfahrungen doch schon ein wenig her sind und ich schon
> ein wenig eingerostent bin!?

Das ist doch simpel

Wenns 1 Schritt vorgeht, dann zuerst A toggeln, dann B nachziehen.
Wenns 1 Schritt zurück geht, dann zuerst B toggeln, dann A nachziehen.

Da lohnt sich noch nicht mal ein Encoding Array

Noch eine Tastenentprellung rein (Vom Artikel 'Entprellung' holen. Aber 
die gute, dann kriegt man Autorepeat gratis!). Ev. noch Zustand ins 
EEPROM und beim Einschalten vom EEPROM

Fertig.

von Alexander S. (slashb32)


Lesenswert?

ok, soweit war mir das acuh klar, aber wie kann ich a toggeln und dann b 
nachziehen, dass diese dann ganu 90° Phasneverschoben sind?

von Karl H. (kbuchegg)


Lesenswert?

Alexander Schöll schrieb:
> ok, soweit war mir das acuh klar, aber wie kann ich a toggeln und dann b
> nachziehen, dass diese dann ganu 90° Phasneverschoben sind?

Jetzt enttäuscht du mich aber


  uint8_t toHigh;


   while( 1 ) {

     if( Taste_vor ) {
       if( toHigh ) {
         PORTx |= ( 1 << ENCODER_A );
         _delay_ms( 1 );
         PORTX |= ( 1 << ENCODER_B );
       }
       else {
         PORTx &= ~( 1 << ENCODER_A );
         _delay_ms( 1 );
         PORTX &= ~( 1 << ENCODER_B );
       }
       toHigh = 1 - toHigh;
     }

     else if( Taste_zurück ) {

        ....

     }
   }

wenn dir _delay_ms zu lang ist, dann eben kürzer. Aber 1000 mal in der 
Sekunde auf den Taster klopfen muss man erst mal hinkriegen.

Noch kürzer

   while( 1 ) {

     if( Taste_vor ) {
       PORTx ^= ( 1 << ENCODER_A );
       _delay_ms( 1 );
       PORTX ^= ( 1 << ENCODER_B );
     }

     else if( Taste_zurück ) {
       PORTx ^= ( 1 << ENCODER_B );
       _delay_ms( 1 );
       PORTX ^= ( 1 << ENCODER_A );
     }
  }

von Alexander S. (slashb32)


Lesenswert?

Mit dem code sind meine Ausgänge A und B um 90° Verschoben?
Blick ich noch nicht ganz!!!

von Karl H. (kbuchegg)


Lesenswert?

Definier doch bitte mal was 90° verschoben bedeutet und wie du das beim 
händischen drehen eines mechanischen Bauteils garantieren willst?

A geht zuerst auf 1 und nach einer kurzen Zeit danach kommt auch B auf 
1.
Siehe die Diagramme. Nur denke bloss nicht, dass die Realität so 
regelmässig ist, wie das die Diagramme suggerieren. Du wirst dir schwer 
tun, deinen Benutzer dazu zu bringen so regelmässig an einem Drehencoder 
drehen zu lassen.

von Alexander S. (slashb32)


Lesenswert?

Hab jetzt mal folgenden Code geschrieben:

$regfile = "m8def.dat"
$crystal = 16000000
$baud = 9600

Config Pind.2 = Input
Vor Alias Pind.2
Config Pind.3 = Input
Zu Alias Pind.3

Config Portd.5 = Output
A Alias Portd.5
Config Portd.6 = Output
B Alias Portd.6


Start:
Do
   If Vor = 1 Then
   Waitms 20
   If Vor = 1 Then A = 1
   Waitms 1000
   B = 1
   End If

   If Zu = 1 Then
   Waitms 20
   If Zu = 1 Then B = 1
   Waitms 1000
   A = 1
   End If


Loop
End

Wieso gehen meine Outputs nicht mehr aus, wenn ich den Taster los lasse?
Meinst

von Karl H. (kbuchegg)


Lesenswert?

Wo genau setzt du denn zb A wieder auf 0?

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.