PWM Class Reference
#include <PWM.h>


Public Types | |
| enum | PeriodMultiplier { kPeriodMultiplier_1X = 1, kPeriodMultiplier_2X = 2, kPeriodMultiplier_4X = 4 } |
Public Member Functions | |
| PWM (UINT32 channel) | |
| PWM (UINT8 moduleNumber, UINT32 channel) | |
| virtual | ~PWM () |
| virtual void | SetRaw (UINT8 value) |
| virtual UINT8 | GetRaw () |
| void | SetPeriodMultiplier (PeriodMultiplier mult) |
| void | EnableDeadbandElimination (bool eliminateDeadband) |
| void | SetBounds (INT32 max, INT32 deadbandMax, INT32 center, INT32 deadbandMin, INT32 min) |
| UINT32 | GetChannel () |
| UINT32 | GetModuleNumber () |
Protected Member Functions | |
| virtual void | SetPosition (float pos) |
| virtual float | GetPosition () |
| virtual void | SetSpeed (float speed) |
| virtual float | GetSpeed () |
Protected Attributes | |
| bool | m_eliminateDeadband |
| INT32 | m_maxPwm |
| INT32 | m_deadbandMaxPwm |
| INT32 | m_centerPwm |
| INT32 | m_deadbandMinPwm |
| INT32 | m_minPwm |
Static Protected Attributes | |
| static const UINT32 | kDefaultPwmPeriod = 774 |
| static const UINT32 | kDefaultMinPwmHigh = 102 |
| static const INT32 | kPwmDisabled = 0 |
Friends | |
| class | DigitalModule |
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 30 of file PWM.h.
Constructor & Destructor Documentation
| PWM::PWM | ( | UINT32 | channel | ) | [explicit] |
| PWM::PWM | ( | UINT8 | moduleNumber, | |
| UINT32 | channel | |||
| ) |
| PWM::~PWM | ( | ) | [virtual] |
Member Function Documentation
| void PWM::EnableDeadbandElimination | ( | bool | eliminateDeadband | ) |
| float PWM::GetPosition | ( | ) | [protected, virtual] |
| UINT8 PWM::GetRaw | ( | ) | [virtual] |
| float PWM::GetSpeed | ( | ) | [protected, virtual] |
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 | max, | |
| INT32 | deadbandMax, | |||
| INT32 | center, | |||
| INT32 | deadbandMin, | |||
| INT32 | 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:
-
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::SetPeriodMultiplier | ( | PeriodMultiplier | mult | ) |
| void PWM::SetPosition | ( | float | pos | ) | [protected, virtual] |
| void PWM::SetRaw | ( | UINT8 | value | ) | [virtual] |
| void PWM::SetSpeed | ( | float | speed | ) | [protected, virtual] |
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:
-
speed The speed to set the speed controller between -1.0 and 1.0.
Member Data Documentation
const UINT32 PWM::kDefaultMinPwmHigh = 102 [static, protected] |
const UINT32 PWM::kDefaultPwmPeriod = 774 [static, protected] |
kDefaultPwmPeriod is "ticks" where each tick is 6.525us
- 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.
Set to 5.05 ms period / 6.525us clock = 774
The documentation for this class was generated from the following files:
Generated on Thu Jan 12 2012 22:35:35 for WPILibC++ by
1.7.1