Serial Protocol Specification-1
Serial Protocol Specification-1
4 serial protocol
specification
Applicable for 8-bit and 32-bit boards
Revision history
• rev. 0.1 - 07.05.2013: this is first revision
• rev. 0.2 - 29.05.2013: modified R and W commands
• rev. 0.3 – 18.06.2013: add 'r' command
• rev. 0.4 – 27.06.2013: add 'g' command; add SKIP_GYRO_CAL var and re-arrange 'W' command parameters
order
• rev. 0.5 – 12.07.2013: add followMode, followDeadband, followExpoRate variables to 'W' command
• rev. 0.6 – 24.07.2013: add FOLLOW_OFFSET; add 10 reserved bytes
• rev. 0.7 – 14.08.2013: some minor errors corrected
• rev. 0.8 – 09.09.2013: errors: page 2, “modulo 256”; add control command 'C'; add battery monitoring settings
and command 'B'; add helper command 'H'; extended RC mapping settings; add RC_MIX settings; add
command 'T'; add command 'M' and 'm'; add 'E' command; modified 'D' command;
• rev. 0.9 - 30.11.2013: updated 'C' command description and example code;
• rev. 0.10 - 07.12.2013: command IDs replaced by their definitions; add commands for board ver.3.x
• rev. 0.11 - 03.01.2014: angle units were changed in commands I, D, C, H to 14-bits per turn; add
BOOSTER_POWER parameter; add MENU_CMD_MOTOR_XX menu commands; CMD_READ_PROFILE:
error in the parameters order was corrected; new control mode MODE_RC;
• rev. 0.12 - 24.01.2014: add parameter FRAME_ANGLE_FROM_MOTORS;
• rev. 0.13 – 05.03.2014: add parameter FRAME_IMU_POS; add PROFILE4, PROFILE5 menu commands;
• rev. 0.14 – 27.03.2014: add command CMD_SELECT_IMU_3; P,I,D upper limits updated to 255;
• rev. 0.15 – 07.04.2014: upper limit for RC speed was increased to 255;
• rev. 0.16 – 21.04.2014: CMD_USE_DEFAULTS was extended to erase EEPROM;
• rev. 0.17 – 17.05.2014: add commands CMD_READ_PROFILE_NAMES_3,
CMD_WRITE_PROFILE_NAMES_3, CMD_SAVE_PARAMS_3; BEEPER_MODES extended by flag
BEEP_BY_MOTORS; MENU_CMD_INVERSE_YAW renamed to MENU_CMD_FRAME_UPSIDE_DOWN;
• rev. 0.18 – 31.07.2014: updated CMD_READ_PARAMS_3, CMD_WRITE_PARAMS_3; add CMD_AUTO_PID,
CMD_READ_PARAMS_EXT, CMD_WRITE_PARAMS_EXT; CMD_SERVO_OUT; add link to more examples;
add FOLLOW_LPF parameters; FRAME_IMU_POS set was extended;
• rev. 0.19 – 14.08.2014: add info about COM-port parity setting; NOTCH_FREQ_x units is changed;
• rev. 0.20 – 21.08.2014: add REMEMBER_LAST_USED_PROFILE setting; add info for ERROR_CODE_EXT;
• rev. 0.21 – 28.08.2014: add menu commands: MENU_CMD_LOOK_DOWN, MENU_CMD_HOME_POSITION;
• rev. 0.22 – 29.09.2014: add commands: CMD_I2C_WRITE_REG_BUF, CMD_I2C_READ_REG_BUF;
CMD_DEBUG_VARS_3, CMD_DEBUG_VARS_INFO_3; CMD_WRITE_EXTERNAL_DATA,
CMD_READ_EXTERNAL_DATA; CMD_CMD_READ_ADJ_VARS_CFG, CMD_WRITE_ADJ_VARS_CFG;
CMD_API_VIRT_CH_CONTROL; add “API Virtual control source” to RC input source list; CMD_RESET was
extended;
• rev. 0.23 – 24.10.2014: CMD_READ_PARAMS_EXT specs corrected;
• rev. 0.24 – 28.10.2014: add GENERAL_FLAGS1, PROFILE_FLAGS1;
© 2013-2014 Basecamelectronics®
• rev. 0.25 – 09.01.2015: add SPEKTRUM_MODE; add CMD_EEPROM_READ, CMD_EEPROM_WRITE;
• rev. 0.26 – 12.01.2015: CMD_READ_PARAMS_EXT extended by new parameters;
© 2013-2014 Basecamelectronics®
Message format
Communications is initiated from the GUI side (host) by sending outgoing commands. The controller board
may do some action and send response (further named as incoming commands). Each command consists
of the header and the body, both with checksum. Commands with the wrong header or body checksum, or
with the body size that differs from expected, should be ignored.
Board can work on different serial baud rate, so the GUI should find proper baud rate by sending
CMD_BOARD_INFO command on every speed ant wait for response, until valid response is received.
32bit boards with firmware version 2.40, works only with parity=EVEN COM-port setting. Starting from 2.41,
both EVEN and NONE parity are supported (NONE is default, and EVEN is detected automatically). So
beside baud rates, host should vary parity setting when connecting to boards ver.>3.0
Make a small delay after sending each command to prevent overflow of the input buffer. Delay should be
about 10-20 ms, and depends on the size of the request and response. If new serial data comes when the
input buffer is full, whole message will be lost. There is also a control of overflow of the output buffer on the
board's side: if it have to write an answer to the output buffer, it hangs until buffer will have enough space to
accept new data. If requests comes with too big rate, it may negatively affect normal operation of the board
and impact stabilization.
Input and output commands have the same format, described below:
Header:
character '>'
command ID - 1u
data_size – 1u, may be zero
header checksum = (command ID + data_size) modulo 256 - 1u
Body:
[array of bytes data_size length]
body checksum - 1u
Checksum is calculated as a sum of all bytes modulo 256.
• 1u – 1 byte unsigned
• 1s – 1 byte signed
© 2013-2014 Basecamelectronics®
• Nb – byte array size N
Command ID definitions
#define CMD_READ_PARAMS 82
#define CMD_WRITE_PARAMS 87
#define CMD_REALTIME_DATA 68
#define CMD_BOARD_INFO 86
#define CMD_CALIB_ACC 65
#define CMD_CALIB_GYRO 103
#define CMD_CALIB_EXT_GAIN 71
#define CMD_USE_DEFAULTS 70
#define CMD_CALIB_POLES 80
#define CMD_RESET 114
#define CMD_HELPER_DATA 72
#define CMD_CALIB_OFFSET 79
#define CMD_CALIB_BAT 66
#define CMD_MOTORS_ON 77
#define CMD_MOTORS_OFF 109
#define CMD_CONTROL 67
#define CMD_TRIGGER_PIN 84
#define CMD_EXECUTE_MENU 69
#define CMD_GET_ANGLES 73
#define CMD_CONFIRM 67
#define CMD_BOOT_MODE_3 51
© 2013-2014 Basecamelectronics®
Incoming commands
CMD_BOARD_INFO – version and board info information
• FIRMWARE_VER - 2u (split into decimal digits X . XX . X, for example 2305 means 2.30b5)
• BOARD_FEATURES – 2u
• CONNECTION_FLAGS - 1u
• reserved – 11b
• deviceID 9b – device ID
• EEPROM_SIZE - 4u
• reserved - 44b
◦ P - 1u
◦ I - 1u (multiplied by 100)
◦ D - 1u
◦ POWER - 1u
◦ POLES - 1u
• }
• ACC_LIMITER - 1u
• EXT_FC_GAIN_ROLL - 1s
• EXT_FC_GAIN_PITCH – 1s
◦ RC_MIN_ANGLE - 2s
© 2013-2014 Basecamelectronics®
◦ RC_MAX_ANGLE - 2s
◦ RC_MODE - 1u
◦ RC_LPF – 1u
◦ RC_SPEED – 1u
◦ RC_FOLLOW - 1u
• }
• GYRO_TRUST – 1u
• USE_MODEL – 1u
• PWM_FREQ – 1u
• SERIAL_SPEED – 1u
• RC_TRIM_ROLL - 1s
• RC_TRIM_PITCH - 1s
• RC_TRIM_YAW - 1s
• RC_DEADBAND - 1u
• RC_EXPO_RATE - 1u
• RC_VIRT_MODE – 1u
• RC_MAP_ROLL – 1u
• RC_MAP_PITCH – 1u
• RC_MAP_YAW – 1u
• RC_MAP_CMD – 1u
• RC_MAP_FC_ROLL – 1u
• RC_MAP_FC_PITCH – 1u
• RC_MIX_FC_ROLL - 1u
• RC_MIX_FC_PITCH - 1u
• FOLLOW_MODE – 1u
• FOLLOW_DEADBAND – 1u
• FOLLOW_EXPO_RATE – 1u
• FOLLOW_OFFSET_ROLL – 1s
• FOLLOW_OFFSET_PITCH – 1s
• FOLLOW_OFFSET_YAW - 1s
• AXIS_TOP – 1s
© 2013-2014 Basecamelectronics®
• AXIS_RIGHT – 1s
• GYRO_LPF – 1u
• GYRO_SENS - 1u
• I2C_INTERNAL_PULLUPS – 1u
• SKIP_GYRO_CALIB – 1u
• RC_CMD_LOW – 1u
• RC_CMD_MID – 1u
• RC_CMD_HIGH – 1u
• MENU_CMD_1 - 1u
• MENU_CMD_2 - 1u
• MENU_CMD_3 - 1u
• MENU_CMD_4 - 1u
• MENU_CMD_5 - 1u
• MENU_CMD_LONG - 1u
• OUTPUT_ROLL - 1u
• OUTPUT_PITCH – 1u
• OUTPUT_YAW – 1u
• BAT_THRESHOLD_ALARM – 2s
• BAT_THRESHOLD_MOTORS – 2s
• BAT_COMP_REF – 2s
• BEEPER_MODES – 1u
• FOLLOW_ROLL_MIX_START - 1u
• FOLLOW_ROLL_MIX_RANGE - 1u
• BOOSTER_POWER_ROLL - 1u
• BOOSTER_POWER_PITCH - 1u
• BOOSTER_POWER_YAW - 1u
• FOLLOW_SPEED_ROLL - 1u
© 2013-2014 Basecamelectronics®
• FOLLOW_SPEED_PITCH - 1u
• FOLLOW_SPEED_YAW - 1u
• FRAME_ANGLE_FROM_MOTORS - 1u
◦ P - 1u
◦ I - 1u (multiplied by 100)
◦ D - 1u
◦ POWER - 1u
◦ POLES - 1u
• }
• ACC_LIMIT - 1u
• EXT_FC_GAIN_ROLL - 1s
• EXT_FC_GAIN_PITCH – 1s
◦ RC_MIN_ANGLE - 2s
◦ RC_MAX_ANGLE - 2s
◦ RC_MODE - 1u
◦ RC_LPF – 1u
◦ RC_SPEED – 1u
◦ RC_FOLLOW - 1u
• }
• GYRO_TRUST – 1u
• USE_MODEL – 1u
• PWM_FREQ – 1u
• SERIAL_SPEED – 1u
© 2013-2014 Basecamelectronics®
• RC_TRIM_ROLL - 1s
• RC_TRIM_PITCH - 1s
• RC_TRIM_YAW - 1s
• RC_DEADBAND - 1u
• RC_EXPO_RATE - 1u
• RC_VIRT_MODE – 1u
• RC_MAP_ROLL – 1u
• RC_MAP_PITCH – 1u
• RC_MAP_YAW – 1u
• RC_MAP_CMD – 1u
• RC_MAP_FC_ROLL – 1u
• RC_MAP_FC_PITCH – 1u
• RC_MIX_FC_ROLL - 1u
• RC_MIX_FC_PITCH - 1u
• FOLLOW_MODE – 1u
• FOLLOW_DEADBAND – 1u
• FOLLOW_EXPO_RATE – 1u
• FOLLOW_OFFSET_ROLL – 1s
• FOLLOW_OFFSET_PITCH – 1s
• FOLLOW_OFFSET_YAW - 1s
• AXIS_TOP – 1s
• AXIS_RIGHT – 1s
• FRAME_AXIS_TOP – 1s
• FRAME_AXIS_RIGHT – 1s
• FRAME_IMU_POS - 1u
• GYRO_LPF – 1u
• GYRO_SENS - 1u
• I2C_INTERNAL_PULLUPS – 1u
• SKIP_GYRO_CALIB – 1u
• RC_CMD_LOW – 1u
© 2013-2014 Basecamelectronics®
• RC_CMD_MID – 1u
• RC_CMD_HIGH – 1u
• MENU_CMD_1 - 1u
• MENU_CMD_2 - 1u
• MENU_CMD_3 - 1u
• MENU_CMD_4 - 1u
• MENU_CMD_5 - 1u
• MENU_CMD_LONG - 1u
• OUTPUT_ROLL - 1u
• OUTPUT_PITCH – 1u
• OUTPUT_YAW – 1u
• BAT_THRESHOLD_ALARM – 2s
• BAT_THRESHOLD_MOTORS – 2s
• BAT_COMP_REF – 2s
• BEEPER_MODES – 1u
• FOLLOW_ROLL_MIX_START - 1u
• FOLLOW_ROLL_MIX_RANGE - 1u
• BOOSTER_POWER_ROLL - 1u
• BOOSTER_POWER_PITCH - 1u
• BOOSTER_POWER_YAW - 1u
• FOLLOW_SPEED_ROLL - 1u
• FOLLOW_SPEED_PITCH - 1u
• FOLLOW_SPEED_YAW - 1u
• FRAME_ANGLE_FROM_MOTORS - 1u
• RC_MEMORY_ROLL – 2s
• RC_MEMORY_PITCH – 2s
© 2013-2014 Basecamelectronics®
• RC_MEMORY_YAW – 2s
• SERVO1_OUT – 1u
• SERVO2_OUT – 1u
• SERVO3_OUT – 1u
• SERVO4_OUT – 1u
• SERVO_RATE – 1u
• ADAPTIVE_PID_ENABLED – 1u
• ADAPTIVE_PID_THRESHOLD – 1u
• ADAPTIVE_PID_RATE – 1u
• ADAPTIVE_PID_RECOVERY_FACTOR – 1u
• FOLLOW_LPF_ROLL – 1u
• FOLLOW_LPF_PITCH – 1u
• FOLLOW_LPF_YAW – 1u
• GENERAL_FLAGS1 – 2u
• PROFILE_FLAGS1 - 2u
• SPEKTRUM_MODE - 1u
• RESERVED_BYTES - 2b
• for(1..3) {
◦ NOTCH_FREQ[3] – 1u * 3
◦ NOTCH_WIDTH[3] – 1u * 3
• }
• LPF_FREQ[3] – 2u * 3
• FILTERS_EN[3] – 1u * 3
• ENCODER_OFFSET[3] – 2s * 3
© 2013-2014 Basecamelectronics®
• ENCODER_FLD_OFFSET[3] – 2s * 3
• ENCODER_MANUAL_SET_TIME[3] – 1u * 3
• MOTOR_HEATING_FACTOR[3] - 1u * 3
• MOTOR_COOLING_FACTOR[3] – 1u * 3
• ENCODER_TYPE – 1u
• ENCODER_CFG – 1u
• RESERVED – 1b
• MOTOR_MAG_LINK[3] – 1u * 3
• MOTOR_GEARING[3] – 2u * 3
• ENCODER_LIMIT_MIN[3] – 1s * 3
• ENCODER_LIMIT_MAX[3] – 1s * 3
• NOTCH1_GAIN[3] – 1u * 3
• NOTCH2_GAIN[3] – 1u * 3
• NOTCH3_GAIN[3] – 1u * 3
• RESERVED – 28b
◦ ACC – 2s
◦ GYRO – 2s
• }
• SERIAL_ERROR_CNT – 2u
• ERROR_CODE_EXT – 2u
• <RESERVED> – 4b
• RC_ROLL - 2s
• RC_PITCH - 2s
• RC_YAW - 2s
• RC_CMD – 2s
• EXT_FC_ROLL – 2s
• EXT_FC_PITCH – 2s
• ANGLE_ROLL – 2s
• ANGLE_PITCH – 2s
© 2013-2014 Basecamelectronics®
• ANGLE_YAW – 2s
• RC_ANGLE_ROLL - 2s
• RC_ANGLE_PITCH - 2s
• RC_ANGLE_YAW - 2s
• CYCLE_TIME - 2u
• I2C_ERROR_COUNT - 2u
• ERROR_CODE – 1u
• BAT_LEVEL - 2u
• OTHER_FLAGS - 1u
• CUR_PROFILE - 1u
◦ ACC – 2s
◦ GYRO – 2s
• }
• DEBUG1 – 2s
• DEBUG2 – 2s
• DEBUG3 – 2s
• DEBUG4 – 2s
• RC_ROLL - 2s
• RC_PITCH - 2s
• RC_YAW - 2s
• RC_CMD – 2s
• EXT_FC_ROLL – 2s
• EXT_FC_PITCH – 2s
• ANGLE_ROLL – 2s
• ANGLE_PITCH – 2s
• ANGLE_YAW – 2s
• FRAME_ANGLE_ROLL – 2s
• FRMAE_ANGLE_PITCH – 2s
• FRAME_ANGLE_YAW – 2s
• RC_ANGLE_ROLL - 2s
• RC_ANGLE_PITCH - 2s
© 2013-2014 Basecamelectronics®
• RC_ANGLE_YAW - 2s
• CYCLE_TIME - 2u
• I2C_ERROR_COUNT - 2u
• ERROR_CODE – 1u
• BAT_LEVEL - 2u
• OTHER_FLAGS - 1u
• CUR_IMU - 1u
• CUR_PROFILE – 1u
• MOTOR_POWER_ROLL – 1u
• MOTOR_POWER_PITCH – 1u
• MOTOR_POWER _YAW- 1u
• CMD – 1u
• ERROR_CODE – 1u
• ERROR_DATA – 4b
Data depends on error type.
◦ ANGLE - 2s
◦ RC_ANGLE - 2s
◦ RC_SPEED - 2s
• }
CMD_READ_PROFILE_NAMES_3 – receive profile names from EEPROM
Each name is encoded in UTF-8 format and padded with '\0' character to 48 byte size
• PROFILE1_NAME – 48b
• PROFILE2_NAME – 48b
• PROFILE3_NAME – 48b
• PROFILE4_NAME – 48b
• PROFILE5_NAME – 48b
© 2013-2014 Basecamelectronics®
--not yet implemented--
© 2013-2014 Basecamelectronics®
• ACTION5 – 1u
}
for(i=0; i<15; i++) {
• SRC_CH – 1u
• PARAM_ID – 1u
• MIN_VAL – 1u
• MAX_VAL – 1u
}
• RESERVED – 8b
© 2013-2014 Basecamelectronics®
Outgoing command
CMD_BOARD_INFO – request version information
• CONFIRM* – 1u
• DELAY_MS* - 2u
* Without parameters, device goes to reset without delay and confirmation. If CONFIRM=1, command
CMD_RESET will be sent back, and after 1000ms device will be reset. External application can free up
resources and properly close the serial connection.
© 2013-2014 Basecamelectronics®
• SPEED_ROLL – 2s
• ANGLE_ROLL – 2s
• SPEED_PITCH – 2s
• ANGLE_PITCH – 2s
• SPEED_YAW – 2s
• ANGLE_YAW – 2s
CMD_GET_ANGLES - Request information about angles and RC control state (board ver. 3.x)
See description for incoming command.
© 2013-2014 Basecamelectronics®
CMD_SET_ADJ_VARS – Change the value of selected parameter(s) (board ver. 3.x)
This command is intended to change parameters on-the-fly during system operation, and does not save
parameters to EEPROM. You need to send CMD_SAVE_PARAMS_3 to do this. List of available parameters
.
• NUM_VARS - 1u
• PARAM1_ID – 1u
• PARAM1_VALUE – 4s
• PARAM2_ID – 1u
• PARAM2_VALUE – 4s
...repeat for remaining parameters...
On success, confirmation is sent in response.
CMD_SAVE_PARAMS_3 – Saves current params from volatile memory to EEPROM, to the active
profile slot. (board ver. 3.x)
CMD_SERVO_OUT – Output PWM signal on the specified pins (board ver. 3.x).
Although it takes 8 values, the real number of hardware outputs depends on board version and may be less.
• SERVO1_TIME – 2s - shared with FC_ROLL
• SERVO2_TIME – 2s - shared with FC_PITCH
• SERVO3_TIME – 2s - shared with RC_PITCH
• SERVO4_TIME – 2s - shared with AUX1
• SERVO5_TIME – 2s - reserved
• SERVO6_TIME – 2s - reserved
• SERVO7_TIME – 2s - reserved
• SERVO8_TIME – 2s - reserved
CMD_I2C_WRITE_REG_BUF – writes data to any device connected to I2C line (board ver. 3.x).
• DEVICE_ADDR – 1u , where 1..7th bits specify address, 0th bit selects I2C port: 0 for main (sensor)
port, 1 for second (EEPROM) port
• REG_ADDR – 1u address of register
• DATA – 1..253 bytes
On successful writing, confirmation CMD_CONFIRM is sent in response.
CMD_I2C_READ_REG_BUF – requests reading from any device connected to I2C line (board ver. 3.x).
• DEVICE_ADDR – 1u, the same as for corresponding write command
• REG_ADDR – 1u address of register
• DATA_LEN – 1u length of the data to be read, 1..255
© 2013-2014 Basecamelectronics®
CMD_WRITE_EXTERNAL_DATA – stores any user data to the dedicated area in the EEPROM
• data – 128b
CMD_EEPROM_READ – request a reading of block of data from EEPROM at the specified address
and size.
• ADDR – 4u, 64-byte aligned
• SIZE – 2u, 64-byte aligned
On success, CMD_EEPROM_READ is sent. See its description.
© 2013-2014 Basecamelectronics®
Variables description and range
CMD_READ_PARAMS, CMD_WRITE_PARAMS
RC_SPEED 1u 0 255
RC_FOLLOW 1u -127 127 ROLL, PITCH: this value specify follow rate
for flight controller.
YAW: if value != 0, “follow motor” mode is
enabled.
GYRO_TRUST 1u 0 255
USE_MODEL 1u 0 1
PWM_FREQ 1u PWM_FREQ_LOW = 0
© 2013-2014 Basecamelectronics®
PWM_FREQ_HIGH = 1
PWM_FREQ_ULTRA_HIGH = 2 (BOARD_VER>=30)
SERIAL_SPPED 1u 115200 = 0
57600 = 1
38400 = 2
19200 = 3
9600 = 4
RC_TRIM_ROLL 1s -127 127
RC_TRIM_PITCH
RC_TRIM_YAW
RC_DEADBAND 1u 0 255
RC_EXPO_RATE 1u 0 100
Analog source
Input number + 32 (5th bit is set)
BOARD_VER < 30:
RC_INPUT_ROLL = 33
RC_INPUT_PITCH = 34
EXT_FC_INPUT_ROLL = 35
EXT_FC_INPUT_PITCH = 36
© 2013-2014 Basecamelectronics®
32 - 50% RC, 50% FC,
63 - 0% RC, 100% FC
bits 6,7: target RC channel
0 - no mix
1 - ROLL
2 - PITCH
3 - YAW
FOLLOW_MODE 1u FOLLOW_MODE_DISABLED=0
FOLLOW_MODE_FC=1
FOLLOW_MODE_PITCH=2
FOLLOW_DEADBAND 1u 0 255
FOLLOW_EXPO_RATE 1u 0 100
FOLLOW_ROLL_MIX_ST 1u 0 90
ART
FOLLOW_ROLL_MIX_RA 1u 0 90
NGE
I2C_INTERNAL_PULLUP 1u 0 1
S
SKIP_GYRO_CALIB 1u 0 1
© 2013-2014 Basecamelectronics®
MENU_CMD_FRAME_UPSIDE_DOWN = 13
MENU_CMD_PROFILE4 = 14
MENU_CMD_PROFILE5 = 15
MENU_CMD_AUTO_PID = 16
MENU_CMD_LOOK_DOWN = 17
MENU_CMD_HOME_POSITION = 18
MENU_CMD_RC_BIND = 19
OUTPUT_ROLL 1u DISABLED = 0
OUTPUT_PITCH ROLL = 1
OUTPUT_YAW PITCH = 2
YAW = 3
BAT_THRESHOLD_ALARM 2s -3000 3000 Negative means means alarm is disabled
Units: 0.01V
BAT_THRESHOLD_MOT 2s -3000 3000 Negative value means function is disabled
ORS Units: 0.01V
BEEP_BY_MOTORS=128
(if this flag is set, motors emit sound instead of internal buzzer)
BOOSTER_POWER_ROLL 1u 0 255 Additional power to correct broken synchronization
BOOSTER_POWER_PITCH
BOOSTER_POWER_YAW
FOLLOW_SPEED_ROLL 1u 0 255
FOLLOW_SPEED_PITCH
FOLLOW_SPEED_YAW
CUR_IMU 1u IMU_TYPE_MAIN=1
IMU_TYPE_FRAME=2
FRAME_ANGLE_FROM_ 1u 0 1
MOTORS
RC_MEMORY_ROLL 2s -36767 32767 Initial angle that is set at system start-up, in 14bit
RC_MEMORY_PITCH resolution
RC_MEMORY_YAW
Units: 0,02197265625 degree
SERVO1_OUT 1u Disabled = 0
SERVO2_OUT 1..32 - Virtual channel number as source of data to be
SERVO3_OUT output
SERVO4_OUT
© 2013-2014 Basecamelectronics®
HOLD
ADAPTIVE_PID_RATE 1u 1 255
ADAPTIVE_PID_RECOV 1u 0 10
ERY_FACTOR
FOLLOW_LPF_ROLL 1u 0 16
FOLLOW_LPF_PITCH
FOLLOW_LPF_YAW
MOTOR_HEATING_FACT 1u 0 255
OR
MOTOR_COOLING_FAC 1u 0 255
© 2013-2014 Basecamelectronics®
TOR
EXT_FC_ROLL 2s 1000 2000 External FC PWM values. May be zero if their inputs are
EXT_FC_PITCH mapped to RC control or command.
ANGLE_ROLL 2s -32768 32767 Camera angles in 14-bit resolution per full turn
ANGLE_PITCH
ANGLE_YAW Units: 0,02197265625 degree
FRAME_ANGLE_ROLL 2s -32768 32767 Frame angles, detected by the second IMU or encoders,
FRAME_ANGLE_PITCH in 14-bit resolution.
FRAME_ANGLE_YAW
Units: 0,02197265625 degree
(BOARD_VER>=30 only)
CYCLE_TIME 2u
© 2013-2014 Basecamelectronics®
I2C_ERROR_COUNT 2u Number of registered errors on I2C bus
(BOARD_VER>=30 only)
CMD_CONTROL - Control
CONTROL_MODE* 1u MODE_NO_CONTROL=0
MODE_SPEED=1
MODE_ANGLE=2
MODE_SPEED_ANGLE=3
MODE_RC=4
© 2013-2014 Basecamelectronics®
ANGLE_YAW -500..500
• Serial control overrides RC control. To switch back to RC, send this command with the
mode=MODE_NO_CONTROL and all data set to zeros.
RC_INPUT_ROLL = 1
RC_INPUT_PITCH = 2
EXT_FC_INPUT_ROLL = 3
EXT_FC_INPUT_PITCH = 4
RC_INPUT_YAW = 5 (BOARD_VER >= 30)
PIN_AUX1* = 16
PIN_AUX2* = 17
PIN_AUX3* = 18
PIN_BUZZER* = 32
PIN_SSAT_POWER** = 33
STATE 1u LOW = 0
HIGH = 1
ANGLE_ROLL 2s -32768 32767 Actual angle measured by IMU. After 2 full turns, angle is
ANGLE_PITCH cycled
ANGLE_YAW
Units: 0,02197265625 degree.
RC_ANGLE_ROLL 2s -32768 32767 Target angle that gimbal should keep. Angle is set by RC
RC_ANGLE_PITCH or control command 'C'.
RC_ANGLE_YAW
Units: 0,02197265625 degree.
RC_SPEED_ROLL 2s - - Target speed that gimbal should keep. Speed is set by
RC_SPEED_PITCH - - RC or control command 'C'. Zero speed means control is
RC_SPEED_YAW - - idle (target is reached)
© 2013-2014 Basecamelectronics®
CMD_SELECT_IMU_3 - Select IMU to configure
IMU_TYPE 1u IMU_TYPE_MAIN=1
IMU_TYPE_FRAME=2
If selected IMU is not connected, command is ignored.
CMD_SET_ADJ_VARS - Select IMU to configure
PROFILE_ID 1u
SERVO1_TIME 2s -1 20000 value < 0: free up this pin and make it floating
SERVO2_TIME value = 0: configure this pin as output and set it to 'Low'
SERVO3_TIME state
value > 0: PWM pulse time, us. Should be less than
SERVO4_TIME
PWM period, configured by the “SERVO_RATE”
SERVO5_TIME parameter. Regular servo accept values in range about
SERVO6_TIME 500..2500 us, 1500 us is neutral position, PWM period is
SERVO7_TIME 20000 us or less.
SERVO8_TIME
DEBUG_VARS_NUM 1u 1 255
VAR_NAME strin 1st byte is size, following by ASCII characters
g
VAR_TYPE 1u Type (0..3 bits):
VAR_TYPE_UINT8 = 1
VAR_TYPE_INT8 = 2
VAR_TYPE_UINT16 = 3
VAR_TYPE_INT16 = 4
VAR_TYPE_UINT32 = 5
© 2013-2014 Basecamelectronics®
VAR_TYPE_INT32 = 6
VAR_TYPE_FLOAT = 7 (IEEE-754)
© 2013-2014 Basecamelectronics®
ARR_SIZE 2u
• This command is useless for 3-axis systems, until YAW encoders will be implemented to know
exact YAW angles.
© 2013-2014 Basecamelectronics®
* The difference between control modes is illustrated on the picture below:
MODE_ANGLE MODE_SPEED_ANGLE
SPEED=10
SPEED=-10
X'
X''
Fig.2 – relationship between the gimbal axes and the ground system axes
© 2013-2014 Basecamelectronics®
Appendix A: Examples and libraries
Examples can be downloaded from the link:
http://www.basecamelectronics.com/files/SBGC_Serial_API_Examples.zip
See README.txt in the zip package for details.
Currently, examples provided for Arduino platform only.
Libraries
C/C++ library included as a part of examples folder.
© 2013-2014 Basecamelectronics®
Appendix B: Definition of dynamically
configurable parameters
Used in CMD_SET_ADJ_VARS, CMD_GET_PARAMS_3, CMD_READ_ADJ_VARS_CFG,
CMD_WRITE_ADJ_VARS_CFG
WARNING: this is not final and complete specification. Use CMD_GET_PARAMS_3 to receive actual
list of parameters supported by current firmware.
FOLLOW_SPEED_PITCH 14 1u 0 255
FOLLOW_SPEED_YAW 15 1u 0 255
FOLLOW_LPF_ROLL 16 1u 0 16
FOLLOW_LPF_PITCH 17 1u 0 16
FOLLOW_LPF_YAW 18 1u 0 16
RC_SPEED_ROLL 19 1u 0 255
RC_SPEED_PITCH 20 1u 0 255
RC_SPEED_YAW 21 1u 0 255
RC_LPF_ROLL 22 1u 0 16
RC_LPF_PITCH 23 1u 0 16
RC_LPF_YAW 24 1u 0 16
© 2013-2014 Basecamelectronics®
RC_TRIM_YAW 27 1s -127 127
RC_DEADBAND 28 1u 0 255
RC_EXPO_RATE 29 1u 0 100
FOLLOW_MODE 30 1u 0 2 0 – disabled
1 – Follow flight controller
2 – “Follow PITCH,ROLL” mode
RC_FOLLOW_YAW 31 1u 0 1 0 – disabled
1 - “Follow YAW” mode
FOLLOW_DEADBAND 32 1u 0 255
FOLLOW_EXPO_RATE 33 1u 0 100
FOLLOW_ROLL_MIX_START 34 1u 0 90
FOLLOW_ROLL_MIX_RANGE 35 1u 0 90
GYRO_TRUST 36 1u 0 255
© 2013-2014 Basecamelectronics®