Now you can download a copy of these docs so you can use them offline! Download now

#include <PWM.h>

Inheritance diagram for PWM:
Collaboration diagram for PWM:

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)
 
ITableGetTable ()
 
- 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
 
ITablem_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:

  • 255 = full "forward"
  • 254 to 129 = linear scaling from "full forward" to "center"
  • 128 = center value
  • 127 to 2 = linear scaling from "center" to "full reverse"
  • 1 = full "reverse"
  • 0 = disabled (i.e. PWM output is held low)

Definition at line 32 of file PWM.h.

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.

Definition at line 81 of file PWM.cpp.

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).

Definition at line 67 of file PWM.cpp.

PWM::~PWM ( )
virtual

Free the PWM channel.

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

Definition at line 92 of file PWM.cpp.

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.

Definition at line 107 of file PWM.cpp.

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.

Definition at line 205 of file PWM.cpp.

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.

Definition at line 336 of file PWM.cpp.

std::string PWM::GetSmartDashboardType ( )
protectedvirtual
Returns
the string representation of the named data type that will be used by the smart dashboard for this sendable

Implements Sendable.

Reimplemented in Servo.

Definition at line 391 of file PWM.cpp.

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.

Definition at line 286 of file PWM.cpp.

ITable * PWM::GetTable ( )
protectedvirtual
Returns
the table that is currently associated with the sendable

Implements Sendable.

Reimplemented in Servo.

Definition at line 400 of file PWM.cpp.

void PWM::InitTable ( ITable subtable)
protectedvirtual

Initializes a table for this sendable object.

Parameters
subtableThe table to put the values in.

Implements Sendable.

Reimplemented in Servo.

Definition at line 395 of file PWM.cpp.

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

Definition at line 123 of file PWM.cpp.

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

Definition at line 144 of file PWM.cpp.

void PWM::SetPeriodMultiplier ( PeriodMultiplier  mult)

Slow down the PWM signal for old devices.

Parameters
multThe period multiplier to apply to this channel

Definition at line 347 of file PWM.cpp.

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.

Definition at line 172 of file PWM.cpp.

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.

Definition at line 323 of file PWM.cpp.

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.

Definition at line 236 of file PWM.cpp.

void PWM::StartLiveWindowMode ( )
protectedvirtual

Start having this sendable object automatically respond to value changes reflect the value on the table.

Implements LiveWindowSendable.

Reimplemented in Servo.

Definition at line 377 of file PWM.cpp.

void PWM::StopLiveWindowMode ( )
protectedvirtual

Stop having this sendable object automatically respond to value changes.

Implements LiveWindowSendable.

Reimplemented in Servo.

Definition at line 384 of file PWM.cpp.

void PWM::UpdateTable ( )
protectedvirtual

Update the table for this sendable object with the latest values.

Implements LiveWindowSendable.

Reimplemented in Servo.

Definition at line 371 of file PWM.cpp.

void PWM::ValueChanged ( ITable source,
const std::string &  key,
EntryValue  value,
bool  isNew 
)
protectedvirtual

Called when a key-value pair is changed in a ITable WARNING: If a new key-value is put in this method value changed will immediatly be called which could lead to recursive code

Parameters
sourcethe table the key-value pair exists in
keythe key associated with the value that changed
valuethe new value
isNewtrue if the key did not previously exist in the table, otherwise it is false

Implements ITableListener.

Reimplemented in Servo.

Definition at line 367 of file PWM.cpp.

Member Data Documentation

constexpr float PWM::kDefaultPwmCenter = 1.5
staticprotected

kDefaultPwmCenter is the PWM range center in ms

Definition at line 71 of file PWM.h.

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.

Definition at line 67 of file PWM.h.

const int32_t PWM::kDefaultPwmStepsDown = 128
staticprotected

kDefaultPWMStepsDown is the number of PWM steps below the centerpoint

Definition at line 75 of file PWM.h.


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

Generated on Sat Apr 26 2014 12:26:46 for WPILibC++ by doxygen 1.8.6