From 46d401553ec9233b5a2daea0351f4988cbaf78e4 Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Fri, 27 Dec 2024 13:04:43 -0800 Subject: [PATCH] [wpilib] Add Koors40 motor controller (#7469) --- .../main/native/cpp/motorcontrol/Koors40.cpp | 20 ++++++++ .../native/include/frc/motorcontrol/Koors40.h | 43 +++++++++++++++++ .../src/generate/pwm_motor_controllers.json | 14 ++++++ .../first/wpilibj/motorcontrol/Koors40.java | 48 +++++++++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 wpilibc/src/generated/main/native/cpp/motorcontrol/Koors40.cpp create mode 100644 wpilibc/src/generated/main/native/include/frc/motorcontrol/Koors40.h create mode 100644 wpilibj/src/generated/main/java/edu/wpi/first/wpilibj/motorcontrol/Koors40.java diff --git a/wpilibc/src/generated/main/native/cpp/motorcontrol/Koors40.cpp b/wpilibc/src/generated/main/native/cpp/motorcontrol/Koors40.cpp new file mode 100644 index 0000000000..023e51a404 --- /dev/null +++ b/wpilibc/src/generated/main/native/cpp/motorcontrol/Koors40.cpp @@ -0,0 +1,20 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +// THIS FILE WAS AUTO-GENERATED BY ./wpilibc/generate_pwm_motor_controllers.py. DO NOT MODIFY + +#include "frc/motorcontrol/Koors40.h" + +#include + +using namespace frc; + +Koors40::Koors40(int channel) : PWMMotorController("Koors40", channel) { + m_pwm.SetBounds(2.004_ms, 1.52_ms, 1.5_ms, 1.48_ms, 0.997_ms); + m_pwm.SetPeriodMultiplier(PWM::kPeriodMultiplier_4X); + m_pwm.SetSpeed(0.0); + m_pwm.SetZeroLatch(); + + HAL_Report(HALUsageReporting::kResourceType_Koors40, GetChannel() + 1); +} diff --git a/wpilibc/src/generated/main/native/include/frc/motorcontrol/Koors40.h b/wpilibc/src/generated/main/native/include/frc/motorcontrol/Koors40.h new file mode 100644 index 0000000000..7beb7366c3 --- /dev/null +++ b/wpilibc/src/generated/main/native/include/frc/motorcontrol/Koors40.h @@ -0,0 +1,43 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +// THIS FILE WAS AUTO-GENERATED BY ./wpilibc/generate_pwm_motor_controllers.py. DO NOT MODIFY + +#pragma once + +#include "frc/motorcontrol/PWMMotorController.h" + +namespace frc { + +/** + * AndyMark Koors40 Motor Controller with PWM control. + * + * Note that the Koors40 uses the following bounds for PWM values. These + * values should work reasonably well for most controllers, but if users + * experience issues such as asymmetric behavior around the deadband or + * inability to saturate the controller in either direction, calibration is + * recommended. The calibration procedure can be found in the Koors40 User + * Manual available from AndyMark. + * + * \li 2.004ms = full "forward" + * \li 1.520ms = the "high end" of the deadband range + * \li 1.500ms = center of the deadband range (off) + * \li 1.480ms = the "low end" of the deadband range + * \li 0.997ms = full "reverse" + */ +class Koors40 : public PWMMotorController { + public: + /** + * Constructor for a Koors40 connected via PWM. + * + * @param channel The PWM channel that the Koors40 is attached to. 0-9 are + * on-board, 10-19 are on the MXP port + */ + explicit Koors40(int channel); + + Koors40(Koors40&&) = default; + Koors40& operator=(Koors40&&) = default; +}; + +} // namespace frc diff --git a/wpilibj/src/generate/pwm_motor_controllers.json b/wpilibj/src/generate/pwm_motor_controllers.json index a2c9feab0c..c04935fba1 100644 --- a/wpilibj/src/generate/pwm_motor_controllers.json +++ b/wpilibj/src/generate/pwm_motor_controllers.json @@ -168,5 +168,19 @@ "deadbandMin": 1.480, "min": 0.997 } + }, + { + "name": "Koors40", + "Manufacturer": "AndyMark", + "DisplayName": "Koors40", + "ResourceName": "Koors40", + "PeriodMultiplier": 4, + "pulse_width_ms": { + "max": 2.004, + "deadbandMax": 1.520, + "center": 1.500, + "deadbandMin": 1.480, + "min": 0.997 + } } ] diff --git a/wpilibj/src/generated/main/java/edu/wpi/first/wpilibj/motorcontrol/Koors40.java b/wpilibj/src/generated/main/java/edu/wpi/first/wpilibj/motorcontrol/Koors40.java new file mode 100644 index 0000000000..df1ef2d754 --- /dev/null +++ b/wpilibj/src/generated/main/java/edu/wpi/first/wpilibj/motorcontrol/Koors40.java @@ -0,0 +1,48 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +// THIS FILE WAS AUTO-GENERATED BY ./wpilibj/generate_pwm_motor_controllers.py. DO NOT MODIFY + +package edu.wpi.first.wpilibj.motorcontrol; + +import edu.wpi.first.hal.FRCNetComm.tResourceType; +import edu.wpi.first.hal.HAL; +import edu.wpi.first.wpilibj.PWM; + +/** + * AndyMark Koors40 Motor Controller. + * + *

Note that the Koors40 uses the following bounds for PWM values. These values should work + * reasonably well for most controllers, but if users experience issues such as asymmetric behavior + * around the deadband or inability to saturate the controller in either direction, calibration is + * recommended. The calibration procedure can be found in the Koors40 User Manual available from + * AndyMark. + * + *

+ */ +public class Koors40 extends PWMMotorController { + /** + * Constructor. + * + * @param channel The PWM channel that the Koors40 is attached to. 0-9 are on-board, 10-19 + * are on the MXP port + */ + @SuppressWarnings("this-escape") + public Koors40(final int channel) { + super("Koors40", channel); + + m_pwm.setBoundsMicroseconds(2004, 1520, 1500, 1480, 997); + m_pwm.setPeriodMultiplier(PWM.PeriodMultiplier.k4X); + m_pwm.setSpeed(0.0); + m_pwm.setZeroLatch(); + + HAL.report(tResourceType.kResourceType_Koors40, getChannel() + 1); + } +}