オリエンタルモーターのブラシレスモータユニット(BMUシリーズ)を使う

モータの選定

オリエンタルモーターの方に作りたいモノを伝え、それに適したものとして以下のブラシレスモータユニットを提案してもらった。

ブラシレスモータユニット BMUシリーズ

選定内容

www.orientalmotor.co.jp

【参考】 オリエンタルモーターの選定サポート link

オプション品

モータユニットを使うために必要なオプション品。
ユニットを動かすためには必要なので、持っていない場合は用意する。

※なにも言わないと特に購入は薦めてはくれない

電源ケーブル

ドライバの定格電圧に合わせて買う。

BMUD60-A2の定格電圧は単相100-120Vである。

→ 単相100Vの電源ケーブル(プラグ付き)を購入 CC01AC03P|オリエンタルモーター株式会社

【参考】 電源における単相と三相のちがい 電気の知識|株式会社YAMABISHI

配線用遮断器(ブレーカ)

ドライバBMUD60-A2の取扱説明書には、

一次側の配線を保護するために必ず電源側の配線に配線用遮断器を接続することが求められている(p.12)

と書かれている。
配線用遮断器とは、一般にブレーカと呼ばれるものと同じ。
過負荷や短絡などの要因で二次側の回路に異常な過電流が流れたとき、電路を開放し一次側からの電源供給を遮断する。

【参考】 配線用遮断器 wiki
電源の一次側と二次側 知恵袋

取扱説明書の中では三菱電機のNF30形が配線用遮断器として奨められているが、ドライバに合わせて極数や定格電流を選定する必要がある。

配線用遮断機の選定

取扱説明書より、ドライバ内部の保護装置の定格電流は10Aである。
その為、定格電流が10Aの遮断器を電源(コンセント)とドライバの間に挟むことで、それ以上の電流が回路に流れるのを防ぐ。

今回は単相100Vのコンセントの電源負荷の間に遮断器を挟むことが求められているため、極数は2である。

→ 選んだもの www.monotaro.com

突入電流と配線用遮断器

モータの軸を延長して回す

【2017/10/03編集中】

非専門分野・独学のまとめにつき、内容に誤りがあればご指摘いただけると助かります。
本記事内容の参照は自己責任にてお願いします。

モータの軸の延長

モータの出力軸は短いため、用途によってはカップリングを用いて軸の延長を行う。
このとき、軸が長くなるとすりこぎ運動(歳差運動)が起きやすくなる。

そのため、回転する軸をボールベアリング軸受)によって支持することで、 軸が振れないようにする。
このとき、2つの軸受を用い、離れた2点で軸を支えると安定する。

モータに加わる荷重

軸受は支えられる荷重の方向と大きさが決まっているため、モータにかかる荷重に合わせて軸受を選定する必要がある。

出力軸に負荷を取り付けてモータを回転させたとき,モータに加わる荷重は

  • 回転の径(radial)方向
  • 回転の軸(axial)方向

の成分に分解できる。
それぞれを、ラジアル荷重アキシアル荷重と呼ぶ。

軸受の種類

モータの軸を支える軸受には、大きく

  • 転がり軸受
  • 滑り軸受

の2種類が存在する。転がり軸受の方は動きが軽く、高速回転に強い。
一方すべり軸受は、シンプルな構造のため構造強度が高く、厚さが薄くなるのでコンパクト化がはかれる。

今回は、転がり軸受を用いる。

参考:https://www.igus-japan.jp/bearing_2_slide_rolling/

そして転がり軸受は、受けられる荷重の方向によって

  • ラジアル軸受
  • スラスト軸受

に分類される。これらは主に接触角によって使い分けられ、それぞれ異なる方向の荷重を支えるのに適している。
一般に接触角が45°以下では、ラジアル荷重の負荷が大きいためラジアル軸受を用いる。
接触角が45°を超えると、アキシアル荷重の負荷が大きくなるのでスラスト軸受を用いる。

要補足:接触角について

転がり軸受の選定

基本定格荷重\rm Cと等価荷重\rm P

