sparkcan Documentation  1.0
SparkBase.hpp File Reference

Header file for the base class for controlling REV Robotics SPARK motor controllers. More...

#include <array>
#include <chrono>
#include <cmath>
#include <cstdint>
#include <cstring>
#include <limits>
#include <map>
#include <stdexcept>
#include <system_error>
#include <thread>
#include <variant>
#include <optional>
#include <linux/can.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <unistd.h>
Include dependency graph for SparkBase.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  SparkBase
 A base class for controlling REV Robotics SPARK motor controllers via CAN bus. More...
 

Macros

#define RED   "\033[31m"
 ANSI escape code for setting terminal text color to red. More...
 
#define RESET   "\033[0m"
 ANSI escape code for resetting terminal text color to default. More...
 

Enumerations

enum class  SystemControl : uint32_t {
  BurnFlash = 0x205FC80 , FactoryDefaults = 0x2051D00 , FactoryReset = 0x2051D40 , Identify = 0x2051D80 ,
  ResetFaults = 0x2053000 , ClearStickyFaults = 0x2054400
}
 System control commands for the SPARK controller. More...
 
enum class  MotorControl : uint32_t {
  Setpoint = 0x2050040 , DutyCycle = 0x2050080 , Velocity = 0x2050480 , SmartVelocity = 0x20504C0 ,
  Position = 0x2050C80 , Voltage = 0x2051080 , Current = 0x20510C0 , SmartMotion = 0x2051480
}
 Motor control commands for the SPARK controller. More...
 
enum class  Status : uint32_t {
  Period0 = 0x2051800 , Period1 = 0x2051840 , Period2 = 0x2051880 , Period3 = 0x20518C0 ,
  Period4 = 0x2051900
}
 Status periods for the SPARK controller. More...
 
enum class  Parameter : uint32_t {
  kInputMode = 1 , kMotorType = 2 , kCommAdvance = 3 , kSensorType = 4 ,
  kCtrlType = 5 , kIdleMode = 6 , kInputDeadband = 7 , kFeedbackSensorPID0 = 8 ,
  kFeedbackSensorPID1 = 9 , kPolePairs = 10 , kCurrentChop = 11 , kCurrentChopCycles = 12 ,
  kP_0 = 13 , kI_0 = 14 , kD_0 = 15 , kF_0 = 16 ,
  kIZone_0 = 17 , kDFilter_0 = 18 , kOutputMin_0 = 19 , kOutputMax_0 = 20 ,
  kP_1 = 21 , kI_1 = 22 , kD_1 = 23 , kF_1 = 24 ,
  kIZone_1 = 25 , kDFilter_1 = 26 , kOutputMin_1 = 27 , kOutputMax_1 = 28 ,
  kP_2 = 29 , kI_2 = 30 , kD_2 = 31 , kF_2 = 32 ,
  kIZone_2 = 33 , kDFilter_2 = 34 , kOutputMin_2 = 35 , kOutputMax_2 = 36 ,
  kP_3 = 37 , kI_3 = 38 , kD_3 = 39 , kF_3 = 40 ,
  kIZone_3 = 41 , kDFilter_3 = 42 , kOutputMin_3 = 43 , kOutputMax_3 = 44 ,
  kInverted = 45 , kOutputRatio = 46 , kSerialNumberLow = 47 , kSerialNumberMid = 48 ,
  kSerialNumberHigh = 49 , kLimitSwitchFwdPolarity = 50 , kLimitSwitchRevPolarity = 51 , kHardLimitFwdEn = 52 ,
  kHardLimitRevEn = 53 , kSoftLimitFwdEn = 54 , kSoftLimitRevEn = 55 , kRampRate = 56 ,
  kFollowerID = 57 , kFollowerConfig = 58 , kSmartCurrentStallLimit = 59 , kSmartCurrentFreeLimit = 60 ,
  kSmartCurrentConfig = 61 , kMotorKv = 63 , kMotorR = 64 , kMotorL = 65 ,
  kEncoderCountsPerRev = 69 , kEncoderAverageDepth = 70 , kEncoderSampleDelta = 71 , kEncoderInverted = 72 ,
  kClosedLoopVoltageMode = 74 , kCompensatedNominalVoltage = 75 , kSmartMotionMaxVelocity_0 = 76 , kSmartMotionMaxAccel_0 = 77 ,
  kSmartMotionMinVelOutput_0 = 78 , kSmartMotionAllowedClosedLoopError_0 = 79 , kSmartMotionAccelStrategy_0 = 80 , kSmartMotionMaxVelocity_1 = 81 ,
  kSmartMotionMaxAccel_1 = 82 , kSmartMotionMinVelOutput_1 = 83 , kSmartMotionAllowedClosedLoopError_1 = 84 , kSmartMotionAccelStrategy_1 = 85 ,
  kSmartMotionMaxVelocity_2 = 86 , kSmartMotionMaxAccel_2 = 87 , kSmartMotionMinVelOutput_2 = 88 , kSmartMotionAllowedClosedLoopError_2 = 89 ,
  kSmartMotionAccelStrategy_2 = 90 , kSmartMotionMaxVelocity_3 = 91 , kSmartMotionMaxAccel_3 = 92 , kSmartMotionMinVelOutput_3 = 93 ,
  kSmartMotionAllowedClosedLoopError_3 = 94 , kSmartMotionAccelStrategy_3 = 95 , kIMaxAccum_0 = 96 , kSlot3Placeholder1_0 = 97 ,
  kSlot3Placeholder2_0 = 98 , kSlot3Placeholder3_0 = 99 , kIMaxAccum_1 = 100 , kSlot3Placeholder1_1 = 101 ,
  kSlot3Placeholder2_1 = 102 , kSlot3Placeholder3_1 = 103 , kIMaxAccum_2 = 104 , kSlot3Placeholder1_2 = 105 ,
  kSlot3Placeholder2_2 = 106 , kSlot3Placeholder3_2 = 107 , kIMaxAccum_3 = 108 , kSlot3Placeholder1_3 = 109 ,
  kSlot3Placeholder2_3 = 110 , kSlot3Placeholder3_3 = 111 , kPositionConversionFactor = 112 , kVelocityConversionFactor = 113 ,
  kClosedLoopRampRate = 114 , kSoftLimitFwd = 115 , kSoftLimitRev = 116 , kAnalogPositionConversion = 119 ,
  kAnalogVelocityConversion = 120 , kAnalogAverageDepth = 121 , kAnalogSensorMode = 122 , kAnalogInverted = 123 ,
  kAnalogSampleDelta = 124 , kDataPortConfig = 127 , kAltEncoderCountsPerRev = 128 , kAltEncoderAverageDepth = 129 ,
  kAltEncoderSampleDelta = 130 , kAltEncoderInverted = 131 , kAltEncoderPositionFactor = 132 , kAltEncoderVelocityFactor = 133 ,
  kHallSensorSampleRate = 136 , kHallSensorAverageDepth = 137 , kDutyCyclePositionFactor = 139 , kDutyCycleVelocityFactor = 140 ,
  kDutyCycleInverted = 141 , kDutyCycleAverageDepth = 143 , kPositionPIDWrapEnable = 149 , kPositionPIDMinInput = 150 ,
  kPositionPIDMaxInput = 151 , kDutyCyclePrescalar = 153 , kDutyCycleZeroOffset = 154
}
 Parameters for the SPARK controller. More...
 
