#include <CANJaguar.h>
Public Member Functions | |
CANJaguar (uint8_t deviceNumber, ControlMode controlMode=kPercentVbus) | |
virtual float | Get () |
virtual void | Set (float value, uint8_t syncGroup=0) |
virtual void | Disable () |
virtual void | PIDWrite (float output) |
void | SetSpeedReference (SpeedReference reference) |
SpeedReference | GetSpeedReference () |
void | SetPositionReference (PositionReference reference) |
PositionReference | GetPositionReference () |
void | SetPID (double p, double i, double d) |
double | GetP () |
double | GetI () |
double | GetD () |
void | EnableControl (double encoderInitialPosition=0.0) |
void | DisableControl () |
void | ChangeControlMode (ControlMode controlMode) |
ControlMode | GetControlMode () |
float | GetBusVoltage () |
float | GetOutputVoltage () |
float | GetOutputCurrent () |
float | GetTemperature () |
double | GetPosition () |
double | GetSpeed () |
bool | GetForwardLimitOK () |
bool | GetReverseLimitOK () |
uint16_t | GetFaults () |
bool | GetPowerCycled () |
void | SetVoltageRampRate (double rampRate) |
virtual uint32_t | GetFirmwareVersion () |
uint8_t | GetHardwareVersion () |
void | ConfigNeutralMode (NeutralMode mode) |
void | ConfigEncoderCodesPerRev (uint16_t codesPerRev) |
void | ConfigPotentiometerTurns (uint16_t turns) |
void | ConfigSoftPositionLimits (double forwardLimitPosition, double reverseLimitPosition) |
void | DisableSoftPositionLimits () |
void | ConfigMaxOutputVoltage (double voltage) |
void | ConfigFaultTime (float faultTime) |
void | SetExpiration (float timeout) |
float | GetExpiration () |
bool | IsAlive () |
void | StopMotor () |
bool | IsSafetyEnabled () |
void | SetSafetyEnabled (bool enabled) |
void | GetDescription (char *desc) |
Public Member Functions inherited from ErrorBase | |
virtual Error & | GetError () |
Retrieve the current error. Get the current error information associated with this sensor. | |
virtual const Error & | GetError () const |
virtual void | SetErrnoError (const char *contextMessage, const char *filename, const char *function, uint32_t lineNumber) const |
Set error information associated with a C library call that set an error to the "errno" global variable. More... | |
virtual void | SetImaqError (int success, const char *contextMessage, const char *filename, const char *function, uint32_t lineNumber) const |
Set the current error information associated from the nivision Imaq API. More... | |
virtual void | SetError (Error::Code code, const char *contextMessage, const char *filename, const char *function, uint32_t lineNumber) const |
Set the current error information associated with this sensor. More... | |
virtual void | SetWPIError (const char *errorMessage, const char *contextMessage, const char *filename, const char *function, uint32_t lineNumber) const |
Set the current error information associated with this sensor. More... | |
virtual void | CloneError (ErrorBase *rhs) const |
virtual void | ClearError () const |
Clear the current error information associated with this sensor. | |
virtual bool | StatusIsFatal () const |
Check if the current error code represents a fatal error. More... | |
Static Public Member Functions | |
static void | UpdateSyncGroup (uint8_t syncGroup) |
Static Public Member Functions inherited from ErrorBase | |
static void | SetGlobalError (Error::Code code, const char *contextMessage, const char *filename, const char *function, uint32_t lineNumber) |
static void | SetGlobalWPIError (const char *errorMessage, const char *contextMessage, const char *filename, const char *function, uint32_t lineNumber) |
static Error & | GetGlobalError () |
Static Public Attributes | |
static const int32_t | kControllerRate = 1000 |
static constexpr double | kApproxBusVoltage = 12.0 |
Protected Member Functions | |
uint8_t | packPercentage (uint8_t *buffer, double value) |
uint8_t | packFXP8_8 (uint8_t *buffer, double value) |
uint8_t | packFXP16_16 (uint8_t *buffer, double value) |
uint8_t | packint16_t (uint8_t *buffer, int16_t value) |
uint8_t | packint32_t (uint8_t *buffer, int32_t value) |
double | unpackPercentage (uint8_t *buffer) |
double | unpackFXP8_8 (uint8_t *buffer) |
double | unpackFXP16_16 (uint8_t *buffer) |
int16_t | unpackint16_t (uint8_t *buffer) |
int32_t | unpackint32_t (uint8_t *buffer) |
virtual void | setTransaction (uint32_t messageID, const uint8_t *data, uint8_t dataSize) |
virtual void | getTransaction (uint32_t messageID, uint8_t *data, uint8_t *dataSize) |
void | ValueChanged (ITable *source, const std::string &key, EntryValue value, bool isNew) |
void | UpdateTable () |
void | StartLiveWindowMode () |
void | StopLiveWindowMode () |
std::string | GetSmartDashboardType () |
void | InitTable (ITable *subTable) |
ITable * | GetTable () |
Protected Member Functions inherited from ErrorBase | |
ErrorBase () | |
Initialize the instance status to 0 for now. | |
Static Protected Member Functions | |
static int32_t | sendMessage (uint32_t messageID, const uint8_t *data, uint8_t dataSize) |
static int32_t | receiveMessage (uint32_t *messageID, uint8_t *data, uint8_t *dataSize, float timeout=0.02) |
Protected Attributes | |
uint8_t | m_deviceNumber |
ControlMode | m_controlMode |
SEM_ID | m_transactionSemaphore |
double | m_maxOutputVoltage |
MotorSafetyHelper * | m_safetyHelper |
ITable * | m_table |
Protected Attributes inherited from ErrorBase | |
Error | m_error |
Additional Inherited Members | |
Static Protected Attributes inherited from ErrorBase | |
static SEM_ID | _globalErrorMutex = semMCreate(SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFE) |
static Error | _globalError |
Luminary Micro Jaguar Speed Control
|
explicit |
Constructor
deviceNumber | The the address of the Jaguar on the CAN bus. |
void CANJaguar::ChangeControlMode | ( | ControlMode | controlMode | ) |
Change the control mode of this Jaguar object.
After changing modes, configure any PID constants or other settings needed and then EnableControl() to actually change the mode on the Jaguar.
controlMode | The new mode. |
void CANJaguar::ConfigEncoderCodesPerRev | ( | uint16_t | codesPerRev | ) |
Configure how many codes per revolution are generated by your encoder.
codesPerRev | The number of counts per revolution in 1X mode. |
void CANJaguar::ConfigFaultTime | ( | float | faultTime | ) |
Configure how long the Jaguar waits in the case of a fault before resuming operation.
Faults include over temerature, over current, and bus under voltage. The default is 3.0 seconds, but can be reduced to as low as 0.5 seconds.
faultTime | The time to wait before resuming operation, in seconds. |
void CANJaguar::ConfigMaxOutputVoltage | ( | double | voltage | ) |
void CANJaguar::ConfigNeutralMode | ( | NeutralMode | mode | ) |
Configure what the controller does to the H-Bridge when neutral (not driving the output).
This allows you to override the jumper configuration for brake or coast.
mode | Select to use the jumper setting or to override it to coast or brake. |
void CANJaguar::ConfigPotentiometerTurns | ( | uint16_t | turns | ) |
Configure the number of turns on the potentiometer.
There is no special support for continuous turn potentiometers. Only integer numbers of turns are supported.
turns | The number of turns of the potentiometer |
void CANJaguar::ConfigSoftPositionLimits | ( | double | forwardLimitPosition, |
double | reverseLimitPosition | ||
) |
Configure Soft Position Limits when in Position Controller mode.
When controlling position, you can add additional limits on top of the limit switch inputs that are based on the position feedback. If the position limit is reached or the switch is opened, that direction will be disabled.
forwardLimitPosition | The position that if exceeded will disable the forward direction. |
reverseLimitPosition | The position that if exceeded will disable the reverse direction. |
|
virtual |
Common interface for disabling a motor.
Implements SpeedController.
void CANJaguar::DisableControl | ( | ) |
Disable the closed loop controller.
Stop driving the output based on the feedback.
void CANJaguar::DisableSoftPositionLimits | ( | ) |
Disable Soft Position Limits if previously enabled.
Soft Position Limits are disabled by default.
void CANJaguar::EnableControl | ( | double | encoderInitialPosition = 0.0 | ) |
Enable the closed loop controller.
Start actually controlling the output based on the feedback. If starting a position controller with an encoder reference, use the encoderInitialPosition parameter to initialize the encoder state.
encoderInitialPosition | Encoder position to set if position with encoder reference. Ignored otherwise. |
|
virtual |
Get the recently set outputValue setpoint.
The scale and the units depend on the mode the Jaguar is in. In PercentVbus Mode, the outputValue is from -1.0 to 1.0 (same as PWM Jaguar). In Voltage Mode, the outputValue is in Volts. In Current Mode, the outputValue is in Amps. In Speed Mode, the outputValue is in Rotations/Minute. In Position Mode, the outputValue is in Rotations.
Implements SpeedController.
float CANJaguar::GetBusVoltage | ( | ) |
Get the voltage at the battery input terminals of the Jaguar.
CANJaguar::ControlMode CANJaguar::GetControlMode | ( | ) |
Get the active control mode from the Jaguar.
Ask the Jag what mode it is in.
double CANJaguar::GetD | ( | ) |
Get the Differential gain of the controller.
uint16_t CANJaguar::GetFaults | ( | ) |
Get the status of any faults the Jaguar has detected.
|
virtual |
Get the version of the firmware running on the Jaguar.
bool CANJaguar::GetForwardLimitOK | ( | ) |
Get the status of the forward limit switch.
uint8_t CANJaguar::GetHardwareVersion | ( | ) |
double CANJaguar::GetI | ( | ) |
Get the Intregral gain of the controller.
float CANJaguar::GetOutputCurrent | ( | ) |
Get the current through the motor terminals of the Jaguar.
float CANJaguar::GetOutputVoltage | ( | ) |
Get the voltage being output from the motor terminals of the Jaguar.
double CANJaguar::GetP | ( | ) |
Get the Proportional gain of the controller.
double CANJaguar::GetPosition | ( | ) |
Get the position of the encoder or potentiometer.
CANJaguar::PositionReference CANJaguar::GetPositionReference | ( | ) |
Get the reference source device for position controller mode.
bool CANJaguar::GetPowerCycled | ( | ) |
bool CANJaguar::GetReverseLimitOK | ( | ) |
Get the status of the reverse limit switch.
double CANJaguar::GetSpeed | ( | ) |
Get the speed of the encoder.
CANJaguar::SpeedReference CANJaguar::GetSpeedReference | ( | ) |
Get the reference source device for speed controller mode.
float CANJaguar::GetTemperature | ( | ) |
|
protectedvirtual |
Execute a transaction with a Jaguar that gets some property.
Jaguar always generates a message with the same message ID when replying.
messageID | The messageID to read from the CAN bus (device number is added internally) |
data | The up to 8 bytes of data that was received with the message |
dataSize | Indicates how much data was received |
|
virtual |
Write out the PID value as seen in the PIDOutput base object.
output | Write out the PercentVbus value as was computed by the PIDController |
Implements PIDOutput.
|
staticprotected |
Receive a message from the CAN bus through the CAN driver in FRC_NetworkCommunication
messageID | The messageID to read from the CAN bus |
data | The up to 8 bytes of data that was received with the message |
dataSize | Indicates how much data was received |
timeout | Specify how long to wait for a message (in seconds) |
|
staticprotected |
Send a message on the CAN bus through the CAN driver in FRC_NetworkCommunication
Trusted messages require a 2-byte token at the beginning of the data payload. If the message being sent is trusted, make space for the token.
messageID | The messageID to be used on the CAN bus |
data | The up to 8 bytes of data to be sent with the message |
dataSize | Specify how much of the data in "data" to send |
|
virtual |
Set the output set-point value.
The scale and the units depend on the mode the Jaguar is in. In PercentVbus Mode, the outputValue is from -1.0 to 1.0 (same as PWM Jaguar). In Voltage Mode, the outputValue is in Volts. In Current Mode, the outputValue is in Amps. In Speed Mode, the outputValue is in Rotations/Minute. In Position Mode, the outputValue is in Rotations.
outputValue | The set-point to sent to the motor controller. |
syncGroup | The update group to add this Set() to, pending UpdateSyncGroup(). If 0, update immediately. |
Implements SpeedController.
void CANJaguar::SetPID | ( | double | p, |
double | i, | ||
double | d | ||
) |
void CANJaguar::SetPositionReference | ( | PositionReference | reference | ) |
Set the reference source device for position controller mode.
Choose between using and encoder and using a potentiometer as the source of position feedback when in position control mode.
reference | Specify a PositionReference. |
void CANJaguar::SetSpeedReference | ( | SpeedReference | reference | ) |
Set the reference source device for speed controller mode.
Choose encoder as the source of speed feedback when in speed control mode.
reference | Specify a SpeedReference. |
|
protectedvirtual |
Execute a transaction with a Jaguar that sets some property.
Jaguar always acks when it receives a message. If we don't wait for an ack, the message object in the Jaguar could get overwritten before it is handled.
messageID | The messageID to be used on the CAN bus (device number is added internally) |
data | The up to 8 bytes of data to be sent with the message |
dataSize | Specify how much of the data in "data" to send |
void CANJaguar::SetVoltageRampRate | ( | double | rampRate | ) |
Set the maximum voltage change rate.
When in PercentVbus or Voltage output mode, the rate at which the voltage changes can be limited to reduce current spikes. Set this to 0.0 to disable rate limiting.
rampRate | The maximum rate of voltage change in Percent Voltage mode in V/s. |
|
virtual |
Common interface for stopping the motor Part of the MotorSafety interface
Implements MotorSafety.
|
static |
Update all the motors that have pending sets in the syncGroup.
syncGroup | A bitmask of groups to generate synchronous output. |