www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Inkrementalgebersignal erzeugen mit AVR


Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
mein erster Beitrag hier.

Vorwegnehmen möchte ich, dass ich die Sufu schon (erfolglos) genutzt 
habe.

Ich möchte aus CLK/DIR-Signalen wie sie üblicherweise für 
Schrittmotoranwendungen verwendet werden, ein Signal (bzw. eine 
Signalspur) erzeugen, wie es von Inkrementalgebern "verursacht" wird.
Also zwei Rechtecksignale mit 90° Phasenversatz.

Das Ganze möchte ich am liebsten mit einem AVR (Tiny, Mega....) 
erzeugen, Software am besten unter Bascom (erste Gehversuche erfolgreich 
abgeschlossen).
Wie bekomme ich das softwaremäßig hin, dass bei DIR-Signal low, das 
Ausgangssignal B um 90° versetzt zu Ausgangsel A kommt? Bzw. bei 
DIR-Signal high, Ausgangssignal A um 90° versetzt zu Ausgangsel B kommt?
Das Ganze soll von 0 Hz bis ca. 50 kHz laufen.

Gibt es dort schon Lösungsansätze?

Gruß
Christoph

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>en unter Bascom (erst

Oh mein Gott..

Ich würde das wohl so lösen:

(pseudo-c-code)

const uint8_t tabelle[4] = { 0b00000000, 0b10000000, 0b11000000, 0b01000000 };
...
// ISR INT0 zB als CLK eingang.
ISR ( welche denn) 
{
  static uint8_t variable = 0x00;
  if ( Pin_dir == 1 )  // dir-pin auf high?
  {
     variable++;
  }
  else
  {
     variable--;
  }
  variable &= 0x03;
  PORT_irgendeiner = tabelle [ variable ];
}

Die Ausgabe von A/B-Spur erfolgt hier auf den höchsten beiden Portpins 
des Ports_irgendeiner.

Autor: bascom-looser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für bascom fragen biste hier im falschem Forum.

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"unter Bascom (erst

Oh mein Gott.."

Bascom sollte dafür eigentlich reichen, zumal ich bei C durch die ganzen 
Klammern etc. ein wenig verwirrt werde. ;-)

Mir geht es nicht darum, eine vorgekaute Lösung zu bekommen, sondern 
einen Ansatz zur Lösung.
Natürlich kann ich bei einem CLK-Signal per ISR erst den einen Ausgang 
toggeln und mit XX µs Verzögerung den zweiten Ausgang hinterherschieben. 
Bei anliegendem DIR-Signal nur in anderer Reihenfolge (A-B/ B-A).

Ich weiß nur nicht, wie genau dieser 90° Phasenversatz sein muß.
Ist der normalerweise nur da, weil es durch die Hardware kommt 
(Glasrasterscheibe im Inkrementalgeber), oder muß das zweite Signal 
wirklich um 1/4 der Signaldauer des ersten Signals verzögert kommen?

Bei 10 Hz und 50% Tastverhältnis des Rechtecksignals wäre es eine 
Verzögerung von 12,5 ms, bei 10 kHz nur noch 12,5 µs.

Ferner die Frage, ob eine kleiner Atmel, z.B. Tiny 13, das leisten kann.

"Für bascom fragen biste hier im falschem Forum."
Ist das hier nicht der allgemeine Bereich?

Gruß Christoph

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soll ich meinen VOrschlag wieder löschen?
Zumal dort noch was fehlt..

;-)

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Löschen gilt nicht ;-)

Ich deute den "Vorschlag" so, dass du eine Tabelle erzeugst, in der die 
4 verschiedenen Zustände der zwei Ausgänge abgelegt sind. in dieser 
Tabelle springst du vor/ zurück in Abhängigkeit des DIR-Signals und 
weist den Ausgängen den Inhalt der Tabelle zu.

Soweit so gut.

2. Frage:
Kann das ein Attiny 13 bei 50 kHz leisten?

Gruß
Christoph

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Christoph (Gast)

>2. Frage:
>Kann das ein Attiny 13 bei 50 kHz leisten?

In Assembler sicherlich. C wirds auch tun. BASCOM? Kaum. (Bestenfalls 
Inline Assembler).

MFG
Falk

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Ich weiß nur nicht, wie genau dieser 90° Phasenversatz sein muß.
Ist der normalerweise nur da, weil es durch die Hardware kommt
(Glasrasterscheibe im Inkrementalgeber), oder muß das zweite Signal
wirklich um 1/4 der Signaldauer des ersten Signals verzögert kommen?"

Das hängt wohl vor allem davon ab, was Du für eine Auswerteschaltung 
dran hast.

Bei denen, die ich mal gebaut habe, wäre das egal, die Signale werden 
mit dem internen Clk abgetastet, solange die Signale noch so weit 
auseinander sind, dass die beim Eintakten mit dem internen Clk noch 
auseinanderzuhalten sind (also mindestens einen Takt dazwischen) sollte 
das egal sein.

Gruss
Axel

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Zumal dort noch was fehlt..

Beachtet das! Eine Sache ist bei meinem VOrschlag noch nicht (ganz) 
berücksichtigt.

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph wrote:

> Natürlich kann ich bei einem CLK-Signal per ISR erst den einen Ausgang
> toggeln und mit XX µs Verzögerung den zweiten Ausgang hinterherschieben.
> Bei anliegendem DIR-Signal nur in anderer Reihenfolge (A-B/ B-A).

Ein CLK muss nur EINE Aenderung von A ODER B bewirken (abhaengig von dem 
Signal DIR). Also nix mit nach XX us was hinterherschieben.

> Ich weiß nur nicht, wie genau dieser 90° Phasenversatz sein muß.

der kommt implizit zustande.

Cheers, Roger

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ferner die Frage, ob eine kleiner Atmel, z.B. Tiny 13,
> das leisten kann.

Ja.

> Das Ganze soll von 0 Hz bis ca. 50 kHz laufen.
> Bascom sollte dafür eigentlich reichen

Nein (zu lahm).

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unbekannter wrote:
>> Das Ganze soll von 0 Hz bis ca. 50 kHz laufen.
>> Bascom sollte dafür eigentlich reichen
>
> Nein (zu lahm).


Bei 9,6MHz sind das 192 Zyklen, sollte sogar Bascom schaffen

Allerdings nicht als Interrupt, sondern mit Polling.
Dann entfällt die elend lange PUSH/POP-Arie (Interruptbit löschen durch 
Bit setzen beachten).


Peter

Autor: bascomer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> "Für bascom fragen biste hier im falschem Forum."
> Ist das hier nicht der allgemeine Bereich?

http://www.bascom-forum.de

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besten Dank an alle,
ich habe vorerst genug Input zum Testen und Probieren.

Von der "Auswerteschaltung" weiß ich nur, dass 500 kHz die maximale 
Eingangsfrequenz ist.

Ich werde mal berichten, ob und wie ich das Ziel erreicht habe.

Gruß

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.