WPILibC++  unspecified
NidecBrushless.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2017-2018 FIRST. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #pragma once
9 
10 #include <atomic>
11 
12 #include "DigitalOutput.h"
13 #include "ErrorBase.h"
14 #include "MotorSafety.h"
15 #include "MotorSafetyHelper.h"
16 #include "PWM.h"
17 #include "SmartDashboard/SendableBase.h"
18 #include "SpeedController.h"
19 
20 namespace frc {
21 
25 class NidecBrushless : public ErrorBase,
26  public SendableBase,
27  public SpeedController,
28  public MotorSafety {
29  public:
38  NidecBrushless(int pwmChannel, int dioChannel);
39 
40  ~NidecBrushless() override = default;
41 
42  // SpeedController interface
51  void Set(double speed) override;
52 
58  double Get() const override;
59 
60  void SetInverted(bool isInverted) override;
61 
62  bool GetInverted() const override;
63 
68  void Disable() override;
69 
77  void StopMotor() override;
78 
83  void Enable();
84 
85  // PIDOutput interface
91  void PIDWrite(double output) override;
92 
93  // MotorSafety interface
99  void SetExpiration(double timeout) override;
100 
106  double GetExpiration() const override;
107 
114  bool IsAlive() const override;
115 
116  void SetSafetyEnabled(bool enabled) override;
117 
118  bool IsSafetyEnabled() const override;
119 
120  void GetDescription(wpi::raw_ostream& desc) const override;
121 
127  int GetChannel() const;
128 
129  // Sendable interface
130  void InitSendable(SendableBuilder& builder) override;
131 
132  private:
133  MotorSafetyHelper m_safetyHelper;
134  bool m_isInverted = false;
135  std::atomic_bool m_disabled{false};
136  DigitalOutput m_dio;
137  PWM m_pwm;
138  double m_speed = 0.0;
139 };
140 
141 } // namespace frc
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:45
Interface for speed controlling devices.
Definition: SpeedController.h:17
Definition: Utility.cpp:119
void SetInverted(bool isInverted) override
Common interface for inverting direction of a speed controller.
Definition: NidecBrushless.cpp:42
void InitSendable(SendableBuilder &builder) override
Initializes this Sendable object.
Definition: NidecBrushless.cpp:85
void Set(double speed) override
Set the PWM value.
Definition: NidecBrushless.cpp:31
double GetExpiration() const override
Return the safety expiration time.
Definition: NidecBrushless.cpp:65
void SetExpiration(double timeout) override
Set the safety expiration time.
Definition: NidecBrushless.cpp:61
void Enable()
Re-enable the motor after Disable() has been called.
Definition: NidecBrushless.cpp:57
Definition: MotorSafety.h:16
Definition: MotorSafetyHelper.h:20
void StopMotor() override
Stop the motor.
Definition: NidecBrushless.cpp:52
int GetChannel() const
Gets the channel number associated with the object.
Definition: NidecBrushless.cpp:83
void Disable() override
Disable the motor.
Definition: NidecBrushless.cpp:46
Nidec Brushless Motor.
Definition: NidecBrushless.h:25
Base class for most objects.
Definition: ErrorBase.h:74
Definition: SendableBase.h:19
bool IsAlive() const override
Check if the motor is currently alive or stopped due to a timeout.
Definition: NidecBrushless.cpp:69
void PIDWrite(double output) override
Write out the PID value as seen in the PIDOutput base object.
Definition: NidecBrushless.cpp:59
Class to write to digital outputs.
Definition: DigitalOutput.h:24
Definition: SendableBuilder.h:23
double Get() const override
Get the recently set value of the PWM.
Definition: NidecBrushless.cpp:40
Class implements the PWM generation in the FPGA.
Definition: PWM.h:36
NidecBrushless(int pwmChannel, int dioChannel)
Constructor.
Definition: NidecBrushless.cpp:16
bool GetInverted() const override
Common interface for returning the inversion state of a speed controller.
Definition: NidecBrushless.cpp:44