Configuration Parameters

We're Updating our Documentation! For the most up-to-date information about the SPARK MAX and other ION Motor Controllers please check out the following new documentation pages:

Below is a list of all the configurable parameters within the SPARK MAX. Parameters can be set through the CAN or USB interfaces. The parameters are saved in a different region of memory from the device firmware and persist through a firmware update.

Name

ID

Type

Default

Description

kCanID

0

uint

0

CAN ID This parameter persists through a normal firmware update.

kInputMode

1

Input Mode

0

Input mode, this parameter is read only and the input mode is detected by the firmware automatically. 0 - PWM 1 - CAN 2 - USB

kMotorType

2

Motor Type

BRUSHLESS

Motor type: 0 - Brushed 1 - Brushless This parameter persists through a normal firmware update.

Reserved

3

-

Reserved

kSensorType

4

Sensor Type

HALL_EFFECT

Sensor type: 0 - No Sensor 1 - Hall Sensor 2 - Encoder This parameter persists through a normal firmware update.

kCtrlType

5

Ctrl Type

CTRL_DUTY_CYCLE

Control Type, this is a read only parameter of the currently active control type. The control type is changed by calling the correct API. 0 - Duty Cycle 1 - Velocity 2 - Voltage 3 - Position

kIdleMode

6

Idle Mode

IDLE_COAST

State of the half bridge when the motor controller commands zero output or is disabled. 0 - Coast 1 - Brake This parameter persists through a normal firmware update.

kInputDeadband

7

float32

%0.05

Percent of the input which results in zero output for PWM mode. This parameter persists through a normal firmware update.

Reserved

8

-

-

Reserved

Reserved

9

-

-

Reserved

kPolePairs

10

uint

7

Number of pole pairs for the brushless motor. This is the number of poles/2 and can be determined by either counting the number of magnets or counting the number of windings and dividing by 3. This is an important term for speed regulation to properly calculate the speed.

kCurrentChop

11

float32

115/Amps

If the half bridge detects this current limit, it will disable the motor driver for a fixed amount of time set by kCurrentChopCycles. This is a low sophistication 'current control'. Set to 0 to disable. The max value is 125.

kCurrentChopCycles

12

uint

0

Number of PWM Cycles for the h-bridge to be off in the case that the current limit is set. Min = 1, multiples of PWM period (50μs). During this time the current will be recirculating through the low side MOSFETs, so instead of 'freewheeling' the diodes, the bridge will be in brake mode during this time.

kP_0

13

float32

0

Proportional gain constant for gain slot 0.

kI_0

14

float32

0

Integral gain constant for gain slot 0.

kD_0

15

float32

0

Derivative gain constant for gain slot 0.

kF_0

16

float32

0

Feed Forward gain constant for gain slot 0.

kIZone_0

17

float32

0

Integrator zone constant for gain slot 0. The PIDF loop integrator will only accumulate while the setpoint is within IZone of the target.

kDFilter_0

18

float32

0

PIDF derivative filter constant for gain slot 0.

kOutputMin_0

19

float32

-1

Max output constant for gain slot 0. This is the max output of the controller.

kOutputMax_0

20

float32

1

Min output constant for gain slot 0. This is the min output of the controller.

kP_1

21

float32

0

Proportional gain constant for gain slot 1.

kI_1

22

float32

0

Integral gain constant for gain slot 1.

kD_1

23

float32

0

Derivative gain constant for gain slot 1.

kF_1

24

float32

0

Feed Forward gain constant for gain slot 1.

kIZone_1

25

float32

0

Integrator zone constant for gain slot 1. The PIDF loop integrator will only accumulate while the setpoint is within IZone of the target.

kDFilter_1

26

float32

0

PIDF derivative filter constant for gain slot 1.

kOutputMin_1

27

float32

-1

Max output constant for gain slot 1. This is the max output of the controller.

kOutputMax_1

28

float32

1

Min output constant for gain slot 1. This is the min output of the controller.

kP_2

29

float32

0

Proportional gain constant for gain slot 2.

kI_2

30

float32

0

Integral gain constant for gain slot 2.

kD_2

31

float32

0

Derivative gain constant for gain slot 2.

kF_2

32

float32

0

Feed Forward gain constant for gain slot 2.

kIZone_2

33

float32

0

Integrator zone constant for gain slot 2. The PIDF loop integrator will only accumulate while the setpoint is within IZone of the target.

