AN-032: TMC4361Aを用いたステッピング・モーター・ドライバ用クローズド・ループ・モーター・コントロール

このアプリケーション・ノートでは、TMC4361Aモーション・コントロールICと組み合わせたステッピング・モーター(ゲート)ドライバのクローズド・ループ・モーター・コントロールについて、その機能的な詳細を説明します。このアプリケーション・ノートは、技術的な背景情報としての役割を果たすものです。具体的なパラメータ情報や設定命令については、該当製品の文書を参照してください。

1 クローズド・ループ・モーター・コントロール

TMC4361Aは、ステッピング・モーター(ゲート)ドライバにクローズド・ループ・モーター・コントロール機能をもたらします。通常、TMC4361Aからモーター・ドライバへ流れる電流値あるいはステップ・インパルスは、内部計算にのみ基づいています。TMC4361Aのクローズド・ループ・ユニットを用いることで、出力電流または内部ステップ・ジェネレータのStep/Dir出力は、フィードバック・データに応じて直接変更されます。このフィードバック・データは、インクリメンタルABNエンコーダや絶対SSIまたはSPIエンコーダなど、様々なエンコーダ・タイプから取得できます。


1.1 クローズド・ループ・モーター・コントロールはベクトル制御ではありません


従来の一般的なベクトル制御は、通常、3つのコントロール・ループをカスケード接続したものを用います。内部ループがモーター電流を制御します。最終的な位置に達するまで、1レベル上の速度が制御されます。電流制御ループは、常にある電流を指定します。その整流角は、最大トルクを得るために、90ºです。フィードバックは、数学的モデルを援用して、エンコーダによって、あるいは、位相電流および電圧を測定することによって得られます。

TMC4361Aの2相クローズド・ループ・コントロールは、PID制御カスケードとは別の手法に従い、ステッピング・モーター・ドライバの特性を考慮します。ランプ・ジェネレータ(ターゲットと速度を指定)は、位置制御(整流角制御)には無関係であり、電流制御にも無関係です。クローズド・ループ・モーター・コントロール方式は、次のように図解できます。

図1.1 クローズド・ループ・モーター・コントロールの構造

図1.1 クローズド・ループ・モーター・コントロールの構造


特に注意を要する点


不要な結合効果を避けるため、エンコーダはクローズド・ループ動作のモーター軸上に直接取り付ける必要があります。

PID レギュレーション機能の使用

また、エンコーダをモーター上に直接取り付けない場合は、PIDレギュレーション機能を用いる必要があります。例えば、PID制御はベルト駆動の滑りを回避します。クローズド・ループ・モーター・コントロールではこれを正確に処理することができないためです。


1.2 クローズド・ループ・モーター・コントロールはステップ・ロスを防止します


相電流は、モーター・ドライバ(通常はステッピング・モーター・ドライバ)に直接割り当てられます。これは、ローターが従うべき電流ベクトルになります。ローターの位置は、エンコーダのフィードバックによって直接サンプリングされます。それにより、クローズド・ループ・モーター・コントロールはその結果生じる負荷角をモニタします。 

負荷角が一定の制限値を超えた場合、電流ベクトルの方向はローターの位置を追跡します。その結果、負荷角が所定の制限値を超えることがなくなります。そのため、ステップ・ロスは発生しません。このように、電流ベクトルは、負荷が減少するまで、過負荷を追跡します。過負荷を克服した後は、電流制御は必要な位置または速度を割り当てます。

図1.2 負荷角の制御と電流の同期

図1.2 負荷角の制御と電流の同期

注:通常、負荷角制限値は、最大トルク(1フル・ステップ)である90ºです。しかし、0º~180ºに任意の制限値を指定することもできます。


1.3 クローズド・ループ・モーター・コントロールはエネルギーを節約します


負荷角追跡の他、様々な負荷状況に応じて、異なる電流スケーリング値を指定することもできます。したがって、エネルギー節約のため、負荷がより低い状況を用いることができます。これは、実際の負荷に応じて電流を指定する、自由適応型電流スケーリング機能の結果です。低負荷フェーズの間、モーター・ドライバには低い電流レベルが割り当てられ、負荷制限に達すると最大電流が適用されます。


1.4 クローズド・ループ・モーター・コントロールのセットアップ方法


アプリケーション・ノートのこれ以降では、TMC4361Aのクローズド・ループの機能セットすべてについて説明します。一般的なフローは、3種類のステージに分割されますが、最初の1つを除く2つはオプションであり、互いに独立に用いることができます。まず、クローズド・ループの動作が準備され確立されていなくてはなりません。この一般的なセットアップ・プロセスは必須であり、第4章で詳述します。クローズド・ループ・モーター・コントロールの2つの改善オプションは、第5章(電流スケーリング機能)と第6章(逆起電力に関する考慮事項)で説明します。最後の章では、クローズド・ループ動作の設定値について更に説明します。しかし、クローズド・ループのセットアップの説明を始める前に、セットアップ全体が正しく接続されていなくてはなりません。次の第2章では、μC、TMC4361A、モーター、エンコーダとモーター(ゲート)ドライバとの間での可能な接続を紹介します。 

i  様々なデバイスの正しいピン配置およびレイアウトに関する情報は、それぞれの部品のデータシートを参照してください。TMC4361AのSPIおよびエンコーダの正しい通信方式に関する詳細情報は、対応するマニュアルに記載されています。 

注:例外が1つあります。円運動が可能であり、現在の速度が高すぎて1回転の間に正確な位置を定められない場合、速度をポジショニング・モードに変更できます。

2 TMC4361AとμC、モーター(ゲート)ドライバ、エンコーダとの接続

図2.1 ピン配置(上面図)

図2.1 ピン配置(上面図)

2.1 必要なピンの信号の説明


ピン 番号 機能
GND 6, 15,25, 36 IOおよびデジタル回路用のデジタル・グラウンド・ピン
VDD5 5, 26, 37 IOおよびデジタル回路用のデジタル電源(3.3V… 5V)
VDD1V8 16, 35 1.8Vの内部生成コア電圧の接続
CLK_EXT 38 全内部動作用に周波数fCLKのクロックを供給するための外部クロック入力。 
TEST_MODE 34 テスト・モード入力。通常動作では、ロー接続します。 
INTR 33 割込み出力、PD/PUをワイヤードAND/ワイヤードORにプログラム可能
NSCSIN, SCKIN, SDIIN, SDOIN 2,3, 4,7 μCとのSPIインターフェース。
A_SCLK, ANEG_NSCLK, B_SDI, BNEG_NSDI, N, NNEG 40, 1, 10, 11, 21, 22 インクリメンタルABNエンコーダおよび絶対SSIおよびSPIエンコーダの各タイプに対するエンコーダ・インターフェース。
STPOUT_PWMA, DIROUT_PWMB 24, 23 モーター・ステッピング・ドライバのステップ方向出力。
NSCSDRV_SDO, SCKDRV_NSDO, SDIDRV_NSCLK, SDODRV_SCLK 30,29, 28,27 Trinamicモーター・ドライバとのSPIインターフェース。

2.2 最小限のセットアップをするための特定ピンの接続


以下では、TMC4361Aの必要なピン信号を特定し、完全なクローズド・ループ・システムを確立します。これは最小限のセットアップです。この機能と共に他のピン信号を使用する必要がある場合は、TMC4361Aのマニュアルを参照してください。

最小限のクローズド・ループ・モーター・コントロール・セットアップを実現するには、以下を行います。 

  • グラウンド・ピンおよび電源ピンを正しく接続します。各電源ラインとグラウンドの間に100nFのコンデンサを接続します。
  • 4.2MHz~32MHzの周波数の外部クロック信号をCLK_EXTに接続します。
  • TEST_MODEを接地することにより、これを無効化します。
  • INTR出力ピンをμCに接続します。この信号を評価する必要はありませんが、このようにすると非常に有用です。次の章で説明するセットアップでこのピンを使用します。
  • μCとTMC4361Aの間でSPI接続を確立します。そのため、NSCSIN、SCKIN、SDIIN、SDOINをμCと接続します(正しく動作するSPI通信方式を確立するには、TMC4361Aのマニュアルを参照してください)。
  • フィードバック信号はエンコーダ・インターフェース・ピン(A_SCLK、ANEG_NSCLK、B_SDI、BNEG_NSDI、N、NNEG)に接続する必要があります。ここでは、インクリメンタルABNエンコーダ、絶対SSIエンコーダ、絶対SPIエンコーダの3種類のエンコーダ・フィードバック信号を評価できます。エンコーダ・フィードバック信号を正しく接続するには、TMC4361Aのマニュアルを参照してください。
  • StepDir出力ピン(STPOUTおよびDIROUT)をいずれかのモーター・ドライバに接続します。
  • あるいは、またはそれに加えて、SPI出力信号ライン(NSCSDRV_SDO、SCKDRV_NSDO、SDIDRV_NSCLK、SDODRV_SCLK)を特定のTMCモーター・ドライバのSPI入力ピンに接続します。

注:不要な結合効果を避けるため、エンコーダはクローズド・ループ動作のモーター軸上に直接取り付ける必要があります。


2.3 TMC4361Aレジスタ・セットアップの一般的なヒント


様々なセットアップが可能です。どのエンコーダ・タイプをどのモーター・ドライバに用いても構わない点に注意してください。次のセクションに示す例は、特定のエンコーダ・タイプに限定されるものではありません。 

インクリメンタルABNと絶対SSIのエンコーダ・タイプの差動信号はオプションです。選択した場合、信号にはそのデジタル値分の差が生じます。チップ内のデジタル入力の前には差動アンプはありません。デフォルトでは、差動信号が前提となっています。GENERAL_CONFレジスタ0x00を正しく設定することによって簡単にスイッチ・オフできます(ビット12:diff_enc_in_disable)。 

SPIOUT_CONFレジスタ0x04を介してSPI出力インターフェースに正しい設定を行い、接続されたモーター・ドライバに正しいSPI データを供給する他に、GENERAL_CONF レジスタ0x00 ( ビット11:10 :serial_enc_in_mode)に正しいエンコーダ・タイプを設定することも必要です。GENERAL_CONFレジスタおよびSPIOUT_CONFレジスタの更なる詳細については、TMC4361Aのマニュアルを参照してください。

更なるエンコーダ設定は、ENC_IN_CONFレジスタ0x07で可能です。これについては、次の章で詳述します。


注:


  • すべての入力エンコーダ信号はデジタル入力です。つまり、差動ペアはデジタル的に評価されます。
  • そのため、TMC4361Aとエンコーダ・チップの間に差動トランシーバを設置することが必要となる場合があります。
  • エンコーダ入力信号は、INPUT_FILT_CONF レジスタ0x03 ( エンコーダ入力サンプル・レートINPUT_FILT_CONF(2:0)およびエンコーダ入力フィルタ長INPUT_FILT_CONF(6:4))を用いてデジタル的にフィルタ処理できます。フィルタ設定値は自由に設定できます。詳細については、TMC4361Aのマニュアルを参照してください。

2.4 セットアップ例


以下の例では、破線はオプションの配線を示します。

例1:モーター・ドライバTMC2660/260/261およびインクリメンタルABNエンコーダ

TMC26xは、TMC4361AのSPI出力インターフェースを介して、すべて設定および駆動が可能です。TMC26xの5個のレジスタの設定値は、TMC4361Aのカバー・レジスタ0x6Cにアドレス指定される必要があります。TMC4361Aは、このレジスタに書込み後自動的に送信を行います。そのため、μCからTMCモーター・ドライバへの接続は不要です。両デバイス間の通信はTMC4361Aを通じて行うことができるためです。

SPI出力が設定用にのみ用いられる場合、TMC4361AのStep/Dir出力ピンを、モーター・ドライバにステップを供給するために用いることができます。インデックス信号Nもオプションです。

ステップ方向信号を用いない場合、SPIOUT_CONFレジスタ0x04は、SPIの最新データグラムが動作中に送信されるように設定する必要があります。

図2.2 例1:μC、TMC4361A、TMC26x、モーターMと、モーターMに直接接続されたインクリメンタル・エンコーダ間の接続

図2.2 例1:μC、TMC4361A、TMC26x、モーターMと、モーターMに直接接続されたインクリメンタル・エンコーダ間の接続

例2:モーター・ドライバTMC262および絶対SSIエンコーダ

