Schrittmotor mit integriertem Encoder, 4 polig

Moin Peter-CAD-HST,

mein Sketch hat sich ständig geändert, aber ich kann eben für den Encoder ein Sketch schreiben, wie ich es versucht habe.

Also so würde ich den Encoder auslesen, da ist jetzt wirklich alles andere weggelassen:

const byte vertical1 = 6;
const byte vertical2 = 7;

const byte encoderInput = 18;

int pos = 0; //Aktuelle Motorposition

void setup() {
  //OUTPUTS
  pinMode(vertical1, OUTPUT);
  pinMode(vertical2, OUTPUT);

  //INPUTS
  pinMode(encoderInput, INPUT);

attachInterrupt(digitalPinToInterrupt(encoderInput), encoderPosition, CHANGE);
}

void loop() {

}

void encoderPosition(){
  if(digitalRead(vertical1)){
    pos++;
  }
  else if(digitalRead(vertical2)){
    pos--;
  }
  Serial.println(pos);
}

themanfrommoon:
Kann der Arduino die Relais schon schalten? Also klicken die Relais wenn der arduino sie schalten will? (....oder fehlt da noch ein Treiber?)

Also das ansteuern der Motoren mit dem Arduino über das Relais funktioniert einwandfrei, das Relais "klickt" und gibt auch visuelles Feedback in Form einer Diode.

Sicherungen sind auch verbaut, die Motoren haben wirklich richtig Power.

Okay, dass heisst es funktionieren nur die Encoder nicht, richtig?
Da musst du wohl erstmal mit nem Oszilloskop messen was da passiert.

(deleted)

Der Hall-Sensor funktioniert auch nicht 100%, aber mein größtes Problem sind derzeit die Encoder.

Ein Oszilloskop zu nutzen ist eine gute Idee, ich bin mir halt aber immer noch unsicher, ob ich den Encoder nicht vielleicht komplett falsch verdrahtet habe.

Was am ehesten funktioniert hat, aber katastrophal ungenau war, war die Encoder-Pins mit 5V Arduino und Pin 18 zu verbinden und dann mit AttachInterrupt die Wechsel zu zählen.

Ich werde jetzt erstmal weiter probieren und mich später nochmal melden.

Vielen Dank an jeden!

Kannst so einen Encoder zerlegen, oder ein Datenblatt finden? Dann wäre es keine Raterei.

Ich vermute auch, dass es ein einspuriger Encoder ist, und kein zweispuriger (der würde eine Drehrichtungserkennung ermöglichen, brauchst du aber nicht, weil du die Polung vom Motor kennst).
Aber das können immernoch viele Varianten sein wie das Ding funktionieren könnte.

Die lassen sich leider nicht zerlegen, das sieht sogar sehr danach aus, als will man nicht, dass die zerlegt werden. Datenblatt auch unauffindbar. Sowie es scheint werden die Motoren aus Indien/China importiert.

Ich werde nochmal verschiedene Varianten ausprobieren, dabei die Spannugnsverläufe messen und dann berichten, vielleicht lässt sich das dann etwas besser einordnen.

Gruß
Raphael

(deleted)

Und wenn ihr ein Exemplar für die Wissenschaft opfert? Da kommt man viel schneller ans Ziel, als wenn man lange rumprobiert.

@Peter-CAD-HST Danke für den Link, das ganze funktioniert bei mir nicht, da die ich vermutlich nicht zwei Pins habe sondern nur einen.

Der Encoder benötigt definitv eine Versorgung. Bei verfahrenden Motor erhalte ich sonst 0V an den Encoder Pins.

@themanfrommoon Tja Problem ist ich habe davon nur 2 und die brauche ich beide.
War schon so verzweifelt, dass ich überlegt habe die Position nur über Zeit zu bestimmen, da die Verfahrgeschwindigkeit recht konstant ist, allerdings wird die sich vermutlich abhängig von der Batteriespannung verändern.

Ansich funktioniert die Positionsbestimmung per Zeit aber finde ich ziemlich unelegant.

Ich habe jetzt gerade die beiden vermeintlichen "Encoder"-Pins einerseits mit 5V per Arduino versorgt und den zweiten auf Arduino GND und Pin 18 gelegt.

Wenn ich analogRead(18) auslese habe ich bei Nicht-Betrieb die ganze Zeit einen konstanten Wert und sobald ich den Motor HIGH schalte springt dieser Wert und bleibt solange gleich bis ich den Motor wieder LOW schalte, dann springt er wieder auf den Ursprungswert zurück.

