Der PA-12 ist ein hochpräziser Aktuator, der mit Arduino gesteuert werden kann. Diese Einführung in den PA-12 wird Steuerungsmethoden und Implementierungen mit der PA-12 Arduino API vorstellen.
Es gibt zwei Versionen des PA-12. Der PA-12-R hat einen bürstenlosen DC-Servomotor und ein RS-485-Kommunikationsprotokoll. Der PA-12-T hat einen DC-Servomotor mit Kern und ein TTL/PWM-Kommunikationsprotokoll.
Der Einstieg in den PA-12 und Arduino hängt von der Version des PA-12 ab, die implementiert wird. In diesem Tutorial wird der PA-12-10645012R verwendet – 1,06" Hublänge, 4,50 LBS Kraft, 12VDC bürstenloser DC-Motor. Der bürstenlose Motor bedeutet, dass das Kommunikationsprotokoll für diesen Aktuator RS-485 ist.
Der Arduino Leonardo/Uno hat kein RS-485-Kommunikationsprotokoll, aber er hat TTL. Wir werden ein TTL zu RS-485-Modul verwenden, um in diesem Tutorial mit dem linearen Aktuator Arduino zu kommunizieren.

Abbildung 1 - RS-485 zu TTL Arduino-Modul
PA-12 Steuerungsbetrieb
Der PA-12 wird direkt mit Datenpaketen gesteuert, die über TTL oder RS-485-Kommunikation gesendet werden. Jedes Datenpaket enthält Informationen, die verwendet werden, um eine bestimmte Funktion des PA-12 auszuführen oder den aktuellen Status des Geräts zu empfangen. Der aktuelle Status des Geräts könnte beispielsweise die Servo-ID, den Spannungswert, die Position der Aktuatorstange usw. sein.
Ausrüstung und Software
- Arduino Leonardo
- TTL zu RS-485-Modul
- PA-12-10645012R Aktuator
- +12VDC Stromversorgung
- Jumper-Draht
- Arduino IDE
- PA-12 Arduino API
PA-12 API
Die PA-12 API kann hier. Diese API enthält die folgenden Dateien und Ordner:
- PA12.ino
- Enthält die PA-12-Befehlsstrukturen und Funktionen, die Daten zu/von dem PA-12 übertragen und empfangen
- Alle Funktionen, die in den Beispielcodes verwendet werden oder in Ihrem Code implementiert werden, sind in dieser Datei gespeichert
- PA12.h
- Die Header-Datei enthält das Kommunikationsprotokoll und die Header-Dateien für die serielle Kommunikation
- Enthält Funktions- und Variablendeklarationen für alle PA12-Funktionen und -Funktionalitäten
- setPosition, ServoID, presentSpeed, forceEnable
- Hilfsdateien
- Beispielcodes
- Der Beispielcode kann verwendet werden, um die PA-12-Steuerung einfach in Ihr eigenes System zu implementieren
- Alle Beispielcodes sind für die Verwendung mit Arduino Leonardo programmiert, jedoch können die Variablen, die für die Übertragungs- und Empfangspins verwendet werden, geändert werden, um mit dem Mikrocontroller/Arduino, den Sie bereits haben, kompatibel zu sein
Um die PA12-Bibliothek zu importieren
Wählen Sie 'Sketch' --> Bibliothek einfügen --> ZIP-Bibliothek hinzufügen. Alle Dateien im PA12-Ordner werden direkt in die Arduino-Bibliothek des linearen Aktuators importiert. Dies ermöglicht es Ihnen, die PA12-Funktionen zur Steuerung des Aktuators zu verwenden.