転がり軸受が受けられる荷重の大きさは、基本定格荷重\rm Cとしてカタログに与えられている。

この定格荷重は、ラジアル軸受では基本定格ラジアル荷重\rm C_r、スラスト軸受では基本定格アキシアル荷重\rm C_aとして、軸受には一方向成分かつ一定の荷重がかかるものとして定義されている。

しかし実際の利用では、軸受にはラジアル荷重とアキシアル荷重の合成荷重がかかり、大きさも一定とは限らない。
そのため、軸受の選定の際には、発生する合成荷重を軸受に同じ寿命を与え、軸受の中心において純ラジアルあるいは純アキシアルの単一方向に作用する仮想荷重に換算する.

この仮想荷重を等価荷重\rm Pという。

ラジアル軸受の場合は純ラジアル荷重(アキシアル成分なし)、スラスト軸受の場合は純アキシアル荷重(ラジアル成分なし)として等価荷重を算出し、それぞれを等価ラジアル荷重\rm P_r等価アキシアル荷重\rm P_aという。

等価荷重への換算を行うための式や係数はカタログで与えられている。
得られた等価荷重を用いて、軸受の選定を行う。

等価荷重の計算の例

NSKのカタログより、(追記)

参考:4.4 等価荷重 http://www.ntn.co.jp/japan/products/catalog/pdf/2202_a04.pdf
寿命と選定 http://eb-cat.ds-navi.co.jp/jpn/jtekt/tech/eb/info/03/3_1.htm

水平に回転する円板による荷重

地面に対して水平に設置した円板をモータで回転させるとき、モータにかかる荷重は

  • 円板の重量によるアキシアル荷重
  • 偏心によるラジアル荷重
  • (加速度の影響?)

シャフト軸の選定

モータの出力軸を延長し、軸受によって支えられるシャフト軸は、軸受を選定したあとに決めるのがよい。
穴加工の方が棒加工よりも困難なためである。内輪と軸のはめあいを考えながら軸を選定する。