EDIT: analogRead(18) ist natürlich quatsch weil das beim Arduino Mega kein AnalogPin ist!

Also könnte das ein einfacher Reed Schalter sein?
Das finde ich aber seeeeeehr außergewöhnlich, kann ich fast nicht glauben.
Wie viele Impulse macht der denn pro Umdrehung? Das können ja höchstens 4 oder so sein?!

Ohne Datenblatt ist das doch alles Rätselraten. Ich werfe mal noch den Open-Collector-Ausgang in den großen Rätseltopf, könnte es ja theoretisch auch sein. Also analog zum Tachosignal eines PC-Lüfters.

(deleted)

Habe jetzt auf einen Motor entdeckt, dass dort "mit Hall" drauf steht.

Aber ein normaler Hall-Sensor benötigt doch zumindest mal 3 Pins (VCC, GND, A0) oder irre ich mich?

...so ähnlich funktioniert auch Archäologie, oder?

Nee mal im Ernst, man kann doch nicht Datenblatt raten machen?!

Das soll ja auch keine private Try&Error Geschichte werden, sondern es soll sich funktionieren. Da müssen Fakten auf den Tisch, sonst haste verloren.
In der Industrie kostet 2 Stunden Raten mehr als so ein Motor.
Opfer einen Motor, zerleg den, und kaufe einen neuen, dann kommst du günstiger ans Ziel als stundenlang zu raten und zu probieren.

Wenn du 12V auf den Hall Sensor gibst wird er sich wohl mit Rauch bedanken oder klammheimlich aus der Affäre ziehen. Vielleicht funktioniert er ja auch schon garnicht mehr, wer weiss das schon?

Ich vermute auch, dass ich einen gegrillt habe.

Ich habe nur diese 2 Motoren mit "Hall-Sensor", die restlichen Modelle sind alle nur 2 polig, dh. wenn ich einen zerlege, kann ich mir ne andere Variante ausdenken, wie ich die Position bestimme.

Bzgl Industrie: Bin Praktikant/Dualer Student und das ist derzeit meine Projektarbeit. Ich habe das Projekt übernommen, in der Dokumentation stand Encoder.

Ich betone nochmal, dass es nicht möglich ist an ein Datenblatt zu kommen (so wurde mir das gesagt), der Motor stammt aus einem zugekauften Sitzsystem von Faurecia und die wiederum kaufen die Motoren irgendwo anders zu.

Ich werde nochmal nachfragen und mal den zweiten Motor mit Hall-Sensor testen.

Das ist leider Zeit und Geld Verbrennen was du da machst.

Entweder man hat Datenblätter, oder man muss reverse Engineering betreiben. Und dann ist es eine gute Idee ein Teil zu opfern und reinzuschauen.

Wenn du schon einen gegrillt hast, dann zerlege den.

Du musst jetzt diesen Schritt weiter gehen und ihn schaffen.

Sonst hast du keine Chance und es wird dir niemand helfen können. Das Projekt scheitert dann.

Du sitzt vor einer Black Box mit 4 Kabeln und hast keine Ahnung was du damit anfangen sollst.
Die Lösung wird nicht vom Himmel fallen.
Ausserdem wirst du mit maximaler Sicherheit die Innereien nicht nach Spezifikation betreiben und damit unbekannte Risiken eingehen. Das kann ja auch nicht dein Ziel sein. Daran kann das Projekt auch scheitern (so unter dem Motto: "Komisch, im Labor hat es immer funktioniert. Was hast du denn gemacht? Keine Ahnung"

Die Probleme fangen ganz oft an mit "Ich hab gedacht, dass...."
Das ist der größte Fehler, den man machen kann, dann dann bist nur du alleine Schuld!

Was willst du sonst machen?

Lieben Gruß,
Chris

Also mein Plan B ist vielleicht nicht der eleganteste, dafür aber vermutlich ausreichend genau:

Ich kenn die Motorgeschwindigkeit, ich kann die Zeit über den Arduino auslesen => damit kann ich den Weg bestimmen.

Zieht natürlich einige Fehlerquellen (Batteriespannung, Motor verfährt nicht aus unerklärlichen Gründen) mit sich, aber diese lassen sich entweder verrechnen oder durch eine calculation-Funktion wieder beheben.

Sobald er die verbauten Endschalter verbaut, sind die Positionen wieder kalibriert.