kDFilter_2

34

float32

0

PIDF derivative filter constant for gain slot 2.

kOutputMin_2

35

float32

-1

Max output constant for gain slot 2. This is the max output of the controller.

kOutputMax_2

36

float32

1

Min output constant for gain slot 2. This is the min output of the controller.

kP_3

37

float32

0

Proportional gain constant for gain slot 3.

kI_3

38

float32

0

Integral gain constant for gain slot 3.

kD_3

39

float32

0

Derivative gain constant for gain slot 3.

kF_3

40

float32

0

Feed Forward gain constant for gain slot 3.

kIZone_3

41

float32

0

Integrator zone constant for gain slot 3. The PIDF loop integrator will only accumulate while the setpoint is within IZone of the target.

kDFilter_3

42

float32

0

PIDF derivative filter constant for gain slot 3.

kOutputMin_3

43

float32

-1

Max output constant for gain slot 3. This is the max output of the controller.

kOutputMax_3

44

float32

1

Min output constant for gain slot 3. This is the min output of the controller.

Reserved

45

-

-

Reserved

Reserved

46

-

-

Reserved

Reserved

47

-

-

Reserved

Reserved

48

-

-

Reserved

Reserved

49

-

-

Reserved

kLimitSwitchFwdPolarity

50

bool

0

Forward Limit Switch polarity. 0 - Normally Open 1 - Normally Closed

kLimitSwitchRevPolarity

51

bool

0

Reverse Limit Switch polarity. 0 - Normally Open 1 - Normally Closed

kHardLimitFwdEn

52

bool

1

Limit switch enable, enabled by default

kHardLimitRevEn

53

bool

1

Limit switch enable, enabled by default

Reserved

54

-

-

Reserved

Reserved

55

-

-

Reserved

kRampRate

56

float32

V/s 0

Voltage ramp rate active for all control modes in % output per second, a value of 0 disables this feature. All APIs take the reciprocal to make the unit 'time from 0 to full'.

kFollowerID

57

uint

0

CAN EXTID of the message with data to follow

kFollowerConfig

58

uint

0

Special configuration register for setting up to follow on a repeating message (follower mode). CFG[0] to CFG[3] where CFG[0] is the motor output start bit (LSB), CFG[1] is the motor output stop bit (MSB). CFG[0] - CFG[1] determines endianness. CFG[2] bits determine sign mode and inverted, CFG[3] sets a preconfigured controller (0x1A = REV, 0x1B = Talon/Victor style as of 2018 season)

kSmartCurrentStallLimit

59

uint

80A

Smart Current Limit at stall, or any RPM less than kSmartCurrentConfig RPM.

kSmartCurrentFreeLimit

60

uint

20A

Smart current limit at free speed

kSmartCurrentConfig

61

uint

10000

Smart current limit RPM value to start linear reduction of current limit. Set this > free speed to disable.

Reserved

62

-

-

Reserved

Reserved

63

-

-

Reserved

Reserved

64

-

-

Reserved

Reserved

65

-

-

Reserved

Reserved

66

-

-

Reserved

Reserved

67

-

-

Reserved

Reserved

68

-

-

Reserved

kEncoderCountsPerRev

69

uint

4096

