pulse direction signal zu encoder a b?

#1850402
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
Gast #1854082
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
#1854558
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
Gast #1855358
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 :)
#1855428
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
#1855452
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
#1957468
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 :-)
#1957485
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.
#1960331
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
#1960361
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
#1960406
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...
#1960458
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)
#1960492
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.
#1960504
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 );
     }
  }
#1960531
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.
#1960594
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren