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 hardware dependent values, in this case 0-2000 for the FPGA. Changes are immediately sent to the FPGA, and the update occurs at the next FPGA cycle (5.005ms). There is no delay.

As of revision 0.1.10 of the FPGA, the FPGA interprets the 0-2000 values as follows: - 2000 = maximum pulse width - 1999 to 1001 = linear scaling from "full forward" to "center" - 1000 = center value - 999 to 2 = linear scaling from "center" to "full reverse" - 1 = minimum pulse width (currently .5ms) - 0 = disabled (i.e. PWM output is held low)

  • Nested Class Summary

    Nested Classes 
    Modifier and Type Class Description
    static class  PWM.PeriodMultiplier
    Represents the amount to multiply the minimum servo-pulse pwm period by.
  • Constructor Summary

    Constructors 
    Constructor Description
    PWM​(int channel)
    Allocate a PWM given a channel.
    PWM​(int channel, boolean registerSendable)
    Allocate a PWM given a channel.
  • Method Summary

    Modifier and Type Method Description
    void close()
    Free the resource associated with the PWM channel and set the value to 0.
    void enableDeadbandElimination​(boolean eliminateDeadband)
    Optionally eliminate the deadband from a motor controller.
    int getChannel()
    Gets the channel number associated with the PWM Object.
    int getHandle()
    Get the underlying handle.
    double getPosition()
    Get the PWM value in terms of a position.
    int getRaw()
    Get the PWM value directly from the hardware.
    PWMConfigDataResult getRawBounds()
    Gets the bounds on the PWM pulse widths.
    double getSpeed()
    Get the PWM value in terms of speed.
    void initSendable​(SendableBuilder builder)
    Initializes this Sendable object.
    void setBounds​(double max, double deadbandMax, double center, double deadbandMin, double min)
    Set the bounds on the PWM pulse widths.
    void setDisabled()
    Temporarily disables the PWM output.
    void setPeriodMultiplier​(PWM.PeriodMultiplier mult)
    Slow down the PWM signal for old devices.
    void setPosition​(double pos)
    Set the PWM value based on a position.
    void setRaw​(int value)
    Set the PWM value directly to the hardware.
    void setSpeed​(double speed)
    Set the PWM value based on a speed.
    void setZeroLatch()  

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 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.
    • setBounds

      public void 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:
      max - The max PWM pulse width in ms
      deadbandMax - The high end of the deadband range pulse width in ms
      center - The center (off) pulse width in ms
      deadbandMin - The low end of the deadband pulse width in ms
      min - The minimum pulse width in ms
    • getRawBounds

      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
      SetMaxPositivePwm() called., SetMinNegativePwm() 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
      SetMaxPositivePwm() called., SetMinNegativePwm() 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
      SetMaxPositivePwm() called., SetMinPositivePwm() called., SetCenterPwm() called., SetMaxNegativePwm() called., SetMinNegativePwm() 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
      SetMaxPositivePwm() called., SetMinPositivePwm() called., SetMaxNegativePwm() called., SetMinNegativePwm() called.
    • setRaw

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

      Write a raw value to a PWM channel.

      Parameters:
      value - Raw PWM value. Range 0 - 255.
    • getRaw

      public int getRaw()
      Get the PWM value directly from the hardware.

      Read a raw value from a PWM channel.

      Returns:
      Raw PWM control value. Range: 0 - 255.
    • setDisabled

      public 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()
    • 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