# Pivot (Arm) Subsystem Functional Specification ## Core Pivot Functionality - Absolute encoder to track arm position. Seed absolute encoder to the motors relative encoder (at the least on startup). - Motor(s) to drive the arm pivot. - Configure (idle mode, current limits). - Configure gear ratio. - Limit switches. HW limits, SW limits (Encoder position, Min / Max setpoint value). - Speed controls: - Set-points. Via tunable PID. (Rotations at a minimum ideally real units). - Manual operation. - Pass constants object into constructor. - Logging via AdvantageKit. - Method to check if arm is at a setpoint. onTarget. ## Bonus Pivot Functions ### Easy Bonus - Support for single or dual motors. - Motion Profiling (CTRE/Phoenix6 Motion Magic). MaxVelocity & MaxAcceleration. - PID basic control. SVA (Static Friction, Velocity, Acceleration) or GVA (Gravity, Velocity, Acceleration) FeedForward Control Loop - Optional HW limits. Enable / Disable this functionality. - Redundant limit switches (2 on top, 2 on bottom). - Switch from Brake to Coast on disable and vise versa. ### Hard Bonus - Java Units Classes (Distance, Angle, Velocity, Etc.). - Simulation of subsystem. - Integration with SysID. Characterizes motor performance.