enum class  MotorType : uint8_t { kBrushed = 0 , kBrushless = 1 }
 Motor type parameter. More...
 
enum class  SensorType : uint8_t { kNoSensor = 0 , kHallSensor = 1 , kEncoder = 2 }
 Sensor type parameter. More...
 
enum class  CtrlType : uint8_t { kDutyCycle = 0 , kVelocity = 1 , kVoltage = 2 , kPosition = 3 }
 Control type parameter. More...
 
enum class  IdleMode : uint8_t { kCoast = 0 , kBrake = 1 }
 Idle mode parameter. More...
 

Variables

constexpr uint8_t PARAM_TYPE_UINT = 0x01
 Parameter type for unsigned integers. More...
 
constexpr uint8_t PARAM_TYPE_FLOAT = 0x02
 Parameter type for floating-point numbers. More...
 
constexpr uint8_t PARAM_TYPE_BOOL = 0x03
 Parameter type for boolean values. More...
 

Detailed Description

Header file for the base class for controlling REV Robotics SPARK motor controllers.

Author
Grayson Arendt

Macro Definition Documentation

◆ RED

#define RED   "\033[31m"

ANSI escape code for setting terminal text color to red.

◆ RESET

#define RESET   "\033[0m"

ANSI escape code for resetting terminal text color to default.

Enumeration Type Documentation

◆ CtrlType

enum CtrlType : uint8_t
strong

Control type parameter.

Enumerator
kDutyCycle 
kVelocity 
kVoltage 
kPosition 

◆ IdleMode

enum IdleMode : uint8_t
strong

Idle mode parameter.

Enumerator
kCoast 
kBrake 

◆ MotorControl

enum MotorControl : uint32_t
strong

Motor control commands for the SPARK controller.

Enumerator
Setpoint 
DutyCycle 
Velocity 
SmartVelocity 
Position 
Voltage 
Current 
SmartMotion 

◆ MotorType

enum MotorType : uint8_t
strong

Motor type parameter.

Enumerator
kBrushed 
kBrushless 

◆ Parameter

enum Parameter : uint32_t
strong

Parameters for the SPARK controller.

