<Protocolname="Servo"prefix="Servo_"api="20"version="2.10"mapfile="Servo_SettingsMap"verifyfile="Servo_SettingsVerify"endian="big"supportSpecialFloat="false"supportInt64="false"supportFloat64="false"supportBool="true"comment="This is the ICD for the Currawong Engineering CAN Servo. This document details the Servo command and packet structure for communication with and configuration of the Servo"><Includename="string.h"comment="C string manipulation function header"global="true"/>
<Protocolname="Servo"prefix="Servo_"api="21"version="2.11"mapfile="Servo_SettingsMap"verifyfile="Servo_SettingsVerify"endian="big"supportSpecialFloat="false"supportInt64="false"supportFloat64="false"supportBool="true"comment="This is the ICD for the Currawong Engineering CAN Servo. This document details the Servo command and packet structure for communication with and configuration of the Servo"><Includename="string.h"comment="C string manipulation function header"global="true"/>
<Packetname="MultiPositionCommand"ID="PKT_SERVO_MULTI_COMMAND_1"map="false"file="ServoPackets"parameterInterface="true"comment="This command can be used to command multiple servos (1 to 4) with a single CAN frame). The addresses of the targetted servos must be sequential, with the initial address based on the packet ID. The example packet shown below corresponds to servos with IDs {1, 2, 3, 4}. For other addresses refer to the *ServoMultiCommandPackets* enumeration. Note: The CAN frame must be sent to the broadcast ID (0xFF) for all servos to receive this message.">
<Packetname="MultiPositionCommand"ID="PKT_SERVO_MULTI_COMMAND_1 PKT_SERVO_MULTI_COMMAND_2 PKT_SERVO_MULTI_COMMAND_3 PKT_SERVO_MULTI_COMMAND_4 PKT_SERVO_MULTI_COMMAND_5 PKT_SERVO_MULTI_COMMAND_6 PKT_SERVO_MULTI_COMMAND_7 PKT_SERVO_MULTI_COMMAND_8 PKT_SERVO_MULTI_COMMAND_9 PKT_SERVO_MULTI_COMMAND_10 PKT_SERVO_MULTI_COMMAND_11 PKT_SERVO_MULTI_COMMAND_12 PKT_SERVO_MULTI_COMMAND_13 PKT_SERVO_MULTI_COMMAND_14 PKT_SERVO_MULTI_COMMAND_15 PKT_SERVO_MULTI_COMMAND_16"map="false"file="ServoPackets"parameterInterface="true"comment="This packet can be used to simultaneously command multiple servos which have sequential CAN ID values. This packet must be sent as a broadcast packet (address = 0xFF) such that all servos can receive it. These commands can be sent to groups of servos with ID values up to 64, using different PKT_SERVO_MULTI_COMMAND_x packet ID values.">
<Dataname="commandA"inMemoryType="signed16"comment="Servo command for servo with address offset 0"units="dimensionless"range="-20,000 to +20,000"notes="Input limits depend on servo I/O mapping"/>
<Dataname="commandB"inMemoryType="signed16"comment="Servo command for servo with address offset 1"units="dimensionless"range="-20,000 to +20,000"notes="Input limits depend on servo I/O mapping"/>
<Dataname="commandC"inMemoryType="signed16"comment="Servo command for servo with address offset 3"units="dimensionless"range="-20,000 to +20,000"notes="Input limits depend on servo I/O mapping"/>
<Dataname="commandD"inMemoryType="signed16"comment="Servo command for servo with address offset 3"units="dimensionless"range="-20,000 to +20,000"notes="Input limits depend on servo I/O mapping"/>
</Packet>
o
<Packetname="PositionCommand"ID="PKT_SERVO_POSITION_COMMAND"comment="Send this command to move the servo(s) to the commanded position. Position command units depend on the configuration of the servo. Send with the broadcast ID (0xFF) to send the position command to *all* servos."file="ServoPackets"parameterInterface="true">
<Dataname="command"inMemoryType="signed16"comment="Servo command"units="dimensionless"range="-20,000 to +20,000"notes="Input limits depend on servo I/O mapping"/>
<Packetname="StatusA"ID="PKT_SERVO_STATUS_A"file="ServoPackets"parameterInterface="true"comment="The *SERVO_STATUS_A* packet contains status, warning and error information, in addition to the servo position">
<Packetname="StatusA"ID="PKT_SERVO_STATUS_A"file="ServoPackets"parameterInterface="true"structureInterface="true"comment="The *SERVO_STATUS_A* packet contains status, warning and error information, in addition to the servo position">
<Dataname="status"struct="StatusBits"comment="Status bits contain information on servo operation"/>
<Dataname="warnings"struct="WarningBits"comment="Warning bits indicate servo is operation outside of desired range"/>
<Dataname="errors"struct="ErrorBits"comment="These bits indicate critical system error information"/>
<Packetname="StatusB"ID="PKT_SERVO_STATUS_B"file="ServoPackets"parameterInterface="true"comment="The *SERVO_STATUS_B* packet contains various servo feedback data">
<Packetname="StatusB"ID="PKT_SERVO_STATUS_B"file="ServoPackets"parameterInterface="true"structureInterface="true"comment="The *SERVO_STATUS_B* packet contains various servo feedback data">
<Dataname="current"inMemoryType="unsigned16"units="10mA per bit"comment="Servo current"/>
<Dataname="voltage"inMemoryType="unsigned16"units="10mV per bit"comment="Servo supply voltage"/>
<Dataname="temperature"inMemoryType="signed8"comment="Servo temperature"units="1C per bit"/>
<Dataname="dutyCycle"inMemoryType="signed8"default="0"comment="Motor duty cycle"units="1% per bit"range="-100% to +100%"/>
<Dataname="speed"inMemoryType="signed16"default="0"comment="Servo output shaft speed"units="1 degree per second"/>
</Packet>
<Packetname="StatusC"ID="PKT_SERVO_STATUS_C"file="ServoPackets"parameterInterface="true"comment="The *SERVO_STATUS_C* packet contains servo position data. It is a cut-down packet to allow high-speed feedback on servo position">
<Packetname="StatusC"ID="PKT_SERVO_STATUS_C"file="ServoPackets"parameterInterface="true"structureInterface="true"comment="The *SERVO_STATUS_C* packet contains servo position data. It is a cut-down packet to allow high-speed feedback on servo position">
<Dataname="position"inMemoryType="signed16"comment="Servo position, mapped to input units"/>
</Packet>
@ -233,7 +235,7 @@
@@ -233,7 +235,7 @@
<Dataname="resolution"inMemoryType="unsigned8"comment="Accelerometer measurement resolution, in 'bits'."/>