Abbildung 2 - Import der Arduino-Bibliothek
Verfügbare Befehle für PA-12
Eine Tabelle der Befehle wird unten angezeigt. Für weitere Informationen zu den Befehlen überprüfen Sie die PA12.ino für Codierungsinformationen. Wir werden die grundlegenden Befehle in diesem Tutorial behandeln. Zukünftige Tutorials werden fortgeschrittenere Funktionen und Steuerungstechniken umfassen.
Lesefunktionen
Die Funktionen in der folgenden Tabelle sind schreibgeschützt und geben einen Wert zurück.
|
Lesefunktion |
Variable |
Beschreibung |
|---|---|---|
|
myServo.getModelNumber(ID_NUM) |
ID_NUM |
PA-12 Modellnummer |
|
myServo.Version(ID_NUM) |
ID_NUM |
PA-12 Motorversionsnummer |
|
myServo.CalStroke (ID_NUM, *Länge*) |
ID_NUM, Länge = Kurz, Lang oder Zentrum |
Überprüfung der Kalibrierung der Hublänge |
|
myServo.presentVolt((ID_NUM)/10) |
ID_NUM |
Überprüfung der Eingangsspannung |
|
myServo.presentTemperature(ID_NUM) |
ID_NUM |
Aktuelle Temperatur des Motors |
|
myServo.MaxTemperature(ID_NUM) |
ID_NUM |
Lesen Sie die maximale Temperaturgrenze |
|
myServo.presentPosition(ID_NUM) |
ID_NUM |
Aktuelle Position des Aktuators |
|
myServo.moving(ID_NUM) |
ID_NUM |
Zurückgegebener Wert des Motorstatus. 1 = In Bewegung, 0 = Gestoppt |
|
myServo.limitVolt(ID_NUM, *Höchster/Niedrigster*) |
ID_NUM, Hoher Spannungspegel = Höchster oder Niedriger Spannungspegel = Niedrigster |
Lesen Sie die Hoch- oder Niedrigspannungseinstellung |
|
myServo.alarmLed(ID_NUM) |
ID_NUM |
Liest den Status der Alarm-LED. 1 = EIN, 0 = Aus |
|
myServo.alarmShutdown(ID_NUM) |
ID_NUM |
Liest den Status des Alarmabschaltmodus |
|
myServo.StrokeLimit(ID_NUM, *Lang/Kurz*) |
ID_NUM, Ausdehnungsgrenze = Lang oder Rückzugsgrenze = Kurz |
Liest die maximalen und minimalen Hublängenbegrenzungen |
|
myServo.ResolutionFactor(ID_NUM) |
ID_NUM |
Liest den Auflösungsfaktor des Servomotors |
|
myServo.movingSpeed(ID_NUM) |
ID_NUM |
Liest den Wert der Servomotor-Geschwindigkeit |
|
myServo.forceLimit(ID_NUM) |
ID_NUM |
Liest die maximale Kraft des Servomotors (flüchtige Einstellung) |
|
myServo.maxForce(ID_NUM) |
ID_NUM |
Liest die maximale Kraft des Servomotors (nichtflüchtige Einstellung) |
Schreibfunktionen
|
Schreibfunktion |
Variable |
Beschreibung |
|---|---|---|
|
myServo(&Serial, enable_pin, Tx Level) |
Serienportnummer, Aktivierungspin, Übertragungs-Pin |
Einstellung des Kommunikationsports |
|
myServo.begin(*Baudrate-Einstellwert*) |
Baudrate-Einstellwert (siehe Tabelle) |
Serielle Kommunikationsbaudrate |
|
myServo.ServoID(ID_NUM, ID_Sel) |
ID_NUM, ID_Sel |
Ändern Sie den Servo-ID-Wert |
|
myServo.ledOn(ID_NUM, *LED RGB-Wert*) |
ID_NUM, LED RBB-Wert (siehe Tabelle) |
Schaltet eine bestimmte LED ein |
|
myServo.MaxTemperature(ID_NUM, Temperatur) |
ID_NUM, Temperatur |
Schreiben Sie die maximale Temperaturgrenze |
|
myServo.goalPosition(ID_NUM, *Positionswert*) |
ID_NUM, Positionswert (siehe Tabelle) |
Setzen Sie eine gewünschte Hublängenposition |
|
myServo.limitVolt(ID_NUM, *Höchster/Niedrigster*, LimitVolt) |
ID_NUM, Höherer Wert = Höchster oder Niedriger Wert = Niedrigster, LimitVolt |
Setzen Sie die Hoch- oder Niedrigspannungseinstellung |
|
myServo.alarmLed(ID_NUM, *Alarmvariable*) |
ID_NUM, Alarmbit |
Alarm-LED-Einstellung. Siehe Tabelle für weitere Informationen. |
|
myServo.alarmShutdown(ID_NUM, *aktivieren*) |
ID_NUM, Aktivieren: 0 = aus, 1 = ein |
Einstellung zur Alarmabschaltung des Motors. Wenn der Alarm aktiviert ist, kann der Motor abgeschaltet werden. |
|
myServo.StrokeLimit(ID_NUM, *Lang/Kurz*, *Positionswert*) |
ID_NUM, Ausdehnungsgrenze = Lang oder Rückzugsgrenze = Kurz, Positionswert (siehe Tabelle) |
Schreibt die maximalen und minimalen Hublängenbegrenzungen |
|
myServo.ResolutionFactor(ID_NUM, *Auflösungsfaktor*) |
ID_NUM, Auflösungsfaktor (siehe Tabelle) |
Setzt den Auflösungswert für die Positionierung der Hublänge des Aktuators. |
|
myServo.movingSpeed(ID_NUM, *Wert der Bewegungsgeschwindigkeit*) |
ID_NUM, Wert der Bewegungsgeschwindigkeit (siehe Tabelle) |
Setzt die Geschwindigkeit des Servomotors |
|
myServo.forceLimit(ID_NUM, *Kraftwert*) |
ID_NUM, Kraftwert (siehe Tabelle) |
Setzt die maximale Kraft des Servomotors (flüchtige Einstellung) |
|
myServo.maxForce(ID_NUM, *Kraftwert*) |
ID_NUM, Kraftwert (siehe Tabelle) |
Setzt die maximale Kraft des Servomotors (nichtflüchtige Einstellung) |
Variablen Einstellungen
Die folgenden Tabellen enthalten den Variablenwert, der in die Funktionen eingegeben wird.
Baudrate
|
Baudvariablenwert |
Baudrate |
|
16 |
115200 |
|
32 |
57600 |
|
64 |
19200 |
|
128 |
9600 |
LED-Wert
|
LED RGB-Wert |
|
ROT |
|
GRÜN |
|
BLAU |
Servo-ID
|
Servo-ID-Wert |
|
0 |
|
1 - 253 |
|
254 |
Für die Servo-Motor-ID-Variable ID_NUM: Es stehen insgesamt 255 Optionen zur Verfügung. Der Wert 0 ist die Standardeinstellung. Sie können einen Wert von 1 bis 253 für eine individuelle ID auswählen. Der Wert 254 ist für eine Broadcast-ID reserviert, die alle PA-12 innerhalb eines Netzwerks aktiviert.
Alarmeinstellungen
|
Alarmeinstellung |
Wert der Alarmeinstellung |
|
Eingangsspannungsfehler |
0 |
|
Hublängenfehler |
1 |
|
Bereichsfehler |
3 |
|
Prüfziffernfehler |
4 |
|
Überlastfehler |
5 |
|
Instruktionsfehler |
6 |
|
*Reserviert* |
7 |
Hublängenauflösungsfaktor
|
Wert des Auflösungsfaktors |
Auflösung |
|
1 |
4096 |
|
2 |
2048 |
|
3 |
1024 |
|
4 |
512 |
Je höher der Auflösungswert, desto höher die Positionsgenauigkeit.
Bewegungsgeschwindigkeit
|
Wert der Bewegungsgeschwindigkeit |
Geschwindigkeitseinstellung |
|
0 |
Maximale Geschwindigkeit |
|
1 - 1023 |
1 = Niedrigster, 1023 = Höchster |
Kraftwert
|
Kraftwert |
Krafteinstellung |
|
0 - 1023 |
1 = Niedrigster, 1023 = Höchster |
Positionswert
|
Positionswert |
Position |
|
0 - 4095 |
0 = Vollständig zurückgezogen, 4095 = Vollständig ausgefahren |
Verdrahtungsanleitung
Der PA-12 ist mit dem RS-485-Modul verbunden, das dann direkt mit dem Arduino verbunden ist. Diese Version des PA-12 benötigt eine 12VDC-Stromversorgung für die Stromversorgung des Servomotors.