このセットアップは、μCからステッピング・ドライバを直接に設定する方法を表したものです。いずれにせよ、前述の例のようにTMC4361AのSPI出力インターフェースを介して、TMC262についても完全に設定および駆動ができます。このセットアップを用いると、モーター・ドライバにステップ入力を供給するために、ステップ方向の出力が必要です。また、否定SSIエンコーダ信号ラインはオプションです。 

注:

  • TMC4361Aは絶対SSIエンコーダに対応しており、シングルターン・データだけでなくマルチターン・データも供給します。
  • この場合、大半のクローズド・ループ・モーター・コントロール・アプリケーションでは、マルチターン・データの計算を(TMC4361Aの)内部でオンにする必要があります。
図2.3 例2:μC、TMC4361A、TMC262、モーターMと、モーターMに直接接続された絶対SSIエンコーダ間の接続

図2.3 例2:μC、TMC4361A、TMC262、モーターMと、モーターMに直接接続された絶対SSIエンコーダ間の接続

ヒント:3相ステッピング・モーターに対しては、TMC389モーター・ゲート・ドライバを使用できます。セットアップはオプションのStepDir接続を用いた場合の例1、または例2と同様です。

例3:モーター・ドライバTMC24x/23xおよび絶対SPIエンコーダ

このセットアップは、TMC4361AとTMCモーター・ゲート・ドライバTMC248/239/249の間の接続をサポートします。SPIの最新データグラムのみが送信され、設定は不要です。ステッピング・モーター・ドライバTMC246/236が接続されている場合、MOSFET電力段は不要です。その他の接続はすべて、このセットアップからの変更なく、移行できます。

SPIエンコーダは、本質的には差動ではありません。そのため、GENERAL_CONFレジスタ0x00でSPIエンコーダが選択されている場合、差動入力は自動的にオフになります。

注: 

  • TMC4361Aは絶対SPIエンコーダに対応しており、シングルターン・データだけでなくマルチターン・データも供給します。
  • この場合、大半のクローズド・ループ・モーター・コントロール・アプリケーションでは、マルチターン・データの計算を内部でオンにする必要があります。
図2.4 例3:μC、TMC4361A、TMC248/239/249、モーターMと、モーターMに直接接続された絶対SPIエンコーダの間の接続。TMC249/239を用いる場合、MOSFETドライバ段は不要です。

図2.4 例3:μC、TMC4361A、TMC248/239/249、モーターMと、モーターMに直接接続された絶対SPIエンコーダの間の接続。TMC249/239を用いる場合、MOSFETドライバ段は不要です。

例4:モーター・ドライバTMC2130およびインクリメンタルABNエンコーダ

TMC26130は、TMC4361AのSPI出力インターフェースを介して、完全に設定および駆動ができます。TMC2130のレジスタに対する設定アドレス値は、TMC4361Aのカバー・レジスタ0x6Dにアドレス指定される必要があります。一方、データ値はカバー・レジスタ0x6Cにアドレス指定される必要があります。これは、40ビット全体をTMC2130に送信する必要があるためです。TMC2130は、このレジスタ0x6Cに書込み後自動的に送信を行います。そのため、μCからTMCモーター・ドライバへの接続は不要です。両デバイス間の通信はTMC4361Aを通じて行うことができるためです。SPI出力が設定用にのみ用いられる場合、TMC4361AのStepDir出力ピンを、モーター・ドライバにステップを供給するために用いることができます。インデックス信号Nもオプションです。

ステップ方向信号を用いない場合、SPIOUT_CONFレジスタ0x04は、SPIの最新データグラムが動作中に送信されるように設定する必要があります。

図2.5 例4:μC、TMC4361A、TMC2130、モーターMと、モーターMに直接接続されたインクリメンタルABNエンコーダ間の接続

図2.5 例4:μC、TMC4361A、TMC2130、モーターMと、モーターMに直接接続されたインクリメンタルABNエンコーダ間の接続

例5:モーター・ドライバおよびインクリメンタルABNエンコーダ

ここでは、TMC4361Aが任意のモーター・ドライバと接続されます。ドライバがTMCのSPI設定方式に対応していない場合、この設定はμCを通じて行う必要があります。ただし、SPI通信がTMCのドライバ用のものと同じである場合は、この設定はTMC4361Aを通じて行うことができます。ほとんどの場合、ステップ方向出力が必要です。DACがTMC4361AのSPI出力に直接接続している場合のみ、最新データグラムをモーター動作用に使用できます。詳細については、TMC4361Aを参照してください。

図2.6 例5:μC、TMC4361A、任意のモーター・ドライバ段、モーターMと、モーターMに直接接続されたインクリメンタルABNエンコーダ間の接続

図2.6 例5:μC、TMC4361A、任意のモーター・ドライバ段、モーターMと、モーターMに直接接続されたインクリメンタルABNエンコーダ間の接続

2.5 μCからTMC4361Aへのレジスタ・アクセス


その後に生じる(μCからTMC4361Aへの)データグラムは、特定のレジスタの現在の値に対し桁数を拡張するための16進数として書き込まれます。

レジスタへの書込みアクセスには、最上位ビットが「1」でなくてはならない点に注意してください。詳細については、TMC4361Aのマニュアルを参照してください。

例えば、与えられたGENERAL_CONFレジスタ0x00のビット13を「1」、ビット18を「0」にセットする必要がある場合、次のシーケンスで必要なデータグラムが得られます。

     
GENERAL_CONF && 0xFFFFFBFFFF ||  0x8000002000.
GENERAL_CONF (example)  = 0x0012345678
&& 0xFFFFFBFFFF 0x0012305678 
|| 0x8000002000 0x8012307678 

以上で、0x8012307678をTMC4361Aに送信でき、特定のスイッチがセットされます。


2.6 SPI出力設定をTMCモーター(ゲート)ドライバ用にセットアップ


最新データグラムをTMC4361AからTMCモーター(ゲート)ドライバに送信する必要がある場合や、設定データグラムをμCからTMC4361Aを経てTMCモーター(ゲート)ドライバに送信する必要がある場合、SPI出力は、SPIOUT_CONFレジスタ0x04で正しく設定する必要があります。このセットアップは、TMC4361Aに接続されているモーター(ゲート)ドライバに依存します。以下に示すタイミングは同等に適用されます。

  • SPI_OUT_BLOCK_TIME = 8クロック・サイクル
  • SPI_OUT_LOW_TIME = 4クロック・サイクル
  • SPI_OUT_HIGH_TIME = 4クロック・サイクル

この設定により、データ・レートはベースとなるクロック周波数より8倍遅くなります。これより速い転送や遅い転送も可能ですが、それは基板レイアウトに依存します。COVER_DATA_LENGTHは0にセットされ、選択したTMCモーター(ゲート)ドライバに応じてカバー・データグラムのビット長を適用する自動割り当てが強制的に行われます。

更に、ビット12:4を用いることで、ドライバとの通信を更に調整できます。ドライバ固有の設定値とタイミングの詳細については、TMC4361Aのマニュアルを参照してください。

TMC motor (gate) driver Using only StepDir for motion control Order µC→TMC4361A
TMC23x - SPIOUT_CONF&& 0x0000001FF0 || 0x8484400008 
TMC24x - SPIOUT_CONF && 0x0000001FF0 || 0x8484400009 
TMC26x - SPIOUT_CONF && 0x0000001FE0 || 0x848440000A
SPIOUT_CONF && 0x0000001FE0 || 0x848440000B
TMC389 - SPIOUT_CONF && 0x0000001FF0 || 0x848440001A
SPIOUT_CONF && 0x0000001FF0 || 0x848440001B
TMC21xx - SPIOUT_CONF && 0x0000001FE0 || 0x848440000D
SPIOUT_CONF && 0x0000001FE0 || 0x848440000C

2.7 INTR出力設定のセットアップ


実行されたカバー・データグラムをポーリングしなくて済むように、INTR出力ピンを使用することを推奨します。割込み極性(デフォルト:アクティブ・ローの割込み)の設定後、COVERDONEイベント(イベント・レジスタ0x0Eビット25)を、INTR_CONFレジスタ0x0DにおいてINTR出力として指定する必要があります。その後、ステータス・イベント・レジスタ0x0Eをクリアする必要があります。これは、このビットを読み出すことで簡単に実行できます。 

これで、全割込みが転送されたカバー・データグラムを示すようになります。その後、次のカバー・データグラムを開始できます。割込みがすべて終了した後、ステータス・イベント・レジスタ0x0Eを読み出して、割込みをクリアする必要があります。以下のシーケンスは、次章に示す起動時のほとんどの命令シーケンスにおいて反復されます。これには、COVER_DONEイベントをINTRでの割込みとして指定することや、起動後最初にすべてのEVENTSビットをクリアすることが含まれます。

シーケンス コメント 命令μC→TMC4361A
1. COVERDONEをINTRとして指定 0x8D02000000
2. 起動後にイベントをクリア 0x0E00000000

注:EVENT_CLEAR_CONFレジスタ0x0Cを用いることによってEVENTSレジスタの特定のビットが保護されている場合、そのビットは、EVENTSレジスタ0x0Eに書込みアクセスを行うことによってリセットする必要があります。詳細については、TMC4361Aのデータシートを参照してください。


2.8 TMC26x/389をセットアップするためにカバー・データグラムを送信


TMC24x/23xは、レジスタ要求では設定できません。その他のTMCステッピング・モーター(ゲート)ドライバは、TMC4361Aのカバー・データグラム機能を用いることにより設定できます。その機構をTMC26x/389を援用して説明します。そのために、ドライバが動作状態になるように5個のレジスタを設定する必要があります。

ドライバの読出し応答は、COVER_DRV_LOWレジスタ0x6Eで読み出すことができます。ただしいずれにしても、これは必要ありません。ステータス・ビットがTMC4361Aのステータス・フラグ・レジスタ0x0Fに自動的に割り当てられるためです。

以下において、μCからTMC4361Aへのデータグラムのシーケンスを、TMC26x/389のセットアップの例と共に示します。設定すべき重要な値は、チョッパー設定(CHOP_CONF)、モーター(ゲート)ドライバでの最大電流制限値を決定する電流スケール(CS)ビット、StepDirディスエーブル・ビット(SDOFF)、センス抵抗値(VSENSE)です。TMC26x/389のすべてのレジスタを現在の基板セットアップに適合させる必要があります。詳細については、TMC26x/389のマニュアルを参照してください。

シーケンス コメント 命令 μC→TMC4361A
1. COVERDONEをINTRとして指定し、イベントをクリアします。 See section 2.7
2. TMC26x/389(カバー・データグラム)のDRVCTRLレジスタを次のように設定します:シングル・エッジ・ステップ、ステップ補間の無効化、マイクロステップ分解能:256 0xEC00000000
3. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
4. TMC26x/389(カバー・データグラム)のCHOPCONFレジスタを次のように設定します:tbl=36、標準チョッパー、HDEC=16、HEND=11、HSTR=1、TOFF=5、RNDTF=off 0xEC00090585
5. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
6. TMC26x/389(カバー・データグラム)のSMARTENレジスタを無効化します。 0xEC000A0000
7. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
8. TMC26x/389(カバー・データグラム)のSGCSCONFレジスタを次のように設定します:SGT=0、CS=31(最大値!) 0xEC000C001F*
9. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
10. a)

TMC26x/389(カバー・データグラム)のDRVCONFレジスタを次のように設定します:SLPH=3、SLPL=3、DISS2G=オフ、TS2G=0~3.2μs、SDOFF=オン、VSENSE=0*

- TMC26x/389が、StepDir入力信号ではなく、最新データグラムを評価する必要がある場合は、この設定を使用します。

- それに対応してTMC4361AのSPI_OUT CONFレジスタを設定する必要があります。

0xEC000EF080*
10. b)

TMC26x/389(カバー・データグラム)のDRVCONFレジスタを次のように設定します:SLPH=3、SLPL=3、DISS2G=オフ、TS2G=0~3.2μs、SDOFF=オフ、VSENSE=0*

- TMC26x/389が、最新データグラムではなく、StepDir入力信号を評価する必要がある場合は、この設定を使用します。 

- それに対応してTMC4361AのSPI_OUT CONFレジスタを設定する必要があります。

0xEC000EF000*
11. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
*電流設定値については、次のセクションで説明します。

2.9 TMC26xに適切な電流設定を行うための設定例


