www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Drehimpulsgeber


Autor: Boris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe einen ALPS Drehimpulsgeber mit drei Pins. Aus Messungen weis
ich, dass bei einer Stufe Drehung, abhängig von der Drehrichtung, erst
der eine und dann der andre Pin gegen den Dritten geschlossen wird. Bei
entgegengesetzter Richtung anders herum, also entstehen zwei
phasenverschobene Signale.

Hat irgendjemand eine Idee, wie ich diese Signale in ein Impuls- und
ein Richtungssignal verwandeln kann??

Ich habe mir schon überlegt, irgendwie mit einem Flipflop mit Preset
ans Ziel zu gelangen....

Autor: Zoltan Gradwohl (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein paar Links:

http://www.mikrocontroller.net/forum/read-4-11611.html
http://www.mikrocontroller.net/forum/read-1-18797.html
http://dse-faq.elektronik-kompendium.de/dse-faq.htm
http://www.portlandrobotics.org/robots/servo_encoder/


Ich habe mit Hilfe der Beispiele aus diesen Links auch ein Programm
geschriben bzw. "zusammenkopiert". Ich benutzte jedoch einen
selbstgebauten Impusgeber, bestehend aus zwei Reflexkopplern, siehe
Link oben mit den Servos.

Gruß
Zoltan

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du legst einfach den einen Kanal des Drehgeber auf einen Interrupt
Eingang. Wenn dieser Interrupt kommt schaust Du dir den Status des
zweiten Kanals (der auf nem normalen Eingang liegt) an.

Werner

Autor: René Klepsch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So im bild siehst du wie ich es gemacht habe für 68HC11 doch dürfte auch
bei dir gehen. also der schler löst aus und dann blockt ergleich den
eingang so das der zweite keine chance hat an das FlipFlop zukommen.
und der IRQ wird solange gesetzt bis ein Schreibzugriff erfolgt als RW
leitung auf High geht. leider bis jetzt nur im simulatur geteste es
könnte sein das die impulse zu schnell auf einander folgen und das
gatter nicht mehr richti dicht machen kann.
muss am mal testen oder weiß einer die nanosec zwischen den signalen?

wenn du dir http://www.digitalsimulator.de/ den DIGISIM installierst
kann ich dir auch das digifile schicken.

tschö

René

Autor: A. Arndt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche das ganz mit 2 I/O-Ports, möchte keinen Interupt opfern,
frage einen Pin ab und wenn auf LOW geht frage den anderen Pin.

Ich baue es in kürze auf, mal sehen ob es klappt.

Gruss
A. Arndt

Autor: René Klepsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab gerade nochmal geschau also 5ms scheinen typische werte für die Zeit
zwischen den beiden kontakten zu sein. also mit meiner schaktung kein
problem da nur 5 gatter durchlaufen werden also ca 50ns verzögerung.
werde die aber in ispCPLD "einbauen" und ma sehn ob es geht.

tschö
René

Autor: A. Arndt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

klappt astrein, wie oben erklärt, nach der Auswertung mit Pause von
50ms.

Gruss
A. Arndt

Autor: Gerhard Humer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
 mit dem unten angeführten Code hab ich mit einem 2313er und
Bascom eine 4-fach Auswertung eines Drehgebers gemacht.
( 500 Striche am Geber = 2000 Impulse/Umdrehung!!)

@ A.Arndt
bei solchen Anwendungen ist es sicher besser die Interrupt's zu
verwenden anstatt der Polling-Methode.


 Gruss Gerhard







Dim Wert As Integer
  Wert = 0
  Config Portd = Input
  Portd = 255
  Enc_a Alias Pind.3
  Enc_b Alias Pind.2
  Mcucr = &B00001111
  On Int0 Encoder0
  On Int1 Encoder1
  Enable Int0
  Enable Int1
  Enable Interrupts

  Do
  Loop

  End

  Encoder1:
  Toggle Mcucr.isc10
  If Enc_a <> Enc_b Then
    Decr Wert
  Else
    Incr Wert
  End If
  Return

  Encoder0:
  Toggle Mcucr.isc00
  If Enc_a = Enc_b Then
    Decr Wert
  Else
    Incr Wert
  End If
  Return

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Philipp K. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kommt vielleicht etwas spät, aber ich habs erst gestern entdeckt.
Ich hatte das selbe Problem wie Boris. Wie kann man aus dem
Dehimpulsgeber (DIG) ein Richtungssignal machen.
Ich hatte einen Mikrocontroller verwendet und eine Software dazu
geschrieben, hat auch alles funktioniert (ich benutze C-Control, die
hat also kein Interrupt). Is alle schon 2 Jahre her.
Jetzt möchte ich allerdings "Rechenleistung" einsparen und das
Drehimpulsgebersignal hardwaretechnisch auswerten. Das heißt, dass beim
Rechtsdrehen Pin 1 pulst und beim Linksdrehen der andrere Pin pulst.
Leider kenne ich mich kaum mit Digitaltechnik aus, hab gestern erst
damit angefangen ;) und hab jetzt mit dem Programm Digitalsimulator
einiges ausprobiert. Eine Schaltung hat funktioniert, hatte aber 6
Gatter und ein Flip-Flop.
Heute bin ich durch Ausprobieren auf eine Schaltung gekommen, die ich
im Anhang als Bild beigefügt hab.
Und zwar benutze ich ein T-Flip-Flop, wobei Pin A des DIG an den
eingang kommt und Pin B des DIG an den Clockeingang (sagt man das so?)
Lustigerweise funktioniert das sehr gut. Das EXOR Gatter dient nur noch
für den "Impuls", damit das Signal nicht immer auf High ist.

