Fang-Robotics-MCB
Fang Robotics Team Codebase
Loading...
Searching...
No Matches
vortex_80a_esc.hpp
Go to the documentation of this file.
1#ifndef FANG_ROBOTICS_MCB_DRIVER_MOTOR_VORTEX_80A_ESC_HPP
2#define FANG_ROBOTICS_MCB_DRIVER_MOTOR_VORTEX_80A_ESC_HPP
5
7
10
12
13namespace fang::motor
14{
19 {
20 public:
21 Vortex80AEsc(tap::gpio::Pwm& pwmDriver, const trap::gpio::PwmData& pwmData, const Directionality& directionality = Directionality::BIDIRECTIONAL);
25 void sendArmingSignal();
31 void armingRoutine();
32 void setSpeed(double speedRangePercentage);
37 void setPulseDuration(const Microseconds& duration);
38 void setDirectionality(const Directionality& directionality);
40 private:
41 //Maximum and minimum speed range percentages
42 static constexpr double kBidirectionalMin_ {-1.0};
43 static constexpr double kBidirectionalMax_ {1.0};
44 static constexpr double kUnidirectionalMin_ {0.0};
45 static constexpr double kUnidirectionalMax_ {1.0};
46
47 static constexpr Microseconds kBidirectionalArmingSignal_{1500};
48 static constexpr Microseconds kUnidirectionalArmingSignal_{1000};
49 static constexpr Milliseconds kArmingPeriod_{500};
50 //Map speed range percentage of -1.0 to 1000 us
51 static constexpr math::CoolLerp::Vector2D kBidirectionalPoint1_{-1.0, 1000.0};
52 //Map speed rnage percentage of 1.0 to 2000 us
53 static constexpr math::CoolLerp::Vector2D kBidirectionalPoint2_{1.0, 2000.0};
54
55 //Map speed range percentage of 0.0 to 1000 us
56 static constexpr math::CoolLerp::Vector2D kUnidirectionalPoint1_{0.0, 1000.0};
57 //Map speed rnage percentage of 1.0 to 2000 us
58 static constexpr math::CoolLerp::Vector2D kUnidirectionalPoint2_{1.0, 2000.0};
59
60 //Maps
61 static const math::CoolLerp kBidirectionalMap_;
62 static const math::CoolLerp kUnidirectionalMap_;
63
64 tap::gpio::Pwm& pwmDriver_;
65 trap::gpio::PwmData pwmData_;
66 const Microseconds kCyclePeriod_;
67 Directionality kDirectionality_;
68
69 Microseconds calculateUnidirectionalPeriod(double speedRangePercentage) const;
70 Microseconds calculateBidirectionalPeriod(double speedRangePercentage) const;
71 Microseconds calculatePeriod (double speedRangePercentage) const;
72 void pwmWrite(double dutyCycle);
73 };
74}
75#endif
Definition cool_lerp.hpp:14
Definition vortex_80a_esc.hpp:19
Directionality getDirectionality() const
Definition vortex_80a_esc.cpp:82
void setPulseDuration(const Microseconds &duration)
Definition vortex_80a_esc.cpp:47
void setSpeed(double speedRangePercentage)
Definition vortex_80a_esc.cpp:43
void sendArmingSignal()
Definition vortex_80a_esc.cpp:26
void armingRoutine()
Definition vortex_80a_esc.cpp:38
void setDirectionality(const Directionality &directionality)
Definition vortex_80a_esc.cpp:78
Definition pwm.hpp:43
Definition directionality.hpp:6
Directionality
Definition directionality.hpp:10
Definition vector_2d.hpp:8
Definition pwm_data.hpp:12
units::time::microsecond_t Microseconds
Definition units_alias.hpp:13
units::time::millisecond_t Milliseconds
Definition units_alias.hpp:12