Skip to content

Motors

Motor Types by Interface

Speed Position
signed (-1000..1000) DirectionalMotor SteeringActuator
unsigned (0..1000) ForwardMotor LinearActuator
  • DirectionalMotor – Bidirectional speed control. Used for DC motors in cars, boats, robots where forward/reverse and variable speed are needed.

  • ForwardMotor – Unidirectional speed control. Used for aircraft ESCs, pumps, fans, and any application requiring only forward direction with variable speed.

  • SteeringActuator – Bidirectional position control. Used for steering servos, pan/tilt mechanisms, and any application requiring centered positioning with left/right movement.

  • LinearActuator – Unidirectional position control. Used for linear actuators, position servos, and applications requiring absolute position control from minimum to maximum.

Hardware Compatibility Matrix

Driver DirectionalMotor ForwardMotor SteeringActuator LinearActuator
PwmDriver — ✅ — ✅
ServoDriver ✅ ✅ ✅ ✅
SoftwareServoDriver ✅ ✅ ✅ ✅
TA6586Driver ✅ — ✅ —
TB6612Driver ✅ — ✅ —

DirectionalMotor

Bidirectional motor controller for DC motors with H-bridge drivers.

template <class Driver, signed short tMaxBackward = -1000, 
          signed short tMinBackward = 0, signed short tMinForward = 0, 
          signed short tMaxForward = 1000>
class DirectionalMotor : public Driver

Methods:

  • SetupRange(maxBack, minBack, minForw, maxForw) – Configure all limits

  • SetMaxBackward(value) – Max reverse power (-1000..1000)

  • SetMinBackward(value) – Min reverse power (start threshold)

  • SetMinForward(value) – Min forward power (start threshold)

  • SetMaxForward(value) – Max forward power

  • Go(level) – Set motor power (-1000..1000)

Example:

using Motor = evam::DirectionalMotor<evam::TA6586Driver<9, 10>>;
Motor motor;
motor.SetupRange(-1000, -200, 200, 1000);  // 20% dead zone
motor.Go(750);  // 75% forward

ForwardMotor

Unidirectional motor controller for ESCs and forward-only applications.

template <class Driver, int kMinValue = 0, int kMaxValue = 1000>
class ForwardMotor : public Driver

Methods:

  • SetupRange(minVal, maxVal) – Configure output range

  • SetMinValue(value) – Minimum output (idle/stop)

  • SetMaxValue(value) – Maximum output (full power)

  • Go(level) – Set motor power (0..1000, negative treated as 0)

Example:

using ESC = evam::ForwardMotor<evam::PwmDriver<9>>;
ESC throttle;
throttle.SetupRange(100, 1000);  // ESC calibration
throttle.Go(500);  // 50% throttle

SteeringActuator

Centered servo controller for steering and positioning.

template <class Driver, signed short kLeftPos = -1000, 
          signed short kCenterPos = 0, signed short kRightPos = 1000>
class SteeringActuator : public Driver

Methods:

  • SetupRange(leftPos, centerPos, rightPos) – Configure endpoints

  • SetLeftPos(value) – Leftmost position

  • SetCenterPos(value) – Center position

  • SetRightPos(value) – Rightmost position

  • Go(level) – Set position (-1000..1000)

Example:

using Steering = evam::SteeringActuator<evam::ServoDriver<9>>;
Steering steering;
steering.SetupRange(-800, 0, 800);  // Calibrate endpoints
steering.Go(500);  // Turn right

LinearActuator

Position controller for linear actuators and position servos.

template <class Driver, int kMinValue = 0, int kMaxValue = 1000>
class LinearActuator : public Driver

Methods:

  • SetupRange(minVal, maxVal) – Configure position range

  • SetMinValue(value) – Position at input 0

  • SetMaxValue(value) – Position at input 1000

  • Go(position) – Set position (0..1000)

Example:

using Actuator = evam::LinearActuator<evam::PwmDriver<10>>;
Actuator actuator;
actuator.SetupRange(0, 1000);
actuator.Go(750);  // 75% extended