mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
usleep added to the getters that require a little time for solicted response (getPIDF, getIzone, and getFirmwareVers. Tested against the TALON SRX unit test originally written for CanTalonSrx HAL class. Change-Id: I7e75b8b63ac9ffecb5d48b87cbe0e0ee05bbb5a2
95 lines
3.1 KiB
C++
95 lines
3.1 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) FIRST 2014. All Rights Reserved. */
|
|
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
|
|
/*----------------------------------------------------------------------------*/
|
|
#pragma once
|
|
|
|
#include "SpeedController.h"
|
|
|
|
/**
|
|
* Interface for "smart" CAN-based speed controllers.
|
|
* @see CANJaguar
|
|
* @see CANTalon
|
|
*/
|
|
class CANSpeedController : public SpeedController
|
|
{
|
|
public:
|
|
enum ControlMode {
|
|
kPercentVbus=0,
|
|
kCurrent=1,
|
|
kSpeed=2,
|
|
kPosition=3,
|
|
kVoltage=4,
|
|
kFollower=5 // Not supported in Jaguar.
|
|
};
|
|
|
|
enum Faults {
|
|
kCurrentFault = 1,
|
|
kTemperatureFault = 2,
|
|
kBusVoltageFault = 4,
|
|
kGateDriverFault = 8,
|
|
/* SRX extensions */
|
|
kFwdLimitSwitch = 0x10,
|
|
kRevLimitSwitch = 0x20,
|
|
kFwdSoftLimit = 0x40,
|
|
kRevSoftLimit = 0x80,
|
|
};
|
|
|
|
enum Limits {
|
|
kForwardLimit = 1,
|
|
kReverseLimit = 2
|
|
};
|
|
|
|
enum NeutralMode {
|
|
/** Use the NeutralMode that is set by the jumper wire on the CAN device */
|
|
kNeutralMode_Jumper = 0,
|
|
/** Stop the motor's rotation by applying a force. */
|
|
kNeutralMode_Brake = 1,
|
|
/** Do not attempt to stop the motor. Instead allow it to coast to a stop without applying resistance. */
|
|
kNeutralMode_Coast = 2
|
|
};
|
|
|
|
enum LimitMode {
|
|
/** Only use switches for limits */
|
|
kLimitMode_SwitchInputsOnly = 0,
|
|
/** Use both switches and soft limits */
|
|
kLimitMode_SoftPositionLimits = 1
|
|
};
|
|
|
|
virtual float Get() = 0;
|
|
virtual void Set(float value, uint8_t syncGroup=0) = 0;
|
|
virtual void Disable() = 0;
|
|
virtual void SetP(double p) = 0;
|
|
virtual void SetI(double i) = 0;
|
|
virtual void SetD(double d) = 0;
|
|
virtual void SetPID(double p, double i, double d) = 0;
|
|
virtual double GetP() = 0;
|
|
virtual double GetI() = 0;
|
|
virtual double GetD() = 0;
|
|
virtual float GetBusVoltage() = 0;
|
|
virtual float GetOutputVoltage() = 0;
|
|
virtual float GetOutputCurrent() = 0;
|
|
virtual float GetTemperature() = 0;
|
|
virtual double GetPosition() = 0;
|
|
virtual double GetSpeed() = 0;
|
|
virtual bool GetForwardLimitOK() = 0;
|
|
virtual bool GetReverseLimitOK() = 0;
|
|
virtual uint16_t GetFaults() = 0;
|
|
virtual void SetVoltageRampRate(double rampRate) = 0;
|
|
virtual uint32_t GetFirmwareVersion() = 0;
|
|
virtual void ConfigNeutralMode(NeutralMode mode) = 0;
|
|
virtual void ConfigEncoderCodesPerRev(uint16_t codesPerRev) = 0;
|
|
virtual void ConfigPotentiometerTurns(uint16_t turns) = 0;
|
|
virtual void ConfigSoftPositionLimits(double forwardLimitPosition, double reverseLimitPosition) = 0;
|
|
virtual void DisableSoftPositionLimits() = 0;
|
|
virtual void ConfigLimitMode(LimitMode mode) = 0;
|
|
virtual void ConfigForwardLimit(double forwardLimitPosition) = 0;
|
|
virtual void ConfigReverseLimit(double reverseLimitPosition) = 0;
|
|
virtual void ConfigMaxOutputVoltage(double voltage) = 0;
|
|
virtual void ConfigFaultTime(float faultTime) = 0;
|
|
// Hold off on interface until we figure out ControlMode enums.
|
|
// virtual void SetControlMode(ControlMode mode) = 0;
|
|
// virtual ControlMode GetControlMode() = 0;
|
|
};
|