WPILibC++ 2023.4.3-108-ge5452e3
|
Class implements the PWM generation in the FPGA. More...
#include <frc/PWM.h>
Public Types | |
enum | PeriodMultiplier { kPeriodMultiplier_1X = 1 , kPeriodMultiplier_2X = 2 , kPeriodMultiplier_4X = 4 } |
Represents the amount to multiply the minimum servo-pulse pwm period by. More... | |
Public Member Functions | |
PWM (int channel, bool registerSendable=true) | |
Allocate a PWM given a channel number. More... | |
~PWM () override | |
Free the PWM channel. More... | |
PWM (PWM &&)=default | |
PWM & | operator= (PWM &&)=default |
virtual void | SetPulseTime (units::microsecond_t time) |
Set the PWM pulse time directly to the hardware. More... | |
virtual units::microsecond_t | GetPulseTime () const |
Get the PWM pulse time directly from the hardware. More... | |
virtual void | SetPosition (double pos) |
Set the PWM value based on a position. More... | |
virtual double | GetPosition () const |
Get the PWM value in terms of a position. More... | |
virtual void | SetSpeed (double speed) |
Set the PWM value based on a speed. More... | |
virtual double | GetSpeed () const |
Get the PWM value in terms of speed. More... | |
virtual void | SetDisabled () |
Temporarily disables the PWM output. More... | |
void | SetPeriodMultiplier (PeriodMultiplier mult) |
Slow down the PWM signal for old devices. More... | |
void | SetZeroLatch () |
void | EnableDeadbandElimination (bool eliminateDeadband) |
Optionally eliminate the deadband from a motor controller. More... | |
void | SetBounds (units::microsecond_t max, units::microsecond_t deadbandMax, units::microsecond_t center, units::microsecond_t deadbandMin, units::microsecond_t min) |
Set the bounds on the PWM pulse widths. More... | |
void | GetBounds (units::microsecond_t *max, units::microsecond_t *deadbandMax, units::microsecond_t *center, units::microsecond_t *deadbandMin, units::microsecond_t *min) |
Get the bounds on the PWM values. More... | |
void | SetAlwaysHighMode () |
Sets the PWM output to be a continuous high signal while enabled. More... | |
int | GetChannel () const |
Public Member Functions inherited from wpi::Sendable | |
virtual | ~Sendable ()=default |
virtual void | InitSendable (SendableBuilder &builder)=0 |
Initializes this Sendable object. More... | |
Public Member Functions inherited from wpi::SendableHelper< PWM > | |
SendableHelper (const SendableHelper &rhs)=default | |
SendableHelper (SendableHelper &&rhs) | |
SendableHelper & | operator= (const SendableHelper &rhs)=default |
SendableHelper & | operator= (SendableHelper &&rhs) |
Protected Member Functions | |
void | InitSendable (wpi::SendableBuilder &builder) override |
Initializes this Sendable object. More... | |
Protected Member Functions inherited from wpi::SendableHelper< PWM > | |
SendableHelper ()=default | |
~SendableHelper () | |
Friends | |
class | AddressableLED |
class | DMA |
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 microseconds to keep the pulse high, with a range of 0 (off) to 4096. Changes are immediately sent to the FPGA, and the update occurs at the next FPGA cycle (5.05ms). There is no delay.
Represents the amount to multiply the minimum servo-pulse pwm period by.
Enumerator | |
---|---|
kPeriodMultiplier_1X | Don't skip pulses. PWM pulses occur every 5.05 ms |
kPeriodMultiplier_2X | Skip every other pulse. PWM pulses occur every 10.10 ms |
kPeriodMultiplier_4X | Skip three out of four pulses. PWM pulses occur every 20.20 ms |
|
explicit |
Allocate a PWM given a channel number.
Checks channel value range and allocates the appropriate channel. The allocation is only done to help users ensure that they don't double assign channels.
channel | The PWM channel number. 0-9 are on-board, 10-19 are on the MXP port |
registerSendable | If true, adds this instance to SendableRegistry and LiveWindow |
|
override |
|
default |
void frc::PWM::EnableDeadbandElimination | ( | bool | eliminateDeadband | ) |
Optionally eliminate the deadband from a motor controller.
eliminateDeadband | If true, set the motor curve on the motor controller to eliminate the deadband in the middle of the range. Otherwise, keep the full range without modifying any values. |
void frc::PWM::GetBounds | ( | units::microsecond_t * | max, |
units::microsecond_t * | deadbandMax, | ||
units::microsecond_t * | center, | ||
units::microsecond_t * | deadbandMin, | ||
units::microsecond_t * | min | ||
) |
Get the bounds on the PWM values.
This gets 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 maximum 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 |
int frc::PWM::GetChannel | ( | ) | const |
|
virtual |
Get the PWM value in terms of a position.
This is intended to be used by servos.
|
virtual |
|
virtual |
Get the PWM value in terms of speed.
This is intended to be used by motor controllers.
|
overrideprotectedvirtual |
Initializes this Sendable object.
builder | sendable builder |
Implements wpi::Sendable.
Reimplemented in frc::Servo.
void frc::PWM::SetAlwaysHighMode | ( | ) |
Sets the PWM output to be a continuous high signal while enabled.
void frc::PWM::SetBounds | ( | units::microsecond_t | max, |
units::microsecond_t | deadbandMax, | ||
units::microsecond_t | center, | ||
units::microsecond_t | deadbandMin, | ||
units::microsecond_t | 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 us |
deadbandMax | The high end of the deadband range pulse width in us |
center | The center (off) pulse width in us |
deadbandMin | The low end of the deadband pulse width in us |
min | The minimum pulse width in us |
|
virtual |
Temporarily disables the PWM output.
The next set call will re-enable the output.
void frc::PWM::SetPeriodMultiplier | ( | PeriodMultiplier | mult | ) |
Slow down the PWM signal for old devices.
mult | The period multiplier to apply to this channel |
|
virtual |
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 |
|
virtual |
Set the PWM value based on a speed.
This is intended to be used by motor controllers.
speed | The speed to set the motor controller between -1.0 and 1.0. |
void frc::PWM::SetZeroLatch | ( | ) |
|
friend |
|
friend |