Enumerator
kInputMode 
kMotorType 
kCommAdvance 
kSensorType 
kCtrlType 
kIdleMode 
kInputDeadband 
kFeedbackSensorPID0 
kFeedbackSensorPID1 
kPolePairs 
kCurrentChop 
kCurrentChopCycles 
kP_0 
kI_0 
kD_0 
kF_0 
kIZone_0 
kDFilter_0 
kOutputMin_0 
kOutputMax_0 
kP_1 
kI_1 
kD_1 
kF_1 
kIZone_1 
kDFilter_1 
kOutputMin_1 
kOutputMax_1 
kP_2 
kI_2 
kD_2 
kF_2 
kIZone_2 
kDFilter_2 
kOutputMin_2 
kOutputMax_2 
kP_3 
kI_3 
kD_3 
kF_3 
kIZone_3 
kDFilter_3 
kOutputMin_3 
kOutputMax_3 
kInverted 
kOutputRatio 
kSerialNumberLow 
kSerialNumberMid 
kSerialNumberHigh 
kLimitSwitchFwdPolarity 
kLimitSwitchRevPolarity 
kHardLimitFwdEn 
kHardLimitRevEn 
kSoftLimitFwdEn 
kSoftLimitRevEn 
kRampRate 
kFollowerID 
kFollowerConfig 
kSmartCurrentStallLimit 
kSmartCurrentFreeLimit 
kSmartCurrentConfig 
kMotorKv 
kMotorR 
kMotorL 
kEncoderCountsPerRev 
kEncoderAverageDepth 
kEncoderSampleDelta 
kEncoderInverted 
kClosedLoopVoltageMode 
kCompensatedNominalVoltage 
kSmartMotionMaxVelocity_0 
kSmartMotionMaxAccel_0 
kSmartMotionMinVelOutput_0 
kSmartMotionAllowedClosedLoopError_0 
kSmartMotionAccelStrategy_0 
kSmartMotionMaxVelocity_1 
kSmartMotionMaxAccel_1 
kSmartMotionMinVelOutput_1 
kSmartMotionAllowedClosedLoopError_1 
kSmartMotionAccelStrategy_1 
kSmartMotionMaxVelocity_2 
kSmartMotionMaxAccel_2 
kSmartMotionMinVelOutput_2 
kSmartMotionAllowedClosedLoopError_2 
kSmartMotionAccelStrategy_2 
kSmartMotionMaxVelocity_3 
kSmartMotionMaxAccel_3 
kSmartMotionMinVelOutput_3 
kSmartMotionAllowedClosedLoopError_3 
kSmartMotionAccelStrategy_3 
kIMaxAccum_0 
kSlot3Placeholder1_0 
kSlot3Placeholder2_0 
kSlot3Placeholder3_0 
kIMaxAccum_1 
kSlot3Placeholder1_1 
kSlot3Placeholder2_1 
kSlot3Placeholder3_1 
kIMaxAccum_2 
kSlot3Placeholder1_2 
kSlot3Placeholder2_2 
kSlot3Placeholder3_2 
kIMaxAccum_3 
kSlot3Placeholder1_3 
kSlot3Placeholder2_3 
kSlot3Placeholder3_3 
kPositionConversionFactor 
kVelocityConversionFactor 
kClosedLoopRampRate 
kSoftLimitFwd 
kSoftLimitRev 
kAnalogPositionConversion 
kAnalogVelocityConversion 
kAnalogAverageDepth 
kAnalogSensorMode 
kAnalogInverted 
kAnalogSampleDelta 
kDataPortConfig 
kAltEncoderCountsPerRev 
kAltEncoderAverageDepth 
kAltEncoderSampleDelta 
kAltEncoderInverted 
kAltEncoderPositionFactor 
kAltEncoderVelocityFactor 
kHallSensorSampleRate 
kHallSensorAverageDepth 
kDutyCyclePositionFactor 
kDutyCycleVelocityFactor 
kDutyCycleInverted 
kDutyCycleAverageDepth 
kPositionPIDWrapEnable 
kPositionPIDMinInput 
kPositionPIDMaxInput 
kDutyCyclePrescalar 
kDutyCycleZeroOffset 

◆ SensorType

enum SensorType : uint8_t
strong

Sensor type parameter.

Enumerator
kNoSensor 
kHallSensor 
kEncoder 

◆ Status

enum Status : uint32_t
strong

Status periods for the SPARK controller.

Enumerator
Period0 
Period1 
Period2 
Period3 
Period4 

◆ SystemControl

enum SystemControl : uint32_t
strong

System control commands for the SPARK controller.

Enumerator
BurnFlash 
FactoryDefaults 
FactoryReset 
Identify 
ResetFaults 
ClearStickyFaults 

Variable Documentation

◆ PARAM_TYPE_BOOL

constexpr uint8_t PARAM_TYPE_BOOL = 0x03
constexpr

Parameter type for boolean values.

◆ PARAM_TYPE_FLOAT

constexpr uint8_t PARAM_TYPE_FLOAT = 0x02
constexpr

Parameter type for floating-point numbers.

◆ PARAM_TYPE_UINT

constexpr uint8_t PARAM_TYPE_UINT = 0x01
constexpr

Parameter type for unsigned integers.