edu.wpi.first.wpilibj

## Class PWM

- java.lang.Object
- - edu.wpi.first.wpilibj.SensorBase
  - - edu.wpi.first.wpilibj.PWM

- All Implemented Interfaces:
    LiveWindowSendable, Sendable
  Direct Known Subclasses:
    SafePWM, Servo

      public class PWM
      extends SensorBase
      implements LiveWindowSendable

  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 and Description
    --- | ---
    `static class` | `PWM.PeriodMultiplier` Represents the amount to multiply the minimum servo-pulse pwm period by.

  - ### Field Summary

    - ### Fields inherited from class edu.wpi.first.wpilibj.SensorBase

      `kAnalogInputChannels, kAnalogOutputChannels, kDigitalChannels, kPCMModules, kPDPChannels, kPDPModules, kPwmChannels, kRelayChannels, kSolenoidChannels, kSystemClockTicksPerMicrosecond`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `PWM(int channel)` Allocate a PWM given a channel.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `enableDeadbandElimination(boolean eliminateDeadband)` Optionally eliminate the deadband from a speed controller.
    `void` | `free()` Free the PWM channel.
    `int` | `getChannel()` Gets the channel number associated with the PWM Object.
    `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.
    `java.lang.String` | `getSmartDashboardType()` The string representation of the named data type that will be used by the smart dashboard for this `Sendable`.
    `double` | `getSpeed()` Get the PWM value in terms of speed.
    `void` | `initTable(NetworkTable subtable)` Initializes a table for 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.
    `protected void` | `setZeroLatch()`
    `void` | `startLiveWindowMode()` Start having this sendable object automatically respond to value changes reflect the value on the table.
    `void` | `stopLiveWindowMode()` Stop having this sendable object automatically respond to value changes.
    `void` | `updateTable()` Update the table for this sendable object with the latest values.

    - ### Methods inherited from class edu.wpi.first.wpilibj.SensorBase

      `checkAnalogInputChannel, checkAnalogOutputChannel, checkDigitalChannel, checkPDPChannel, checkPDPModule, checkPWMChannel, checkRelayChannel, checkSolenoidChannel, checkSolenoidModule, getDefaultSolenoidModule, setDefaultSolenoidModule`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### PWM

          public PWM(int channel)

      Allocate a PWM given a channel.
      Parameters:
        `channel` - The PWM channel number. 0-9 are on-board, 10-19 are on the MXP port

  - ### Method Detail

    - #### free

          public void free()

      Free the PWM channel.

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

      Overrides:
        `free` in class `SensorBase`

    - #### enableDeadbandElimination

          public void enableDeadbandElimination(boolean eliminateDeadband)

      Optionally eliminate the deadband from a speed controller.
      Parameters:
        `eliminateDeadband` - If 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.

    - #### 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

          public PWMConfigDataResult 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.

    - #### 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 speed controllers.

      Parameters:
        `speed` - The speed to set the speed 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 speed 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 reenable the output.

    - #### setPeriodMultiplier

          public void setPeriodMultiplier(PWM.PeriodMultiplier mult)

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

    - #### setZeroLatch

          protected void setZeroLatch()

    - #### getSmartDashboardType

          public java.lang.String getSmartDashboardType()

      Description copied from interface: `Sendable`
      The string representation of the named data type that will be used by the smart dashboard for this `Sendable`.
      Specified by:
        `getSmartDashboardType` in interface `Sendable`
      Returns:
        The type of this `Sendable`.

    - #### initTable

          public void initTable(NetworkTable subtable)

      Description copied from interface: `Sendable`
      Initializes a table for this `Sendable` object.
      Specified by:
        `initTable` in interface `Sendable`
      Parameters:
        `subtable` - The table to put the values in.

    - #### updateTable

          public void updateTable()

      Description copied from interface: `LiveWindowSendable`
      Update the table for this sendable object with the latest values.
      Specified by:
        `updateTable` in interface `LiveWindowSendable`

    - #### startLiveWindowMode

          public void startLiveWindowMode()

      Description copied from interface: `LiveWindowSendable`
      Start having this sendable object automatically respond to value changes reflect the value on the table.
      Specified by:
        `startLiveWindowMode` in interface `LiveWindowSendable`

    - #### stopLiveWindowMode

          public void stopLiveWindowMode()

      Description copied from interface: `LiveWindowSendable`
      Stop having this sendable object automatically respond to value changes.
      Specified by:
        `stopLiveWindowMode` in interface `LiveWindowSendable`