mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-24 01:31:46 +00:00
[wpilib] Use PSI for compressor config and sensor reading (#3847)
This adds the REV Analog Pressure Sensor PSI to volt (and vice versa) conversion to allow setting the compressor config in PSI and getting the sensor reading in PSI. Also adds input validation for pressure values at the higher level. Co-authored-by: Tyler Veness <calcmogul@gmail.com>
This commit is contained in:
committed by
GitHub
parent
f401ea9aae
commit
7c09f44898
@@ -126,6 +126,16 @@ public class Compressor implements Sendable, AutoCloseable {
|
||||
return m_module.getAnalogVoltage(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Query the analog sensor pressure (on channel 0) (if supported). Note this is only for use with
|
||||
* the REV Analog Pressure Sensor.
|
||||
*
|
||||
* @return The analog sensor pressure, in PSI
|
||||
*/
|
||||
public double getPressure() {
|
||||
return m_module.getPressure(0);
|
||||
}
|
||||
|
||||
/** Disable the compressor. */
|
||||
public void disable() {
|
||||
m_module.disableCompressor();
|
||||
@@ -137,27 +147,29 @@ public class Compressor implements Sendable, AutoCloseable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable compressor closed loop control using analog input.
|
||||
* Enable compressor closed loop control using analog input. Note this is only for use with the
|
||||
* REV Analog Pressure Sensor.
|
||||
*
|
||||
* <p>On CTRE PCM, this will enable digital control.
|
||||
*
|
||||
* @param minAnalogVoltage The minimum voltage to enable compressor
|
||||
* @param maxAnalogVoltage The maximum voltage to disable compressor
|
||||
* @param minPressure The minimum pressure in PSI to enable compressor
|
||||
* @param maxPressure The maximum pressure in PSI to disable compressor
|
||||
*/
|
||||
public void enableAnalog(double minAnalogVoltage, double maxAnalogVoltage) {
|
||||
m_module.enableCompressorAnalog(minAnalogVoltage, maxAnalogVoltage);
|
||||
public void enableAnalog(double minPressure, double maxPressure) {
|
||||
m_module.enableCompressorAnalog(minPressure, maxPressure);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable compressor closed loop control using hybrid input.
|
||||
* Enable compressor closed loop control using hybrid input. Note this is only for use with the
|
||||
* REV Analog Pressure Sensor.
|
||||
*
|
||||
* <p>On CTRE PCM, this will enable digital control.
|
||||
*
|
||||
* @param minAnalogVoltage The minimum voltage to enable compressor
|
||||
* @param maxAnalogVoltage The maximum voltage to disable compressor
|
||||
* @param minPressure The minimum pressure in PSI to enable compressor
|
||||
* @param maxPressure The maximum pressure in PSI to disable compressor
|
||||
*/
|
||||
public void enableHybrid(double minAnalogVoltage, double maxAnalogVoltage) {
|
||||
m_module.enableCompressorHybrid(minAnalogVoltage, maxAnalogVoltage);
|
||||
public void enableHybrid(double minPressure, double maxPressure) {
|
||||
m_module.enableCompressorHybrid(minPressure, maxPressure);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -68,6 +68,18 @@ public class PneumaticHub implements PneumaticsBase {
|
||||
}
|
||||
}
|
||||
|
||||
/** Converts volts to PSI per the REV Analog Pressure Sensor datasheet. */
|
||||
private static double voltsToPsi(double sensorVoltage, double supplyVoltage) {
|
||||
double pressure = 250 * (sensorVoltage / supplyVoltage) - 25;
|
||||
return pressure;
|
||||
}
|
||||
|
||||
/** Converts PSI to volts per the REV Analog Pressure Sensor datasheet. */
|
||||
private static double psiToVolts(double pressure, double supplyVoltage) {
|
||||
double voltage = supplyVoltage * (0.004 * pressure + 0.1);
|
||||
return voltage;
|
||||
}
|
||||
|
||||
private final DataStore m_dataStore;
|
||||
private final int m_handle;
|
||||
|
||||
@@ -210,12 +222,38 @@ public class PneumaticHub implements PneumaticsBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableCompressorAnalog(double minAnalogVoltage, double maxAnalogVoltage) {
|
||||
public void enableCompressorAnalog(double minPressure, double maxPressure) {
|
||||
if (minPressure >= maxPressure) {
|
||||
throw new IllegalArgumentException("maxPressure must be greater than minPressure");
|
||||
}
|
||||
if (minPressure < 0 || minPressure > 120) {
|
||||
throw new IllegalArgumentException(
|
||||
"minPressure must be between 0 and 120 PSI, got " + minPressure);
|
||||
}
|
||||
if (maxPressure < 0 || maxPressure > 120) {
|
||||
throw new IllegalArgumentException(
|
||||
"maxPressure must be between 0 and 120 PSI, got " + maxPressure);
|
||||
}
|
||||
double minAnalogVoltage = psiToVolts(minPressure, 5);
|
||||
double maxAnalogVoltage = psiToVolts(maxPressure, 5);
|
||||
REVPHJNI.setClosedLoopControlAnalog(m_handle, minAnalogVoltage, maxAnalogVoltage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableCompressorHybrid(double minAnalogVoltage, double maxAnalogVoltage) {
|
||||
public void enableCompressorHybrid(double minPressure, double maxPressure) {
|
||||
if (minPressure >= maxPressure) {
|
||||
throw new IllegalArgumentException("maxPressure must be greater than minPressure");
|
||||
}
|
||||
if (minPressure < 0 || minPressure > 120) {
|
||||
throw new IllegalArgumentException(
|
||||
"minPressure must be between 0 and 120 PSI, got " + minPressure);
|
||||
}
|
||||
if (maxPressure < 0 || maxPressure > 120) {
|
||||
throw new IllegalArgumentException(
|
||||
"maxPressure must be between 0 and 120 PSI, got " + maxPressure);
|
||||
}
|
||||
double minAnalogVoltage = psiToVolts(minPressure, 5);
|
||||
double maxAnalogVoltage = psiToVolts(maxPressure, 5);
|
||||
REVPHJNI.setClosedLoopControlHybrid(m_handle, minAnalogVoltage, maxAnalogVoltage);
|
||||
}
|
||||
|
||||
@@ -224,6 +262,13 @@ public class PneumaticHub implements PneumaticsBase {
|
||||
return REVPHJNI.getAnalogVoltage(m_handle, channel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getPressure(int channel) {
|
||||
double sensorVoltage = REVPHJNI.getAnalogVoltage(m_handle, channel);
|
||||
double supplyVoltage = REVPHJNI.get5VVoltage(m_handle);
|
||||
return voltsToPsi(sensorVoltage, supplyVoltage);
|
||||
}
|
||||
|
||||
void clearStickyFaults() {
|
||||
REVPHJNI.clearStickyFaults(m_handle);
|
||||
}
|
||||
|
||||
@@ -90,12 +90,14 @@ public interface PneumaticsBase extends AutoCloseable {
|
||||
|
||||
void enableCompressorDigital();
|
||||
|
||||
void enableCompressorAnalog(double minAnalogVoltage, double maxAnalogVoltage);
|
||||
void enableCompressorAnalog(double minPressure, double maxPressure);
|
||||
|
||||
void enableCompressorHybrid(double minAnalogVoltage, double maxAnalogVoltage);
|
||||
void enableCompressorHybrid(double minPressure, double maxPressure);
|
||||
|
||||
double getAnalogVoltage(int channel);
|
||||
|
||||
double getPressure(int channel);
|
||||
|
||||
CompressorConfigType getCompressorConfigType();
|
||||
|
||||
/**
|
||||
|
||||
@@ -235,12 +235,12 @@ public class PneumaticsControlModule implements PneumaticsBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableCompressorAnalog(double minAnalogVoltage, double maxAnalogVoltage) {
|
||||
public void enableCompressorAnalog(double minPressure, double maxPressure) {
|
||||
CTREPCMJNI.setClosedLoopControl(m_handle, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableCompressorHybrid(double minAnalogVoltage, double maxAnalogVoltage) {
|
||||
public void enableCompressorHybrid(double minPressure, double maxPressure) {
|
||||
CTREPCMJNI.setClosedLoopControl(m_handle, false);
|
||||
}
|
||||
|
||||
@@ -255,4 +255,9 @@ public class PneumaticsControlModule implements PneumaticsBase {
|
||||
public double getAnalogVoltage(int channel) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getPressure(int channel) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user