電流設定値は、使用するモーターのタイプに応じて異なります。以下では、TMC26xのCS(電流スケーリング)とVSENSEに適切な電流設定値を設定する方法について、2つの例を説明します。電流の例は、ピーク電流に関して設定されています。TMC26xのこれらの設定値が到達可能な最大電流値となるためです。 

例1: 条件:モーター電流IRMS = 0.85 A、センス抵抗:RSENSE = 0.22 Ω

設定値:

VSENSE = 0 → センス抵抗電圧VFS = 305mV(FS - フルスケール)

→ 最大可能電流IFS = VFS / RSENSE = 1.39A

IPEAK = IRMS ∙ √2 = 1.2 A

→ CS = IPEAK / IFS ∙ 32 – 1 = 26

結果:

シーケンス番号8でのカバー・データグラム:0xEC000C001A および
シーケンス番号10a)でのカバー・データグラム :0xEC000EF080または
シーケンス番号10b)でのカバー・データグラム :0xEC000EF000 

例2: 条件:モーター電流IRMS = 0.5、センス抵抗:RSENSE = 0.15Ω

設定値:

VSENSE = 1 → センス抵抗電圧VFS = 165mV

→ 最大可能電流IFS = VFS / RSENSE = 1.1 A

IPEAK = IRMS ∙ √2 = 0.71 A

→ CS = IPEAK / IFS ∙ 32 – 1 = 19

結果:

シーケンス番号8でのカバー・データグラム:0xEC000C0013 および
シーケンス番号10a)でのカバー・データグラム :0xEC000EF0C0 または
シーケンス番号10b)でのカバー・データグラム :0xEC000EF040

注意:クローズド・ループの電流スケーリング(第5章)を用いない場合、電流設定値は、低速動作時の過電流を防ぐためにピーク電流ではなく実効値電流に一致する必要があります。


2.10 TMC21x0の設定例


以下において、μCからTMC4361Aへのカバー・データグラムのシーケンスを、TMC21x0のセットアップ例と共に示します。40ビット全部がTMC21x0との間で送受信されるため、カバー・レジスタを両方共(COVER_LOW0x6CおよびCOVER_HIGH 0x6D)用いる必要がある点を除き、起動シーケンスはTMC26xに対する説明と同じです。ドライバの読出し応答は、COVER_DRV_LOWレジスタ0x6ECOVER_DRV_HIGH 0x6Fで読み出すことができます。設定すべき重要な値は、VSENSEを含むチョッパー設定(CHOP_CONF)、モーター(ゲート)ドライバでの最大電流制限値を決定する電流スケール(CS)ビット、GCONFレジスタのStepDirディスエーブル・ビット(direct_mode)です。TMC21x0の他のレジスタはすべて、実際の基板セットアップに適合させる必要があります。詳細については、TMC21x0のマニュアルを参照してください。

シーケンス コメント 命令 μC→TMC4361A
1. COVERDONEをINTRとして指定し、イベントをクリアします。 See section 2.7
2. a)

TMC21x0(カバー・データグラム)のGCONF 0x00レジスタを次のように設定します:direct_mode=0 → StepDirモード・オン

- TMC26x/389が、StepDir入力信号ではなく、最新データグラムを評価する必要がある場合は、この設定を使用します。 

- それに対応してTMC4361AのSPI_OUT CONFレジスタを設定する必要があります。

0xED00000080

0xEC00000000

2. b)

TMC21x0(カバー・データグラム)のGCONF 0x00レジスタを次のように設定します:direct_mode=1  StepDirモード・オフ

- TMC26x/389が、StepDir入力信号ではなく、最新データグラムを評価する必要がある場合は、この設定を使用します 

-それに対応してTMC4361AのSPI_OUT CONFレジスタを設定する必要があります。

0xED00000080

0xEC00010000 

3. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
4.

TMC21x0(カバー・データグラム)のCHOPCONFレジスタ0x6Cを次のように設定します:

256マイクロステップ、vsense=0、TBL=36クロック・サイクル、spreadCycleチョッパー、HEND=1、HSTRT=2、TOFF=3

0xED000000EC

0xEC00010223**

5. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
6. a)

TMC21x0(カバー・データグラム)のIHOLD_IRUNレジスタ0x10を次のように設定します:

IHOLD_DELAY=5、IHOLD=31、IRUN=31- SPIモード(StepDirモード・オフ):受信する最新データグラムはすべてIHOLDによってスケーリングされるため、この値は最大値に設定します。

0xED00000090

0xEC00051F1F**

6. b)

TMC21x0(カバー・データグラム)のIHOLD_IRUNレジスタ0x10を次のように設定します:

IHOLD_DELAY=5、IHOLD=15、IRUN=31 (最大値!)

0xED00000090

0xEC00050F1F**

7. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
**電流設定値については、次のセクションで説明します。

2.11 TMC21x0に適切な電流設定を行うための設定例


電流設定値は、使用するモーターのタイプに応じて異なります。以下では、TMC21x0のIRUNやIHOLD(電流スケーリング)およびVSENSEに適切な電流設定値を設定する方法の例を説明します。電流の例は、ピーク電流に関して設定されています。TMC21x0のこれらの設定値が到達可能な最大電流値となるためです。 

例1: 条件:モーター電流IRMS = 0.85 A、センス抵抗:RSENSE = 0.22 Ω

設定値:

VSENSE = 0 → センス抵抗電圧VFS = 320mV(FS - フルスケール)

→ 最大可能電流IFS = VFS / RSENSE = 1.33 A

IPEAK = IRMS ∙ √2 = 1.2 A

→ CS = IPEAK / IFS ∙ 32 – 1 = 27

結果:

シーケンス番号4でのカバー・データグラム: vsense=0に設定
シーケンス番号6a)でのカバー・データグラム: 0xEC00051B1B または
シーケンス番号6b)でのカバー・データグラム: 0xEC0005xx1B

3 クローズド・ループ・コントロール用の基本的なエンコーダ・セットアップ

以下では、TMC4361Aのクローズド・ループ動作用の基本的なエンコーダ・セットアップを説明します。


3.1 エンコーダの一般的な選択


既に述べたように、様々なタイプのエンコーダ(GENERAL_CONFレジスタ0x00ビット11:10を設定することで選択)がサポートされています。また、GENERAL_CONFのビット12を有効化することにより、差動入力を無効化するオプションもあります。デフォルトでは、SPIエンコーダを除き、差動入力は有効化されています。実際上、以下が可能です。 

Encoder type Differential output Order µC→TMC4361A
ABN encoder GENERAL_CONF && 0x00FFFFE3FF || 0x8000000000
- GENERAL_CONF && 0x00FFFFE3FF || 0x8000001000
SSI encoder   GENERAL_CONF && 0x00FFFFE3FF || 0x8000000400
- GENERAL_CONF && 0x00FFFFE3FF || 0x8000001400
SPI encoder - GENERAL_CONF && 0x00FFFFF3FF || 0x8000000C00 

ENC_IN_CONFレジスタ0x07で、Nイベントの設定を適応させることができます。特に、ビット(11:2)を設定する必要があります。clear_on_n(ビット1)はセットしないでください。外部ポジションENC_POSをクリアすると、ほとんどの場合、正しいクローズド・ループ動作が必ず妨害されてしまうためです。


3.2 絶対エンコーダの設定


絶対エンコーダを(対応するGENERAL_CONFを設定して)アクティブとして指定する前に、データ転送方式を正しく設定してください。 

そのため、シリアル・エンコーダ・データ入力レジスタENC_IN_DATA 0x08を変更すると、データ転送のビット長と、それに対応するTMC4361Aによるデータの変換が変わります。更に、マルチサイクル・データとグレイ・コードの有効化は、ENC_IN_CONFレジスタ0x07ビット17ビット18を調整することによってセットできます。ビット19は、データのアライメントの解釈を変更します。

データ転送のビット・カウントを設定することで、TMC4361Aがシリアル・エンコーダ用に生成するクロック・サイクル数が自動的に割り当てられます。データ転送/クロックのタイミングは、0x56(ロー・レベルとハイ・レベルの時間)、0x570x58の各レジスタを変更することによって調整できます。これらのレジスタは、絶対エンコーダのデータ転送に必要な遅延時間を調整します。詳細については、TMC4361Aのマニュアルを参照してください。

最後に、SPIエンコーダのSPIデータ転送は、ENC_IN_CONFレジスタ0x07ビット20ビット21を用いることによって、変更できます。

ENC_IN_CONFレジスタ0x07のビット12とビット13は、エンコーダがマルチターン・データ機能をサポートしている場合に、これを有効化します。エンコーダから送信されるのがシングルターン・データのみである場合、クローズド・ループ・モーター・コントロール・アプリケーションにおいては、マルチターン・データはTMC4361Aが計算する必要があります。そのため、レジスタ0x07ビット16(calc_multi_turn_behav)を「1」にセットしてください。こうすることで、シングルターン・データにオーバーフローが検出された場合、TMC4361Aは1回転を加えたり差し引いたりします。


特に注意を要する点


マルチターン計算モードの間、連続するデータ転送のエンコーダ値の間の差は、1回転の半分を超えてはいけません。

最大データ変動を制限

差が著しく大きいエンコーダ値を受け入れないようにするには、ENC_IN_CONFレジスタ0x07のビット31とSER_ENC_VARIATIONレジスタ0x63のビット(7:0)を使用してください。このserial_enc_variation_limitスイッチを有効化すると、エンコーダ・データの差が実際のENC_POSと比較して1/8 · SER_ENC_VARIATION · ENC_IN_RESより大きい場合に、これを自動的に除去します。


3.3 エンコーダの分解能


エンコーダの分解能を正しく設定することは必須です。まず、1回転あたりのフル・ステップ数を適切に設定する必要があります。そのため、STEP_CONFレジスタ0x0AFS_PER_REV値をチェックする必要があり(デフォルト:1回転あたり200フル・ステップ)、必要に応じて変更します。更に、クローズド・ループ動作には256マイクロステップが必須であるため、フル・ステップあたりのマイクロステップ数MSTEP_PER_FSは調整しないでください。

注:

クローズド・ループ・コントロールの場合、レジスタ0x0Aのフル・ステップあたりのマイクロステップ数MSTEP_PER_FSは、256に設定しなくてはなりません。

必然的に、エンコーダの分解能ENC_IN_RES(レジスタ0x54)を設定する必要があります。この値は、1回転あたりのエンコーダ・ステップ数として定義されます。

エンコーダ・ステップあたりのマイクロステップ数の内部計算された定数値は、15桁の整数部と16桁の小数部の形式で0x54(30:0)から読み出せます。

この値は、インクリメンタル・エンコーダの検出されたエンコーダ・ステップごとにエンコーダ・ポジションENC_POSに追加される、マイクロステップ数を表します。絶対エンコーダの場合、この定数に現在の角度が乗じられます。これもマイクロステップ数を表すエンコーダ・ポジションENC_POSになります。エンコーダ定数は、次式で計算されます。

ENC_CONST = MSTEPS_PER_REV ∙ FS_PER_REV / ENC_IN_RES.

デフォルトでは、小数部は2進数です。しかし、アプリケーションによっては、小数部に10進数表示を用いた方が良い場合があります。その場合、小数部0x54(15:0)は1/10000として計算されます。

自動計算の場合、TMC4361Aは、最適な表示方法を採用します。どちらの表示方法でもエンコーダ定数を正確な16桁の小数部に割り当てられない場合のみ、ENC_IN_CONFレジスタのビット0によって、2進数表示(ビット0=「0」)か10進数表示(ビット0=「1」)かが決まります。エンコーダ定数が不正確な場合、長時間経過するとエンコーダとの不一致が生じる点に注意してください。次の項では、2つの例を用いて両表記法による違いを明らかにします。

例1:

8192個のポール・ペアを用いるインクリメンタル・エンコーダは、ポール・ペアあたり4個のAB遷移が可能であるため、1回転あたり32768のエンコーダ・ステップを発生します。そのため、ENC_IN_RESを32768に設定する必要があります。フル・ステップあたり256マイクロステップ、および1回転あたり200フル・ステップの場合、ENC_CONSTのエンコーダ定数は1.5625になります。この値は、2進数で正確に表現でき、0x54で次の値が読み出せます:ENC_CONST = 0x00019000

例2:

500個のポール・ペアを用いるインクリメンタル・エンコーダは、ポール・ペアあたり4個のAB遷移が可能であるため、1回転あたり2000のエンコーダ・ステップを発生します。そのため、ENC_IN_RESを2000に設定する必要があります。フル・ステップあたり256マイクロステップ、および1回転あたり200フル・ステップの場合、ENC_CONSTのエンコーダ定数は25.6になります。10分の6という値は16桁の2進数小数部では正確には表現できません。そのため、6000/10000という10進数表示がENC_CONST に用いられます:ENC_CONST =0x00191770

エンコーダ定数を手動で計算する必要がある場合、0x54のレジスタのMSBを「1」にセットすることによって、このレジスタに直接書き込むことができます。例えば、エンコーダ定数を手動で25.6に設定する場合、レジスタ0x54に0x80191770を書き込みます。これは10進数表示であるため、0x07のビット0を「1」にセットする必要があります。「0」にセットした場合は、エンコーダのステップ・ポジションは2進数のエンコーダ定数で計算されます。

最後に、エンコーダの方向はモーターの方向と一致している必要があります。これは様々な設定によって実現できます。そのため、モーターは、任意の方向にオープン・ループ・セットアップで移動させます(事前にエンコーダの分解能を設定しておく必要があります)。内部ポジションX_ACTUALと外部ポジションENC_POSの符号が同じ場合、モーターとエンコーダの方向は一致しています。変更する必要はありません。一致する場合とは反対に、モーターとエンコーダに差がある場合、正確なセットアップを行うために以下の方法が使用可能です。

  • ENC_IN_CONFレジスタ0x07のinvert_enc_dirのビット29を設定して、エンコーダの方向を反転する。または
  • モーター・ケーブルを取り替えるか
  • エンコーダを付け直す。

ハードウェアを変更する必要がないため、1番目のセットアップ変更方法を用いることを推奨します。


特に注意を要する点


invert_enc_dirスイッチを、シリアル・エンコーダや手動定義エンコーダ定数とは組み合わせて使用しないでください。ENC_IN_RESの値は、1回転の分解能を定義するためです。

ほとんどの場合、手動エンコーダ定数が回転分解能とは一致しないため、この組み合わせを行うと不具合が生じます。


3.4 エンコーダの補償


エンコーダの系統的な不一致は、オン・チップで補償できます。特に、磁気エンコーダは、エンコーダが正しく取り付けられている場合でも、出力値に大きな変動があります。取り付けが不完全なエンコーダの場合、円にならない値を返す可能性があります。多くの場合、実際のポジションからの偏差は、サイン関数と同様の新しい関数になります。三角形状のオフセットを追加することで、エンコーダ値の評価を大幅に改善できます(図3.1参照)。

図3.1 エンコーダの不一致を補償する三角波関数の適用

図3.1 エンコーダの不一致を補償する三角波関数の適用

