obniz Parts Library

StepperMotor

GitHub
StepperMotor
Usable Devices :
obniz_board
Found at :
秋月電子通商
www.adafruit.com
秋月電子通商

StepperMotor

ステッピングモーター(またはパルスモーター)はDCモーターのように中にあるコイルをとにかく回すというものとは違い、
ある角度ずつ正確に回転させることができるモーターです。ステップごとに動かすのでそのような名前になっています。
ステッピングモーターを使えば正確に回転させたり、移動させたり、または動かないように位置をキープしたりといったことが簡単にできます。逆に高速にパワフルに回転させる用途には向きません。

このライブラリではバイポーラ・ユニポーラのステッピングモーターを駆動できます。obniz Boardから直接つないで動かすため5vで動くものを想定しています。

wired(obniz, {a, b, aa, bb [, common]})

部品と接続したioを指定します。

バイポーラ・ユニポーラ、それぞれでこのように接続します。

ライブラリはcommonの有無でバイポーラかユニポーラかを判断します。

name type required default description
a number(obniz Board io) no   つないだobniz Boardのioを指定してください。
b number(obniz Board io) no   つないだobniz Boardのioを指定してください。
aa number(obniz Board io) no   つないだobniz Boardのioを指定してください。aの逆相を指定します。
bb number(obniz Board io) no   つないだobniz Boardのioを指定してください。bの逆相を指定します。
common number(obniz Board io) no   ユニポーラの場合に指定します。
// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
await motor.stepWait(100);
await motor.stepWait(200);
console.log(motor.currentStep); // => 300

stepType(type: string)

励磁方法を変更します。デフォルトで2となっています。

name type required default description
type string yes '2' 下に詳細を記す

指定できるのは以下です。

keyname type description
'1' 1相励磁 どれか1つのコイルのみを動作する方法。消費電力が少ないが、パワーは弱い
'2' 2相励磁 必ず2つのコイルを動作する方法。最も一般的
'1-2' 1-2相励磁 上記2つを組み合わせた方式で半分のステップで駆動できるのが特徴

'1-2'のみステップあたりの移動量が変わるので注意が必要です。

// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
motor.stepType('1');
await motor.stepWait(100);
await motor.stepWait(200);
console.log(motor.currentStep); // => 300

speed(frequency: number)

速度をHzで指定します。100は1秒間に100ステップとなります。

name type required default description
frequency number yes 100 ステップ移動の周波数

指定できる最大値はモーターとモーターの負荷によって異なります。大きいほどスリップの可能性(動かしたはずなのに実際は動いていない)が上がります

// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
motor.speed(1000);
await motor.stepWait(100);

[await] stepWait(step: number)

指定したステップだけ移動します。speedとstepTypeに従ってモーターを駆動します。

name type required default description
step number yes - 動かしたいステップ数

小数が与えられた場合は四捨五入されます。

// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
await motor.stepWait(100);
await motor.stepWait(-100);
// now returned to start position.

[await] stepToWait(destination: number)

目的となるステップ数の場所まで移動します。speedとstepTypeに従ってモーターを駆動します。

name type required default description
destination number yes - 目的となるステップ数。
// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
await motor.stepWait(100);
await motor.stepToWait(-150); // it move -250 steps
console.log(motor.currentStep) // => -150

[await] holdWait()

今のステップ位置で電流を流し、維持した状態にします。

// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
await motor.holdWait();

[await] freeWait()

全てのコイルへの電流を停止し、モーターを自由な状態にします。

// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
await motor.stepWait(100);
await motor.freeWait();

currentStep

現在の位置をステップで表します。初期値は0です。
100ステップ動かし-50動かしたなら50となっています。

// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
await motor.stepWait(100);
await motor.stepToWait(-150); // it move -250 steps
console.log(motor.currentStep) // => -150

[await] rotateWait(rotation: number)

指定した角度だけ回転させます。
rotationStepCount変数に従い動かすので、先に設定する必要があります。

name type required default description
rotation number yes - 回転させたい角度(度)

360を指定すれば1回転することになり、-360で逆向きに1回転します。

// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
motor.rotationStepCount = 100;
await motor.rotateWait(360 * 2);
console.log(motor.currentRotation()); // => 720
console.log(motor.currentAngle()); // => 0

[await] rotateToWait(rotation: number)

始めの角度を0度として指定した角度になるように回転させます。
また、最も少ない移動数でその角度に移動します。
rotationStepCount変数に従い動かすので、先に設定する必要があります。

name type required default description
angle number yes - 目標となる角度(0 to 360)

355度に移動したあと0を指定すると355度ではなく5度の移動となります。

// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
motor.rotationStepCount = 100;
await motor.rotateToWait(90);

rotationStepCount

1回転するのに何ステップ必要かを指定します。この値はモーターによって異なります。デフォルトで100となっています。

// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
motor.rotationStepCount = 100;
await motor.rotateToWait(90);

[await] moveWait(distance: number)

指定した距離(mm)だけ移動します。
milliMeterStepCount変数に従い動かすので、先に設定する必要があります。

name type required default description
distance number yes - 移動距離(mm)
// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
motor.milliMeterStepCount = 10;
await motor.moveWait(100);
await motor.moveWait(-10);
console.log(motor.currentDistance()); // => 90

[await] moveToWait(destination: number)

はじめを0として、指定した位置(mm)に移動します。
milliMeterStepCount変数に従い動かすので、先に設定する必要があります。

name type required default description
destination number yes - 目標位置(mm)
// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
motor.milliMeterStepCount = 10;
await motor.moveWait(100);
await motor.moveToWait(-10);
console.log(motor.currentDistance()); // => -10

milliMeterStepCount

1ミリ移動するのに何ステップ必要なのかを指定します。デフォルトで1となっています。

// Javascript Example
var motor = obniz.wired("StepperMotor", {a:0, aa:1, b:2, bb:3});
motor.milliMeterStepCount = 10;
await motor.moveWait(100);
await motor.moveToWait(-10);
console.log(motor.currentDistance()); // => -10

Supported from: obniz.js 3.5.0