www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Drehgeber Vierfachauswertung STK500 + ATmega32


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Olli ElPunkt (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo Community,

Wir haben ein Projekt bei dem wir eine Vierfach-Drehgeber-Auswertung mit 
µC realisieren sollen. Da wir alle jedoch noch keinerlei Erfahrungen 
damit haben kommen wir einfach nicht weiter.
Könnte uns jemand erklären wie man vorgehen muss? Also nicht wie man es 
genau programmiert, sondern die allgemeine Vorgehensweise, was man 
beachten muss oder was sonst noch dazugehört.

Wir haben schon versucht mithilfe eines Zaehlers die steigenden Flanken 
zu zaehlen, jedoch hat bislang noch nichts funnktioniert.

Unsere Hardware:

STK500
ATmega32
Hengstler Drehgeber mit 5000 Schritten/Umdrehung


Wäre super wenn uns jemand weiterhelfen könnte =)

Viele Grüße

Olli

Autor: Peter (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert

Autor: Olli L. (Firma: IMA Klessmann) (raisedfist)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Peter schrieb:
> vll hilft der code.....
>
> http://www.mikrocontroller.net/attachment/1971/ENCODE.C

Tut mir leid, aber den Code verstehe ich so ohne weiteres nicht. 
Könntest du vllt ein zwei Sätze dazu sagen warum man das ganze so 
programmiert hat?

Autor: Werner (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Olli ElPunkt schrieb:
> Hengstler Drehgeber mit 5000 Schritten/Umdrehung

Bei welcher Drehzahl sollen die Dinger denn laufen?
Und sind das Absolut- oder Inkrementaldrehgeber (Typenbezeichnung)?

Autor: SNR (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Die Suche liefert:
Drehgeber

Und noch sehr sehr sehr viele Beiträge im Forum.

Autor: Olli L. (Firma: IMA Klessmann) (raisedfist)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Werner schrieb:
> Olli ElPunkt schrieb:
>> Hengstler Drehgeber mit 5000 Schritten/Umdrehung
>
> Bei welcher Drehzahl sollen die Dinger denn laufen?
> Und sind das Absolut- oder Inkrementaldrehgeber (Typenbezeichnung)?

Ist ein Inkrementalgeber. Die Drehzahl soll variabel sein. Von 0 - 2800 
U/min.


Den Drehgeberbeitrag (http://www.mikrocontroller.net/articles/Drehgeber) 
habe ich mir auch schon durchgelesen, aber hilft mir auch nicht wirklich 
weiter.

Viele Grüße, Olli

Autor: Werner (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Olli L. schrieb:
> Ist ein Inkrementalgeber. Die Drehzahl soll variabel sein. Von 0 - 2800
> U/min.

Das könnte mit einem ATmega32 schon eng werden. Evtl. wäre ein FPGA da 
die bessere Lösung. Das kommt auch drauf an, was in der Auswertung 
passieren soll.

Autor: Olli L. (Firma: IMA Klessmann) (raisedfist)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Werner schrieb:
> Olli L. schrieb:
>> Ist ein Inkrementalgeber. Die Drehzahl soll variabel sein. Von 0 - 2800
>> U/min.
>
> Das könnte mit einem ATmega32 schon eng werden. Evtl. wäre ein FPGA da
> die bessere Lösung. Das kommt auch drauf an, was in der Auswertung
> passieren soll.


Das ist leider nicht möglich. Das Ganze muss mit einem ATmega32 laufen. 
Das Hauptziel ist, eine möglichst genaue Messauflösung bei kleinen 
Frequenzen. Bei den schnellen Frequenzen darf es ruhig ein bisschen 
ungenauer sein.


mfG

Autor: Martin Wende (Firma: fritzler-avr.de) (fritzler)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Holla.
(2800rpm*5000pulse)/60s = 233kHz
-> wird eng mit ner normalen Drehgeber Lib
Soll denn auch die Richtung erkannt werden?
Wenn nein kann am Code gespart werden, so müssen nur die Flanken eines 
der Kontakte pro zeiteinheit gezählt werden (per externem Takteingang 
des Hardwaretimer).

Autor: Werner (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Olli L. schrieb:
> Das Hauptziel ist, eine möglichst genaue Messauflösung bei kleinen
> Frequenzen.

Was heißt "genaue Messauflösung"?
Wie lang darf die Messung dauern?
Wie genau soll es sein?
Was soll gemessen werden?

Autor: Willi (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Martin Wende schrieb:
> (2800rpm*5000pulse)/60s = 233kHz

Warum so schüchtern? Bei 4-fach Auswertung sind es 4 x 233kHz :-)

Olli L. schrieb:
> Das Ganze muss mit einem ATmega32 laufen.

Liefert der Drehgeber Sinus/Cosinus- oder Rechtecksignale?
Bei phasenverschobenen Rechtecksignalen müßte der ATmega mit >50MHz 
laufen, um die Impulse zu verarbeiten.

Autor: Werner (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Willi schrieb:
> Liefert der Drehgeber Sinus/Cosinus- oder Rechtecksignale?

Ohne Typenbezeichnung oder Link aufs Datenblatt läßt sich das schlecht 
beantworten, wenn man den Geber nicht beim Vornamen kennt.

Autor: Olli L. (Firma: IMA Klessmann) (raisedfist)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Werner schrieb:
> Willi schrieb:
>> Liefert der Drehgeber Sinus/Cosinus- oder Rechtecksignale?
>
> Ohne Typenbezeichnung oder Link aufs Datenblatt läßt sich das schlecht
> beantworten, wenn man den Geber nicht beim Vornamen kennt.

Es handelt sich um einen Hengstler RI58-0.
Es soll die Position, Beschleunigung und Drehrichtung erkannt werden. 
Ist es mit dieser Drehgeber+Mikrocontroller Kombination überhaupt 
möglich?

Autor: Willi (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Olli L. schrieb:
> Ist es mit dieser Drehgeber+Mikrocontroller Kombination überhaupt
> möglich?

Definitiv: NEIN!
Das muß mit spezieller Hardware gemacht werden. Am besten mit einem µC, 
der schon einen Quadratur-Dekoder auf dem Chip hat wie zum Beispiel der 
STM32F407. Hierfür gibt es ein kostengünstiges 'discovery-board'.

Falls eine größere Stückzahl gebaut werden soll, würde ich einen Renesas 
RX210 empfehlen; er ist leistungsfähig+günstig. Das Entwicklungsboard 
wird bei Renesas verschenkt: RPBRX210.
Es gehen aber auch dessen größere Brüder RX62N oder RX621, oder aber 
auch H8S und H8SX Prozessoren, die bis zu 4 Quadratur-Dekoder auf dem 
Chip haben.

Autor: Martin Wende (Firma: fritzler-avr.de) (fritzler)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Also mit den Anforderungen isses aufm AVR allgemein unmöglich, da sind 
die zu langsam.
Da sollteste nen FPGA nehmen, da in Hardware auswerten und nen CPU 
Softcore noch draufbasteln für die Auswertung.

Position mit nem Inkremetalgeber ist übrigens eh Gülle, das Gerät weis 
ja nicht, wo die Welle startet.

Autor: Willi (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Martin Wende schrieb:
> Position mit nem Inkremetalgeber ist übrigens eh Gülle, das Gerät weis
> ja nicht, wo die Welle startet.

Da gibt es aber durchaus Möglichkeiten, das herauszufinden :-)

> Da sollteste nen FPGA nehmen, da in Hardware auswerten und nen CPU
> Softcore noch draufbasteln für die Auswertung.

Das würde ich davon abhängig machen, wo die Prioritäten liegen.
Meistens ist das Quadratursignal eher von geringer Bedeutung, da der 
Prozessor noch viele andere Schnittstellen bedienen muß. Ein 
Standardprozessor, den man von der Stange kaufen kann und wiederholt 
auch für andere Schaltungen einsetzt, dürfte einfacher zu handhaben 
sein.

Autor: Olli L. (Firma: IMA Klessmann) (raisedfist)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Das Problem ist, dass uns diese Aufgabe von unserem Professor gestellt 
wurde. Wäre die Problemstellung zu lösen wenn man einen Drehgeber mit 
weniger Schritten (zB 1000) nutzt?
Wäre es möglich die Auswertungen (Geschwindigkeit, Beschleunigung und 
Drehrichtung) sequentiell zu machen? Sprich ich schalte das Programm bei 
bestimmter Eingabe um? Was begrenzt das ganze denn?

Verzeiht mir meine vllt dummen fragen, bin absoluter Neuling auf dem 
Gebiet.


mfG

Autor: Martin Wende (Firma: fritzler-avr.de) (fritzler)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Solls denn NUR mitm AVR sein?
mit ner Vorauswertung der Drehrichtung in hardware gehts dann vllt doch:
http://www.mikrocontroller.net/articles/Drehgeber

Da das den Softwareaufwand schonmal verringert.

Autor: Olli L. (Firma: IMA Klessmann) (raisedfist)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Martin Wende schrieb:
> Solls denn NUR mitm AVR sein?
> mit ner Vorauswertung der Drehrichtung in hardware gehts dann vllt doch:
> http://www.mikrocontroller.net/articles/Drehgeber
>
> Da das den Softwareaufwand schonmal verringert.

Ja uns steht nichts anderes zur Verfügung. Unsere Vorgänger sollen das 
auch geschafft haben.

Autor: spontan (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Such Dir einen µC mit Eingang speziell für einen Drehgeber und gut. Der 
Rest ist einfache Software.

Autor: Hannes Lux (hannes)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
spontan schrieb:
> Such Dir einen µC mit Eingang speziell für einen Drehgeber und gut. Der
> Rest ist einfache Software.

Es geht um ein Ausbildungsprojekt:

Olli L. schrieb:
> Ja uns steht nichts anderes zur Verfügung. Unsere Vorgänger sollen das
> auch geschafft haben.

Da muss man sich schon an die Vorgaben halten, oder man disqualifiziert 
sich.

Ich meine allerdings auch, dass eine reine Softwarelösung mit dem AVR 
verdammt eng wird, zumindest ist die klassische Art mit Abfrage der 
Zustände im Timer-Interrupt und Erkennen der Flanken durch Vergleich mit 
dem Vorwert bei dieser Impulsflut überfordert.

...

Autor: Olli ElPunkt (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hannes Lux schrieb:
> spontan schrieb:
>> Such Dir einen µC mit Eingang speziell für einen Drehgeber und gut. Der
>> Rest ist einfache Software.
>
> Es geht um ein Ausbildungsprojekt:
>
> Olli L. schrieb:
>> Ja uns steht nichts anderes zur Verfügung. Unsere Vorgänger sollen das
>> auch geschafft haben.
>
> Da muss man sich schon an die Vorgaben halten, oder man disqualifiziert
> sich.
>
> Ich meine allerdings auch, dass eine reine Softwarelösung mit dem AVR
> verdammt eng wird, zumindest ist die klassische Art mit Abfrage der
> Zustände im Timer-Interrupt und Erkennen der Flanken durch Vergleich mit
> dem Vorwert bei dieser Impulsflut überfordert.
>
> ...

Richtig, es ist ein Studienprojekt.

Ich versteh allerdings noch nicht genau warum das eng werden könnte. 
Liegt es an dem Takt von 8MHz? Wir könnten auch nen externen 16MHz Takt 
anschließen falls das was bringt.

mfG

Autor: Falk Brunner (falk)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
@  Olli ElPunkt (Gast)

>Richtig, es ist ein Studienprojekt.

Und dann gleich so hoch hinaus?

>Ich versteh allerdings noch nicht genau warum das eng werden könnte.

Beitrag "Re: Drehgeber Vierfachauswertung STK500 + ATmega32"

Der Drehgeber muss schnell genug abgetastet werden, damit man keinen 
Codewechsel verliert. Bei der 2800 U/min und 5000 Pulsen/U ist das halt 
nicht gerade wenig. Genau genommen über 1 MHz Abtastrate. Da der AVR für 
einen Drehgeber keinerlei Hardwaremodule hat, muss alles in Software 
gemacht werden. Macht bei 16 MHz CPU-Takt bestenfalls 16 
Befehle/Durchlauf. Das wird nix. Mit einem passenden Hardwaredekoder 
wäre es machbar. Entweder ein fertiger IC, oder ein CPLD, oder ein 
TTL-Grab oder, oder, oder.

Autor: Olli ElPunkt (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Falk Brunner schrieb:
> @  Olli ElPunkt (Gast)
>
>>Richtig, es ist ein Studienprojekt.
>
> Und dann gleich so hoch hinaus?
>
>>Ich versteh allerdings noch nicht genau warum das eng werden könnte.
>
> Beitrag "Re: Drehgeber Vierfachauswertung STK500 + ATmega32"
>
> Der Drehgeber muss schnell genug abgetastet werden, damit man keinen
> Codewechsel verliert. Bei der 2800 U/min und 5000 Pulsen/U ist das halt
> nicht gerade wenig. Genau genommen über 1 MHz Abtastrate. Da der AVR für
> einen Drehgeber keinerlei Hardwaremodule hat, muss alles in Software
> gemacht werden. Macht bei 16 MHz CPU-Takt bestenfalls 16
> Befehle/Durchlauf. Das wird nix. Mit einem passenden Hardwaredekoder
> wäre es machbar. Entweder ein fertiger IC, oder ein CPLD, oder ein
> TTL-Grab oder, oder, oder.


Das einzige was uns angeboten wurde, ist ein Drehgeber mit weniger 
Strichen bzw weniger Impulsen/Umdrehung.

Autor: Falk Brunner (falk)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
"Das Hauptziel ist, eine möglichst genaue Messauflösung bei kleinen
Frequenzen. Bei den schnellen Frequenzen darf es ruhig ein bisschen
ungenauer sein."

Was sind hier kleine Frequenzen? Bei 280 U/min hat man 10 mal soviel 
Takte zur Verfügung, das könnte was werden. Aber bei voller Drehzahl 
muss man dennoch alle Codewechsel erwischen, sonst klappt die 
Richtungsauswertung nicht.

Autor: Olli ElPunkt (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Falk Brunner schrieb:
> "Das Hauptziel ist, eine möglichst genaue Messauflösung bei kleinen
> Frequenzen. Bei den schnellen Frequenzen darf es ruhig ein bisschen
> ungenauer sein."
>
> Was sind hier kleine Frequenzen? Bei 280 U/min hat man 10 mal soviel
> Takte zur Verfügung, das könnte was werden. Aber bei voller Drehzahl
> muss man dennoch alle Codewechsel erwischen, sonst klappt die
> Richtungsauswertung nicht.

Am besten ich zitiere mal den Aufgabentext:

"Inkrementalgeberauswertung mit µ-Controller

Es soll eine Vierfachauswertung (mit Atmega32) folgender Messgrößen 
erfolgen:
- Position bzw. Winkel
- Geschwindigkeit
- Beschleunigung bzw Winkelbeschleunigung
Für eine Antriebsregelung mit relativ hohen Abtastraten  (zB 0,1ms bis 
2ms) wird mit reiner Frequenzmessung die Drehzahl und die Beschleunigung 
nur gering aufgelöst (Nur wenig Impulse pro Abtastzeit).
Insbesondere bei niedrigen Drehzahlen soll die Geschwindigkeit und die 
Beschleunigung genauer gemessen und höher aufgelöst werden.
Kombination von Zeit- und Frequenzmessung."

Autor: Olli L. (Firma: IMA Klessmann) (raisedfist)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Nach einem Gespräch mit unserem Professor kam heraus, das wir einen 
Hardwaredekoder verwenden sollen. Nach kurzer Recherche fanden wir den 
LS7083 bzw LS7084 die unserer Meinung nach gut geeignet wären. Leider 
sind sie schwer zu beschaffen in Deutschland. Gibt es Alternativen dazu?

Autor: MaWin (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
> > Ist es mit dieser Drehgeber+Mikrocontroller Kombination
> > überhaupt möglich?
> Definitiv: NEIN!

4 Drehgeber mit 233kHz Strichrate, also ca. 300kHz Abtastfrequenz ?

Doch, schaffbar, die Frage ist, was der AVR noch zusätzlich tun soll.
Vermutlich gelegentlich die 4 Positionen über die serielle Schnittstelle 
senden, vielleicht Grenzwerte vergleichen. Das kann er auch noch, 
programmieren muß man halt können.

Soll er nebenher eine CNC Maschine mit 5 Achsen in Kreisbahnen 
interpoliert steuern, wird's eng.

Autor: MaWin (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
So ungefähr:

// 8kByte Tabellen, einfach mit Byte addressierbar
char increment01[4][256]={...}; Richtung +1/0/-1 bit 0,1
char increment23[4][256]={...}; Richtung +1/0/-1 bit 2,3
char increment45[4][256]={...}; Richtung +1/0/-1 bit 4,5
char increment67[4][256]={...}; Richtung +1/0/-1 bit 6,7
uint8_t table01[4][256]={...}; Übergang bit 0,1 auf nächsten Zustand 
0..3
uint8_t table23[4][256]={...}; Übergang bit 2,3 auf nächsten Zustand 
0..3
uint8_t table45[4][256]={...}; Übergang bit 4,5 auf nächsten Zustand 
0..3
uint8_t table67[4][256]={...}; Übergang bit 6,7 auf nächsten Zustand 
0..3
register uint8_t state1,stat2,stat3,state4; // 4 Register
register int16 position1,position2,position3,position4; // 8 Register

while(1) // RJMP : 2
{
    state=PORTB; // bit 0,1 Drehgeber 1, bit 2,3 Drehgeber 2, ... // IN: 
1
    position1+=increment01[state1][state]; // LD ADD LD ADD: 5
    state1=table01[state1][state];         // LD Rd,(X): 2
    position2+=increment23[state2][state];
    state2=table23[state2][state];
    position3+=increment45[state3][state];
    state3=table45[state3][state];
    position4+=increment67[state4][state];
    state4=table67[state4][state]; // 35 Takte/16MHz = 450kHz Abtastrate
}

und vielleicht fällt ja jemandem noch schnelleres ein.

Autor: Wir sind Motorianer!!! (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Und selbst wenn...jetzt hast Du die Position.
Wo ist die Geschwindigkeit und die vor allem die Beschleunigung?

Wenn es da nicht von 0 auf 1000/s^2 springen soll, dann ist da etwas 
mehr notwendig als eine einfache Differenzenbildung.

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net