#include <PWM.h>
Public Types | |
enum | PeriodMultiplier { kPeriodMultiplier_1X = 1, kPeriodMultiplier_2X = 2, kPeriodMultiplier_4X = 4 } |
Public Member Functions | |
PWM (uint32_t channel) | |
PWM (uint8_t moduleNumber, uint32_t channel) | |
virtual | ~PWM () |
virtual void | SetRaw (uint8_t value) |
virtual uint8_t | GetRaw () |
void | SetPeriodMultiplier (PeriodMultiplier mult) |
void | EnableDeadbandElimination (bool eliminateDeadband) |
void | SetBounds (int32_t max, int32_t deadbandMax, int32_t center, int32_t deadbandMin, int32_t min) |
void | SetBounds (double max, double deadbandMax, double center, double deadbandMin, double min) |
uint32_t | GetChannel () |
uint32_t | GetModuleNumber () |
Public Member Functions inherited from SensorBase | |
SensorBase () | |
virtual | ~SensorBase () |
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... | |
Protected Member Functions | |
virtual void | SetPosition (float pos) |
virtual float | GetPosition () |
virtual void | SetSpeed (float speed) |
virtual float | GetSpeed () |
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 SensorBase | |
void | AddToSingletonList () |
Protected Member Functions inherited from ErrorBase | |
ErrorBase () | |
Initialize the instance status to 0 for now. | |
Protected Attributes | |
bool | m_eliminateDeadband |
int32_t | m_maxPwm |
int32_t | m_deadbandMaxPwm |
int32_t | m_centerPwm |
int32_t | m_deadbandMinPwm |
int32_t | m_minPwm |
ITable * | m_table |
Protected Attributes inherited from ErrorBase | |
Error | m_error |
Static Protected Attributes | |
static constexpr float | kDefaultPwmPeriod = 5.05 |
static constexpr float | kDefaultPwmCenter = 1.5 |
static const int32_t | kDefaultPwmStepsDown = 128 |
static const int32_t | kPwmDisabled = 0 |
Static Protected Attributes inherited from ErrorBase | |
static SEM_ID | _globalErrorMutex = semMCreate(SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFE) |
static Error | _globalError |
Friends | |
class | DigitalModule |
Additional Inherited Members | |
Static Public Member Functions inherited from SensorBase | |
static void | DeleteSingletons () |
static uint32_t | GetDefaultAnalogModule () |
static uint32_t | GetDefaultDigitalModule () |
static uint32_t | GetDefaultSolenoidModule () |
static bool | CheckAnalogModule (uint8_t moduleNumber) |
static bool | CheckDigitalModule (uint8_t moduleNumber) |
static bool | CheckPWMModule (uint8_t moduleNumber) |
static bool | CheckRelayModule (uint8_t moduleNumber) |
static bool | CheckSolenoidModule (uint8_t moduleNumber) |
static bool | CheckDigitalChannel (uint32_t channel) |
static bool | CheckRelayChannel (uint32_t channel) |
static bool | CheckPWMChannel (uint32_t channel) |
static bool | CheckAnalogChannel (uint32_t channel) |
static bool | CheckSolenoidChannel (uint32_t channel) |
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 inherited from SensorBase | |
static const uint32_t | kSystemClockTicksPerMicrosecond = 40 |
static const uint32_t | kDigitalChannels = 14 |
static const uint32_t | kAnalogChannels = 8 |
static const uint32_t | kAnalogModules = 2 |
static const uint32_t | kDigitalModules = 2 |
static const uint32_t | kSolenoidChannels = 8 |
static const uint32_t | kSolenoidModules = 2 |
static const uint32_t | kPwmChannels = 10 |
static const uint32_t | kRelayChannels = 8 |
static const uint32_t | kChassisSlots = 8 |
Class implements the PWM generation in the FPGA.
The values supplied as arguments for PWM outputs range from -1.0 to 1.0. They are mapped to the hardware dependent values, in this case 0-255 for the FPGA. Changes are immediately sent to the FPGA, and the update occurs at the next FPGA cycle. There is no delay.
As of revision 0.1.10 of the FPGA, the FPGA interprets the 0-255 values as follows:
|
explicit |
PWM::PWM | ( | uint8_t | moduleNumber, |
uint32_t | channel | ||
) |
|
virtual |
void PWM::EnableDeadbandElimination | ( | bool | eliminateDeadband | ) |
Optionally eliminate the deadband from a speed controller.
eliminateDeadband | If true, set the motor curve on the Jaguar to eliminate the deadband in the middle of the range. Otherwise, keep the full range without modifying any values. |
|
protectedvirtual |
Get the PWM value in terms of a position.
This is intended to be used by servos.
|
virtual |
|
protectedvirtual |
Get the PWM value in terms of speed.
This is intended to be used by speed controllers.
void PWM::SetBounds | ( | int32_t | max, |
int32_t | deadbandMax, | ||
int32_t | center, | ||
int32_t | deadbandMin, | ||
int32_t | min | ||
) |
Set the bounds on the PWM values. This sets the bounds on the PWM values for a particular each type of controller. The values determine the upper and lower speeds as well as the deadband bracket.
max | The Minimum pwm value |
deadbandMax | The high end of the deadband range |
center | The center speed (off) |
deadbandMin | The low end of the deadband range |
min | The minimum pwm value |
void PWM::SetBounds | ( | double | max, |
double | deadbandMax, | ||
double | center, | ||
double | deadbandMin, | ||
double | min | ||
) |
Set the bounds on the PWM pulse widths. This sets the bounds on the PWM values for a particular type of controller. The values determine the upper and lower speeds as well as the deadband bracket.
max | The max PWM pulse width in ms |
deadbandMax | The high end of the deadband range pulse width in ms |
center | The center (off) pulse width in ms |
deadbandMin | The low end of the deadband pulse width in ms |
min | The minimum pulse width in ms |
void PWM::SetPeriodMultiplier | ( | PeriodMultiplier | mult | ) |
Slow down the PWM signal for old devices.
mult | The period multiplier to apply to this channel |
|
protectedvirtual |
Set the PWM value based on a position.
This is intended to be used by servos.
pos | The position to set the servo between 0.0 and 1.0. |
|
virtual |
|
protectedvirtual |
Set the PWM value based on a speed.
This is intended to be used by speed controllers.
speed | The speed to set the speed controller between -1.0 and 1.0. |
Reimplemented in SafePWM.
|
staticprotected |
kDefaultPwmCenter is the PWM range center in ms
|
staticprotected |
kDefaultPwmPeriod is in ms
kDefaultPwmPeriod is the 1x period (5.05 ms). In hardware, the period scaling is implemented as an output squelch to get longer periods for old devices.
|
staticprotected |
kDefaultPWMStepsDown is the number of PWM steps below the centerpoint