Class PWM

  • All Implemented Interfaces:
    Sendable, AutoCloseable
    Direct Known Subclasses:
    PWMSpeedController, Servo

    public class PWM
    extends MotorSafety
    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)

    • 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

      • close

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

        public final String getName()
        Description copied from interface: Sendable
        Gets the name of this Sendable object.
        Specified by:
        getName in interface Sendable
        Returns:
        Name
      • setName

        public final void setName​(String name)
        Description copied from interface: Sendable
        Sets the name of this Sendable object.
        Specified by:
        setName in interface Sendable
        Parameters:
        name - name
      • setName

        protected final void setName​(String moduleType,
                                     int channel)
        Sets the name of the sensor with a channel number.
        Parameters:
        moduleType - A string that defines the module name in the label for the value
        channel - The channel number the device is plugged into
      • setName

        protected final void setName​(String moduleType,
                                     int moduleNumber,
                                     int channel)
        Sets the name of the sensor with a module and channel number.
        Parameters:
        moduleType - A string that defines the module name in the label for the value
        moduleNumber - The number of the particular module type
        channel - The channel number the device is plugged into (usually PWM)
      • getSubsystem

        public final String getSubsystem()
        Description copied from interface: Sendable
        Gets the subsystem name of this Sendable object.
        Specified by:
        getSubsystem in interface Sendable
        Returns:
        Subsystem name
      • setSubsystem

        public final void setSubsystem​(String subsystem)
        Description copied from interface: Sendable
        Sets the subsystem name of this Sendable object.
        Specified by:
        setSubsystem in interface Sendable
        Parameters:
        subsystem - subsystem name
      • addChild

        protected final void addChild​(Object child)
        Add a child component.
        Parameters:
        child - child component
      • 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()