Ich wollte mal die versierten unter euch fragen, ob das prinzipiell
möglich ist. Kann ich so ne Schaltung bauen und funktioniert die auch
in der Praxis? Wie gesagt, sorry, ich kenn mich kaum mit Digitaltechnik
aus.

Autor: Philipp K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi nochmal,

ich hab den anderen Beiträgen entnehmen können, dass das Thema
"Drehimpulsgeber" wohl schon langsam den Hals raushängt.
Allerdings beschäftigen sich alle Beiträge mit einer softwareseitigen
Verarbeitung der Signale und ich hab noch nichts über eine
Hardwarelösung gesehen.
Könnte nicht vielleicht doch der eine oder andere auf meine Frag
eingehen?
Wäre sehr dankbar.

Grüße aus Norwegen
Philipp

Autor: Florian S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei ELV gibt es eine Schaltung die ein Drehimpulsgeber zur Ansteuerung
eines Digitalpotentiometer nutzt.
Die Drehrichtung wird durch ein D-FlipFlop (CD4013) ermittelt.
(Ausgang B an Clock-Eingang, Ausgang A an D-Eingang, je nach
Drehrichtung Low oder High an Q).

Autor: Wolle (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hilft dir der Anhang etwas.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Philip,

die Schaltung ist aus mehreren Gründen kritisch:

1.
Es wird nicht jeder Phasenwechsel erkannt, sondern nur jeder 4.
Man braucht also Drehgeber, die immer nach 4 Schritten einrasten.

2.
Es kommt beim Umschalten durch die unterschiedlichen Durchlaufzeiten
durch das D-FF bzw. EXOR zu Spikes, die zu Fehlzählungen führen können

3.
Prellungen werden nicht unterdrückt und können zu Fehlzählungen
führen.


Für normale Mikrokontroller stellt der geringe Softwareaufwand keine
nennenswerte Belastung dar, deshalb wird diese Lösung bevorzugt.
Wenn die C-Control aber damit überfordert ist, würde ich daher besser
z.B. einen ATTiny12 die Aufbereitung durchführen lassen.


Peter

Autor: Philipp K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal für die antworten.

@Florian S. : Ups, ich meinte natürlich auch ein D-Flip-Flop kein T-FF
wie ichs geschrieben hab. muss ich mal nachschauen bei ELV.

@Wolle: hm, da muss ich mich erstmal ein wenig reindenken ;)

@Peter Dannegger:
Mein DIG wechselt pro Rasterstellung den Zustand der ausgänge je
einmal. Pro klick bekomme ich auch ein Impuls (zumindest nach der
Simulation)
2. Spikes? was ist das? sorry, hab kA.
3. Prellungen sollten doch egal sein, wegen dem d-Flip-Flop. Die
Signale der beiden DIG Ausgänge sind doch recht weit auseinander
(verglichen mit den Prellstörungen) wenn man nicht gerade wie ein Ochs
am Rad dreht oder Formel-1 spielt :) und das d-FF müsste das eigentlich
weg"glätten"

Die Auswertung mit dem mikroC (wie kürzt man das eigentlich ab?) stellt
zwar kein Problem da, das stimmt, aber ich wollte den Programmcode
minimieren. Das ganze wird ziemlich komplex, da ich eine Menüsteuerung
damit machen will, und dabei bleibt es nicht. Der Programmcode hat
jetzt schon fast 900 Zeilen und da ist nichtmal die Menüführung drin.
ich kann dir ja mal die *.dsim schicken, wenn du digitalsimulator hast,
dann könntest du mal ausprobieren :)

Man bekommt pro rasterstellung einen Impuls.
Ich probiers einfach mal aus, wenn ich wieder kann.
Ach noch was, woher weiß ich eigentich, welchen IC ich kaufen muss.
Also ich mein, kann man irgendwo nachschlagen in welchem IC Gatter oder
Flipflops integriert sind?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.