Arduino für Motorsteuerung mit Encodersignalaufnahme geeignet?

Vorab: Ich habe bisher keine Ahnung vom Arduino (ausser die üblichen verfügbaren Informationen) und versuche über diesen Weg rauszufinden, ob der Arduino für mein Problem geeignet ist. Ich möchte also keine Lösungen, sondern eher... Ratschläge/Hinweise zum System.

Problem:
Ich habe einen Motor (für alle Interessierten: Harmonic Drive FHA-8C-100) und ein einfaches Steuergerät dazu. Das Steuergerät kann theroretisch mit jeder beliebigen Hardware kommunizieren, da es über Digital Ports (nein, kein BUS-System wie CANopen verfügbar) angesprochen wird.
Insgesamt gäbe es einen Input Port mit 7 Anschlüssen (die per TTL-Signal von aussen geschaltet werden können sollen ), sowie 2 Ausgabeports. Der erste Ausgabeport gibt Statussignale raus (5 Kanäle, Spannungsreferenz kann man selber bestimmen, also vermtl. dann auch TTL), der zweite Encodersignale für die aktuelle Position des Motor (6 Kanäle und ein GND).
Insgesamt könnten 24 I/O Kanäle angeschlossen werden, aber es sind für die mich interessierende Betriebsart insgesamt 19 Kanäle.
Mit dem Arduino müsste ich also diese 19 Kanäle beliebig lesen/schreiben können.

Desweiteren werden 2 Kanäle für einen Analog-Input benötigt um einen Sensor für die Null-Stellung des Motors auszulesen.

Und dann wird noch eine Kommunikationsschnitsstelle zu einem Steuer-PC benötigt (RS232 scheint mir da sinnvoll) der den Arduino dann steuert (einfache Befehle, wie "drehe auf nächste position", "suche null-stellung")

Prinzipiell sollten die I/O Pins des Arduino ausreichen, da mit 54 spezifiziert, allerdings sind da auch schon einige vorbelegt, und für mich siehts das nicht so aus, als könnte ich die Kanäle nun beliebig definieren :smiley:

Alles in allem bin ich mir einfach nicht sicher ob der Arduino mit so vielen externen I/O Kanälen umgehen kann, vor allem da sie frei programmierbar sein müssten.

MfG

Hallo,

wenn ich Dich richtig verstanden habe, hast Du 7 Eingangsleitungen und 2 Ausgangsleitungen. Das sind zusammen 9 Leitungen, also 9 Pins am Arduino die Du brauchen würdest. Dazu die serielle Schnittstelle zum PC mit 2 (Rx, Tx) Leitungen oder mit Hardwarehandshake max. 4 Leitungen. Das sind zusammen 13 (GND lasse ich jetzt mal außenvor). Damit kann der Arduino prima umgehen (vorausgesetzt es ist wirklich alles TTL an dem Steuergerät, für die serielle Schnittstelle benötigst Du wahrscheinlich einen Pegelwandler, falls Du nicht die USB-Seriell-Verbindung des Arduino nutzen willst).
Was Du als Kanäle bezeichnest, scheint mir dann ja eher ein Softwareproblem zu sein, wie die Daten an den Pins des Arduino ausgewertet oder aufbereitet werden müssen.
Vielleicht kannst Du einmal nähere Informationen zu dem Steuergerät mitteilen? Dann ist Deine Frage wahrscheinlich sicherer zu beantworten.

Gruß,
Ralf

Hallo Ralf, besten Dank für deine Antwort. Ich versuch mal das noch genauer zu spezifizieren.

Das Steuergerät braucht:

Inputkanäle (hab mich vertan, sind sogar 9):

  • FWD+
  • FWD-
  • REV+
  • REV-
  • SERVO-ON
  • FWD-INHIBIT
  • REV-INHIBIT
  • ALARM-CLEAR
  • DEVIATION CLEAR

und gibt zusätzlich Informationen aus:
Outputkanäle (5 Stück)

  • IN POSITION
  • ALARM
  • READY
  • SPEED-LIMIT
  • PHASE Z

Um den Winkel des Motors auslesen zu können, gibts es 7 Encodersignale

  • Phase A+
  • Phase A-
  • Phase B+
  • Phase B-
  • Phase Z+
  • Phase Z-
  • Encoder Monitor Ground

Insgesamt also 9 Input (darauf muss der Arduino dann schreiben), und 12 Output (Arduino soll dann Encoder und Statussignal lesen&verarbeiten)
All diese einzelnen Signalkäbelchen muss ich an den Arduino anschließen können, nur um den Motor exakt betreiben zu können.