参考:はめあい(NTNhttp://www.ntn.co.jp/japan/products/catalog/pdf/2202_a07.pdf
はめあい選択の基礎/常用する寸法公差(ミスミ) https://jp.misumi-ec.com/pdf/fa/2014/p1_2287.pdf
はじめての精密工学:寸法公差・はめあい https://www.jstage.jst.go.jp/article/jjspe1986/71/3/71_3_327/_pdf

はめあいとは

一体にする穴と軸の組み合わせの関係であり、その関係には以下の3種類が存在する。

  • すきまばめ
    • 穴の寸法よりも軸の寸法が大きいゆるい組み合わせ
  • しまりばめ
    • 穴の寸法が軸の寸法よりも小さいきつい組み合わせ
  • 中間ばめ
    • 実寸法によって、すきまあるいはしまりの状態になる

これらのはめあいは、穴と軸の寸法公差を踏まえたうえで考えなければ正しく設定することができない。

寸法公差

精密加工では、機能に差し支えのない範囲の寸法の誤差は許容しなければ、時間的にもコスト的にも不利である。
そのため事前に寸法の誤差の許容範囲を定め、それをふまえた上で設計を行う。

以下の例では、基準となる寸法50.000mmを中心に、上下に0.005mmずつの誤差を許容している。
この「公差域の位置」と「寸法公差」は、公差域クラス(JIS規格)としてアルファベット数字で記述される。

項目 内容 例(mm)
基準寸法 加工の基準となる寸法 50.000
最大許容寸法 許される寸法の最大値 50.005
最小許容寸法 許される寸法の最小値 49.995
許容限界寸法 最大許容寸法 と 最小許容寸法
寸法公差 最大許容寸法 - 最小許容寸法 0.010
上の寸法許容差 最大許容寸法 - 基準寸法 0.005
下の寸法許容差 最小許容寸法 - 基準寸法 -0.005
公差域 最大許容寸法と最小許容寸法に囲まれた領域

公差域クラス

※公差域クラスは基準寸法によって異なった値を取ることに注意する。

アルファベットは公差域の位置を表し、後ろの数字はIT基本公差に則って公差域の幅を表している。
軸の公差域クラスは小文字、穴の公差域クラスは大文字のアルファベットで記述される。

たとえば基準寸法が10mmのとき、

  • h7の軸の寸法許容差は上が0μm、下が15μm
  • f7の軸の寸法許容差は上が-13μm、下が-28μm

である。公差域の位置は異なるが、幅はどちらも15μmとなっている。
ここでIT基本公差の表を見ると、基準寸法が10mmのとき、公差等級の数字7が示す基本公差の値が15μmであることが確認できる。

軸の公差域クラス

f:id:tyokota_0529:20171004202114p:plain
(ミスミの技術資料より引用)

穴の公差域クラス

f:id:tyokota_0529:20171004202748p:plain
(ミスミの技術資料より引用)

穴と軸のはめあいの例

たとえば基準寸法を10mmとし、公差域がh7の軸とH7の穴のはめあいを考えたとき、

  • 軸:上の寸法許容差が0μm、下の寸法許容差が-15μm
  • 穴:上の寸法許容差が+15μm、下の寸法許容差が0μm

である。このとき、穴に軸を通した際には最小で0μm、最大で30μmのすきまが生じ、しまりの状態になることはない。
よって、h7とH7のはめあいはすきまばめであることがわかる。

f:id:tyokota_0529:20171004205347p:plain
(ミスミの技術資料より引用)

はめあいの決定

実際に軸受を使う際は、軸を内輪の穴に通し、外輪をハウジングの穴に固定する。
このとき、軸と内輪/外輪とハウジングをそれぞれ「すきまばめ」にするのか「しまりばめ」にするのかは、回転の区分と荷重の性質によって決定する。

静止荷重と回転荷重

内輪・外輪の各軌道輪にかかる相対的な荷重について考えることで、穴と軸のはめあいが決定できる。

  • 軌道輪に回転荷重が作用する場合、しまりばめにする必要がある。
  • 軌道輪に静止荷重が作用する場合、すきまばめにすることができる。

例えば

内輪の軸に取り付けられた不釣り合いの荷重が軸と共に回転するとき、

  • 荷重は軸・内輪とともに回転するため、内輪にかかる荷重は相対的に静止している
  • 静止している外輪に沿って荷重を持った内輪が回転するため、外輪にかかる荷重は回転している

とみなすことができる。よってこのときの荷重の性質は内輪静止荷重かつ外輪回転荷重である。

f:id:tyokota_0529:20170929171455p:plain
NTN技術資料より引用)

ラジアル軸受のはめあいの一般基準

上記の荷重の性質によって決まるはめあいは、実際には更に細かい条件に応じてしまり・ゆるみの調整することが奨められている。

以下に、ラジアル軸受に対して常用される軸の公差域クラスの表を示す。
荷重の大きさ軸の設置条件、または荷重の方向によって、異なる程度のしまり・ゆるみが示されている。

ただし、以下の表のはめあいにおける内輪寸法の許容差は、(H7のような)公差域クラスで考えられていないことに注意する。

f:id:tyokota_0529:20171005050305p:plain
NTN技術資料より引用)

軸受の等級

ラジアル軸受の内輪寸法の許容差は、上述した穴の公差域クラスでなく、等級やその他の手法で表されることがある。

NTNの軸受はJISの等級で分類され、この等級は0級が最も一般的である。
等級における穴の寸法の許容差は(平面内)平均内径の寸法差として表され、0級の場合上が0μm,下が-8μmである。

等級による軸受の精度は以下の資料の中で示されている。

軸受の精度(NTN)

等級における内輪の寸法差と、その等級と軸の公差域クラスとのはめあいの関係は以下の表で示されている。

f:id:tyokota_0529:20171010093343p:plain
NTN技術資料より引用)

旭精工の軸受ユニットの場合、その精度は以下の表で示される。

f:id:tyokota_0529:20171010094831p:plain:w300
(旭精工の技術資料より引用)

