STEP400/STEP800
概要
STEP400/STEP800はEthernet経由で多軸制御が可能なステッピングモータドライバです。両機種ともMCUとして Arduino Zero を使用しています。モータドライバとしてSTEP400はSTMicroelectronicsの PowerSTEP01 、STEP800は同社の L6470 で、多くの機能はこれらのドライバICの機能を継承したものです。データシートに一度目を通しておくと、機能やコマンドが理解しやすいと思います。
STEP400/800の両者は同じコマンド体系を持っています。特別な注記がない場合は両方の機種に共通のコマンドです。いくつかの例外があり、それらは STEP400のみ STEP800 のみと表記されています。
チュートリアル
サンプルファイル
STEP400とSTEP800はどちらも Open Sound Control (OSC) プロトコル を用いて通信を行います。python-step-series 以外にも、数多くのアプリケーションから制御が可能です。いくつかの環境のサンプルファイルを準備しています。
Processing (thanks @yuskegoto)
openFrameworks (thanks @niimi)
Touch Designer (thanks @loveandsheep, @yuskegoto)
Node-RED (thanks @yuskegoto)
接続
通信
STEP400/800ともEthernetを用いて通信します。すなわち、制御に使うPCにはEthernetポートまたはUSB-Ethernet変換などが必要です。このチュートリアルでは、PCと本デバイスを直接一対一で接続していると仮定して進めます。もちろん、ネットワークスイッチ(スイッチングハブ)を経由して接続することもできます。
まずEthernetケーブルを接続してください。
警告
ネットワークスイッチが、ルータではなく本当にスイッチかどうか確認してください。例えばWiFiルータにはルータポートとスイッチポートがあり、ルータポートは挙動がスイッチと異なるため、PC, STEPシリーズとも必ずスイッチポートに接続します。
注釈
この時点では電源を接続しないでください。後ほど電源を接続する段になりますが、その時点で電源がオンになっていないことを確認してください。
ステッピングモータ
本デバイスで使用できるのは、「バイポーラ型」のステッピングモータです。入手しやすいモータの例としては、MERCURY MOTORの SM-42BYG011-25 があります。使うモータによって電源電圧や各種設定が変わってきますが、このチュートリアルでは SM-42BYG011-25 を使用していると仮定して進めます。このモータは例えば下記の場所で入手できます。
このモータの データシート はこちらにあります。 これをみると、コイルのペアは 赤と緑、黄と青、になっていることがわかります。
ターミナルブロックへのケーブルの接続は以下のようになります:
いくつかのモータについて、設定値を計算して 設定ファイル として公開しています。
電源
STEP400とSTEP800では電源入力電圧の定格が異なっています。両機種とも2種類の電源入力端子を備えています。USB-C端子はUSB通信用で、USBからモータ電源を供給することはできません。2つの電源入力端子(下図4番と5番)両方へ給電することは非常に危険ですので絶対に行わないでください。
注釈
繰り返しになりますが、電源は線を接続するだけで、まだ実際にオンにしないでください。
番号 |
説明 |
|---|---|
1 |
電磁ブレーキ基板用端子 (STEP400) |
2 |
Ethernet端子 |
3 |
USB-C端子 |
4 |
電源用DCジャック |
5 |
電源用ねじ式ターミナル |
警告
4番と5番を両方接続しないでください。製品または電源を破損する可能性があります。
上で見たように、各機種にはそれぞれ電源入力電圧の定格範囲があり、また端子ごとにも定格があります。
機種 |
基板自体の定格 |
DCジャック |
ねじ式端子 |
|---|---|---|---|
STEP400 |
12V-76V @ 20A |
24V @ 5A |
76V @ 20A |
STEP800 |
9V-36V @ 16A |
24V @ 5A |
36V @ 16A |
電流値は各モータの最大相電流を合計したもので、電源の最大定格を表したものではありません。詳しくは 電流容量 を参照してください。STEP400の最大相電流は5A, STEP800の最大相電流は2Aです。この上限値に収まるモータを選定してください。
DCジャック
DCジャックは以下の仕様になっています。
外径5.5mm
内径2.1mm
センタープラス
ねじ式端子
ねじ式ターミナルは以下の仕様になっています。
左側:マイナス、右側:プラス
ねじ径M3
確実な接続のために、
NICHIFU TMEX1.25-3Nなどの専用圧着端子を使用してください。
電源とモータの定格の関係
電流 vs 電圧
ステッピングモータの内部の巻線は、インダクタンスとして振る舞います。インダクタンスに電圧をかけてもすぐには電流が流れずに、時間をかけて電流が立ち上がります。ステッピングモータのように、ステップごとにON/OFFを繰り返す場合は、回転数が上がってくるとON/OFFの周期が短くなり、十分に電流が流れなくなってきます。ステッピングモータのトルクは、電流にほぼ比例していますので、高速に回転すると最大トルクが低下します。
トレードオフを克服する
このインダクタンスに打ち勝ってモータに電流を流し込むには、できるだけ高い電圧の電源を使う必要があります。モータのデータシートを見ると、定格電圧として非常に低い数値が書かれていることがありますが、モータを回転させるとその電圧で必要な電流を流すことはできません。実際にはその何倍もの電圧が必要です。ただどちらのボードにも最大定格電圧があるので、電源を選ぶ際にはそれを念頭に置いてください。次のグラフは、ST社のデータシートから抜粋した電圧と電流の関係の例です。高い電圧が高い電流(別名トルク)を供給し、高い最高速度が得られるという相関関係に注目してください。
実際に必要な電圧はモータの定格や必要な回転速さ、必要なトルクよって大きく変わりますが、大雑把には以下のような電圧になるでしょう。
NEMA17以下: 24V
NEMA23以上: 48V, 高速回転の場合は72V
すなわちNEMA23サイズ以上の場合はSTEP800で駆動するのは難しいかもしれません。 とは言ってもモータによっては小さなサイズでも高トルクが出せたり、逆に大きなサイズでも電流があまり流せないものもありますので、 必ずモータの定格を確認することが重要です 。
STEP400についてはDC12Vでも動作しますが、DC-DCコンバータの動作電圧の下限に当たるため、モータを回した瞬間の突入電流によって電源装置からの配線で電圧降下が発生し、STEP400がリセットされてしまうことがあります。小型のモータを低トルクで回すような場合以外はおすすめしません。
24Vの電源を2台直列に接続し、STEP400に48Vを供給しています。
電流容量
電源が供給できる電流も重要な要素です。脱調した瞬間に大きな電流が流れることがあり、電流容量に余裕がないと、電源側で保護機能が働いて電源が落ちてしまうことがあります。小型のモータを低速で回している場合は数アンペアの電流容量でも回せますが、大型モータを動かす場合や高速回転させる場合は10Aから20Aといった容量が必要なことが多いです。モータの個数や動かし方、電源装置側の保護回路の仕様などによって変化するため、できる限り余裕をもって選定してください。
ネットワーク接続
設定ツール
両製品ともmicroSDカードを差し込めるようになっています。設定ファイルを書き込んだmicroSDカードを本デバイスに差し込んで起動すると、起動時にファイルに書かれた設定で初期化をすることができます。 設定ファイルは 設定ツール (Config Tool) を使って書き出せます。microSDカードを差し込まずに起動した場合は、ファームウェアに書かれた初期値が使用されます。設定ツールはウェブページですので、ブラウザで動作します。
このチュートリアルでは初期設定のままで使用しますので、microSDカードは使いません。
注釈
もし本デバイスをつないだスイッチングハブが既存のVLANに接続している場合は、設定ツールを使って本デバイスのネットワーク設定を事前に行う必要があります。
DIPスイッチ
基板上のIDスイッチ(8桁のDIPスイッチ)は1に設定してください。すなわち1の桁のみON, ほかの桁はすべてOFFの状態です。向かって左側が小さい桁になっていることに注意してください。この状態でのネットワーク設定は以下のようになります。
項目 |
設定値 |
説明 |
|---|---|---|
IPアドレス |
10.0.0.101 |
本デバイスのIPアドレス |
サーバのアドレス |
10.0.0.10 |
サーバのIPアドレス(あなたのPCなど) |
Local Port |
50000 |
本デバイスが受信するポート |
Server Port |
50101 |
本デバイスが送信するポート |
DIPスイッチが設定された状態のSTEP400
これでモータ、電源、LANケーブルが接続され、DIPスイッチも設定された状態になりました。ここで電源を投入します。基板裏側には高い電圧が印加されたピンが出ていますので、電気を通しやすい素材の上に基板を直接置くと、デバイスを損傷したり、あなた自身がけがをする可能性があります。必ず電気を通さない素材の上に置くか、基板にスペーサを取り付けて使用してください。
PCの設定
上でみたように、本デバイスはあなたのPC (server) があるIPアドレス上にあることを想定しています。必要な場合はPCに固定IPアドレスを設定してください。
項目 |
設定値 |
|---|---|
IPアドレス |
10.0.0.10 |
サブネットマスク |
255.255.255.0 |
DNS |
<空欄のまま> |
デフォルト・ゲートウェイ |
<空欄のまま> |
基本的なコマンドを試す
通信の確認
ここまでうまく設定できていれば、ターミナル(Windowsの場合はコマンドプロンプト)から ping 10.0.0.101 を実行して接続を確認できると思います。
ここから先は、 python-step-series を使うか、あるいは サンプルファイル にある各プログラミング環境でのサンプルを使うかによって、実際のコマンドの送り方は全く異なります。このチュートリアルでは、各OSCコマンドに加えて python-step-series のコードも示しています。
本デバイスに設定コマンドを送る前に、まずメッセージの返信先アドレスを教えるコマンドである /setDestIp を送る必要があります。このコマンドが届くまでは、本デバイス側からはOSCメッセージの返送を行いません (/booted を除く)。これは存在しないあて先にOSCメッセージを送り続けると本デバイスの動作が不安定になることがあるためです。/setDestIp が問題なく受信されると、/destIp octet1 octet2 octet3 octet4 isNewDestIp という応答があるはずです。 octed<N> は制御PCのIPアドレスの各桁に対応し、 isNewDestIp はdestIpが変更されたかどうかを示します。変更されていると 1, すでに同じアドレスが設定されていた場合は 0 です。
python-step-series でのコードは以下のようになります。
from stepseries import commands
from stepseries.step400 import STEP400
device = STEP400(1, "10.0.0.101", 50000, "0.0.0.0", 50101)
device.on(None, lambda x: print(x))
device.set(commands.SetDestIP())
>>> DestIP(address="/destIp", destIp0="10", destIp1="0", destIp2="0", destIp3="10")
これでメッセージをやり取りする準備が整いました。
動かしてみる
さっそく、指定速度でモータを回すコマンド /run (int)motorID (float)speed を送ってみましょう。
motorID とは、どのモータを動かすかを本デバイスの基板に印刷されている番号で指定するものです。255 を指定すると、すべてのモータへコマンドを送ることができます。これは motorID を指定するほとんどのコマンドで使用できます。
speed はモータの回転速さと向きを指定します。指定できる範囲は -15625.0 - 15625.0 で、単位は [step/s] です。もし1周が200stepのモータを使っているとすると、1秒で1回転させるには 200.0 を指定します。マイナスの値を指定すると逆向きに回ります。
例えば SM-42BYG011-25 を 1 RPS (1秒に1回転)で動かすには /run 1 200. というOSCメッセージになります。
# For python-step-series
device.set(commands.Run(1, 200))
無事回ったでしょうか?何かモータの様子が変でとりあえず停止させたい場合は、/run のspeedに0.0を指定するか、すべてのモータを停止する /hardHiZ 255 というメッセージを送ってください。
# For python-step-series
device.set(commands.HardHiZ(255))
警告
モータ回転中にモータ配線を取り外さないでください。基板を痛める可能性があります。
問題なく回った方、おめでとうございます!でも多くの場合は異音がしたり、大きく振動したりしてきれいに回らなかったのではないかと思います。モータに合わせたパラメータの調整が必要ですので、引き続き設定していきます。
KVALの設定
きれいに回らない原因の多くは駆動電圧が不足していることによるもの(高すぎてきれいに回らないこともあります)で、KVALレジスタで調整します。これはモータを駆動する電圧を0から255の数値で指定するもので、0にすると0V(回りません)、255にすると電源電圧のほぼそのままがモータ駆動電圧になります。 例えば24Vの電源を使っていて、KVALに128を指定した場合は、モータは約12Vで駆動されることになります。
KVALは4種類あり、それぞれ個別の役割があります。
項目 |
説明 |
初期値 |
|---|---|---|
holdKVAL |
モータ停止中のKVAL |
0 |
runKVAL |
モータが一定速で回転中のKVAL |
16 |
accKVAL |
モータが加速中のKVAL |
16 |
decKVAL |
モータが減速中のKVAL |
16 |
モータを一定速で回転させながら、KVAL_RUNを調整してみましょう。 /run 1 200 を送ってモータを回転させます。
# For python-step-series
device.set(commands.Run(1, 200))
例えば /setRunKval というコマンドで runKVAL だけ設定することもできますが、ここでは4つまとめて設定できるメッセージ /setKval (int)motorID (int)holdKVAL (int)runKVAL (int)accKVAL (int)setDecKVAL を使用してみます。まず停止中のKVALは0, 加速、減速については一定速のKVALと同じ値に設定しながら、徐々に数値を増やしてみます。/setKval 1 0 24 24 24 というメッセージを送ってください。
# For python-step-series
device.set(commands.SetKval(1, 0, 24, 24, 24))
このOSCメッセージを送ると、1番目のモータのKVALを、停止時は0, それ以外は24(電源電圧の約9%)に設定します。ここから徐々に数値を /setKval 1 0 32 32 32, ``/setKval 1 0 40 40 40``というように上げていくと、どこかで静かに回り始めるはずです。
# For python-step-series
device.set(commands.SetKval(1, 0, 32, 32, 32))
# then
device.set(commands.SetKval(1, 0, 40, 40, 40))
# etc...
KVALを上げるとトルクが上がっていきますが、モータの発熱が大きくなったり、振動が再び大きくなってきたりしますので、負荷に合わせて調整してください。
Tip
リマインド:いくつかのモータについては各設定値を計算済みの 設定ファイル を準備しています。
その他の接続と設定
センサとスイッチ
STEP400/800の各軸にはHOME端子があり、センサやスイッチを接続できます。STEP400ではそれに加えてLIMIT端子もあります。各端子の役割は以下のようになっています。
HOME
原点検出用入力端子です。ステッピングモータは自分の位置を検出することができないため、別途センサを使って起動時に原点復帰の動作が必要です。 モータドライバICに直接接続されていて、ドライバでの座標管理に使用することができます。入力端子はドライバIC内部で3.3Vでプルアップされています。
LIMIT
STEP400のみ
原点とは別に、動作範囲のリミットセンサなどに使用可能な端子です。設定でモータを停止する機能を持たせることもできますが、全く独立して使用することもできます。 入力端子は3.3Vにプルアップされています。
接続端子
JST(日本圧着端子製造株式会社)のXAシリーズコネクタです。適合するコネクタは下記を参照してください。
項目 |
品名 |
説明 |
|---|---|---|
(参考)基板ポスト |
B03B-XASK-1 (LF)(SN) |
基板上へ実装されているレセプタクル |
ハウジング |
XAP-03V-1 |
差し込むコネクタ部本体 |
コンタクト |
BXA-001T-P0.6 |
ハウジングへ挿入する接続部 |
Tip
端子を圧着済みのケーブルを販売しています: https://ponoor.com/products/sensor-cable/
ピン配置
ピン配置はHOMEとLIMIT共通です。
ピン番号 |
機能 |
|---|---|
1 |
5V出力 |
2 |
スイッチ・センサ入力 |
3 |
GND |
Tip
ピン番号はコネクタのデータシートで確認できますが、各ピンの名称は基板裏側に印刷されています。
ドライバ側は、入力端子がHigh(3.3v)からLow(0V)に遷移したタイミングで反応しますので、通常時に接点が開いている(ノーマルオープン)状態になるように機構とセンサ(またはスイッチ)を組み合わせる必要があります。
ネットワークとDIPスイッチの設定
DIPスイッチの設定
基板上のDIPスイッチを用いてIDを設定します。IDはOSCメッセージの返答に使われるほか、IPアドレスや送信ポート番号にも反映されます。 IDは2進数で設定します。DIPスイッチによる2進数での設定はこちらが参考になります。ディップスイッチによるチャンネル設定
ネットワークの設定
初期設定
項目 |
初期値 |
|---|---|
IPアドレス |
10.0.0.100+ID |
MACアドレス |
0x60, 0x95, 0xCE, 0x10, 0x02, 0x00+ID |
サーバIPアドレス(制御PCのアドレス) |
10.0.0.10 |
Local Port |
50000 |
サーバ側受信ポート |
50100+ID |
IPアドレスとサーバ側受信ポート
初期状態では、IPアドレスの最終バイトと、OSC送信ポートにIDが加算されるようになっています。 これによって、同じファームウェアと設定ファイルを用いて複数のデバイスを制御できるようになります。OSC送信ポートについては、受信側でメッセージの送信元IPアドレスが取り出せる場合は、IDを加算せずに同一のポート番号へ送信するようにして構いません。
これらの機能は、microSDカードによる初期設定を行うことでオフにできます。
MACアドレス
本デバイスには個別のMACアドレスを割り振っていますが、初期値は上記の通りになっています。このアドレスは弊社で確保しているMACアドレスのうち、テスト用に社内で割り振っているものです。各デバイスに割り振られたMACアドレスは、基板裏面のシールで確認できます。上のPから始める番号はシリアル番号で、その下の段の12桁の16進数がMACアドレスです。 割り振られたMACアドレスを使用するには、設定ツール を用いて設定ファイルを作成し、microSDカードから読み込ませてください。
Tip
その他さまざまな設定をmicroSDカードを使用して行うことができます。 microSDカードを用いた設定 を参照してください。
機能解説
このセクションではSTEPシリーズの各機能について詳しく見ていきます。実際に送信するコマンドについては コマンドリファレンス を参照してください。
電圧モードと電流モード
ステッピングモータの制御方式には定電圧制御( 電圧モード )と定電流制御( 電流モード )の2種のモードがあり、STEP800は電圧モード、STEP400では電圧モードと電流モードの両方を切り替えて使うことができます。これらの制御モードの違いについてはSTMicroelectronics社の プレゼンテーション資料 があり、わかりやすくまとめられています。
実際に使う側にとっての違いを簡単にまとめると、以下の通りです。
電圧モードは静かに滑らかに回るが、低速でしか回せない。
電流モードは音がうるさいが、高速まで回せる。
このデモ映像では、各モードの動作の違いをとらえています。
まず最初は電圧モードで動かしています。回転数が800step/secを超えたあたりからうまく回らずに振動が発生して、1,400step/secくらいで脱調して完全に停止してしまいます。振動が発生するまでは静かに回りますが、この映像では微細な音もとらえるためにモータ本体にマイクを張り付けています。
次に電流モードに切り替えて動かしています。動作音は大きいですが、高速域まで回転できます。今回のセッティングでは11,000step/sec以上まで回転できました。
KVALとTVAL
電圧モードの場合は KVAL レジスタで電圧を制御して, 電流モードの場合は TVAL レジスタで電流を制御します。それらはドライバ内部では物理的に同じレジスタですが、モードを切り替えた際に意図しない値になることを避けるために、ファームウェアでそれぞれ別の値として保持しておいて、モード切替時に書き換えています。
電圧モードの設定
STEP400/STEP800の電圧モードでは、KVALというレジスタを使って、電源電圧の何パーセントをモータに印加するかを指定できます。 また高い電圧の電源を使った場合、低速で回っているときには必要以上の電流が流れてしまうことがあります。この電流の不均衡を調整するために、低速回転時には相対的に印加電圧を下げて、回転数が大きくなると印加電圧を上げる補正を行うためのレジスタ群があります。 これらのレジスタ値の算出方法はSTMicroelectronicsの アプリケーションノート に記載されています。これらのレジスタ値は /setBemfParam コマンドで設定できるほか、 設定ツール からも設定できます。
いくつかのモータについては、データシートの数値と実測した数値をもとにレジスタの値を算出し、 設定ファイル を公開しています。モータの数は限られていますが、徐々に拡充していきたいと思います。リストにないモータを使用していて、モータがちゃんと動くパラメータを割り出したものがありましたら、設定ファイルを フォーラム で共有いただけると幸いです!
電流モードの設定
STEP400で利用可能な電流モードでは、TVALというレジスタを使って目標値となる電流値を設定します。STEP400では78mA刻みで5Aまで設定できます。高速に回転させているときに目標の電流を流すにはやはり高い電圧の電源が必要です。PowerSTEP01の本来の能力は10Aまで制御可能ですが、STEP400では電流検出抵抗の定格電力の制限で5Aが上限です。相電流が5Aとなるとかなり強いトルクで、少しのミスが大きな危険につながります。このような状況では産業用ドライバを使用するのが良いと思います。
モードの切替方法
各モードに切り替える場合は以下のコマンドを使用します。
/setVoltageMode - 電圧モードに切り替える
/setCurrentMode - 電流モードに切り替える
切り替える前に、当該モータがハイ・インピーダンス状態になっている必要があります。例えばモータ1を電流モードに切り替える場合に送るコマンドは以下の順になります。
/hardHiZ 1/setCurrentMode 1
電流制御ではマイクロステッピングモードは1/16までしか使えませんので、それより小さい値になっていた場合は強制的に1/16に切り替わります。マイクロステッピングモードが切り替わると、座標体系も変化します。例えば1周200stepのモータでは、1/128マイクロステッピングモードでは1周は200x128=25600stepですが、1/16マイクロステッピングモードでは200x16=3200stepになります。
スピードプロファイル
概要
スピードプロファイルとは、モータ動作に先立ち、あらかじめ設定しておく動作の加速度(acc)、減速度(dec)、最大速さ(maxSpeed)です。 これらは以下の要素によって値の範囲が変化します。
モータの仕様
電源電圧
負荷
電圧制御か、電流制御か
どの値が適しているか、どこまで大きくできるか、というのは実際の環境で確かめながらトライ&エラーで値を設定をしていく必要があります。
設定コマンド
/setSpeedProfile コマンドで、上記3つの値を設定できます。acc, dec はモータが停止していないと変更できませんが、 maxSpeedは常時変更が可能です。
/setMinSpeed によって最低速さを設定することも可能です。これは実際の使用時に使うことはほぼありませんが、この速さは原点復帰時の /releaseSw の速さに適用されます。
モータ動作の種類
一定速運転
/run コマンドはあらかじめ設定されたスピードプロファイルの加速度・減速度で指定された速度へ到達し、その後一定速を維持するコマンドです。速度に0を指定するか、停止コマンドを送るまで回り続けます。指定できる速度の範囲は、スピードプロファイルの最大速さに制限されます。加速中と減速中はBUSY状態になります。
そのほかにも /goUntil や /releaseSw なども一定速運転の一種です。
位置決め運転
指定された位置へ向かって、スピードプロファイルに従って台形運転を行います。すなわち、スピードプロファイルの加速度に従って加速し、最大速さまで到達したら一定速で運転し、その後指定の減速度で減速しますが、指定位置で停止するように逆算したタイミングで減速を開始します。移動距離に比べてゆっくり加減速した場合などには、最大速さに達する前に減速を開始することもあります。モータが停止するまでBUSY状態になります。位置決め運転の途中で割り込んで次の位置決め運転をすることはできません。
位置決め運転をする代表的なコマンドが /goTo や /move です。その他にも /goHome, /goMark, /goToDir などが含まれます。
備考: STEP-series Universal Firmware では、 /move 以外の位置決めコマンドは、実行中のモーションコマンドに割り込むことができます。
サーボモード
これはモータドライバの機能ではなく、ファームウェアで実装されている運転の種類です。一定速運転の速度を常時更新して、与えられた目標位置に追従するようにします。ラジコンのサーボモータのような動作方法です。このモードで動いている間は、ほかのモータ動作コマンドを送ることはできません。
停止の種類
以下の2種類の選択肢があり、合計4種類のコマンドがあります。
スピードプロファイルに従って減速するか、瞬時に停止するか
停止後も励磁状態を保つか、ハイ・インピーダンス状態 (HiZ) にするか
停止後の状態 |
減速停止 |
瞬間停止 |
|---|---|---|
励磁 |
SoftStop |
HardStop |
HiZ |
SoftHiZ |
HardHiZ |
励磁状態とは、 KVAL_HOLD に応じた電圧や TVAL_HOLD の値に応じた電流が流れて、モータの位置を保持するトルクがかかっている状態です。ハイ・インピーダンス状態は、電流が遮断されて保持トルクがない状態です。
原点復帰
システムの電源投入時は、モータが現在どの位置で止まっているかが不明の状態です。前回電源を切った時のタイミング次第でいろんな方向に向いている可能性があります。
またステッピングモータは限界を超える外力がかかるとステップがずれてしまいます(脱調)。そうなると、プログラム上の位置と物理的な位置がずれたまま動き続けてしまいます。
そのため、位置や向きがある使い方の場合は、起動時に、あるいは定期的にセンサを使って基準位置を検出する必要があります。この動作は 原点復帰 と呼ばれます。
センサとスイッチ
原点センサの設置2例
原点センサにはフォトインタラプタがよく使われています。左はスライダに取り付けられた白い樹脂がフォトインタラプタの発光部と受光部を遮るようになっています。右は回転テーブルの例で、フォトインタラプタが黒いねじに反応するようになっています。
ほかにもマイクロスイッチや光電センサなどが使われます。
本デバイスとの接続のために コネクタ取り付け済みケーブル を用意しています。"
HOMEセンサとLIMITセンサ
STEP400/800は各軸に対してHOME端子があり、センサやスイッチを接続できるようになっています。また端子にはセンサ用の5V電源も供給されています。 STEP400ではHOME端子に加えてLIMIT端子も準備されています。
HOME
モータドライバチップに直接接続されていて、ドライバの原点復帰機能と組み合わせて使うことができます。通常はこのコネクタを原点センサ用に使います。
LIMIT (STEP400のみ)
使用方法によってはセンサが2つ必要なこともあります。例えばスライダなどは動作範囲が限定されているため、動作中に脱調するとどちらかの端に衝突してしまう可能性があります。このような場合に両端にセンサを設置しておくと衝突を防ぐことができます。
これらの端子が反応するとモータを強制的に停止する設定が可能ですが、逆にモータ動作と切り離して単純なスイッチ入力として使うこともできます。例えば押しボタンを接続しておいて、押されたらOSCメッセージで通知する、という使い方もできます。
衝突防止設定
HOMEやLIMITセンサが反応しているときに、モータが回転できる方向を制限することができます。 /setProhibitMotionOnHomeSw コマンドと /setProhibitMotionOnLimitSw コマンドによって、それぞれHOMEセンサが反応している場合は homingDirection 方向へ、LIMITセンサが反応している場合には homingDirection と逆方向へのモータ動作が禁止できます。これによって、誤ったコマンドによるメカの衝突が回避できます。
homingDirection は /setHomingDirection または 設定ツール で設定できます。これは下記の /homing コマンドでも使用されます。
原点復帰方向 ( homingDirection )
原点復帰コマンド
本デバイスで原点復帰を行うコマンドは /homing です。このコマンドの動作を分解すると、モータドライバチップから継承した /goUntil と /releaseSw のふたつのコマンドから成り立っています。まずはこれらのコマンドの動きを見てみます。
/goUntil
まずはこのコマンドで原点センサに向かって移動していきます。(そのように設定している場合は)原点センサが反応するとモータが減速停止します。
/releaseSw
モータが停止した位置が原点です!ただ厳密には、 /goUnitl コマンドでは瞬間に停止するのではなく、減速して停止したため、センサが反応した瞬間からずれて停止します。このコマンドは現在位置からゆっくりと逆方向へ移動し、センサが反応しなくなったところで即時停止します。
どちらのコマンドも /setHomeSwMode によってセンサが反応した時点で現在位置の座標をゼロにリセットする設定にできます。
これらのコマンドと動作の実例はこちらの映像をご覧ください。
/homing
上記2つのコマンドをOSC経由で順次動かすこともできますが、このシーケンスを一つのコマンドで実行するのが /homing です。 設定ツール やOSCコマンドにてあらかじめ設定しておいた原点復帰方向や原点復帰スピードに従って、自動で原点復帰シーケンスが完了します。
原点復帰のタイムアウト
/goUntil /releaseSw それぞれにタイムアウト時間が設定可能で、この時間内にセンサ状態に変化がなかった場合はタイムアウトとして動作を中止します。これは何らかの理由でセンサが反応しなくなった場合に、延々とメカが行き止まりに押し当てられているような状況を防ぐために、ある時点で原点復帰動作をあきらめて停止するものです。
常時開と常時閉
電気的接続
「センサが反応する」をもう少し厳密に考えてみます。 HOMEとLIMITの各コネクタのピン配置は以下の通りです。
ピン番号 |
機能 |
|---|---|
1 |
GND |
2 |
スイッチ・センサ入力 |
3 |
5V電源出力 |
HOMEとLIMITの各センサピンは3.3Vでプルアップされています。スイッチをつなぐ場合は1番のGNDと2番のセンサ端子を接続します。スイッチが押されるとGNDピンとつながって、3.3Vから0Vへ電圧が落下します。このHIGHレベルからLOWレベルへの電圧の変化時 (Falling Edge) に、センサが反応したという判定が発生します。
センサの場合は、 EE-SX671A を例にとると次のような接続になります。
EE-SX671A 構成図
ピン番号 |
機能 |
センサピン |
|---|---|---|
1 |
GND |
|
2 |
スイッチ・センサ入力 |
OUT |
3 |
5V電源出力 |
センサの反応時に入光するのか遮光するのか
ここはセンサを買いに行く前によく考えておかなければならない部分です。
入光時反応と遮光時反応
左の場合は、原点位置でセンサに入光するようになっていますが、右の場合は原点位置でセンサが遮光されるようになっています。
センサにも、入光時にONになるタイプと遮光時にONになるタイプがあります。また切替式のセンサもあって、上記のオムロン製センサの場合はLという端子と+端子をショートすると動作が切り替わります。
原点位置でセンサピンがHIGH→LOWになるように機構とセンサを組み合わせなければなりません。
回転テーブル
例えば上の写真の左の回転テーブルで考えた場合、時計回りの場合と反時計回りの場合で原点センサの反応位置が穴のサイズ分ずれてしまいます。本デバイスでは原点センサのHIGH→LOWとLOW→HIGHの変化どちらともOSCメッセージで通知させることができます。このメッセージには回転方向も含まれていますので、 /enableHomeSwReport を用いて回転方向によって場合分けすれば原点位置をそろえることができます。
サーボモード
モータドライバICの機能として備わっている位置決め運転では、事前に目標位置を定めておく必要があり、また運転が完了するまでは新しい目標位置を設定することはできないため、リアルタイムに目標位置が変化するような動作はできません。 サーボモードでは、Arduinoスケッチでの処理によって、目標位置へリアルタイムに追従する動作を可能にします。ラジコンのサーボモータのような動作方法です。このモードで動いている間は、ほかのモータ動作コマンドを送ることはできません。
サーボモードの動作例
サーボモードの起動手順
動作開始と終了
/enableServoMode メッセージによってサーボモードを開始・終了します。サーボモードの開始時は、BUSY解除状態である必要があります。
目標位置の更新
/setTargetPosition メッセージによって目標位置を更新します。Arduinoスケッチでは新しい目標位置を受け取ると、現在位置と比較して、モータの回転速度を更新します。 全モータ分の目標位置をまとめて送るための /setTargetPositionList メッセージもあります。
制御パラメータの種類
モータの回転速度は、PID制御という手法によって算出しています。
/setServoParam コマンドによって制御パラメータを調整できます。パラメータは以下の3つです。
比例ゲイン(kP)
PID制御は目標位置と現在位置の差(偏差)を使って制御します。すなわち、偏差が大きい場合は速く、差が小さい場合は遅く回転させて目標位置に近づけています。比例ゲインは偏差をどの程度回転速度に反映させるかを決定します。値が小さすぎると目標位置に近づくのに時間がかかり、大きすぎると目標位置を通り過ぎるオーバーシュートが発生します。
積分ゲイン(kI)
比例制御だけだと、目標位置に近づくにつれ回転が遅くなっていき、最後のわずかな偏差を解消するのに非常に時間がかかってしまいます。そこで偏差を時間積分して制御量に加えることによって、最後に長く残ってしまう偏差を解消できます。積分ゲインを大きくするとより素早く偏差を解消できますが、オーバーシュートしたり、さらにそれを解消するための動作が発生して振動が続く状態になってしまうことがあります。
微分ゲイン(kD)
オーバーシュートや振動が発生している場合などに、偏差の急な変化を打ち消すように作用するパラメータです。
制御パラメータの決定方法
全体の流れ
PID制御のパラメータは、動作可能な加減速度、回転速さの最大値(スピードプロファイル)によって変化します。従って、制御パラメータを決めるには以下の手順になります。
モータの定格や負荷に合わせたKVAL(電流モードの場合はTVAL)を決める
動作可能な加減速度、回転速さの最大値(スピードプロファイル)を決める
PID制御ゲインを決める
PID制御ゲインの決定
最適なPID制御ゲインの決定方法は様々な手段が提案されているようですが、目標位置の更新頻度や動きの目的にもよって変化しますので、弊社では以下のような手順で実際に動かしてみながらトライ&エラーで決めています。
1. kP
kP, kI, kDすべてを0.0にして、kPを徐々に上げていきます。目標位置が随時変化する場合は、kI, kDは0.0のままで、kPを設定するだけにすることも多いです。
2. kI
目標位置が数秒に1回しか変化しないような場合は、kIの値を上げていくと、動きを俊敏にできます。ただし、例えば60fpsで目標位置を送っているような場合は、目標位置更新の度に動き出しの加速の振動が発生し、動きの滑らかさが損なわれることがあります。目標位置に素早く到達することが重要なのか、全体で滑らかな動きを実現することが重要なのか、によって設定するべき値は変化します。
3. kD
目標位置に近づく際に少しオーバーシュートや振動が出ている場合は、kDを上げていきます。
技術情報
ファームウェアのコンパイルについてやハードウェアの構成など、本デバイスをカスタマイズする際に必要になる情報をまとめています。Arduinoプログラミングの基礎や、Arduino IDE, PlatformIOの理解を前提としています。
ファームウェア
マイコン(MCU)はArduino Zeroですので、ファームウェアの実体はArduinoスケッチです。すなわち、ファームウェアのアップロードはArduino IDEまたはPlatformIOを通して行います。
最新のファームウェアは GitHub Releases ページから確認できます。ファームウェアのコード自体は GitHubリポジトリ にあります。
バージョンの確認
基板に書き込まれているファームウェアのバージョンを確認するには2つの方法があります。
OSCコマンド
/getVersionを使用する基板とPCをUSBで接続し、シリアルモニタから
sを送信する
方法 1: OSCコマンド
基板へ /getVersion コマンドを送信します。返答メッセージに現在のバージョン番号が含まれています。
返答例:
/version "STEP800_R1_UNIVERSAL 1.0.1 Mar 24 2022 11:17:29"
方法 2: USB経由
本デバイスとPCをUSBで接続し、シリアルモニタから s を送信すると得られるステータスから現在のファームウェアバージョンを確認できます。
返答例:
-------------- Firmware --------------
Firmware name : STEP800_R1_UNIVERSAL
Firmware version : 1.0.1
Compile date : Mar 24 2022, 11:17:29
新しいバージョンのアップロード
PlatformIOでコンパイルする
STEPシリーズのファームウェアは PlatformIO を使って開発しています。クローンまたはダウンロードしたフォルダをPlatfromIOの"Open Project"メニューから開けます。初回コンパイル時に必要なファイルはすべて自動でインストールされます。
純正Arduino環境でコンパイルする
Arduino IDEを使う場合はPlatfromIOと比べると多少の手作業のセットアップが必要です。まずボードマネージャからArduino Zeroをインストールします。この手順は公式サイトの Quickstart Page で詳しく説明されています。
以下のライブラリをArduino IDEの「ライブラリを管理...」よりインストールします。ライブラリをインストールする詳しい手順は公式サイトの install libraries を参照してください。
STEP400 only: Ponoor PowerSTEP01 Library
STEP800 only: Ponoor L6470 Library
注釈
OSCのためのライブラリはいくつか種類がありますが、CNMATのOSC Libraryをインストールします。Arduino IDEの「ライブラリを管理」から "OSC" という名称のライブラリをインストールしてください。製作者が組織名のCNMATではなく、Adrian Freed, Yotam Mann という個人名で表示されていますのでご注意ください。
スケッチのコンパイルとアップロード
Arduino IDEでは、コンパイルを行う前に、 .ino ファイルを開いていること、Arduino IDEで “Tools” -> “Boards” から “Arduino Zero (Native USB port)” を選択していることを確認してください。
PlatformIOでは必要な設定は完了しているはずですので、特別な操作は必要ありません。
これでコンパイルとアップロードが行えるはずです。
留意点
電磁ブレーキ基板を接続している場合は、スケッチ書き込み時は取り外してください。書き込み中にブレーキが解放され、負荷の落下が起こる可能性があります。
基板にUSB-Cケーブルのみを接続した場合、スケッチの書き込みはできますが、外部電源がないためモータドライバのチップが起動しないので、ドライバとメッセージのやり取りが発生する操作はできません。
Arduino Zero の癖なのか、書き込みに失敗することがあるようです。その場合はRESETスイッチをダブルクリックして、bootloaderモードにして再試行してみてください。bootloaderモードではスケッチは起動せず、
Lがゆっくりフェードする状態になります。また普通に起動した時とは別のシリアルポートになりますので、Arduino IDEのToolsメニューから選択しなおしてください。
USB経由での診断
ファームウェアアップデート以外にも、USBを使ってPCから動作状況や設定を確認できます。ネットワークからうまく接続できないときなどに問題を調べることができます。
注釈
USB端子からはマイコンと周辺回路の制御電源のみ供給されます。この状態ではモータドライバが起動していないため、モータドライバと通信ができません。必ずモータ電源を供給してください。
注釈
またUSBで給電をした後にモータ電源を接続した場合、モータドライバの初期設定が行われていない状態になるため、予想外の動作になる可能性があります。モータ電源を通電した後にUSBを差し込むか、あるいはモータ電源を通電した後に基板上のRESETスイッチを押して全体をリセットしてください。
シリアルモニタ
本デバイスはPCからはArduino Zeroとして認識され、仮想シリアルポートになっています。例えばArduino IDEのシリアルモニタを使う場合は、以下の手順で接続してください。 Arduino IDEでなくても、シリアルポートと通信して文字列を入出力できるソフトウェアであればどのようなもので使えます。
ポートの選択
Tools > Port > COMXXX (Arduino Zero (Native USB Port))
シリアルモニタを開く
シリアルモニタは、本デバイスとやり取りするために使用します。開き方はいくつかの方法があります。
First way: Click the magnifying glass
Second way: Tools > Serial Monitor
Third way: CTRL + SHIFT + M
Status
s を送信すると、主にハードウェアの状態を取得できます。
最初のセクションは主に書き込まれているファームウェアについての情報です。
============== Current Status ==============
-------------- Firmware --------------
Firmware name : STEP400
Firmware version : 1.0.0
Compile date : Mar 19 2021, 10:27:55
Applicable config version : 1.0
Loaded config version : 1.0 [CONFIG_VERSION_APPLICABLE]
Loaded config version: microSDから読み込まれているconfig.txtファイルのバージョン番号が表示されます。configとファームウェアの新旧に応じて以下のうちどれかが表示されます。
メッセージ |
説明 |
|---|---|
CONFIG_VERSION_UNDEFINED |
configのバージョン未定義 |
CONFIG_VERSION_NOTLOADED |
configがmicroSDから読み込まれていない |
CONFIG_VERSION_NOTLOADED |
configのバージョンが古い |
CONFIG_VERSION_APPLICABLE |
configとファームウェアのバージョンが合っている |
CONFIG_VERSION_NEW |
configのバージョンが新しい(ファームウェアが古い) |
次のセクションはDIPスイッチについてです。
-------------- DIP Switch --------------
BIN : 0000 0001
DEC : 1
BIN: スイッチの位置を0/1であらわしたものです。基板では左側が小さい桁ですが、診断ツールでは右側が小さい桁になっていることに注意してください。DEC: IDを10進数で表示したものです。
次はイーサネットの状態です。
-------------- Ethernet --------------
Ethernet hardware status: 3 -EthernetW5500
Ethernet link status: 2 -LinkOff
isDestIpSet : No
Ethernet hardware status: イーサネットコントローラIC, W5500への接続状況を示しています。EthernetW5500が正しい反応で、EthernetNoHardwareとなる場合はW5500との通信に何らかの問題が生じています。Ethernet link status: Ethernetのリンク状況に応じてLinkOnLinkOffが表示されます。もしUnknownとなる場合は、ハードウェアの問題が生じている可能性があります。isDestIpSet:/setDestIpを受信したかどうかを示しています。
次はSDカードについてです。
-------------- microSD --------------
SD library initialize succeeded : Yes
SD config file open succeeded : Yes
SD config JSON parse succeeded : Yes
SD library initialize succeeded: microSDカードがささっていないとNoになります。SD config file open succeeded: SDカードのconfig.txtファイルが開けたかどうかを示しています。SD config JSON parse succeeded:config.txtの内容(JSON)が読み込めたかどうかを示しています。
この先は各モータドライバチップの状態についてです。
STEP400のみ
-------------- Motor Driver --------------
PowerSTEP01 SPI connection established : Yes
PowerSTEP01 ID#1
STATUS: 0xE603
High impedance state : Yes
BUSY : No
Motor direction : Reverse
Motor status : Stopped
UVLO (Undervoltage lock out) : No
Thermal status : Normal
OCD (Overcurent detection) : No
Stalled : No
SW_F: 0 -HOME senser input open.
ADC_OUT: 31 -LIMIT senser input open.
PowerSTEP01 ID#2
...
PowerSTEP01 ID#3
...
PowerSTEP01 ID#4
...
モータ電源が供給されていない等の理由でPowerSTEP01と通信が成功しなかった場合、 PowerSTEP01 ID#<1-4> は表示されません。
STEP800のみ
-------------- Motor Driver --------------
L6470 SPI connection established : Yes
L6470 ID#1
STATUS: 0x7E03
High impedance state : Yes
BUSY : No
Motor direction : Reverse
Motor status : Stopped
UVLO (Undervoltage lock out) : No
Thermal status : Stopped
OCD (Overcurent detection) : No
Stalled : No
SW_F: 0 -HOME senser input open.
L6470 ID#2
...
L6470 ID#3
...
L6470 ID#4
...
L6470 ID#5
...
L6470 ID#6
...
L6470 ID#7
...
L6470 ID#8
...
上記STEP400と同じく、モータドライバと通信が成功しなかった場合は L6470 ID#<1-8> は表示されません。
現在のモードと電磁ブレーキの状態、原点復帰の状態についてです。
-------------- Modes --------------
Servo Mode : No, No, No, No
Current Mode : No, No, No, No
Electromagnetic Brake Enable : No, No, No, No
Brake status :
#1 : BRAKE_ENGAGED
#2 : BRAKE_ENGAGED
#3 : BRAKE_ENGAGED
#4 : BRAKE_ENGAGED
Homing status : 0, 0, 0, 0
Brake status |
説明 |
|---|---|
BRAKE_ENGAGED |
ブレーキ保持状態 |
BRAKE_DISENGAGE_WAITING |
ブレーキ開放状態へ移行中 |
BRAKE_DISENGAGED |
ブレーキ開放状態 |
BRAKE_MOTORHIZ_WAITING |
ブレーキ保持状態へ移行中 |
ID |
Homing status |
説明 |
|---|---|---|
0 |
HOMING_UNDEFINED |
原点復帰を行っていない状態 |
1 |
HOMING_GOUNTIL |
センサへ向かって移動中 |
2 |
HOMING_RELEASESW |
センサ反応範囲から脱出中 |
3 |
HOMING_COMPLETED |
原点復帰完了済み |
4 |
HOMING_TIMEOUT |
原点復帰中にタイムアウトした |
Config
c を送信すると、現在の設定値を読み出します。これはconfigToolのファイル内の値ではなく、IDスイッチの設定や、その後のOSCメッセージでの設定を反映した値になっていることに注意してください。
例えばSTEP400でmicroSDカードを差し込まずに起動した場合の反応は以下のようになります。
============== Configurations ==============
-------------- Config file --------------
SD config file open succeeded : No
SD config file parse succeeded : No
configTargetProduct : ---
configName : Default
config version : -1.0 [CONFIG_VERSION_NOTLOADED]
-------------- Network --------------
My Ip : 10.0.0.101
isMyIpAddId : Yes
Dest Ip : 10.0.0.10
DNS : 10.0.0.1
Gateway : 10.0.0.1
Subnet mask : 255.255.255.0
MAC address : 60:95:CE:10:05:01
isMacAddId : Yes
inPort : 50000
outPort : 50101
isOutPortAddId : Yes
bootedMsgEnable : Yes
isDestIpSet : No
reportErrors : Yes
-------------- Report & Alarm --------------
reportBUSY : No, No, No, No
reportBUSY : No, No, No, No
reportHiZ : No, No, No, No
reportHomeSwStatus : No, No, No, No
reportLimitSwStatus : No, No, No, No
reportDir : No, No, No, No
reportMotorStatus : No, No, No, No
reportSwEvn : No, No, No, No
reportUVLO : Yes, Yes, Yes, Yes
reportThermalStatus : Yes, Yes, Yes, Yes
reportOCD : Yes, Yes, Yes, Yes
reportStall : Yes, Yes, Yes, Yes
reportOCD : Yes, Yes, Yes, Yes
OCThreshold : 15, 15, 15, 15
-------------- driverSettings --------------
homingAtStartup : No, No, No, No
homingDirection(1:FWD,0:REV) : 0, 0, 0, 0
homingSpeed : 50.00, 50.00, 50.00, 50.00
homeSwMode : 1, 1, 1, 1
prohibitMotionOnHomeSw : No, No, No, No
limitSwMode : 1, 1, 1, 1
prohibitMotionOnLimitSw : No, No, No, No
goUntilTimeout : 10000, 10000, 10000, 10000
releaseSwTimeout : 10000, 10000, 10000, 10000
microStepMode : 7, 7, 7, 7
isCurrentMode : No, No, No, No
slewRate : 5, 5, 5, 5
electromagnetBrakeEnable : No, No, No, No
brakeTransitionDuration : 100, 100, 100, 100
-------------- speedProfile --------------
acc : 1000.00, 1000.00, 1000.00, 1000.00
dec : 1000.00, 1000.00, 1000.00, 1000.00
maxSpeed : 650.00, 650.00, 650.00, 650.00
fullStepSpeed : 15610.00, 15610.00, 15610.00, 15610.00
-------------- Voltage mode --------------
kvalHold : 0, 0, 0, 0
kvalRun : 16, 16, 16, 16
kvalAcc : 16, 16, 16, 16
kvalDec : 16, 16, 16, 16
intersectSpeed : 1032, 1032, 1032, 1032
startSlope : 25, 25, 25, 25
accFinalSlope : 41, 41, 41, 41
decFinalSlope : 41, 41, 41, 41
stallThreshold : 31, 31, 31, 31
lowSpeedOptimize : 20.00, 20.00, 20.00, 20.00
-------------- Current mode --------------
tvalHold : 0, 0, 0, 0
tvalRun : 16, 16, 16, 16
tvalAcc : 16, 16, 16, 16
tvalDec : 16, 16, 16, 16
fastDecaySetting : 25, 25, 25, 25
minOnTime : 41, 41, 41, 41
minOffTime : 41, 41, 41, 41
-------------- Servo mode --------------
kP : 0.06, 0.06, 0.06, 0.06
kI : 0.00, 0.00, 0.00, 0.00
kD : 0.00, 0.00, 0.00, 0.00
Test Motion
t を送信すると、すべてのモータが25600step正方向に動きます。 これは1周200stepのステッピングモータを1/128マイクロステッピングモードで動かした場合の1回転のステップ数に相当します。
ハードウェア-STEP400
基板のサイズ
120x84mm, 板厚1.6mm
M3用取付穴が基板の各隅+中央付近の5か所にあります。この画像の上下の細長い部分は捨て基板で、製造終了後に切り離されています。
原寸PDF: step400_r1_dimension.pdf
構成
回路図: step400_r1_schematics.pdf
主な構成要素は以下のとおりです。
部品 |
メーカー |
型番 |
|---|---|---|
MCU |
Microchip |
|
Ethernet Controller |
Wiznet |
|
Stepper Driver |
STMicroelectronics |
|
DC-DC Converter |
ROHM |
ピン配置
ピン |
機能 |
備考 |
|---|---|---|
D0 |
DIPSW8 |
|
D1 |
Brake4 |
|
D2 |
DIPSW5 |
|
D3 |
DIPSW7 |
|
D4 |
SD_CS |
|
D5 |
Brake3 |
|
D6 |
PowerSTEP01_MISO |
|
D7 |
DIPSW1 |
|
D8 |
Brake2 |
|
D9 |
DIPSW6 |
|
D10 |
W5500_CS |
|
D11 |
PowerSTEP01_MOSI |
|
D12 |
PowerSTEP01_SCK |
|
D13 |
L |
|
D20/SDA |
NC |
はんだ面にパッド有 |
D21/SCL |
NC |
はんだ面にパッド有 |
D22/MISO |
W5500_MISO |
|
D23/MOSI |
W5500_MOSI |
|
D24/SCK |
W5500_SCK |
|
D30 |
DIPSW2 |
|
D31 |
DIPSW4 |
|
D38 |
NC |
はんだ面にパッド有 |
A0 |
PowerSTEP01_CS |
|
A1 |
Brake1 |
|
A2 |
PowerSTEP01_RESET |
|
A3 |
W5500_RESET |
|
A4 |
SD_DETECT |
|
A5 |
DIPSW3 |
注釈
PowerSTEP01_RESET と W5500_RESET はそれぞれPowerSTEP01とW5500のリセットピンに接続されていますので、必ず pinMode を OUTPUT に設定したうえで、 HIGH 状態にしてください。
基板裏面のパッド
使用していないピンと電源のパッドが裏面にあります。2.54mmピッチですので、表面実装のピンヘッダやピンソケットを取り付けることができます。裏面のR35, R36はi2cピン(SDA, SCL)のプルアップに使用できます。サイズは1608(0603)サイズです。
これらのピンはファームウェアでは何も処理を行っていませんので、使用方法に応じたファームウェアの追加・書き換えが必要です。
SPIの割り振り
STEP400ではファームウェアの処理を簡単にするためにPowerSTEP01とW5500で別々のSPIポートを使用しています。 ATSAMD21におけるSPIの割り振り方法はこちらが大変参考になります。https://learn.adafruit.com/using-atsamd21-sercom-to-add-more-spi-i2c-serial-ports
W5500
ピン |
機能 |
SERCOM |
SERCOM Alt |
|---|---|---|---|
D22/MISO |
MISO |
SERCOM4.0 |
|
D23/MOSI |
MOSI |
SERCOM4.2 |
|
D24/SCK |
SCK |
SERCOM4.3 |
PowerSTEP01
ピン |
機能 |
SERCOM |
SERCOM Alt |
|---|---|---|---|
D6 |
MISO |
SERCOM3.2 |
|
D11 |
MOSI |
SERCOM3.0 |
|
D12 |
SCK |
SERCOM3.3 |
Clock
motor ID 1のPowerSTEP01のOSCINに16MHzの水晶発振器が接続されています。そこからIDの順に、OSCOUTとOSCINがデイジーチェーンされていますので、各PowerSTEP01は「外部16MHz入力、反転出力(EXT_16MHZ_OSCOUT_INVERT)」に設定してください。内部クロックを使うと、一定速運転時などに動きが徐々にずれてくる現象が発生します。
ハードウェア-STEP800
基板のサイズ
120x84mm, 板厚1.6mm
M3用取付穴が基板の各隅+中央付近の5か所にあります。この画像の上下の細長い部分は捨て基板で、製造終了後に切り離されています。
原寸PDF: step800_r1_0_0_dimension.pdf
構成
回路図: step800_r1_0_0_schematics.pdf
主な構成要素は以下のとおりです。
部品 |
メーカー |
型番 |
|---|---|---|
MCU |
Microchip |
|
Ethernet Controller |
Wiznet |
|
Stepper Driver |
STMicroelectronics |
|
DC-DC Converter |
ROHM |
ピン配置
ピン |
機能 |
備考 |
|---|---|---|
D0 |
Shift Register SCK |
|
D1 |
NC |
はんだ面にパッド有 |
D2 |
Shift Register MOSI |
|
D3 |
Shift Register MISO |
|
D4 |
SD_CS |
|
D5 |
Shift Register ENABLE |
|
D6 |
L6470 MISO |
|
D7 |
NC |
はんだ面にパッド有 |
D8 |
NC |
はんだ面にパッド有 |
D9 |
NC |
はんだ面にパッド有 |
D10 |
W5500_CS |
|
D11 |
L6470 MOSI |
|
D12 |
L6470 SCK |
|
D13 |
L |
|
D20/SDA |
NC |
はんだ面にパッド有 |
D21/SCL |
NC |
はんだ面にパッド有 |
D22/MISO |
W5500_MISO |
|
D23/MOSI |
W5500_MOSI |
|
D24/SCK |
W5500_SCK |
|
D30 |
NC |
|
D31 |
NC |
|
D38 |
NC |
はんだ面にパッド有 |
A0 |
L6470_CS |
|
A1 |
NC |
はんだ面にパッド有 |
A2 |
L6470_RESET |
|
A3 |
W5500_RESET |
|
A4 |
SD_DETECT |
|
A5 |
Shift Register CS |
注釈
L6470_RESET と W5500_RESET はそれぞれL6470とW5500のリセットピンに接続されていますので、必ず pinMode を OUTPUT に設定したうえで、HIGH状態にしてください。
基板裏面のパッド
使用していないピンと電源のパッドが裏面にあります。2.54mmピッチですので、表面実装のピンヘッダやピンソケットを取り付けることができます。裏面のR35, R36はi2cピン(SDA, SCL)のプルアップに使用できます。サイズは1608(0603)サイズです。
これらのピンはファームウェアでは何も処理を行っていませんので、使用方法に応じたファームウェアの追加・書き換えが必要です。
SPIの割り振り
STEP800ではファームウェアの処理を簡単にするためにL6470, W5500, シフトレジスタで別々のSPIポートを使用しています。ATSAMD21におけるSPIの割り振り方法はこちらが大変参考になります。https://learn.adafruit.com/using-atsamd21-sercom-to-add-more-spi-i2c-serial-ports
W5500
ピン |
機能 |
SERCOM |
SERCOM Alt |
|---|---|---|---|
D22/MISO |
MISO |
SERCOM4.0 |
|
D23/MOSI |
MOSI |
SERCOM4.2 |
|
D24/SCK |
SCK |
SERCOM4.3 |
Shift registers (DIP switch, brake output)
ピン |
機能 |
SERCOM |
SERCOM Alt |
|---|---|---|---|
D3 |
MISO |
SERCOM2.1 |
|
D2 |
MOSI |
SERCOM2.2 |
|
D0 |
SCK |
SERCOM2.3 |
L6470
ピン |
機能 |
SERCOM |
SERCOM Alt |
|---|---|---|---|
D6 |
MISO |
SERCOM3.2 |
|
D11 |
MOSI |
SERCOM3.0 |
|
D12 |
SCK |
SERCOM3.3 |
Clock
motor ID 1のPowerSTEP01のOSCINに16MHzの水晶発振器が接続されています。そこからIDの順に、OSCOUTとOSCINがデイジーチェーンされていますので、各PowerSTEP01は「外部16MHz入力、反転出力(EXT_16MHZ_OSCOUT_INVERT)」に設定してください。内部クロックを使うと、一定速運転時などに動きが徐々にずれてくる現象が発生します。
ハードウェア的に使えないPowerSTEP01の機能
STCK
配線されていないので、Step Clock動作はできません。
ADCIN
GNDに直結されていて使用できません。