左の図は、エンコーダ・ポジションと実際のポジションの差(青色の点がポジション差)を、エンコーダの256マイクロステップからなる1回転の範囲でマイクロステップの関数として表したものです。適切な三角波関数を組み合わせその関数の値をポジションの偏差に加えることで、右側のグラフが得られます。このグラフでは、無補償時の値に比べポジションの偏差が大幅に減少しています。TMC4361Aは、この簡単な補償アルゴリズムを備えており、内部マイクロステップ・カウンタENC_POSがオンになっている場合に、これに自動的にマイクロステップ・オフセットを追加します。レジスタ0x7Dに正しく割り当てる必要があるパラメータは、次の3つのみです。

  • ENC_COMP_XOFFSET (XOFF) :1回転あたりのマイクロステップ数で正規化した、16ビット符号なし横座標値
  • ENC_COMP_YOFFSET (YOFF):マイクロステップ単位で表した、三角波関数の最小値の8ビット符号付き縦座標値
  • ENC_COMP_AMPL (AMPL) :三角波関数の8ビット符号なし最大振幅値(127を超えてはなりません。

注:

  • 正しく補償するには、三角波関数がポジション偏差関数と反対になっていることが必要です。つまり、ポジション偏差関数の最大値は三角波関数の最小値となり、ポジション偏差関数の最小値は三角波関数の最大値となります。
  • 三角波関数の最大値の横座標は最小値の座標から半回転分離れた位置として定義されます。
  • 補償アルゴリズムは明示的にオンにする必要はありません。このアルゴリズムは常時オンになっていますが、エンコーダ補償レジスタが0にセットされている限り、すべての値は0で補償されます。

ENC_COMP_XOFFSETの正しい値を求めるには、三角波関数の最小値を指定する必要があります。この関数の最小値の引数はXオフセットです。このレジスタは、1回転あたりのマイクロステップ数に正規化されているため、この値を1回転あたりのマイクロステップ数で除算し、2^16を乗じる必要があります。

例1:

フル・ステップあたり256マイクロステップで200フル・ステップのモーターの場合、1回転あたりのマイクロステップ数は51200です。三角波関数の最小値は、(10000マイクロステップ; −12マイクロステップ)の位置にあり、最大値の偏差は65マイクロステップです。

  • ENC_COMP_XOFFSET = 10000 / 51200 * 2^16 = 12800
  • ENC_COMP_YOFFSET = -12
  • ENC_COMP_AMPL = 65 - (-12) = 77

したがって、三角波関数の最大値は(35600; 65)の位置にあります。

例2:

フル・ステップあたり256マイクロステップで72ブルステップのモーターの場合、1回転あたりのマイクロステップ数は18432です。三角波関数の最小値は、(11000マイクロステップ, −54マイクロステップ)の位置にあり、最大値の偏差は8マイクロステップです。

  • ENC_COMP_XOFFSET = 11000 / 18432 * 2^16 = 39111
  • ENC_COMP_YOFFSET = -54
  • ENC_COMP_AMPL = 8 - (-54) = 62

したがって、三角波関数の最大値は(1784; 65)の位置にあります。

エンコーダ不一致の自動リニアライゼーション

次のシーケンスは、所定のセットアップに対する補償データを求める方法を提案するものです。

  1. モーター・ドライバとエンコーダを正しくセットアップします(無負荷、最大電流
  2. モーターをENC_POS = 0に移動させます。
  3. X_ACTUALを0にセットします。
  4. 数回転の間、一方向に移動させ、全フル・ステップ・ポジション(MSCNT =128/384/640/896)でENC_POS_DEVの値を保存します。
  5. 逆方向に移動させて同じデータを保存し、両方向および数回転での平均値を計算します。
  6. 保存したポジション偏差の値の最小値と最大値を比較して、三角波関数の最小値と最大振幅を計算します。
  7. 補償値レジスタ0x7Dを正しく設定します。
  8. 再度両方向に移動させ、補償が正しく機能しているか確認します。正しく機能していない場合、2以降を繰り返します。
  9. この後にパワーアップを実行した後、XACTUALとENC_POSの各ポジションが初期プロセス(2~7)の設定と異なっていないことを確認する必要があります。

注:

  • 三角波関数の最大値は最小値の位置から半回転分離れた位置にあるため、実際のポジション偏差がサイン関数と正確に一致しない場合は、補償レジスタを最小値の周辺で様々に設定してみて、最善の補償結果が得られるようにすることを推奨します。 

4 クローズド・ループのセットアップ

TMC4361Aエンコーダの性質を正しく設定した後、それに応じてクローズド・ループのすべての性質をセットアップする必要があります。この章の最後で説明するクローズド・ループ動作モードのキャリブレーションおよびスイッチ・オンの前に、あらゆる設定セットアップ・ステップを完了する必要があります。また、オプション機能は、この後の第5章と第6章で説明します。基本的なクローズド・ループ・モーター・コントロール動作の場合、設定すべき値はわずかです。 

  1. エンコーダ・ポジションENC_POSと内部ポジションXACTUALの間に実際に生じている不一致に応じて、TMC4361Aが引き起こす外部フィールドが一定の角度オフセット分だけ変更され、この不一致が克服されます。この最大整流角CL_BETA 0x1C(8:0)は、0~511マイクロステップの範囲で設定できます。ここで、フル・ステップあたり256マイクロステップに設定されている場合、255マイクロステップは90ºに相当します。ポジションの不一致がCL_BETAマイクロステップを超えている限り、最大整流角を用いてポジションの不一致が解決されます。実際のモーター角に90ºのオフセットを設けることは、モーターに最大のフォース(力)を印加するのと等価であるため、最高性能を発揮するには、CL_BETA =255(デフォルト値)が最適です。角度値が大きくなると、フィールドを弱める動作が生じ、速度は高くなりますが、フォースは弱まります。

  2. 注:

    • 最大差CL_BETAに達すると、レギュレーションは最大整流角CL_BETAで継続されます。この場合、イベントCL_MAXが発生します。
  3. 最大整流角に達していない限り、クローズド・ループ比例項CL_DELTA_P 0x5Cによってポジション不一致への応答が決まります。この値が大きいほど、ポジション不一致への応答が強くなりますが、振動する可能性も高まります。また、値が大きくなると、より小さなポジション不一致で最大整流角CL_BETAに到達します(図4.1参照)。CL_DELTA_Pの表記は、8桁整数と16桁の小数で構成されます。例えば、CL_DELTA_P = 0x018000 = 1.5の場合、整流角は、現在のポジション不一致から1.5倍されます。以下の表では、3種類のセットアップが例証され、様々な設定の差が明らかになっています(フル・ステップあたりのマイクロステップ数 = 256)。
  4. Setup No:  1 2 3
    CL_BETA = 255 (0x0FF) 200 (0x0C8) 275 (0x113)
    CL_DELTA_P = 1.5 (0x018000) 0.9375 (0x00F000) 2.75 (0x02C000) 
    Position mismatch (microsteps/angle) Commutation angle(microsteps/angle) (red entry - maximum angle reached!)
    36 / 12.7° 54 / 19.0° 34 / 12.0° 99 / 34.8°
    96 / 33.8° 144 / 50.6° 90 / 31.6° 264 / 92.8°
    148 / 52.0° 222 / 78.0° 139 / 48.9° 275 / 96.7° 
    210 / 73.8° 255 / 90° 197 / 69.3° 275 / 96.7°
    266 / 93.5° 255 / 90° 200 / 70.3° 275 / 96.7°
  5. 最後に、CL_TOLERANCE 0x5F(マイクロステップ)を正しく設定することで、不一致の範囲が−CL_TOLERANCEと+CL_TOLERANCEの間になります。この場合、CL_DELTA_Pは自動的に1.0になります。エンコーダ・ノイズがあるため、エンコーダ遷移の応答が速すぎることのないように(CL_DELTA_P > 1.0の場合)、CL_TOLERANCEをENC_CONSTより少なくともわずかに高く設定することを推奨します。

注:

  • 内部ポジションと外部ポジションの差がCL_TOLERANCEの値で生成される範囲内の場合、フラグCL_FIT_Fは解除されます。ENC_POS_DEVがそれまでの許容値より大きい場合、イベントCL_FITも生成され、不一致後に内部ポジションと外部ポジションの一致が得られたことを通知します。
図4.1 補正ターゲット・ポジションの計算(CL_BETA = 255(90º)、p_PID = CL_DELTA_P)

図4.1 補正ターゲット・ポジションの計算(CL_BETA = 255(90º)、p_PID = CL_DELTA_P)

4.1 最大補正速度の制限


クローズド・ループ・モーター・コントロールがオンになった後は、TMC4361Aは常にポジション不一致をカウントしようとします。それ以外の設定が行われていない場合、補正はできる限り迅速に割り当てられます。キャッチアップ速度を制限するには、TMC4361Aの内蔵PIレギュレータを使用できます。以下のパラメータに様々な値を指定することで、クローズド・ループ速度制限効果を最適化できます。

  • 比例項CL_VMAX_CALC_Pレジスタ0x5Aと積分項CL_VMAX_CALC_Iレジスタ0x5Bは、PIレギュレータを最大速度制限となるよう定義します。PIDレギュレータは、128クロック・サイクルごとに更新されます(更新周波数 = fCLK/128)。積分項は、CL_VMAX_CALC_I / 256とPID_ISUM / 256の積です。現在の積分和PID_ISUMは、レジスタ0x5Bで読み出せます。
  • PID_DV_CLIPレジスタ0x5Eの値を設定することにより、現在の内部速度VACTUALに加算/減算される(内部方向に依存)最大速度値(pps(1秒あたりのパルス、小数部はなし))が定まります。例えば、PID_DV_CLIP が20000pps ( 0x00004E20 ) 、VACTUAL が100000.0ppsに設定されている場合、結果として得られる最大キャッチアップ速度は、120000spsを超えません。そのため、PID_DV_CLIPを0に設定すると、キャッチアップができない静的な動作になります。
  • PID_I_CLIPレジスタ0x5D(14:0)の値を設定することもできます。これは、PID_ISUMのクリッピング・パラメータであり、これにより実際のクリッピング値PID_ISUMCLIPPEDはPID_ICLIP ∙ 216になります。PID_I_CLIPの最大値は、PID_I_CLIP ≤ PID_DV_CLIP / PID_Iという条件を満たす必要があります。誤差の和であるPID_ISUMがクリップされていない場合、この値は、時間ステップごとに、PID_I • PID_Eだけ増加します。モーターが追従しない限りこれが継続します。

値が適切に設定されている場合、ENC_IN_CONFレジスタ0x07cl_vlimit_enスイッチをアクティブ化する(=「1」)ことによって速度制限をオンにできます。

ENC_IN_CONF && 0x00FE7FFFFF || 0x8708000000.

内部ランプ計算の最後でもポジション差が残っている場合、補正のためのSPIやStep/Dirの出力ランプは、現在のランプの種類とは無関係に、線形減速ランプとなります。誤差補正のためのこの最終ランプは、ENC_POS_DEVとPI制御パラメータ(CL_VMAX_CALC_P、CL_VMAX_CALC_I、PID_I_CLIP、PID_DV_CLIP)の関数です。


4.2 ランプ・ポジショニング・モード時のクローズド・ループ動作


内部ポジショニング・モード時にクローズド・ループ動作がオンになっている場合、ポジション不一致の絶対値ENC_POS_DEVがCL_TR_TOLERANCEレジスタ0x52で指定された値を超えている限り、TARGET_REACHEDステータスはアクティブ化されません。これによって、内部ランプが終了した場合でも、ターゲットに到達したどのフラグ/イベントも、外部ポジションが内部ポジションと所定の許容範囲内で一致しない限り、解除されません。


4.3 クローズド・ループ速度モード


ENC_IN_CONFレジスタ0x07ビット28を切り替えることによってクローズド・ループ速度モードをオンにすることもできます。

ENC_IN_CONF && 0x00FE7FFFFF || 0x8710400000.

このモードでは、ポジション差ENC_POS_DEVが768マイクロステップを超過するとXACTUALが操作されます。その場合、XACTUALは、ENC_POSの方向に向かって256マイクロステップ変化します。そのため、ポジションの不一致は768マイクロステップを超えてはなりません。このようにすることで、TMC4361Aが所定の速度VMAXに一致するよう常に試行する速度モードが実現できます。更に、最大速度VMAXを超過してはいけない場合、PID_DV_CLIPを0に設定し、速度制限を有効化することを推奨します。この設定により、ポジション不一致が比較的小さくなるため、キャッチアップが可能になります。いずれにせよ、エンコーダが完全に正しく取り付けられ、分解能が高い場合、キャッチアップは非常に遅くなるか、あるいは全く実現されない場合があります。その場合は、設定した最大値VMAXに応じてPID_DV_CLIPを小さい値(例えば、1と1000の間)に設定します。

注:

基本的に、このクローズド・ループ動作モードは、速度ランプ・モードに適しています。いずれにせよ、ポジショニング・モードを速度クローズド・ループ動作モードと共に用いることは禁じられてはいません。内部ポジションXACTUALは永続的に適応させることが可能であるため、内部ランプが内部ポジショニング・ランプのエンド・ポイントに達しない可能性があります。


4.4 クローズド・ループのキャリブレーションとアクティブ化


以上で、基本的なセットアップを用いてクローズド・ループ・モーター・コントロール・モードで駆動する準備ができました。クローズド・ループ動作モードのキャリブレーションおよびスイッチ・オンの前に、あらゆる設定セットアップ・ステップを完了する必要があります。また、オプション機能は、この後の第5章と第6章で説明します。ENC_IN_CONFレジスタ0x07regulation_modusスイッチをb’01に設定することでクローズド・ループ動作をオンにすれば十分です。クローズド・ループ動作のキャリブレーションは、クローズド・ループ・モードがスイッチ・オンされていれば自動的に行われるためです。必要なのは、XACTUALレジスタ0x21がMSCNTレジスタ0x79に等しいことだけです。

いずれにせよ、補償されたエンコーダの性能を最大限に発揮するには、以下のキャリブレーション・シーケンスを実行する必要があります。

  1. 電流スケーリングを無効化し、最大電流でキャリブレーションします。
  2. オープン・ループ・モードで任意のフル・ステップ・ポジションに移動します。これは、サイン波形とコサイン波形のルックアップ・テーブルの絶対電流値が等しいこと(|CURRENTA| = |CURRENTB|(CURRENTAレジスタ0x7A(8:0); CURRENTBレジスタ0x7A(24:16)))を意味します。TMC4361Aのデフォルト波形とフル・ステップあたり256マイクロステップを用いると、XACTUAL mod 256 = 128(つまりXACTUAL = 128、384、-640、14976等)のとき、フル・ステップ・ポジションに達します。この場合に最も安定なポジションに達するはずです。すべてのインダクタを流れる電流の絶対値が同じになり、ローターに影響する各サイドからのフォースが等しくなるためです。モーター(ゲート)ドライバが独自のサイン波を使用する(例えば、TMC26xがStepDir入力を使用)場合、モーター・ドライバのフル・ステップ・ポジションに移動してください。
  3. 理想的には、エンコーダ・ポジションENC_POSは可能な限り切り替えないでください。エンコーダ・ポジションが揺動する場合は、次のフル・ステップ・ポジションを試してみてください。
  4. 次に、クローズド・ループ動作をオンにし(ENC_IN_CONF 0x07のビット23:22 = b’01)、即座にキャリブレーションします(ENC_IN_CONF 0x07のビット24 = 「1」)。 ENC_IN_CONF && 0x00FE3FFFFF || 0x8701400000 
  5. 10μs以上待ってから、クローズド・ループ・キャリブレーションをオフにします。 ENC_IN_CONF && 0x00FE3FFFFF || 0x8700400000

以上で、クローズド・ループ動作がアクティブになり、TMC4361Aは常に、外部ENC_POSと内部ポジションXACTUALを一致させようとします。両者の電流の差はENC_POS_DEVレジスタ0x52で読み出せます。クローズド・ループ動作の間、ENC_POS_DEVの値は、クローズド・ループ・オフセットCL_OFFSET(レジスタ0x59で読出し可能)を考慮します。この値は、キャリブレーション・プロセス中のポジションの差です。これは読出し可能ですが、書込み可能でもあります。 

注:

XACTUALがMSCNTに等しい場合、キャリブレーション・フェーズ(ステップ4)は省略できます。クローズド・ループ動作の前にXACTUALを調整できる場合、ステップ3の後にXACTUALをセットアップします。


特に注意を要する点


クローズド・ループ動作に誤りがないようにするために、キャリブレーションの目的を除き、クローズド・ループ動作中にはクローズド・ループ・オフセットCL_OFFSETレジスタ0x59には書き込まないでください。

クローズド・ループ動作をオフにした後の再スタート時に再キャリブレーションをしなくて済むように、クローズド・ループをオンにし、格納されているCL_OFFSET値をそのレジスタに書き込みます。アプリケーションは以前と同じように移動します。CL_OFFSETを用いても、シャットダウン後のアプリケーションの再キャリブレーションの回避ができます。特に、絶対エンコーダを用いるシステムでは、この再キャリブレーション・オプションの恩恵を受けます。更に、クローズド・ループ動作を開始する前にXACTUALおよび回転数がENC_POSに書き込まれる(絶対エンコーダがオンになっている場合)と、モーターがオフ時間の間に動作していた場合でも、アプリケーション全体が最後に安定したクローズド・ループ・ポジションを見つけます。

ただし、1回転で正しい絶対位置を取得する目的にN信号が関与していないとき、インクリメンタル・エンコーダを用いる場合には、再キャリブレーションを行うためにこのオプションは使用しないでください。 

5 クローズド・ループ・モーター・コントロールの間の電流スケーリング

TMC4361Aは、クローズド・ループ動作にも使用できるスケーリング・ユニットを備えています。それによって、不一致が生じていない限り、エネルギーを節約できます。基本的に、SCALE_VALUESレジスタ0x06を適切に指定することにより、最大4つのパラメータを設定できます。(今後導入される)パラメータxの1つに対する特定の実際のスケール値は、次式を用いて計算できます。

real_scale_value = (x + 1) / 256.


特に注意を要する点


TMC26x / TMC21xxモーター(ゲート)ドライバがStepDirモードで用いられ、電流値がカバー・データグラムを介して転送される場合は、電流値の5個の下位ビットのみが転送されます。

そのため、このセットアップには以下の式が成り立ちます。 

real_scale_value = (x + 1) / 32

注:

続いて導入される値は、255を最大値とする電流スケーリングに基づいています。スケール値データグラムと共にStepDirモードを使用する場合は、導入された値をそれに応じて調整してください。

レジスタ0x06で以下の値を設定できます。

  • クローズド・ループ最大電流スケール値CL_IMAX = SCALE_VALUES(15:8):このレジスタを設定することにより、最大電流が設定されます。ポジション不一致ENC_POS_DEVがCL_BETAの制限を超過すると直ちに、この電流スケール値に達します。TMC26xの設定(セクション2.8を参照)の間、実効値電流がCSスケール値として指定されている場合、CL_IMAXを255に設定できます。それ以外の場合、ピーク電流IPEAKが設定されているならば、√2 ∙ 256 = 181であるため、CL_IMAXを180に設定する必要があります。したがって、最大電流がIRMSを超えることはありません。動作速度が低い場合はこのことは特に重要です。いずれにせよ、より大きな値も可能ですが(重負荷を克服する場合など)、長時間にわたる過電流に注意してください。
  • クローズド・ループ最小電流スケール値CL_IMIN = SCALE_VALUES(7:0):最小スケール値は自由に設定できます。ポジションの不一致が一定の制限値を超えない限り、最小スケール値を指定できます。それによって、ポジションの不一致が小さい限りにおいて電流の節約動作が可能です。良い出発点として、オープン・ループ動作のホールド・スケール電流設定値を指定できます。例えば、CL_IMIN = ¼ ∙ CL_IMAX = 180 / 4 = 45と設定すると、最も大きい場合で最大エネルギーの1/16を節約できます。
  • 電流スケール値が増加するマイクロステップ単位でのポジション不一致制限は、CL_START_UP = SCALE_VALUES(23:16) で定義されます。電流スケール値は、CL_START_UPとCL_BETAの間を結ぶ線形関数に従って計算されます。CL_START_UPをCL_TOLERANCEより大きい値に設定することを推奨します。
  • CL_START_DNは、電流値のランプダウンが開始されるポジション不一致値を定義します。このパラメータは0に設定することを推奨します。その場合、この制限値がCL_BETAに設定されます。そのため、ランプダウン・レートはランプアップ・レートと同じになります。その他の設定を行うとヒステリシスが生じます。

次ページの図に、導入パラメータを示します。ランプダウン・レートがランプアップ・レートと異なる場合(CL_START_DN > 0 CL_START_DN ≠ CL_START_UP)、線形関数は同じであり、そのためポジション不一致は小さくなり、スケール値は最小値に達します。CL_START_UPが0に設定されている場合、ポジション不一致が0になることがほとんどないため、クローズド・ループの最小値に達することはほとんどありません。

図5.1 クローズド・ループ動作に加えクローズド・ループ・スケーリング・モードの間のポジション不一致に依存する電流スケーリング値

図5.1 クローズド・ループ動作に加えクローズド・ループ・スケーリング・モードの間のポジション不一致に依存する電流スケーリング値

異なるランプアップ・レートやランプダウン・レートを評価するために、遅延パラメータCL_UPSCALE_DELAY(レジスタ0x18)およびCL_DNSCALE_DELAY(レジスタ0x19)を指定することもできます。これらの値は、電流スケール値がCL_IMAXまたはCL_IMINに向かって1ステップ分変更されるまでの時間をクロック・サイクル単位で定義します。図5.2 は、電流スケーリングのタイミングの挙動をCL_UPSACLE_DELAYおよびCL_DNSCALE_DELAYの関数として表しています。

図5.2 電流スケーリングのタイミングの挙動

図5.2 電流スケーリングのタイミングの挙動

クローズド・ループ・スケール値を正しく設定した後、クローズド・ループ・スケーリングが有効になります。

0x8500000080

注: その他のスケーリング・モードが有効になっている場合でも、クローズド・ループ・スケーリングが有効になっている場合は、いずれのスケール・モードも無効になります。


5.1 クローズド・ループ角度トラッキングと電流スケーリングの併用例

以下では、ターゲット・ポジション(内部ポジションXACTUAL = 赤色のベクトル)と実際のモーター・ポジション(外部ポジションENC_POS = 青色のベクトル)の差が増加するシーケンスを説明します。CL_BETA =255(90º)に設定されているため、緑色の点線で示した整流角は、CL_DELTA_P = 1.0(0x010000)であれば、偏差が90ºを超えるまで変化しません。引き渡し条件および技術的な変更に対する権利は留保されています。最新版はwww.trinamic.comでダウンロードできます。そのため、緑色の整流角は、モーターを偏差が90º以内のターゲット・ポジションに導きます。しかし、緑色の電流ベクトルは偏差の増加と共に拡大し、不一致点に達します。これは、90ºの制限値に達すると最大値になります。この場合、電流ベクトルは、ステップが失われないため、フル電流時の外部ポジションに従います。

Figure table 1

6 逆起電力に関する考慮事項

速度が高くなると、モーター・コイルにおいて電流と電圧の間の位相シフトが生じます。電流制御は電圧制御に変換されます。しかし、電流は依然としてモーター・コントロール用に割り当てられているため、このモーターとセットアップに依存する効果は補償する必要があります。これは、モーション方向で速度に依存する角度が電流の整流角に追加されるy補正によって行われます。

図6.1 逆起電力における測定したエンコーダ速度に基づくy補正の考慮

図6.1 逆起電力における測定したエンコーダ速度に基づくy補正の考慮

最大ガンマ角は、CL_GAMMA 0x1C(23:16)でほぼ90º(= 255マイクロステップ)に設定できます。この角度が整流角に加えられるため、CL_BETAも90º(= 255マイクロステップ)に設定されている場合、角度全体が180ºに達する可能性があります。


特に注意を要する点


y補正がオンになっている場合、最大限可能な整流は( CL_BETA + CL_GAMMA )となります。この値は、180ºを超えてはなりません(フル・ステップあたり256マイクロステップで512マイクロステップ)。180º以上の角度は、モーション方向の不要な変化を引き起こします。

y補正をオンにして、ENC_IN_CONFレジスタ0x07のcl_emf_en1にセットします。更に、y補正の速度制限値も指定する必要があります。

ENC_IN_CONF && 0x00FEFFFFFF || 0x8702000000

  • CL_VMIN_EMF 0x60:この速度値[pps]未満では、y補正角が0に設定されます。
  • CL_VADD_EMF 0x61:この速度値[pps]がCL_VMIN_EMFに追加され、最大y補正角に対する上限が指定されます。
  • ( CL_VMIN_EMF + CL_VADD_EMF ) を超える場合、電流のy補正角GAMMAは、CL_GAMMAの最大値に設定されます。
  • CL_MIN_EMFと( CL_VMIN_EMF + CL_VADD_EMF )の間の場合、電流のy補正角GAMMAは、以下の図で示される線形関数によって計算されます。
図6.2 電流逆起電力角GAMMAの計算

図6.2 電流逆起電力角GAMMAの計算

6.1 速度のセットアップ

CL_VMIN_EMFとCL_VADD_EMFの正しい設定は、モーターに依存します。そのため、モーター・ケーブルの1つの位相に電流プローブを接続し、同じ信号ラインに電圧プローブを接続します。適切な速度制限値を設定するには、モーター電流曲線の歪みを観察してください。図6.3は、低速度時の通常の状態である、モーター電流に歪みがない場合のオシロスコープ波形を示しています。

図6.3 電流曲線に歪みがない場合におけるモーター信号ライン(緑 = モーター電流、深紅色 = モーター出力ドライバのセンス抵抗電圧)のオシロスコープ波形

図6.3 電流曲線に歪みがない場合におけるモーター信号ライン(緑 = モーター電流、深紅色 = モーター出力ドライバのセンス抵抗電圧)のオシロスコープ波形

CL_VMIN_EMFの良い開始点は、逆起電力がモーター供給電圧に達するときの速度です。この時点で、図6.4に示すように、モーター電流のわずかな歪みが初めてオシロスコープで観察されます。

図6.4 逆起電力の増加により電流曲線が歪み始めた場合におけるモーター信号ライン(緑 = モーター電流、深紅色 = モーター出力ドライバのセンス抵抗電圧)のオシロスコープ波形

図6.4 逆起電力の増加により電流曲線が歪み始めた場合におけるモーター信号ライン(緑 = モーター電流、深紅色 = モーター出力ドライバのセンス抵抗電圧)のオシロスコープ波形

モーター電流が初めて完全に歪む速度は、GAMMAがCL_GAMMAの最大値(ほぼ90º)に達する速度の良い出発点となります。そのため、CL_VADD_EMFは、この速度からCL_VMIN_EMFを差し引いたものとなります。チョッパー制御がオンになっている場合、y補正の最大速度に達するもう1つのインジケータが、図6.5にも示されている、センス抵抗の電圧曲線でのチョッパー・サイクルの消滅です。

図6.5 高速度時の逆起電力より電流曲線が完全に歪んだ場合におけるモーター信号ライン(緑 = モーター電流、深紅色 = モーター出力ドライバのセンス抵抗電圧)のオシロスコープ波形更に、深紅色の電圧曲線においてチョッパー・サイクルを識別できません。

図6.5 高速度時の逆起電力より電流曲線が完全に歪んだ場合におけるモーター信号ライン(緑 = モーター電流、深紅色 = モーター出力ドライバのセンス抵抗電圧)のオシロスコープ波形更に、深紅色の電圧曲線においてチョッパー・サイクルを識別できません。

最大モーター電流(モーター電流の最大振幅)とランプ速度の関係をプロットすることもできます。限界点において、両方の速度制限を識別できます。

図6.6 モーター速度に対しモーター電流の最大振幅をプロットすることは、y補正の速度制限の識別にもつながります。

図6.6 モーター速度に対しモーター電流の最大振幅をプロットすることは、y補正の速度制限の識別にもつながります。

注:

  • y補正を使用した場合のモーター動作に対し最も十分な結果を得るには、すべてのモーター・ラインを速度制限値について分析する必要があります。
  • 更に、最初の推定制限値を微調整することも、モーター動作の改善につながります。

6.2 速度計算


図6.2からわかるように、トリミングは、実際のモーター速度に基づきます。この速度ENC_VEL [pps]は、TMC4361A内部で計算され、レジスタ0x65でリリースされます。正しい補正アルゴリズムを得るには、エンコーダ速度をフィルタ処理する必要があります(V_ENC_MEAN 0x66 [pps])。このフィルタ処理を行うには以下の式を用います。

数式 1.

フィルタの指数の他、様々なエンコーダ・タイプに応じて更なるパラメータをレジスタ0x63に設定し、逆起電力を考慮したクローズド・ループ・コントロールの調整ができます。

パラメータ インクリメンタルABNエンコーダ 絶対SPI/SSIエンコーダ
ENC_VMEAN_WAIT V_ENC_MEAN計算プロシージャ用のV_ENCからの2連続転送間の遅延時間[クロック・サイクル数]
→ 平均速度計算のサンプル・レート = 1 / ENC_VMEAN_WAIT 
ENC_VMEAN_WAIT > 32 0x63(7:0)の8ビット 指定されたエンコーダ更新レートER_PTIME 0x58自動的に設定
ENC_VMEAN_FILTER エンコーダの平均速度計算用のフィルタ指数 0x63(11:8)の4ビット
ENC_VMEAN_INT V_ENC計算用の最大更新遅延時間[クロック・サイクル数]
0x63(31:16)の16ビット ENC_VMEAN_INT < 256の場合、自動的に256に設定されます。 指定されたエンコーダ更新レートSER_PTIME0x58自動的に設定
CL_CYCLE クローズド・ループ・コントロール用の遅延時間[クロック・サイクル数] クローズド・ループ・コントロール更新レート = 1 / CL_CYCLE 
遅延を可能な限り最小(ほぼ5クロック・サイクル)にするためにABNエンコーダに固定 0x63(31:16)の16ビット少なくともSER_PTIME 0x58に設定
SER_ENC_VARIATION --- 0x63(7:0)の8ビット2連続エンコーダ値の間で最大限受容可能な偏差の調整 
0に設定した場合、受容可能最大偏差 
= 1/8 ∙ ENC_IN_RES
それ以外の場合、受容可能最大偏差 = 1/8 ∙SER_ENC_VARIATION/256 ∙ ENC_IN_R ES
serial_enc_variation_limitは「1」に設定する必要があります(ENC_IN_RESレジスタ0x07) 

注:

  • ENC_VMEAN_WAITの良い開始値は128であり、ENC_VMEAN_FILTERでは7です。どちらの値も、ABNエンコーダを用いる場合には、連携して調整する必要があります。更に、両方の値が小さくなると、より速くV_ENC_MEANが現在の速度に適合されます。しかし、これにより、平均速度の勾配も大きくなり、それによってy補正が有効化されている場合には、レギュレーションに跳びが生じます。
  • これを防ぐには、モーション時にV_ENC_MEANの速度値をチェックし、速度制限値CL_VMIN_EMFおよび( CL_VMIN_EMF + CL_VADD_EMF )を転送します。平均エンコーダ速度がモーション時に滑らかに適合される場合は、y補正も正しく実行されます。

更に、ENC_VEL0 0x62は遅延をクロック・サイクル数の単位で指定し、この値によってエンコーダ速度V_ENCおよびV_ENC_MEANが0に設定されます。ABラインの信号がこの時間内に切り替わらない場合、または絶対エンコーダ値が変化しない場合、エンコーダ速度は0に設定されます。

特に注意を要する点

絶対エンコーダがその方向を切り替えた場合、最初の新しいエンコーダ速度は0になります。そのため、方向の変更がモーション中に行われるような方法でエンコーダ値がエンコーダ・ポジションを切り替える場合、V_ENC = V_ENC_MEAN = 0となる可能性があります。そのため、CL_VMIN_EMFを既に超過している場合、y補正が不正確になります。

7 例

以下では、すべての例が、異なるレジスタを割り当てることによって説明されます。セットアップが所定のアプリケーションに対応しない場合でも、4つの例すべてをチェックすることを推奨します。クローズド・ループのセットアップのわずかな差異が4つの例の中で例証されているためです。

例1:モーター・ドライバTMC26x(SPIモード)をインクリメンタルABNエンコーダと共に使用; 逆起電力は考慮せず; キャリブレーション・プロセスなし

以下では、オープン・ループでの次のフル・ステップ・ポジションへの1回の移動後、クローズド・ループ・キャリブレーション・プロセスが割愛されています。クローズド・ループ動作の前にXACTUALを変更することが適切であるならば、XACTUALをMSCNTと等しい値に設定することにより、クローズド・ループ動作をオンにするだけでキャリブレーションの目的には十分なものとなります(TMC4361Aのマニュアルのセクション16.3.2オプション1Bを参照)。しかし、次のフル・ステップへのこの簡略なモーションは、キャリブレーション・ポイントが適切に選択されていない場合、クローズド・ループ動作時のトルクの消失につながる可能性があります。

予備的考慮事項:

  • 非差動ABNエンコーダ
  • 逆起電力は考慮せず
  • キャッチアップ速度制限 = ±50kpps
  • 1回転あたり400フル・ステップ
  • IRMS = 1.1A、センス抵抗:RSENSE = 0.15Ω
  • VSENSE = 0 → IFS = 2.0 A
  • IPEAK = IRMS ∙ √2 = 1.56 A → CS = 24
  • エンコーダの方向はモーター方向とは反対
レジスタ・アクセスのシーケンス:
シーケンス コメント 命令μC→TMC4361A
1. 差動エンコーダをオフ 0x8000007020
2. フル・ステップあたり256マイクロステップ、1回転あたり400フル・ステップ 0x8A00001900
3. エンコーダ入力信号のフィルタリング(サンプル・レート = fCLK / 8、フィルタ長= 4) 0x8300003300
4. SPI出力設定:TMC26xの最新データグラム(SPI_OUT_BLOCK_TIME / SPI_OUT_HIGH_TIME /SPI_OUT_LOW_TIME = 8/4/4 クロック・サイクル) 0x848440000A
5. COVERDONEをINTRとして指定 0x8D02000000
6. イベントをクリア 0x0E00000000
7. TMC26x/389(カバー・データグラム)のDRVCTRLレジスタを次のように設定します:シングル・エッジ・ステップ、ステップ補間の無効化、マイクロステップ分解能:256 0xEC00000000
8. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
9. TMC26x/389(カバー・データグラム)のCHOPCONFレジスタを次のように設定します:tbl=36、標準チョッパー、HDEC=16、HEND=11、HSTR=1、TOFF=5、RNDTF=オフ 0xEC00090585
10. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
11. TMC26x/389(カバー・データグラム)のSMARTENレジスタを無効化します。 0xEC000A0000
12. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
13. TMC26x/389(カバー・データグラム)のSGCSCONFレジスタを次のように設定します:SGT=0, CS=24 0xEC000C0018
14. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000 
15. TMC26x/389(カバー・データグラム)のDRVCONFレジスタを次のように設定します:PH=3、SLPL=3、DISS2G=オフ、TS2G=0~3.2μs、SDOFF=オン、VSENSE=0 0xEC000EF080
16. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
17. エンコーダの分解能:1000ポール・ペア→ENC_IN_RES = 4000(→ ENC_CONST = 25.6) 0xD400000FA0
18. エンコーダの方向を反転 0x8720000000
19. CLのセットアップ:CL_BETA = 255、CL_GAMMA = 0 0x9C000000FF
20. CL_DELTA_P = 1.25 0xDC00014000
21. CL_TOLERANCE = 32(ENC_CONSTよりわずかに上) 0xDF00000020
22. 速度制限値の比例項 = 1000 0xDA000003e8
23. 速度制限値の積分項 = 50 0xDB00000032
24. キャッチアップ速度のクリッピング値 = 50kpps 0xDE0000C350
25. 積分項のクリッピング値 = 1000 0xDD000003e8
26. 電流スケーリングを無効化 0x8500000000
27. フル・ステップ・キャリブレーションのホールドおよびポジショニング・モード 0xA000000004
28. 任意の速度(ここでは10kpps)(VMAXには8桁の小数部があります) 0xA400271000
29. MSCNTを読み出す 0x7900000000
30. XACTUALを読み出す 0x2100000000
31. XTARGET = XACTUAL + 384 - (MSCNT mod 256)に設定 0xB7xxxxxxxx
32. TARGET_REACHEDが再度設定されるまで待機(割込みとして設定することも可能)
33 不要なランプの開始を防止するためにVMAX = 0に設定 0xA400000000
34. MSCNTを読み出す 0x7900000000
35. XACTUAL = MSCNTに設定 0xA1xxxxxxxx
36. クローズド・ループ動作をオン 0x8720400000
37. クローズド・ループ動作の速度制限をオン 0x8728400000
38. 電流スケール制限値:CL_IMAX = 255、CL_IMIN = 100、CL_START_UP = 100 0x860064FF64
39. CL_UPSCALE = 1000クロック・サイクル 0x98000003E8
40. CL_DNSCALE = 100000クロック・サイクル 0x99000186A0
41. クローズド・ループ・スケーリングを有効化 0x8500000080
42. CL_TR_TOLERANCE = 60(絶対ポジションの不一致が3エンコーダ遷移より小さい場合、TARGET_REACHEDを設定できます) 0xD20000003C
  必要なセットアップに応じてランプ条件を設定  

例2:モーター・ドライバTMC26x(SPIモード)をインクリメンタル差動ABNエンコーダと共に使用; 高度キャリブレーション・プロセス

予備的考慮事項:

  • 差動ABNエンコーダ
  • 逆起電力を考慮
  • キャッチアップ速度制限 = ±50kpps
  • 1回転あたり200フル・ステップ
  • IRMS = 1.1A、センス抵抗:RSENSE = 0.15Ω
  • VSENSE = 0 → IFS = 2.0 A
  • IPEAK = IRMS ∙ √2 = 1.56A → CS = 24
レジスタ・アクセスのシーケンス:
シーケンス コメント 命令μC→TMC4361A
1. 差動エンコーダをオン  0x8000006020
2. フル・ステップあたり256マイクロステップ、1回転あたり200フル・ステップ  0x8A00000C80
3. エンコーダ入力信号のフィルタリング(サンプル・レート = fCLK / 8、フィルタ長= 4) 0x8300003300
4. SPI出力設定:TMC26xの最新データグラム(SPI_OUT_BLOCK_TIME / SPI_OUT_HIGH_TIME /SPI_OUT_LOW_TIME = 8/4/4クロック・サイクル) 0x848440000A
5. COVERDONEをINTRとして指定 0x8D02000000
6. イベントをクリア 0x0E00000000
7. TMC26x/389(カバー・データグラム)のDRVCTRLレジスタを次のように設定します:シングル・エッジ・ステップ、ステップ補間の無効化、マイクロステップ分解能:256 0xEC00000000
8. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
9. TMC26x/389(カバー・データグラム)のCHOPCONFレジスタを次のように設定します:tbl=36、標準チョッパー、HDEC=16、HEND=11、HSTR=1、TOFF=5、RNDTF=off 0xEC00090585
10. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
11. TMC26x/389(カバー・データグラム)のSMARTENレジスタを無効化します。 0xEC000A0000
12. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
13. TMC26x/389(カバー・データグラム)のSGCSCONFレジスタを次のように設定します:SGT=0、CS=24 0xEC000C0018
14. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
15. TMC26x/389(カバー・データグラム)のDRVCONFレジスタを次のように設定します:SLPH=3、SLPL=3、DISS2G=オフ、TS2G=0~3.2μs、SDOFF=オン、VSENSE=0 0xEC000EF080
16. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
17. エンコーダの分解能:500ポール・ペア→ ENC_IN_RES = 2000(→ ENC_CONST = 25.6) 0xD4000007D0
18. XACTUALを読み出す 0x2100000000
19. ENC_POS = XACTUALに設定 0xD0xxxxxxxx
20. フル・ステップ・キャリブレーションのホールドおよびポジショニング・モード 0xA000000004
21. 任意の速度(ここでは10kpps)(VMAXには8桁の小数部があります) 0xA400271000
22. XTARGET = XACTUAL + 51200に設定 0xB7xxxxxxxx
23. TARGET_REACHEDが再度設定されるまで待機。(割込みとして設定することも可能)
24. ENC_POSを読み出す 0x5000000000
24. a) If ENC_POS ≈ XTARGET(エンコーダの分解能によりわずかな変動が生じる可能性あり)の場合、エンコーダとモーターの方向は同じ  
24. b1) If ENC_POS ≈ XTARGET - 102400(エンコーダの分解能によりわずかな変動が生じる可能性あり)の場合、エンコーダとモーターの方向は反対 エンコーダの方向を反転 0x8720000000
24. b2) ENC_POS = XACTUALに設定 0xD0xxxxxxxx
25. CLのセットアップ:CL_BETA = 255、CL_GAMMA = 255 0x9C00FF00FF
26. CL_DELTA_P = 1.00に設定 0xDC00010000
27. CL_TOLERANCE = 32に設定(ENC_CONSTよりわずかに上) 0xDF00000020
28. CL_TR_TOLERANCE = 60に設定(絶対ポジションの不一致が3エンコーダ遷移より小さい場合、TARGET_REACHEDを設定できます) 0xD20000003C
29. 電流スケーリングを無効化 0x8500000000
30. MSCNTを読み出す 0x7900000000
31. XACTUALを読み出す 0x2100000000
32. XTARGET = XACTUAL + 384 - (MSCNT mod 256)に設定(フル・ステップ・ポジションに移動) 0xB7xxxxxxxx
33. TARGET_REACHEDが再度設定されるまで待機。(割込みとして設定することも可能)
34. ENC_POS_DEVを読み出す 0x5200000000 
34. a) 最小エンコーダ偏差と最大エンコーダ偏差のストレージ:ENC_POS_DEV < DEV_MINの場合 DEV_MIN = ENC_POS_DEVENC_POS_DEV > DEV_MAXの場合 DEV_MAX = ENC_POS_DEV  
35. 次のフル・ステップ・ポジションに移動XTARGET = XTARGET + 256 0xB7xxxxxxxx
36. ステップ33~35を400回(2回転分)繰り返す反対方向にも移動することを推奨します。  
37. DEV_SEARCH = (DEV_MAX - DEV_MIN) / 2であることを確認  
38. 次のフル・ステップ・ポジションに移動XTARGET = XTARGET - 256 0xB7xxxxxxxx
39. TARGET_REACHEDが再度設定されるまで待機。(割込みとして設定することも可能)
40. キャリブレーション・ポイントの探索:ENC_POS_DEV ≈ DEV_SEARCHの場合  CALIB_POS = XTARGET  
  ステップ38~30を最低400回(2回転分)繰り返し、CALIB_POSを定義  
41. XTARGET = CALIB_POSに設定 0xB7xxxxxxxx
42. TARGET_REACHEDが再度設定されるまで待機(割込みとして設定することも可能)
43. VMAX = 0に設定 0xA400000000
44. 速度制限値の比例項 = 1000 0xDA000003e8
45. 速度制限値の積分項 = 50 0xDB00000032
46. キャッチアップ速度のクリッピング値 = 50 kpps 0xDE0000C350
47. 積分項のクリッピング値 = 1000 0xDD000003e8
48. CL_VMIN_EMFを設定(速度制限値はその前のオープン・ループ動作によって見出しておく必要があります)(第6章を参照) 0xE0xxxxxxxx
49. CL_VADD_EMFを設定(速度制限値はその前のオープン・ループ動作によって見出しておく必要があります)(第6章を参照) 0xE1xxxxxxxx
50. エンコーダの平均速度設定値を設定(セクション6.2を参照) 0xE3xxxxxxxx
51. クローズド・ループ動作およびキャリブレーションをオン 0x87x1400000
52. 10μs待ち、その後クローズド・ループ・キャリブレーションをオフ …0x87x0400000
53. クローズド・ループ動作の速度制限をオン 0x87x8400000
54. クローズド・ループ動作の逆起電力の考慮事項を実行 0x87xA400000
55. 電流スケール制限値:CL_IMAX = 255、CL_IMIN = 100、CL_START_UP = 100 0x860064FF64
56. CL_UPSCALE = 200クロック・サイクル 0x98000007D0
57. CL_DNSCALE = 100000クロック・サイクル 0x99000186A0
58. クローズド・ループ・スケーリングを有効化 0x8500000080
59. 必要なセットアップに応じてランプ条件を設定  