Number of encoder counts in a single revolution, counting every edge on the A and B lines of a quadrature encoder. (Note: This is different than the CPR spec of the encoder which is 'Cycles per revolution'. This value is 4 * CPR.

kEncoderAverageDepth

70

uint

64

Number of samples to average for velocity data based on quadrature encoder input. This value can be between 1 and 64.

kEncoderSampleDelta

71

uint

200 per 500us

Delta time value for encoder velocity measurement in 500μs increments. The velocity calculation will take delta the current sample, and the sample x * 500μs behind, and divide by this the sample delta time. Can be any number between 1 and 255

Reserved

72

-

-

Reserved

Reserved

73

-

-

Reserved

Reserved

74

-

-

Reserved

kCompensatedNominalVoltage

75

float32

0 V

In voltage compensation mode mode, this is the max scaled voltage.

kSmartMotionMaxVelocity_0

76

float32

0

kSmartMotionMaxAccel_0

77

float32

0

kSmartMotionMinVelOutput_0

78

float32

0

kSmartMotionAllowedClosedLoopError_0

79

float32

0

kSmartMotionAccelStrategy_0

80

float32

0

kSmartMotionMaxVelocity_1

81

float32

0

kSmartMotionMaxAccel_1

82

float32

0

kSmartMotionMinVelOutput_1

83

float32

0

kSmartMotionAllowedClosedLoopError_1

84

float32

0

kSmartMotionAccelStrategy_1

85

float32

0

kSmartMotionMaxVelocity_2

86

float32

0

kSmartMotionMaxAccel_2

87

float32

0

kSmartMotionMinVelOutput_2

88

float32

0

kSmartMotionAllowedClosedLoopError_2

89

float32

0

kSmartMotionAccelStrategy_2

90

float32

0

kSmartMotionMaxVelocity_3

91

float32

0

kSmartMotionMaxAccel_3

92

float32

0

kSmartMotionMinVelOutput_3

93

float32

0

kSmartMotionAllowedClosedLoopError_3

94

float32

0

kSmartMotionAccelStrategy_3

95

float32

0

kIMaxAccum_0

96

float32

0

kSlot3Placeholder1_0

97

float32

0

kSlot3Placeholder2_0

98

float32

0

kSlot3Placeholder3_0

99

float32

0

kIMaxAccum_1

100

float32

0

kSlot3Placeholder1_1

101

float32

0

kSlot3Placeholder2_1

102

float32

0

kSlot3Placeholder3_1

103

float32

0

kIMaxAccum_2

104

float32

0

kSlot3Placeholder1_2

105

float32

0

kSlot3Placeholder2_2

106

float32

0

kSlot3Placeholder3_2

107

float32

0

kIMaxAccum_3

108

float32

0

kSlot3Placeholder1_3

109

float32

0

kSlot3Placeholder2_3

110

float32

0

kSlot3Placeholder3_3

111

float32

0

kPositionConversionFactor

112

float32

1

kVelocityConversionFactor

113

float32

1

kClosedLoopRampRate

114

float32

0 DC/sec

kSoftLimitFwd

115

float32

0

Soft limit forward value

kSoftLimitRev

116

float32

0

Soft limit reverse value

Reserved

117

-

-

Reserved

Reserved

118

-

-

Reserved

kAnalogPositionConversion

119

float32

1 rev/volt

Conversion factor for position from analog sensor. This value is multiplied by the voltage to give an output value.

kAnalogVelocityConversion

120

float32

1 vel/v/s

Conversion factor for velocity from analog sensor. This value is multiplied by the voltage to give an output value.

kAnalogAverageDepth

121

uint

0

Number of samples in moving average of velocity.

kAnalogSensorMode

122

uint

0

0 Absolute: In this mode the sensor position is always read as voltage * conversion factor and reads the absolute position of the sensor. In this mode setPosition() does not have an effect. 1 Relative: In this mode the voltage difference is summed to calculate a relative position.

kAnalogInverted

123

bool

0

When inverted, the voltage is calculated as (ADC Full Scale - ADC Reading). This means that for absolute mode, the sensor value is 3.3V - voltage. In relative mode the direction is reversed.

kAnalogSampleDelta

124

uint

0

Delta time between samples for velocity measurement

Reserved

125

-

-

Reserved

Reserved

126

-

-

Reserved

kDataPortConfig

127

uint

0

0: Default configuration using limit switches 1: Alternate Encoder Mode - limit switches are disabled and alternate encoder is enabled. This parameter persists through a normal firmware update.

kAltEncoderCountsPerRev

128

uint

4096

Number of encoder counts in a single revolution, counting every edge on the A and B lines of a quadrature encoder. (Note: This is different than the CPR spec of the encoder which is 'Cycles per revolution'. This value is 4 * CPR.

kAltEncoderAverageDepth

129

uint

64

Number of samples to average for velocity data based on quadrature encoder input. This value can be between 1 and 64.

kAltEncoderSampleDelta

130

uint

200

Delta time value for encoder velocity measurement in 500μs increments. The velocity calculation will take delta the current sample, and the sample x * 500μs behind, and divide by this the sample delta time. Can be any number between 1 and 255.

kAltEncoderInverted

131

bool

0

Invert the phase of the encoder sensor. This is useful when the motor direction is opposite of the motor direction.

kAltEncoderPositionFactor

132

float32

1

Value multiplied by the native units (rotations) of the encoder for position.

kAltEncoderVelocityFactor

133

float32

1

Value multiplied by the native units (rotations) of the encoder for velocity.

Last updated