Inkrementalencoder - Fragen

  • 1
  • 2
  • Page 1 of 2
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Inkrementalencoder - Fragen

 · 
Posted: 26.06.2012 - 20:37  ·  #1
Ich habe da mal eine Frage an die Experten: Ich möchte einen Inkrementalencoder nutzen um Pulse für einen Schrittmotor zu erzeugen. Die Idee dahinter ist, den Encoder an die Spindel einer Drehmaschine anzubauen, je nach Drehzahl möchte ich dann einen Schrittmotor an der Leitspindel der Maschine antreiben um so den Vorschub einstellen zu können. Momentan muss ich da immer Zahräder wechseln, ist eine einfache Maschine. Ich muss ca. 2mm/ Umdrehung der Spindel maximal schaffen, das entspräche einer Umdrehung des Schrittmotors pro Spindelumdrehung.

Ich habe hier einen Encder mit 400 Pulsen / Umdrehung, der Schrittmotor benötigt 200 Schritte pro Umdrehung, alle 2 Impulse müsste also ein Schritt gemacht werden.
Das ist das Maximum, im Normalfall liegt die Schrittrate weit darunter, eher alle 20 Impulse ein Schritt.

Ich könnte den ja mit dem IncPort8 auswerten, erhalte dann aber nur eine Position.

Ich muss für diese Sache aber zumindest bei jedem 2. Impuls des Encoders einen Schritt des Schrittmotors auslösen, bei langsameren Vorschub z.B. alle 20 Impulse ein Schritt.
So wie ich das sehe kann ich das mit dem Treiber nicht lösen, oder gibt es eine Möglichkeit in den PCInt rein zu "gehen" und dort die Impulse zu zählen und ggf. ein Schritt des Schrittmotors auszulösen?

Ich könnte natürlich auch zyklisch die Position abfragen, aber ich brauche ca. 13 KHz Abtastrate.

(2000 U/min der Spindel bei 400 Impulse/U = 13333 Hz

Der Controller hat nichts weiter zu tun, 20 MHz hätte ich zur Verfügung, z.B. ein Mega644P.
Hat jemand eine Idee wie oder ob das ginge?

Louis
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: Inkrementalencoder - Fragen

 · 
Posted: 27.06.2012 - 09:03  ·  #2
Hallo Louis,

ich würde den Timer1 Interrupt am ICP Pin des Prozessors verwenden. Der schafft die erforderliche Frequenz und feuert immer dann, wenn ein Flankenwechsel vom Encoder stattfindet. In der Timer1Capt-Routine kannst Du Deinen Zähler einbauen. Damit Du auch die Drehzahl zur Verfügung hast, mußt Du die Frequenz der Flankenwechsel bestimmen. Ich habe Dir das Ganze mal als fertige Unit angehängt, ist auf einem 644 getestet und läuft bei 20 MHz ProcClock sicher bis 25 kHz Tastfrequenz.

Lies Dir den Header durch, was Du im MainProgramm machen mußt.
Rufe InitTimer1Int; als erstes auf, um den Interrupt scharf zu machen.
Die Funktionen Get_Freq und Get_PWM liefern dem MainProgram die momentane Frequenz und auch das Tastverhältnis der Rechtecksignale (Bei Dir nicht erforderlich). Dazu werden 8 hinereinanderfolgende Signalperioden ausgewertet.
Die Prozedur Timer1Capt ist die bei jedem Flankenwechsel aufgerufene Interrupt-Routine. Hier kannst Du Deinen Encoder-Zähler einbauen.

Hoffe, es nützt Dir.

Gruß, Michael
Attachments
Filename: uICP.pas.txt
Filesize: 5.17 KB
Title:
Download counter: 63
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: Inkrementalencoder - Fragen

 · 
Posted: 27.06.2012 - 09:55  ·  #3
Wow, super, vielen Dank!
Damit werde ich mal experimentieren.

Ich hatte gehofft, die Auswertung durch den Treiber machen zu können und dennoch manuell auf die Pulse reagieren zu können. Aber dafür dürfte die Frequenz zu hoch sein.

Die Auswertung des Encodersignals mache ich mit einer kleinen externen Schaltung, die liefert dann nur noch den Takt und ein Richtungssignal.
Das sollte dan mit obigem Code gut funktionieren. Gestern habe ich bei µC.net (http://www.mikrocontroller.net/articles/Drehgeber) einen guten Artikel durchstöbert, da gibt es die besagte Schaltung mit einem 74HC174N und einem 74HC86N. Damit wird das ganze dann recht simpel, nur noch Pulse Triggern und dann das Richtungssignal anschauen.

Louis
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: Inkrementalencoder - Fragen

 · 
Posted: 27.06.2012 - 18:37  ·  #4
Oops, ich habe gerade festgestellt, das die Schaltung nicht funktioniert, das Richtungssignal wird nie erzeugt.
Schade schade...
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: Inkrementalencoder - Fragen

 · 
Posted: 28.06.2012 - 10:15  ·  #5
Hallo Louis,

hatte mich eh gewundert, warum Du die zusätzliche Hardware dazwischen setzen wolltest. Ich hätte die Eingänge mit einem RC-Glied entstört und die Encoder-Signale direkt auf den Prozessor gelegt. Signal A auf den ICP, B auf einen anderen Eingang und bei jedem Flankenwechsel von A im Interrupt B abgefragt. Die genannten Probleme aus deinem Artikel (sehr informativ übrigens) sehe ich mit dieser Lösung nicht. Schreib mal, wie es weiter geht!

Gruß, Michael
Avra
Schreiberling
Avatar
Gender:
Location: Belgrade, Serbia
Age: 53
Homepage: rs.linkedin.com/in…
Posts: 653
Registered: 07 / 2002
Subject:

Re: Inkrementalencoder - Fragen

 · 
Posted: 28.06.2012 - 10:17  ·  #6
Online translation sucks and I don't understand many things, but here are my 2 cents anyway... Since AVR does not have other tasks, your main loop can check for incrementation/decrementation and provide stepper direction signal. Step signal can be made in software as output of 2nd bit (divide by 2) of internal incremental counter (check for that bit or simply put lowest byte to some port and use just 2nd bit as step signal). Alternatively you can use some hardware counter chip to divide SIGA/SIGB/SIGX by 2 and get direction signal with 4538 as shown here: http://electronicdesign.com/ar…ders-73973.
Mr Crusty
 
Avatar
 
Subject:

Re: Inkrementalencoder - Fragen

 · 
Posted: 28.06.2012 - 14:11  ·  #7
Avra,
A very useful article, I have been looking for a simple one chip application for some time to decode cheap rotary encoder switches. This keeps the pin count on the micro to the same as the switch.


Regards
Crusty
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: Inkrementalencoder - Fragen

 · 
Posted: 30.06.2012 - 12:13  ·  #8
Thank you Avra! That circuit is great, I will test it too.
My first mentioned circuit is working too, as I saw later. I put it on a breadboard today and got decent results.
The direction signal is not steady, which I need for the stepper motor driver. But the controller can make that signal.

As soon as I have more results I will post them here.

Louis
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 15   135   150 · Page-Gen-Time: 0.021651s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI