motion_control.js

/** @module motion_control */

import {
  startMotionCmd,
  stopMotionCmd,
  setSpeedCmd,
  setDirectionCmd,
  setSubdivideCmd,
} from "./api_codes.js";

/**
 * 5.1 Start
 * @param {number} motor
 * @param {number} mode
 * @param {number} mStep
 * @param {number} speed
 * @param {number} direction
 * @param {number} pulse
 * @param {number} accelStep
 * @returns {Object}
 */
export function startMotion(
  motor,
  mode,
  mStep,
  speed,
  direction,
  pulse,
  accelStep
) {
  // motor: 1:spin 2:pitch
  // mode: 1:continuous mode 2:pulse mode
  // mStep: 1 2 4 8 16 32 64 128 256
  // speed: range:0-65536(1-50000&&<1000*mStep)
  // direction: 0:anticlockwise 1:clockwise
  // pulse: range:>=2(mStep<=32)>=5(mStep>32)
  // accelStep: 0-1000
  const options = {
    interface: startMotionCmd,
    id: motor,
    mode,
    mStep,

    speed,
    accelStep,

    direction,

    pulse,
  };
  return options;
}

/**
 * 5.2 Stop
 * @param {number} motor
 * @param {number} decelStep
 * @returns {Object}
 */
export function stopMotion(motor, decelStep) {
  // motor: 1:spin 2:pitch
  // decelStep: 0-1000
  const options = {
    interface: stopMotionCmd,
    id: motor,
    decelStep,
  };
  return options;
}

/**
 * 5.3 Set speed
 * @param {number} motor
 * @param {number} speed
 * @param {number} accelStep
 * @param {number} trend
 * @returns {Object}
 */
export function setSpeed(motor, speed, accelStep, trend) {
  // speed: 0-50000
  // accelStep: 0-1000
  // trend: 0:decelerate 1:accelerate
  const options = {
    interface: setSpeedCmd,
    id: motor,
    speed,
    accelStep,
    trend,
  };
  return options;
}

/**
 * 5.4 Set direction
 * @param {number} motor
 * @param {number} direction
 * @returns {Object}
 */
export function setDirection(motor, direction) {
  // direction: 0:anticlockwise 1:clockwise
  const options = {
    interface: setDirectionCmd,
    id: motor,
    direction,
  };
  return options;
}

/**
 * 5.5 Set subdivide
 * @param {number} motor
 * @param {number} mStep
 * @returns {Object}
 */
export function setSubdivide(motor, mStep) {
  // 1 2 4 8 16 32 64 128 256
  const options = {
    interface: setSubdivideCmd,
    id: motor,
    mStep,
  };
  return options;
}