Dazu kommt dann

1 weiteres Analog-In Signal von einem externem Sensor

und die RS232 zum PC, wobei das jetzt beliebigierweise auch anders gemacht werden kann (hauptsache verbindung zum PC)

Sprich: Ein Haufen Anschlüße, die ich beliebig per Software auf dem Arduino softwaretechnisch lesen und schreiben können muss. Und dass ist mir so nicht ganz klar, ob das beliebig geht :smiley:

Hmm, wenn das alles einzelne Leitungen sind, ist es für die kleinen Arduinos vielleicht etwas viel, hier müsstest Du entweder Schieberegister verwenden oder was Dir helfen könnte wäre diese I²C-Porterweiterung für die hier im Forum gerade eine Sammelbestellung läuft. Guckst Du: Sammelbestellung: 64 Port I2C-Expander als Arduino-Shield - Deutsch - Arduino Forum. Ich weiß aber nicht, inwieweit Du bereit bist, zusätzliche Hardware dazu zu basteln.
Ein Arduino-Mega sollte Deine Anforderungen aber ohne zusätzliche Hardware erfüllen.
Gruß,
Ralf

OK.. klingt schon mal nicht so schlecht.
Ich hätte jetzt allerdings den Arduino DUE schon als mögliches Gerät geplant, da unter Umständen sogar noch andere Aufgaben auf dem gerät erledigt werden könnten (der DUE scheint mir mit seinem ARM doch etwas mehr Power zu haben).
Vermtl. bis 10kHz PWM Signal und Temperatursensoren, vielleicht sogar noch ein aufwendigere Signalverarbeitung eines anderen Sensors. Das steht aber noch nicht fest. So oder so tendier ich daher zu der "mächtigsten" Variante der Arduinos.

Der Due kann das natürlich sicherlich auch - aber: der Due arbeitet mit 3,3 V! Also die üblichen 5 V können den Due zerstören! Du würdest also ggfls. eine Pegelanpassung an allen Leitungen durchführen müssen.

Gruß,
Ralf

Mit den Pegeln muss ich sowieso so sehen, da der Motor teilweise 24V für digital I/O benötigt.
Wenn ich das richtig sehe kann der Arduino eh nur max 3.3V bzw. 5V Output lesen/schreiben, wo ich dann an weiterer Stelle eh vermutlich mit Optokopplern die richtigen Signale durchschalte. Aber das ist erstmal noch nebensächlich, für mich steht erstmal die freie Programmierung der PINs an vorderste Stelle.

Besten Dank für die Hilfe,
Vielleicht bestell ich auch gleich beide Boards :smiley:

Die Pins sind für einfaches I/O frei wählbar.

Du musst nur mit den Zusatzfunktionen aufpassen. Für Dinge wie serielle Kommunikation, I²C oder SPI fallen bestimmte Pins weg. PWM oder ADC geht auch nur auf bestimmten Pins. Genauso wie Interrupts (wobei diese für Inkrementalgeber nicht braucht. Und der Due kann glaube ich Interrupts auf allen Pins). Das ist aber jedem Mikrocontroller so.

Hallo "ansschmi"!

ansschmi:
Um den Winkel des Motors auslesen zu können, gibts es 7 Encodersignale

  • Phase A+
  • Phase A-
  • Phase B+
  • Phase B-
  • Phase Z+
  • Phase Z-
  • Encoder Monitor Ground

Das sind differentielle Signale nach RS-485. Entweder nimmst Du nur die positiven Signale, oder (was von der Störfestigkeit her besser ist) du setzt einen RS485-Receiver zwischen den Motorcontroller und deinen Arduino.

Bei den Steuersignalen kann es auch sein, dass es reicht, die negativen Signale auf Masse zu legen. Da musst du mal genauer in die Doku schauen. Oft findet man da Beschaltungsbeispiele.

Mit freundlichen Grüßen
Thorsten Ostermann

Die Phasensignale A,B,Z werden von einem Linedriver AM26LS31 im Controller ausgegeben, der auch für die Input-Signale verwendet werden soll (und auch so geplant ist).
Deswegen benötige ich tatsächlich nur jeweils einen Input für FWD und REV und damit also doch nur 7 Inputs statt 9 (lag ich vorher schon richtig).
Die Doku für den Controller ist, was die externe Beschaltung angeht, nicht unbedingt ergiebig, bzw. hält sich meine Erfahrung in diesem Bereich sowieso stark in Grenzen.
Von daher, danke für den Hinweis.