# MotorCmd

### MotorCmd¶

A motor command message is a single action followed by one or more command parameters, each encoded as a tuple: (param id, value, unit).

    message MotorCmd {
MotorAction action = 1;
repeated CmdParam paramList = 2;
}


#### MotorAction¶

##### BRAKE¶

Stop the motor immediately where it is and apply holding torque.

##### FREEWHEEL¶

Release all of the windings so that the motor spinds freely.

##### RUN¶

Run the motor continuously.

##### GOTO_POS¶

Go to requested position, stop and apply holding torque.

#### CmdParam:¶

The motor command parameters are sent as a list of tuples: (ID, value, unit). The ID and unit come from an enumerated set and the value is string-encoded. The following is a list of command parameter IDs - we include the unit for clarity. The default value and unit are in paranthesis.

##### CLOCKWISE¶

The motor movement direction (true, BOOLEAN)

##### POSITION¶

The motor stop position (0.0, DEGREE)

##### VELOCITY¶

The motor velocity once fully accelerated (360.0, DEGREE/SEC)

##### ACCEL¶

The motor acceleration from the current velocity toward the target velocity (15 DEGREE/SEC^2)

##### HOLD_TORQUE¶

The amount of torque to apply in an attempt to hold the requested position for the commands GOTO_POS or BRAKE. (2.0, Newton)

##### BREAKAWAY¶

If the motor fails to hold a position, maintain a velocity or accelerate for this much time, it will freewheel. When set to 0 there is no breakaway behavior (0, SEC)

Warning

NB: THIS IN NO WAY ASSURES A HUMAN-SAFE OPERATION - ALL HUMAN SAFETY SYSTEMS MUST BE EXTERNAL TO MOTOR CONTROL.

##### MIN_CURRENT_LIMIT¶

The minimum current the motor should try to maintain for the active operation. During the active operation, the controller will continuously detect the minimum current required to successfully complete the operation, but it will never go below the MIN_CURRENT_LIMIT. (0.0, AMP)

##### MAX_CURRENT_LIMIT¶

The maximum current the motor is allowed to draw for the active operation. During the active operation, the controller will continuously detect the minimum current required to successfully complete the operation, but it will never go above the MAX_CURRENT_LIMIT. When coupled with BREAKAWAY, this is a good way to create a safe-operation envelope. (0.5 AMP)

Warning

NB: THIS IN NO WAY ASSURES A HUMAN-SAFE OPERATION - ALL HUMAN SAFETY SYSTEMS MUST BE EXTERNAL TO MOTOR CONTROL.

##### MIN_VOLT_VELOCITY¶

Apply the MIN_VOLT_LIMIT when the velocity is at or below this value. The controller uses a voltage slope from MIN_VOLT_LIMIT to MAX_VOLT_LIMIT when velocity is between MIN_VOLT_VELOCITY and MAX_VOLT_VELOCITY (180, DEGREE/SEC)

##### MAX_VOLT_VELOCITY¶

Apply the MAX_VOLT_LIMIT when the velocity is at or above this value. The controller uses a voltage slope from MIN_VOLT_LIMIT to MAX_VOLT_LIMIT when velocity is between MIN_VOLT_VELOCITY and MAX_VOLT_VELOCITY (360, DEGREE/SEC)

##### MIN_VOLT_LIMIT¶

The voltage to apply when the velocity is at or below MIN_VOLT_VELOCITY. (3, VOLT)

##### MAX_VOLT_LIMIT¶

The voltage to apply when the velocity is at or above MAX_VOLT_VELOCITY. (24, VOLT)

#### Sample Commands¶

An simple motor positioning command might be:

GOTO_POS
(POSITION, 180.5, DEGREES)
(DIRECTION, TRUE, CLOCKWISE)


This would command the motor to turn clockwise until it reached 180.5deg, and it would hold that position with the default torque.

If you need more control of the motor's behavior during that GOTO_POS command, you can add more parameters:

GOTO_POS
(POSITION, 180.5, DEGREES)
(DIRECTION, TRUE, CLOCKWISE)
(ACCEL, 0.5, DEGREE/SEC)
(MIN_CURRENT_LIMIT, 0.2, AMP)
(MAX_CURRENT_LIMIT, 2, AMP)


This would command the motor to turn clockwise, accelerating at 0.5deg/sec with a minimum current of 0.2 amps and a maximum current of 2 amps until the motor reached 180.75 deg and then hold that position by seeking the minimum required current needed to hold the position without going below or above the current limits.

The point is that you can use the motors simply, or with more control - both work.