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
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)
@ 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
Thomas R. schrieb: > (oder TTL grab bauen) Das wird bestenfalls ein kleines Gräbchen: es ist ja nur ein Gray-Zähler mit Richtungsumschaltung...
@ 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
Falk Brunner schrieb: > Schon mal an die Klimaerwärmung gedacht . . .? ;-) Warum wusste ich das vorher? :-))
Falk Brunner schrieb: > dass man das mit ... TTL-ICs bauen kann. Schon mal an die Klimaerwärmung gedacht...? ;-)
@ 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 . . .
So, hier die Lösung mit drei stromsparenden CMOS-ICs, ohne Programmierung, machen locker 10 MHz mit. MfG Falk
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
Hallo, ich habe mal noch eine Frage an falk: Wie bist du auf die Schaltung gekommen? Vielen dank :)
@ 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
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...
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 :)
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 |
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
wie kann man das auf einen com port legen (rs232) mfg jens
@jens (Gast)
>wie kann man das auf einen com port legen (rs232)
Was soll denn das werden?
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
so und jetzt mal für dume also für mich grins ist das nicht das gleiche
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
Du mußt die berechnete Position (aus der Schrittmotorsteuerung) mit der realen Position (z.B. von einem Drehgeber) vergleichen...
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.
> 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 :-)
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.
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
@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
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?
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?
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...
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
Das ist doch ein Schrittmotortreiber. Was willst du denn mit dem?
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.
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.
wäre mal ein Versuch wert. Hab eh noch ein Zuhause rumliegen.
Wenn, dann sieht der "Normal Drive Mode" am besten aus. Sag Bescheid, ob es geht!
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)
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.
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!?
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.
ok, soweit war mir das acuh klar, aber wie kann ich a toggeln und dann b nachziehen, dass diese dann ganu 90° Phasneverschoben sind?
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 ); } }
Mit dem code sind meine Ausgänge A und B um 90° Verschoben? Blick ich noch nicht ganz!!!
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.