Aufbau der Extension-Register
Blockreferenz für Protokoll v9.0. Offsets beginnen am Anfang jedes Blocks; es handelt sich nicht um separate Legacy-Registeradressen. Lesen Sie jeden vollständigen Block in seiner genauen Länge. Siehe -Paketformat und -Startreihenfolge separat.
Ein -Offset ist das Startbyte eines Feldes, das innerhalb seines Blocks von Null an zählt. Die folgenden Offsets sind dezimal; Selektoren verwenden die Hexadezimalschreibweise (0x...). Alle Schreibvorgänge verwenden die Anweisung 0x91; Lesevorgänge verwenden 0x90 mit der genauen Byteanzahl.
| Selektor | Blockieren | Zugang | Bytes |
|---|---|---|---|
0x90 |
Fähigkeiten | Lesen | 8 |
0xA0 |
Konfiguration | Lesen/schreiben | 24 |
0xB8 |
Controller-Auswahl und Sitzungseinrichtung | Schreiben | 3 |
0xC1 |
Operatives Feedback | Lesen | 32 |
0xC2 |
Tuning-Feedback | Lesen | 54 |
Fähigkeiten – 0x90
| Versatz | Typ | Wert / Bedeutung |
|---|---|---|
| 0–3 | 4 Bytes | ASCII ARMC |
| 4 | u8 |
Hauptversion: 9 |
| 5 | u8 |
Nebenversion: 0 |
| 6 | u8 |
Reserviert: 0 |
| 7 | u8 |
Normales Controller-Aktualisierungsintervall: 1 ms |
Die Protokollversion definiert die verfügbaren Blöcke und deren genaue Längen. Auswahl und Sitzungseinrichtung teilen sich einen schreibgeschützten Block, der unten dokumentiert ist.
Konfiguration – 0xA0
| Versatz | Typ | Feld | Einheiten/gültiger Bereich |
|---|---|---|---|
| 0 | u16 |
kp_q8 |
Verstärkung × 256 ; 0 – 65535 |
| 2 | u16 |
kd_q8 |
Verstärkung × 256 ; 0 – 65535 |
| 4 | u16 |
ki_q8 |
Verstärkung × 256 ; 0 – 65535 |
| 6 | u16 |
integral_limit |
Stellwert; 0 – effort_limit |
| 8 | u16 |
effort_limit |
Stellwert; 1 – 1000 |
| 10 | u16 |
velocity_limit |
Anzahl/s; 1 – 65535 |
| 12 | u16 |
acceleration_limit |
Anzahl/s²; 1 – 30000 |
| 14 | u8 |
velocity_filter_q8 |
Geschwindigkeitsfilter-Antwort; 1 – 255, höher reagiert schneller |
| 15 | u8 |
ramp_time_ms |
Beschleunigungsrampe; 1 – 255 ms |
| 16 | u16 |
velocity_ff.positive_gain_q8 |
Ausgabe/(Anzahl/s) × 256 ; 0 – 65535 |
| 18 | u16 |
velocity_ff.negative_gain_q8 |
Ausgabe/(Anzahl/s) × 256 ; 0 – 65535 |
| 20 | u16 |
velocity_ff.effort_limit |
Stellwert; 0 – Haupt-effort_limit |
| 22 | u16 |
gravity_slew |
Vergütungsänderung, Stellwertseinheiten/s; 1 – 10000 |
Verstärkungen werden als gewünschter Wert multipliziert mit 256 gesendet. Ihre Einheiten sind Ausgabe/Anzahl für P, Ausgabe/(Anzahl/s) für D und Ausgabe/(Anzahl·s) für I. Beispielsweise erzeugt P = 4.5 4.5-Ausgabeeinheiten pro Fehleranzahl und wird als 1152 gesendet.
Das Servo verfügt über eine aktive Konfiguration . Das Schreiben erfordert das Ausschalten des Motors und eine entschärfte Sitzung. Jeder Schreibvorgang ersetzt die gesamte Konfiguration, einschließlich der Feedforward-Einstellungen. Ungültige Einstellungen lehnen den gesamten Schreibvorgang ab, ohne dass sich etwas ändert. Lesen Sie 0xA0, um die akzeptierten Einstellungen zu überprüfen.
Geschwindigkeits-Feedforward-Verstärkungen sind nicht negativ. Eine Feedforward-Ausgangsgrenze von Null erfordert, dass beide Verstärkungen Null sind. In beiden Richtungen gilt die gleiche Feedforward-Ausgangsgrenze, die die Hauptausgangsgrenze nicht überschreiten darf.
Konfigurieren Sie nach einem Reset den Servo, bevor Sie die Motorleistung aktivieren. Behalten Sie gespeicherte Einstellungen und alternative Tuning-Werte auf dem Host bei; Ändern Sie die Verstärkung zwischen den Läufen mit unterstütztem Arm und ausgeschaltetem Motor.
Auswahl und Sitzungsaufbau – 0xB8
| Versatz | Typ | Bedeutung |
|---|---|---|
| 0 | u8 |
Modus: 0 Legacy, 1 Erweiterung |
| 1 | u16 |
Sitzung: 0 für Legacy, 1–65535 für Erweiterung |
Die genaue Nutzlastlänge beträgt 3 Bytes , wobei die Sitzung in Little-Endian-Reihenfolge erfolgt. Beispielsweise ist der Erweiterungsmodus mit der Sitzung 0x1234 01 34 12; Der Legacy-Modus ist 00 00 00. Ungültige Kombinationen lehnen den gesamten Schreibvorgang ab, ohne den Status zu ändern. Beide Modi erfordern das Ausschalten des Motors und ersetzen alle früheren Sitzungseinstellungen. Durch die Auswahl allein wird weder die Steuerung gestartet noch eine Halteposition eingenommen.
Das Legacy-Drehmoment-Aktivierungsregister 40 startet die vorbereitete Erweiterungssitzung, wenn es in 1 geschrieben wird. Es erfordert eine verfügbare Motorleistung, eine gültige Konfiguration, initialisierte Sensoren mit Messwerten, die nicht älter als 2 ms sind, keinen Fehler, der eine Abschaltung erfordert, und verwendbare gespeicherte Legacy-Positionsgrenzwerte. Die gemessene Position muss innerhalb dieser Grenzen liegen, wenn sie aktiviert sind. Diese Prüfungen erfolgen zum Zeitpunkt der Aktivierung, sodass Bewegungen oder Fehler zwischen Einrichtung und Aktivierung berücksichtigt werden.
Durch die Torque-Off-Funktion werden sowohl die Betriebskontrolle als auch ungenutzte Einstellungen aufgehoben. Sensorfehler, Schutzabschaltung, Positionsgrenzwert- oder Encoder-Offset-Änderungen, Kalibrierung und das Speichern dauerhafter Einstellungen führen ebenfalls dazu, dass die Sitzungseinrichtung ungültig wird. Lesen Sie das Feedback, um zu prüfen, ob die Kontrolle tatsächlich begonnen hat; Es gibt keinen separaten ARM-Befehl. Der frühere 0xBA-Selektor und die frühere Ein-Byte-Auswahlnutzlast werden abgelehnt.
Betriebsrückmeldung – 0xC1
| Versatz | Typ | Feld / Einheiten |
|---|---|---|
| 0 | u32 |
Messzeit, ms seit dem Start; kehrt nach 4294967295 auf Null zurück |
| 4 | u16 |
Messnummer; kehrt nach 65535 auf Null zurück |
| 6 | u16 |
Sitzung |
| 8 | u16 |
Akzeptierte Zielsequenz |
| 10 | u16 |
Akzeptierte Schwerkraftsequenz |
| 12 | u16 |
Flaggen, unten |
| 14 | i32 |
Gemessene Position, Q8 zählt |
| 18 | i32 |
Gefilterte gemessene Geschwindigkeit, Q8-Zählungen/s |
| 22 | i16 |
Angewandte Leistung; positiv folgt steigenden Encoder-Zählungen |
| 24 | i16 |
Aktueller Sensorwert relativ zu seiner Grundlinie; nicht Ampere |
| 26 | u8 |
Versorgungsspannung, 0.1 V-Einheiten |
| 27 | u8 |
Validierte Temperatur, °C |
| 28 | u8 |
Legacy-Servofehler-/Statusflags |
| 29 | u8 |
Reserviert: Null |
| 30 | u16 |
Messalter zum Lesezeitpunkt, ms; Maximaler gemeldeter Wert 65535 |
| Flag-Bit | Bedeutung, wenn festgelegt |
|---|---|
| 0 | Die Probe ist frisch und für den aktuellen Armkontrollzustand verwendbar |
| 1 | Controller aktiv |
| 2 | Reserviert: Null |
| 3 | Motorleistung begrenzt |
| 4 | Armantrieb aktiviert |
| 5 | Sitzung durch Drehmomentfreigabe gestartet |
| 6 | Reserviert: Null |
| 7 | Ausgabe bereit |
| 8 | Ein Schwerkraftbefehl wurde empfangen |
| 9 | Reserviert: Null |
| 10 | Validierte Temperatur verfügbar |
| 11 | Reserviert: Null |
| 12 | Bewegungsziel aktiv |
| 13 | Reserviert: Null |
| 14 | Arm-Controller ausgewählt |
| 15 | Reserviert: Null |
Jedes Flag besteht aus einem Bit: Bit 0 hat den Wert 1, Bit 1 hat den Wert 2, Bit 2 hat den Wert 4 und so weiter. Es können mehrere Flags gleichzeitig gesetzt werden. Ein aktiver Controller mit gelöschtem Bit 12 hält sein Ziel. Ein Clear-Motion-Bit allein bedeutet nicht, dass der Motor mit Strom versorgt oder bereit ist.
Feedback beschreibt eine aufgezeichnete Messung. Wenn sich der Status des Servos ändert, bevor der Host ihn liest, beschreiben einige Felder möglicherweise den früheren Status. Das Bit 0 wird gelöscht, wenn die Messung älter ist als 2 ms, der Controller nicht mehr ausgewählt, scharfgeschaltet, fahrbereit oder bereit ist oder seine Sitzungs-/Sequenznummern nicht mehr übereinstimmen. Überprüfen Sie Bit 0, Alter, Sitzung und akzeptierte Sequenz zusammen.
Positions- und Gesundheitswerte sind auch im Legacy-Modus und bei ausgeschaltetem Motor verfügbar. Nicht verfügbare Kontrollfelder sind Null. Die Probensequenz schreitet voran, wenn Messungen erfasst werden, nicht jedes Mal, wenn der Host sie liest. Es unterscheidet Samples, die denselben Millisekunden-Zeitstempel haben. Unerwartete große Temperaturänderungen werden über mehrere Messwerte hinweg überprüft, bevor sie hier angezeigt werden. siehe die Schutzbeschränkung unten.
Tuning-Feedback – 0xC2
Die Bytes 0 – 31 haben genau das Layout 0xC1. Die restlichen Bytes sind:
| Versatz | Typ | Feld / Einheiten |
|---|---|---|
| 32 | i32 |
Referenzposition, Q8 zählt |
| 36 | i32 |
Referenzgeschwindigkeit, Q8 zählt/s |
| 40 | i16 |
Angeforderter Ausgang nach dem konfigurierten Grenzwert, vor dem Motorschutz |
| 42 | i16 |
P Beitrag, Stellwert |
| 44 | i16 |
D Beitrag, Stellwert |
| 46 | i16 |
Integraler Beitrag, Stellwert |
| 48 | i16 |
Derzeit angewendeter Schwerkraftausgleich, Stellwert |
| 50 | i16 |
Lokale Geschwindigkeitsvorsteuerung, Stellwert |
| 52 | u16 |
Kumulierte zusätzliche Controller-Verzögerung, ms; maximal 65535 |
Der Verzögerungszähler fügt die zusätzliche Zeit hinzu, wenn ein Controller-Update länger als die normalen 1 ms ( elapsed_ms − 1 ) dauert. Verlorene Nachrichten werden nicht gezählt. Die gemeldeten P- und D-Beiträge sind auf ± 32767 begrenzt, sodass die Addition der angezeigten Werte möglicherweise nicht die vollständige interne Berechnung reproduziert.
Das Servo sendet nur dann Rückmeldung, wenn es dazu aufgefordert wird. Verwenden Sie 0xC1 für die normale Überwachung und 0xC2, wenn für die Optimierung zusätzliche Werte erforderlich sind. Das Lesen von 0xC2 umfasst bereits den gesamten Inhalt von 0xC1, sodass das Lesen beider Dateien unnötigerweise zusätzlichen Datenverkehr verursacht. Separate Lesevorgänge können sich auf unterschiedliche Momente beziehen; Vergleichen Sie ihre Zeitstempel und Probennummern.
Interpretationsregeln
effort ist ein vorzeichenbehafteter PWM-Stellbefehl, kein Messwert in Ampere und kein gemessenes Drehmoment. currentAdcDelta ist ein relativer Stromsensorwert; erst eine separate Umrechnung liefert einen physikalischen Stromwert. Q8-Position und Q8-Geschwindigkeit haben unterschiedliche Einheiten. Die Division durch 256 entfernt den Festkommafaktor, wandelt aber keine Encoder-Zählschritte in Grad um. Gelenkwinkel benötigen eine physikalische Zuordnung.
Extension-Temperaturrückmeldungsprüfungen unterdrücken isolierte Sprünge. Der Motortemperaturschutz verwendet immer noch Rohwerte: Das Fehlen eines Sprungs in C1/C2 beweist nicht, dass er den Schutz nicht beeinträchtigen könnte.
Startseite der Dokumentation · Quellrevision: a995f77 . Extension 9.0 .