| RS-485 Seite A | Arduino |
| DI | Pin 1 |
| DE | Pin 2 |
| RE | Pin 2 |
| R0 | Pin 0 |
Pin 0 am Arduino ist der TTL-Empfang. Pin 1 am Arduino Leonardo ist die TTL-Übertragung. Pin 2 innerhalb der Beispielcodes ist so eingerichtet, dass er als Aktivierungspin verwendet wird.
|
PA-12 4-Pin-Stecker |
Wert |
|
Schwarz |
GND |
|
Rot |
Servomotor +VDC |
|
Weiß |
Kommunikationspin A |
|
Gelb |
Kommunikationspin B |

Abbildung 3 - PA-12 Portverbindungen
|
RS-485 Seite B |
Verbindung |
|
VCC1 |
+5VDC (Arduino) |
|
A |
PA-12 Weißer Draht |
|
B |
PA-12 Gelber Draht |
|
GND2 |
Stromversorgungs-GND und PA-12 GND |
1 Das RS-485-Modul erhält Strom von der +5VDC-Ausgabe des Arduino.
2 Die Erde wird zwischen dem PA-12, der Stromversorgung und dem RS-485-Modul geteilt.
Beispielcode
In diesem Tutorial werden wir drei Beispielcodes anzeigen, die einen ersten Einblick in einige der Funktionen des PA-12 geben und wie sie Schreib- und Lesefunktionen in Ihren eigenen Code implementieren können.
- PA12_Präsentposition
- PA12_Hublängenbegrenzung
- PA12_Kraftbegrenzung
1. Aktuelle Position
In diesem Code gibt der Benutzer den gewünschten Positionswert zwischen 0 und 4095 im seriellen Monitor ein. Nach der Eingabe wird der Befehl an den PA-12 gesendet, der dann den Servomotor aktiviert, um die Stange in die gewünschte Position zu bewegen. Während der Motor in Bewegung ist, wird die aktuelle Position angezeigt, bis die Endposition erreicht ist.

