Class PWM

java.lang.Object
edu.wpi.first.wpilibj.PWM
All Implemented Interfaces:
Sendable, AutoCloseable
Direct Known Subclasses:
Servo

public class PWM
extends Object
implements Sendable, AutoCloseable
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.

  • Constructor Details

    • PWM

      public PWM​(int channel)
      Allocate a PWM given a channel.

      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.

      By default, adds itself to SendableRegistry and LiveWindow.

      Parameters:
      channel - The PWM channel number. 0-9 are on-board, 10-19 are on the MXP port
    • PWM

      public PWM​(int channel, boolean registerSendable)
      Allocate a PWM given a channel.
      Parameters:
      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
  • Method Details

    • close

      public void close()
      Free the resource associated with the PWM channel and set the value to 0.
      Specified by:
      close in interface AutoCloseable
    • enableDeadbandElimination

      public void enableDeadbandElimination​(boolean eliminateDeadband)
      Optionally eliminate the deadband from a motor controller.
      Parameters:
      eliminateDeadband - If true, set the motor curve for the motor controller to eliminate the deadband in the middle of the range. Otherwise, keep the full range without modifying any values.
    • setBoundsMicroseconds

      public void setBoundsMicroseconds​(int max, int deadbandMax, int center, int deadbandMin, int 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:
      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
    • getBoundsMicroseconds

      Gets the bounds on the PWM pulse widths. This gets 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.
      Returns:
      The bounds on the PWM pulse widths.
    • getChannel

      public int getChannel()
      Gets the channel number associated with the PWM Object.
      Returns:
      The channel number.
    • setPosition

      public void setPosition​(double pos)
      Set the PWM value based on a position.

      This is intended to be used by servos.

      Parameters:
      pos - The position to set the servo between 0.0 and 1.0.
      Pre-Condition
      setBoundsMicroseconds() called.
    • getPosition

      public double getPosition()
      Get the PWM value in terms of a position.

      This is intended to be used by servos.

      Returns:
      The position the servo is set to between 0.0 and 1.0.
      Pre-Condition
      setBoundsMicroseconds() called.
    • setSpeed

      public void setSpeed​(double speed)
      Set the PWM value based on a speed.

      This is intended to be used by motor controllers.

      Parameters:
      speed - The speed to set the motor controller between -1.0 and 1.0.
      Pre-Condition
      setBoundsMicroseconds() called.
    • getSpeed

      public double getSpeed()
      Get the PWM value in terms of speed.

      This is intended to be used by motor controllers.

      Returns:
      The most recently set speed between -1.0 and 1.0.
      Pre-Condition
      setBoundsMicroseconds() called.
    • setPulseTimeMicroseconds

      public void setPulseTimeMicroseconds​(int microsecondPulseTime)
      Set the PWM value directly to the hardware.

      Write a microsecond pulse value to a PWM channel.

      Parameters:
      microsecondPulseTime - Microsecond pulse PWM value. Range 0 - 4096.
    • getPulseTimeMicroseconds

      Get the PWM value directly from the hardware.

      Read a raw value from a PWM channel.

      Returns:
      Microsecond pulse PWM control value. Range: 0 - 4096.
    • setDisabled

      public final void setDisabled()
      Temporarily disables the PWM output. The next set call will re-enable the output.
    • setPeriodMultiplier

      Slow down the PWM signal for old devices.
      Parameters:
      mult - The period multiplier to apply to this channel
    • setZeroLatch

      public void setZeroLatch()
      Latches PWM to zero.
    • setAlwaysHighMode

      public void setAlwaysHighMode()
      Sets the PWM output to be a continuous high signal while enabled.
    • getHandle

      public int getHandle()
      Get the underlying handle.
      Returns:
      Underlying PWM handle
    • initSendable

      public void initSendable​(SendableBuilder builder)
      Description copied from interface: Sendable
      Initializes this Sendable object.
      Specified by:
      initSendable in interface Sendable
      Parameters:
      builder - sendable builder