例3:モーター・ドライバTMC2130(SPIモード)をインクリメンタルABNエンコーダと共に使用; 逆起電力は考慮せず; 単純なキャリブレーション・プロセス

以下のクローズド・ループ・キャリブレーション・プロセスは、1つの運動に簡略化されています。そのため、キャリブレーション・ポイントが適切に選択されていない場合、クローズド・ループ動作時のトルクの消失につながる可能性があります。

予備的考慮事項:

  • 非差動ABNエンコーダ
  • 逆起電力は考慮せず
  • キャッチアップ速度制限 = ±50 kpps
  • 1回転あたり400フル・ステップ
  • IRMS = 1.1 A、センス抵抗:RSENSE = 0.15 Ω
  • VSENSE = 0 → IFS = 1.88 A
  • IPEAK = IRMS ∙ √2 = 1.56 A → CS = 25 (→ TMC2130で設定される最大値)
  • エンコーダの方向はモーター方向とは反対
レジスタ・アクセスのシーケンス:
シーケンス コメント 命令μC→TMC4361A
1. 差動エンコーダをオフ 0x8000007020
2. フル・ステップあたり256マイクロステップ、1回転あたり400フル・ステップ 0x8A00001900
3. エンコーダ入力信号のフィルタリング(サンプル・レート = fCLK / 8、フィルタ長 = 4) 0x8300003300
4. SPI出力設定:TMC2130 SPIモードの最新データグラム(SPI_OUT_BLOCK_TIME / SPI_OUT_HIGH_TIME /SPI_OUT_LOW_TIME = 8/4/4クロック・サイクル) 0x848440000D
5. COVERDONEをINTRとして指定 0x8D02000000
6. イベントをクリア 0x0E00000000
7. TMC2130(カバー・データグラム)のGCONFレジスタを次のように設定します:direct_mode=1、必要に応じてこのレジスタのその他のスイッチを設定します

