WPILib  2014.0
WPIRoboticsLibraryforFRC
 All Classes Functions Variables Pages
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | Friends | List of all members
PWM Class Reference

#include <PWM.h>

Inheritance diagram for PWM:
SensorBase ErrorBase SafePWM Jaguar Servo Talon Victor

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 ErrorGetError ()
 Retrieve the current error. Get the current error information associated with this sensor.
 
virtual const ErrorGetError () 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 ErrorGetGlobalError ()
 
- 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
 

Detailed Description

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:

Constructor & Destructor Documentation

PWM::PWM ( uint32_t  channel)
explicit

Allocate a PWM in the default module given a channel.

Using a default module allocate a PWM given the channel number. The default module is the first slot numerically in the cRIO chassis.

Parameters
channelThe PWM channel on the digital module.
PWM::PWM ( uint8_t  moduleNumber,
uint32_t  channel 
)

Allocate a PWM given a module and channel. Allocate a PWM using a module and channel number.

Parameters
moduleNumberThe digital module (1 or 2).
channelThe PWM channel on the digital module (1..10).
PWM::~PWM ( )
virtual

Free the PWM channel.

Free the resource associated with the PWM channel and set the value to 0.

Member Function Documentation

void PWM::EnableDeadbandElimination ( bool  eliminateDeadband)

Optionally eliminate the deadband from a speed controller.

Parameters
eliminateDeadbandIf 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.
float PWM::GetPosition ( )
protectedvirtual

Get the PWM value in terms of a position.

This is intended to be used by servos.

Precondition
SetMaxPositivePwm() called.
SetMinNegativePwm() called.
Returns
The position the servo is set to between 0.0 and 1.0.
uint8_t PWM::GetRaw ( )
virtual

Get the PWM value directly from the hardware.

Read a raw value from a PWM channel.

Returns
Raw PWM control value. Range: 0 - 255.
float PWM::GetSpeed ( )
protectedvirtual

Get the PWM value in terms of speed.

This is intended to be used by speed controllers.

Precondition
SetMaxPositivePwm() called.
SetMinPositivePwm() called.
SetMaxNegativePwm() called.
SetMinNegativePwm() called.
Returns
The most recently set speed between -1.0 and 1.0.
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.

Parameters
maxThe Minimum pwm value
deadbandMaxThe high end of the deadband range
centerThe center speed (off)
deadbandMinThe low end of the deadband range
minThe 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.

Parameters
maxThe max PWM pulse width in ms
deadbandMaxThe high end of the deadband range pulse width in ms
centerThe center (off) pulse width in ms
deadbandMinThe low end of the deadband pulse width in ms
minThe minimum pulse width in ms
void PWM::SetPeriodMultiplier ( PeriodMultiplier  mult)

Slow down the PWM signal for old devices.

Parameters
multThe period multiplier to apply to this channel
void PWM::SetPosition ( float  pos)
protectedvirtual

Set the PWM value based on a position.

This is intended to be used by servos.

Precondition
SetMaxPositivePwm() called.
SetMinNegativePwm() called.
Parameters
posThe position to set the servo between 0.0 and 1.0.
void PWM::SetRaw ( uint8_t  value)
virtual

Set the PWM value directly to the hardware.

Write a raw value to a PWM channel.

Parameters
valueRaw PWM value. Range 0 - 255.
void PWM::SetSpeed ( float  speed)
protectedvirtual

Set the PWM value based on a speed.

This is intended to be used by speed controllers.

Precondition
SetMaxPositivePwm() called.
SetMinPositivePwm() called.
SetCenterPwm() called.
SetMaxNegativePwm() called.
SetMinNegativePwm() called.
Parameters
speedThe speed to set the speed controller between -1.0 and 1.0.

Reimplemented in SafePWM.

Member Data Documentation

constexpr float PWM::kDefaultPwmCenter = 1.5
staticprotected

kDefaultPwmCenter is the PWM range center in ms

constexpr float PWM::kDefaultPwmPeriod = 5.05
staticprotected

kDefaultPwmPeriod is in ms

  • 20ms periods (50 Hz) are the "safest" setting in that this works for all devices
  • 20ms periods seem to be desirable for Vex Motors
  • 20ms periods are the specified period for HS-322HD servos, but work reliably down to 10.0 ms; starting at about 8.5ms, the servo sometimes hums and get hot; by 5.0ms the hum is nearly continuous
  • 10ms periods work well for Victor 884
  • 5ms periods allows higher update rates for Luminary Micro Jaguar speed controllers. Due to the shipping firmware on the Jaguar, we can't run the update period less than 5.05 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.

const int32_t PWM::kDefaultPwmStepsDown = 128
staticprotected

kDefaultPWMStepsDown is the number of PWM steps below the centerpoint


The documentation for this class was generated from the following files: