Futaba S-Bus Protokoll
Anfangs 2010 hat Futaba ein neues Bussystem für den Anschluss von Servos an den Empfänger vorgestellt. Über einen einzigen Empfängerausgang werden alle daran angeschlossenen S-Bus fähigen Servos mit Daten gesteuert. Welches Servo zu welchem Kanal gehört wird am Servo über den Programmer SBC-1 oder CIU-2 eingestellt.
Protokollstruktur
Das Protokoll ist 25 Byte lang und wird alle 14ms (analog) oder 7ms (highspeed) gesendet.
Ein Byte = 1 Startbit + 8 Databit + 1 Paritybit + 2 Stopbit (8E2), Baudrate = 100’000 bit/s
Es wird zuerst das höchste Bit gesendet. Die Logik ist intertiert (Pegel High = 1)
Nachtrag – 20.03.2012: Die Datenrate kann auch 9600 bit/s betragen. Dazu sind andere Timings anzupassen. Begründung: das USB-Interface CIU-2 arbeitet mit 9600 bits/s. Damit sind einfachere Controller auch in der Lage S-Bus Daten zu senden, wenn auch einiges gemächlicher.
[Startbyte] [Data1] [Data2] .... [Data22][Flags][Endbyte]
Startbyte = 11110000b (0xF0)
Data 1-22 = [ch1, 11bit][ch2, 11bit] .... [ch16, 11bit] (ch# = 0 bis 2047)
Kanal 1 benutzt 8 Bits von Data1 und 3 Bits von Data2
Kanal 2 benutzt restliche 5 Bits von Data2 und 6 Bits von Data3 usw.
Flags = Bit7 = ch17 = Schaltkanal (0x80)
Bit6 = ch18 = Schaltkanal (0x40)
Bit5 = Frame lost, entspricht roter LED am Empfänger (0x20)
Bit4 = Failsafe aktiviert (0x10)
Bit3 = unbekannt
Bit2 = unbekannt
Bit1 = unbekannt
Bit0 = unbekannt
Endbyte = 00000000b
Servos programmieren
Vor dem Einbau muss jedem Servo eine ID zugewiesen werden. Das kann man mit dem kleinen SBC-1 machen, oder komfortabler, weil mehr Parameter verfügbar, mit dem USB-Adapter CIU-2.
Gemessen habe ich es mit dem SBC-1, in einem Empfängergehäuse integriertes Modul, sendet periodisch Frames mit 17 Bytes aus. Das Servo antwortet unmittelbar darauf mit einem gleich langen Frame.
Das SBC-1 sendet für eine Überprüfung des Servos folgende Daten:
F9 07 03 79 F9 00 00 00 00 00 00 00 00 01 00 07 7C
Das Servo antwortet mit:
A0 07 03 79 F9 0C 0C 0F 15 64 64 00 00 00 01 08 77
Bei beiden Frames repräsentiert Byte 2 die ID des Servos, das letzte Byte ist eine Checksumme.
Soll das Servo eine neue ID bekommen sendet das SBC-1 folgendes Frame:
F9 00 03 79 F9 00 00 00 00 00 00 00 00 01 00 4D 3D
Wieder steht Byte 2 für die (diesmal neue) ID, das zweitletzte Byte hat den Wert 4D. Das Servo sendet dabei keine Daten zurück.