0xED00000080

0xEC00010000

8. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
9. TMC2130(カバー・データグラム)のCHOPCONFレジスタを次のように設定します:256マイクロステップ、vsense=0、TBL=36クロック・サイクル、spreadCycleチョッパー、HEND=1、HSTRT=2、TOFF=3

0xED000000EC

0xEC00010223

10. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
11. TMC2130(カバー・データグラム)のIHOLD_IRUNレジスタを次のように設定します:IHOLD_DELAY=5=0、IHOLD=IRUN=25

0xED00000090

0xEC00051919

12. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
13. 必要に応じてTMC2130のその他のレジスタを設定します

0xED000000xx

0xECxxxxxxxx

14. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
15. すべての関連レジスタが設定されるまでステップ13と14を繰り返します。  
16. イベントをクリア 0x0E00000000
17. エンコーダの分解能:1000ポール・ペア→ ENC_IN_RES = 4000(→ ENC_CONST = 25.6) 0xD400000FA0
18. エンコーダの方向を反転 0x8720000000
19. CLのセットアップ:CL_BETA = 255、CL_GAMMA = 0 0x9C000000FF
20. CL_DELTA_P = 1.25 0xDC00014000
21. CL_TOLERANCE = 32(ENC_CONSTよりわずかに上)CL_TOLERANCE = 32(ENC_CONSTよりわずかに上) 0xDF00000020
22. 電流スケーリングを無効化 0x8500000000
23. フル・ステップ・キャリブレーションのホールドおよびポジショニング・モード 0xA000000004
24. 任意の速度(ここでは10kpps)(VMAXには8桁の小数部があります) 0xA400271000
25. MSCNTを読み出す 0x7900000000
26. XACTUALを読み出す 0x2100000000
27. XTARGET = XACTUAL + 384 - (MSCNT mod 256)に設定 0xB7xxxxxxxx
28. TARGET_REACHEDが再度設定されるまで待機(割込みとして設定することも可能)
29. VMAX = 0に設定 0xA400000000
30. 速度制限値の比例項 = 1000 0xDA000003e8
31. 速度制限値の積分項 = 50 0xDB00000032
32. キャッチアップ速度のクリッピング値 = 50 kpps 0xDE0000C350
33. 積分項のクリッピング値 = 1000 0xDD000003e8
34. クローズド・ループ動作およびキャリブレーションをオン 0x8721400000
35. 10μs待ち、その後クローズド・ループ・キャリブレーションをオフ> …0x8720400000
36. クローズド・ループ動作の速度制限をオン 0x8728400000
37. 電流スケール制限値:CL_IMAX = 255、CL_IMIN = 100、CL_START_UP = 100 0x860064FF64
38. CL_UPSCALE = 1000クロック・サイクル 0x98000003E8
39. CL_DNSCALE = 100000クロック・サイクル 0x99000186A0
40. クローズド・ループ・スケーリングを有効化 0x8500000080
41. CL_TR_TOLERANCE = 60(絶対ポジションの不一致が3エンコーダ遷移より小さい場合、TARGET_REACHEDを設定できます) 0xD20000003C
42. 必要なセットアップに応じてランプ条件を設定  

例4:モーター・ドライバTMC2130(SDモード)をインクリメンタル差動ABNエンコーダと共に使用; 高度キャリブレーション・プロセス

以下では、オープン・ループでのキャリブレーション・ポジションへの移動後、クローズド・ループ・キャリブレーション・プロセスが割愛されています。クローズド・ループ動作の前にXACTUALを変更することが適切であるならば、XACTUALをMSCNTと等しい値に設定することにより、クローズド・ループ動作をオンにするだけでキャリブレーションの目的には十分なものとなります(TMC4361Aのマニュアルのセクション16.3.2オプション1Bを参照)。

予備的考慮事項:

  • 差動ABNエンコーダ
  • 逆起電力を考慮
  • キャッチアップ速度制限 = ±50 kpps
  • 1回転あたり200フル・ステップ
  • IRMS = 1.1 A、センス抵抗:RSENSE = 0.15Ω
  • VSENSE = 0 → IFS = 1.88A
  • IPEAK = IRMS ∙ √2 = 1.56A → CS = 25 (→ TMC4361Aのスケール・レジスタで設定される最大値)
レジスタ・アクセスのシーケンス:
シーケンス コメント 命令μC→TMC4361A
1. 差動エンコーダをオン 0x8000006020
2. フル・ステップあたり256マイクロステップ、1回転あたり200フル・ステップ 0x8A00000C80
3. エンコーダ入力信号のフィルタリング(サンプル・レート = fCLK / 8、フィルタ長 = 4) 0x8300003300
4. SPI出力設定:TMC2130 SDモードの最新データグラム(SPI_OUT_BLOCK_TIME / SPI_OUT_HIGH_TIME /SPI_OUT_LOW_TIME = 8/4/4クロック・サイクル; スケーリング値はモーション中に転送されます) 0x848440022C
5. COVERDONEをINTRとして指定 0x8D02000000
6. イベントをクリア 0x0E00000000
7. TMC2130(カバー・データグラム)のGCONFレジスタを次のように設定します:direct_mode=0、必要に応じてこのレジスタのその他のスイッチを設定します

0xED00000080

0xEC00000000

8. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
9. TMC2130(カバー・データグラム)のCHOPCONFレジスタを次のように設定します:256マイクロステップ、vsense=0、TBL=36クロック・サイクル、spreadCycleチョッパー、HEND=1、HSTRT=2、TOFF=3

0xED000000EC

0xEC00010223

10. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
11. TMC2130(カバー・データグラム)のIHOLD_IRUNレジスタを次のように設定します:IHOLD_DELAY=5=0、IHOLD=10、IRUN=25

0xED00000090

0xEC00050A19

12. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
13. 必要に応じてTMC2130のその他のレジスタを設定します

0xED000000xx

0xECxxxxxxxx

14. 割込みを待ち、その後イベントをクリアします。 …0x0E00000000
15. すべての関連レジスタが設定されるまでステップ13と14を繰り返します。  
16. イベントをクリア 0x0E00000000
17. エンコーダの分解能:500ポール・ペア → ENC_IN_RES = 2000(→ ENC_CONST = 25.6) 0xD4000007D0
18. XACTUALを読み出す 0x2100000000
19. ENC_POS = XACTUALに設定 0xD0xxxxxxxx
20. フル・ステップ・キャリブレーションのホールドおよびポジショニング・モード 0xA000000004
21. 任意の速度(ここでは10kpps)(VMAXには8桁の小数部があります) 0xA400271000
22. XTARGET = XACTUAL + 51200に設定 0xB7xxxxxxxx
23. TARGET_REACHEDが再度設定されるまで待機。(割込みとして設定することも可能)
24. ENC_POSを読み出す 0x5000000000
24. a) ENC_POS ≈ XTARGET(エンコーダの分解能によりわずかな変動が生じる可能性あり)の場合、エンコーダとモーターの方向は同じ  
24. b1) ENC_POS ≈ XTARGET - 102400(エンコーダの分解能によりわずかな変動が生じる可能性あり)の場合、エンコーダとモーターの方向は反対 エンコーダの方向を反転 0x8720000000
24. b2) ENC_POS = XACTUALに設定 0xD0xxxxxxxx
25. CLのセットアップ:CL_BETA = 255、CL_GAMMA = 255 0x9C00FF00FF
26. CL_DELTA_P = 1.00に設定 0xDC00010000
27. CL_TOLERANCE = 32に設定(ENC_CONSTよりわずかに上) 0xDF00000020
28. CL_TR_TOLERANCE = 60に設定(絶対ポジションの不一致が3エンコーダ遷移より小さい場合、TARGET_REACHEDを設定できます) 0xD20000003C
29. 電流スケーリングを無効化 0x8500000000
30. MSCNTを読み出す 0x7900000000
31. XACTUALを読み出す 0x2100000000
32. XTARGET = XACTUAL + 384 − (MSCNT mod 256) に設定(フル・ステップ・ポジションに移動) 0xB7xxxxxxxx
33. TARGET_REACHEDが再度設定されるまで待機。(割込みとして設定することも可能)
34. ENC_POS_DEVを読み出す。 0x5200000000
34. a) 最小エンコーダ偏差と最大エンコーダ偏差のストレージ:ENC_POS_DEV < DEV_MINの場合 → DEV_MIN = ENC_POS_DEVENC_POS_DEV > DEV_MAXの場合→ DEV_MAX = ENC_POS_DEV  
35. 次のフル・ステップ・ポジションに移動XTARGET = XTARGET + 256 0xB7xxxxxxxx
36. ステップ33~35を400回(2回転分)繰り返す反対方向にも移動することを推奨します。  
37. DEV_SEARCH = (DEV_MAX - DEV_MIN) / 2であることを確認  
38. 次のフル・ステップ・ポジションに移動XTARGET = XTARGET - 256 0xB7xxxxxxxx
39. TARGET_REACHEDが再度設定されるまで待機。(割込みとして設定することも可能)
40. キャリブレーション・ポイントの探索:ENC_POS_DEV ≈ DEV_SEARCHの場合 →  CALIB_POS = XTARGET  
  ステップ38~30を最低400回(2回転分)繰り返し、CALIB_POSを定義  
41. XTARGET = CALIB_POSに設定 0xB7xxxxxxxx
42. TARGET_REACHEDが再度設定されるまで待機(割込みとして設定することも可能)
43. VMAX = 0に設定 0xA400000000
44. 速度制限値の比例項 = 1000 0xDA000003e8
45. 速度制限値の積分項 = 50 0xDB00000032
46. キャッチアップ速度のクリッピング値 = 50 kpps 0xDE0000C350
47. 積分項のクリッピング値 = 1000 0xDD000003e8
48. CL_VMIN_EMFを設定(速度制限値はその前のオープン・ループ動作によって見出しておく必要があります)(第6章を参照) 0xE0xxxxxxxx
49. CL_VADD_EMFを設定(速度制限値はその前のオープン・ループ動作によって見出しておく必要があります)(第6章を参照) 0xE1xxxxxxxx
50. エンコーダの平均速度設定値を設定(セクション6.2を参照) 0xE3xxxxxxxx
51. MSCNTを読み出す 0x7900000000
52. XACTUAL = MSCNTに設定 0xA1xxxxxxxx
53. クローズド・ループ動作をオン 0x87x0400000
54. クローズド・ループ動作の速度制限をオン 0x87x8400000
55. クローズド・ループ動作の逆起電力の考慮事項を実行 0x87xA400000
56. 電流スケール制限値:CL_IMAX = 25、CL_IMIN = 10、CL_START_UP = 50 0x860032190A
57. CL_UPSCALE = 200クロック・サイクル 0x98000007D0
58. CL_DNSCALE = 100000クロック・サイクル 0x99000186A0
59. クローズド・ループ・スケーリングを有効化 0x8500000080
60. 必要なセットアップに応じてランプ条件を設定  

8 改訂履歴

バージョン 日付 著者 説明
0.5 2014-Aug-11 HS 初版
0.6 2014-Aug-26 HS 明確化 CL_MAXおよびCL_FITイベントおよびフラグへのリファレンス初期逆起電力の注
0.9 2014-Nov-21 HS 明確化 エンコーダ補償を追加逆起電力に関する考慮事項を完全に記載(VMIN_EMFとVADD_EMFのスコープ・ショットと設定は未了で現在準備中)
0.91 2015-Feb-06 HS 第5章にヒントを追加 すべての章をリビジョン
0.92 2015-Apr-15 HS 90° = 255マイクロステップ
0.93 2015-Apr-17 HS 例1と例2の見直しを追加
0.93 2015-Nov-10 HS MSTEP_PER_FSが256でなくてはならないことを追加
0.99 2016-Jun-03 HS TMC2130について検討するセクションを追加
0.991 2017-Jul-21 HS 例における高度キャリブレーション・プロセス:Step40“If ENC_POS_DEV ≈ DEV_SEARCH  CALIB_POS =XTARGET”旧版は、“If ENC_POS_DEV ≈ DEV_MIN →  CALIB_POS = XTARGET”
1.0 2020-Mar-10 HS 最終バージョン、詳細な検査を終了:いくつかの修正

表1 文書のリビジョン