また、旭精工は上記の軸受ユニットの取扱いとして、以下の資料内で推奨する軸の寸法許容差を示している。

 軸受の取扱い(旭精工)

L6470でステッピングモータを動かす

随時更新中(2017.07.30 )

使ったもの

バイポーラ ステッピングモーター ST-42BYH1004

f:id:tyokota_0529:20170616191039p:plain:w300

バイポーラ ステッピングモーター ST−42BYH1004: パーツ一般 秋月電子通商 電子部品 ネット通販

主な仕様

項目 詳細
ステータ バイポーラタイプ
相数
基本ステップ角 0.9度±5%
1回転ステップ数 400
絶縁抵抗 100MΩ(500VDC
コイル抵抗 5.0±10%Ω/相
入力定格電圧 5V
定格電流 1.0A/相
静止トルク 4.4kgf・cm
重量 0.34kg
注意 軸を回さない。感電する

配線

配線
A(A相) Black
C(_A相) Green
B(B相) Red
D(_B相) Blue

L6470使用 ステッピングモータードライブキット

秋月電子で購入

f:id:tyokota_0529:20170620034854p:plain:w300

L6470使用 ステッピングモータードライブキット: 組立キット 秋月電子通商 電子部品 ネット通販

参考資料

SPI通信

L6470

(L6480の動かし方 [メモ][開発] ステッピングモータードライバL6470とL6480 ヤメ記者SEの徒然なるままに…/ウェブリブログ)

L6470でステッピングモータを動かす

ピンの役割

  • 制御はSPI通信によってマイコンから行われる

    • Master: Arduin UNO R3

    • Slave: L6470 Driver

Adruino側

SPI通信のためのピン

ピン番号 名称 役割
D11 MOSI
(Master Out Slave In)
マスタからスレーブへデータを送るライン
D12 MISO
(Master In Slave Out)
スレーブからマスタへデータを送るライン
D13 SCK
(Serial Clock, Output)
データ転送を同期させるためマスタより生成されるクロック信号
D10 SS
(Slave Serect pin, Output)
デジタル信号を渡すことでスレーブを選択する.
LOWが渡されたスレーブはマスタとの通信をおこなう.
HIGHが渡されたときマスタからのデータを無視する.

L6470側

SPI通信のためのピン

ピン番号 名称 分類
5 SDO (SPI Data Out) Logic output
6 CK (SPI Clock) Logic input
7 SDI (SPI Data In) Logic input
8 #CS (SPI Chip Serect, = Slave Srect) Logic input, 負論理

Arduinoとの接続

  • D11 (MOSI) <-> 7 (SDI)
  • D12 (MISO) <-> 5 (SDO)
  • D13 (SCK) <-> 6 (CK)
  • D10 (SS) <-> 8 (#CS)

その他のピン

  • 必要に応じて機能を足したいときに利用するものが多い
ピン番号 名称 分類 役割
1 #BUSY/SYNC Open Drain Output Busy Frag Mode(SYNC_EN bitがLOW(0)のとき, default)
・デフォルトの状態では,コマンド実行中はLOWになる.
・一定速度コマンド,絶対位置指定コマンド,移動コマンドが実行中の時、ピン出力がLOW
・コマンドが実行されたとき(目標速度、目標座標に到達),このBUSYピンは解放される

Synchronization Signal Mode(SYNC_EN bitがHIGH(1)のとき)
・このモードでのステップクロック信号は、SYNC_SELとSTEP_SELパラメータの組み合わせに応じて出力される
2 FRAG
(Status Frag)
Open Drain Output アラーム発生時にFRAGピンをGNDに接続する
(内部のオープンドレイントランジスタによる)
3 GND (Ground)
4 EXT-VDD
(External-VDD)
Power ロジック出力ピンの電圧範囲を設定.
VDDpinは内部でVregまたは3.3V電源に接続されていない
9 STCK
(Step-clock Input)
Logic Input Step-clock mode時に入力された信号によって
モータの動きが定義される
10 #STBY/#RST
(Stepby and Reset)
Logic Input LOW logic levelでlogicをリセット,デバイスをスタンバイモードに.使わない場合はVDDにつなげておく

ロジック電源の設定

  • L6470はモータを動かす電源の他に,MCUを動かすロジック電源が必要である

  • ジャンパピンの挿入によって,MCU(Micro Control Unit)の電源電圧の供給方法を設定する

    • MCU3.3~5Vの間で動作する
  • この電圧は,L6470から出力され,マイコンへ入力されるデジタル信号の信号電圧にもなる

  • L6470は内部のレギュレータによって,モータ電源から3Vの電圧をMCUに回すこともできる

    • しかし,Arduino5V駆動であるため,3Vで駆動させることは好ましくない

    • Arduinoの5VピンからEXT-VDDピンに電圧を供給してMCUを駆動させる


f:id:tyokota_0529:20170620112724p:plain:w500

SPIの設定

  • L6470を使う際には,初めにコマンドを送るためのSPI通信の設定を行う

    • SPI.begin()

    • SPI.setBitOrder( MSBFIRST )

    • SPI.setDataMode( SPI_MODE3 )

  • それに加え,L6470ではシフトするコマンドを8ビットごとに区切る必要がある

Bit Order

  • SPI.transfer()で送信する1バイト分の情報を,左端(最上位)と右端(最下位)のどちらから送信するかを決める

MSB (Most Significant Bit)とLSB (Most Significant Bit)

  • 2進数で表された情報において,

    • MSB: Most Significant Bit First = 最上位ビット

    • LSB: Least Significant Bit First = 最下位ビット

  • を指す(ここでは8bit=1byte)

7 6 5 4 3 2 1 0
MSB LSB

SPI.setBitOrder()の命令

  • SPI.setBitOrder( MSBFIRST )

    • 最上位ビット(MSB)から順にデータを送信する

    • 7→6→5→4→3→2→1→0

  • SPI.setBitOrder( LSBFIRST )

    • 最下位ビット(LSB)から順にデータを送信する

    • 0→1→2→3→4→5→6→7

Data Mode

  • クロック位相(clock phase)とクロック極性(clock polarity)という2つの要素を決定

    • クロック位相:シフトされたデータを読み取るタイミング

      • クロック信号の 立ち下がりエッジ or 立ち上がりエッジ
    • クロック極性:アイドリング(待機)状態を示すクロック信号の状態

      • HIGH状態 or LOW状態

SPI.setDataMode()の命令

  • SPI.getDataMode( SPI_MODE3 )

    • クロック信号の立ち上がりで送信(シフト)されたデータの読み取りを行う

    • また,クロック信号がHIGHの間をアイドリング状態とする

その他のSPI_MODE
立ち下がりエッジで読み取り 立ち上がりエッジで読み取り
LOW状態でアイドリング SPI_MODE0 SPI_MODE1
HIGH状態でアイドリング SPI_MODE2 SPI_MODE3

SPIの設定まとめ

f:id:tyokota_0529:20170622050557p:plain:w900

内部レジスタ

  • L6470には,モータの制御に関するパラメータが設定できる内部レジスタ(記憶回路)が多く存在する

    • レジスタは可変長,22ビットや4ビット等がある.各レジスタの内部アドレスは0x01~0x19まで

    • レジスタのパラメータには初期設定(デフォルト値)が決まっており,電源投入直後にはデフォルト値が設定される

    • 大体はデフォルトの値で動作する.変更が必要な場合もあり

  • レジスタの値を設定した後に,コマンド(回転・ストップ等)を送ってモータを制御する


f:id:tyokota_0529:20170623040712p:plain

コマンドの送り方

  • MSBファーストで8ビットずつ

  • 8ビットごとに,CSのHIGH->LOWを行う必要がある

SPI.begin()
SPI.setBitOrder( MSBFIRST )
SPI.setDataMode( SPI_MODE3 )

void L6470_send( unsigned char add_or_val ){
        while( !digitalRead(PIN_BUSY) ){ // BUSY(LOW状態)が解除されるまで待機する
        }
        digitalWrite( PIN_SPI_SS, LOW);
        SPI.transfer( add_or_val ); //1バイト(8ビット)のデータを送信
        digitalWrite( PIN_SPI_SS, HIGH);
}

SetParam()によるレジスタの値の設定

Run()による定速回転

コマンド:Run( DIR, Spd )

  • 回転方向DIR(Direction)と,目標速度Spd(Speed)を指定してステッピングモータを定速回転させる

  • 32ビットの情報を4回に分けて送信する

f:id:tyokota_0529:20170630200712p:plain

初めの8ビット

  • 定速回転のコマンド+回転方向の指定

Command binary code

7 6 5 4 3 2 1 0
0 1 0 1 0 0 0 DIR
16進数
定速正回転の場合(DIR = 1) 定速負回転の場合(DIR = 0)
2進数 01010001 01010000
16進数 0x51 0x50

残りの24ビット

  • 回転速度の指定

    • Speedレジスタ(現在のモータ速度を格納しているレジスタ)内のデータと同じ表現形式

    • 実際にはMAX_SPEEDレジスタの値より小さく,MIN_SPEEDレジスタより大きい値である必要がある

      • これが満たされない場合,MAX(MIN)_SPEEDの値で実行される
    • 目標速度に達するまでBUSY状態

モータ速度の表現

  • Speed,MAX_SPEED,MIN_SPEEDレジスタでほぼ同じ表現が用いられる

  • レジスタにはステップ/動作クロックで表された値が格納されている

  • 1秒あたりのステップ数(ステップ/秒)には,それぞれ以下の式で変換される

Speedレジスタ(20ビット)

\rm\large\displaystyle[ステップ/秒]=\frac{SPEED\times2^{-28}}{動作クロック}

  • 初期値は0(0ステップ/動作クロック,0ステップ/秒)

  • 動作クロックは250ns

MAX_SPEEDレジスタ(10ビット)

\rm\large\displaystyle[ステップ/秒]=\frac{SPEED\times2^{-18}}{動作クロック}

  • 初期値は041

  • 動作クロックは250ns

ステップ/動作クロックからステップ/秒への変換

\rm\displaystyle 041 → 65(step/tick)

  • \rm\displaystyle Max_{init} [ step/s ] = \frac{ 65 \times 2^{-18}}{250 \times 10^{-9}}

  • \rm\displaystyle Max_{init} = 991.82 [ step/s ]

MAX_SPEEDレジスタの最大値

  • 初期値041は7ビット

  • 10ビットの最大値1111111111は0x3FF, 1023

  • \rm\displaystyle Max_{max} [ step/s ] = \frac{ 1023 \times 2^{-18}}{250 \times 10^{-9}}

  • \rm\displaystyle Max_{max} = 155609.74 [ step/s ]

MIN_SPEEDレジスタ(13ビット)

\rm\large\displaystyle[ステップ/秒]=\frac{SPEED\times2^{-24}}{動作クロック}

  • 初期値は000(0ステップ/動作クロック,0ステップ/秒)

  • 動作クロックは250ns

バイスの初期化

  • Arduinoのvoid setup()内で,モータ駆動する前に以下の内容を実行する.
void L6470_resetDevice(){
   // nop命令
   L6470_send(0x00);
   L6470_send(0x00);        
   L6470_send(0x00);        
   L6470_send(0x00);
  // ResetDevice
   L6470_send(0xc0);
}
  • nop命令を4回(4byte分)送った後に,デバイスをリセットする(ResetDeviceコマンドを送る).

    • これは,L6470に一度に送る情報が最大で4byteであるため
  • nop命令を4回送ることで,前のコマンドを確実に終了させてからデバイスをリセットする

ResetDevice (Application commands)

  • L6470デバイスを電源投入後の状態にリセットする

    • パラメータの初期化等

Command binary code

7 6 5 4 3 2 1 0
1 1 0 0 0 0 0 0
16進数
  • 0xc0

    • SPI.transfer(0xc0)で初期化

NOP (Application commands)

  • Nothing is performed

    • 何もしない

Command binary code

7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0
16進数
  • 0x00

    • SPI.transfer(0x00)で何もしない命令