2. Hublängenbegrenzung
In diesem Code führt der PA-12 alle 1000 ms innerhalb der eingegebenen Ausdehnungs- und Rückzugsgrenzen einen Zyklus durch. Die Bezeichnungen Lang und Kurz befinden sich in der Hublängenbegrenzungsfunktion

3. Kraftbegrenzung
Der hier angezeigte Kraftbegrenzungscode ist die flüchtige Version. Das bedeutet, dass jedes Mal, wenn der PA-12 die Energie verliert, der Wert der Kraftbegrenzung auf die Standardeinstellung zurückgesetzt wird. Der Benutzer gibt den Wert der Kraftbegrenzung über den seriellen Monitor ein. In diesem Fall bedeutet der maximale Kraftwert von 0 einen niedrigen Kraftwert, und 1023 bedeutet einen maximalen Kraftwert.

Zukünftige Tutorials
In zukünftigen Tutorials werden wir behandeln:
- Implementierung fortgeschrittener Funktionen
- TTL- und PWM-Version PA-12-Steuerung
- Fehlerbehebungstechniken
- Externe Steuerungsmethoden
Der PA-12 ist ein vielseitiger und hochpräziser Aktuator, der es dem Endbenutzer ermöglicht, die direkte Kontrolle über seine Anwendung zu erreichen. Mit der richtigen Implementierung kann der PA-12 genau das erreichen, was Ihre Systemanforderungen sein könnten.
Für weitere Informationen senden Sie uns bitte eine E-Mail an sales@progressiveautomations.com oder rufen Sie unser Team unter 1-800-676-6123 an.