ソフトウエア

サーボモータのリアルタイム制御( タイマ割り込み )

サーボモータの角度の制御はPWM制御で ONデューティの時間を変えることにより行います。時間に基づく処理を行うためにタイマ割り込みを活用します。

◀ この記事の前に: サーボモータのリアルタイム制御( 分散制御 )
▶ この記事の次に: サーボモータ制御の階層化

タイマ割り込みの方式

タイマ割り込みは、タイマにあらかじめ設定した値(時間)が経過すると発生する割り込みです。
設定する時間を一定にする方法( 定時割り込み方式 )と可変にする方法( 可変割り込み方式 )があります。多くの場合、設定する時間を一定にする方法を使用します。Qumcum Lab.のサンプルプログラムは、2系統のタイマ割り込みを使用します。サーボモータのリアルタイム制御は可変割り込み方式です。

定時割り込み方式の問題点

プログラムで必要となる時間間隔はタイマ割り込みで作ります。プログラムはいくつか異なる時間間隔を使用します。例えば、125 ms、500ms、1 s などです。タイマを複数使用する場合もありますが、細かい時間間隔の割り込みを作り、細かい時間間隔の割り込みをカウントすることで必要な時間間隔を作る場合が多いと思います。
例えば、125 ms の割り込みを作っておき割り込みが発生するごとに処理を行います。125 msの時間間隔はこの処理で 2回カウントすることで作ることができます。( 125 ms X 2 = 500 ms )1秒の時間間隔はこの処理は割り込みを 8回カウントすることで作ることができます。( 125 ms X 8 = 1s )

サーボモータ制御は 10μsの分解能が必要です。加減速制御を行う場合は 1μs ~ 0.1μsの分解能が必要になります。定時割り込み処理方式を処理を行おうとした時は 10μsごとに処理を行うことが必要になります。
割り込み処理は、記述したコード以外にも見えないところで処理を行っています。割り込みが発生するとそれまで処理で使用していた変数(レジスタ)などを待避してプログラムの流れを変えます。記述したコードの実行が終わり次第、待避していた変数などを元に戻して中断したところにプログラムの流れを戻します。割り込みではオーバーヘッドが発生します。

単位時間当たりの割り込み数が増えるとオーバーヘッドが増えます。記述したコードによる割り込み処理の時間も必要になります。μsオーダーの割り込みが発生した場合、割り込み処理に多くの時間を取られてしまいます。

定時割り込み方式のときのイメージです。( 割り込み数や間隔の対比は実際と異なります。)

可変割り込み方式の採用

ひとつのサーボモータの PWM制御を見た場合、処理すべき時間はふたつです。サーボモータの出力を OFFから ONにして ONから OFFにするまでの ONデューティ( ON 期間 )と、OFFから次の ONにするまでの OFFデューティ( OFF期間 )ふたつの時間です。ON から OFFにするタイミングと OFF から ON にするタイミングで処理をおこないますので、その二つの期間を割り込みで知ることができれば良いことになります。

サーボモータの制御角度で ON期間と OFF期間は変化します。この期間をタイマの設定値にすることにより、それぞれのタイミングのみで処理を行えます。そのタイミングの間で処理をする必要はありません。タイマの値をサーボモータの操作量に応じて変更するので可変割り込み方式となります。

定時割り込み方式のときのイメージです。( 割り込み数や間隔の対比は実際と異なります。)

可変割り込み方式にした場合のメリット

サーボモータの制御では可変割り込み方式にメリットが多くなります。以下のとおりです。

  • 時間当たりの割り込み数が減る
  • 分解能を向上できる
  • 処理時間を均一化できる

定時割り込み方式で分解能を 10μsにした場合、1秒間の割り込み回数は 10万回になります。可変割り込み方式ではOFFから ON時と ONから OFF時の2回割り込みが必要になります。サーボモータの制御周波数 50 Hzですから1秒間に 100回の割り込みになります。サーボモータは7軸あり分散制御のため時系列となりますので 700回の割り込みととなります。10万回の割り込み数を 700回にすることができます。

定時割り込み方式の分解能は、割り込みの間隔がそのまま分解能になります。そのため 10μsになりこの分解能を高くするためには割り込みの間隔をさらに短くする必要があります。可変割り込み方式はサーボモータの出力変更と関係していて、タイマのクロックとは直接関係はありません。タイマのクロックを細かくすることにより割り込みの分解能は高くなります。そのため、割り込み間隔に関係なく分解能を向上することができます。

定時割り込み方式は割り込みが発生した場合、カウントのみをおこなう時とサーボモータの制御処理をおこなう時の二つがあります。割り込み間隔を変えるとこの処理の比率が変化します。定時割り込み方式は割り込みの発生時は常にサーボモータの制御処理になります。前記のとおり1秒間の処理回数も固定( 700回 )しています。そのため、処理時間を均一化することができます。

プログラミングのための情報

プログラミングで必要となる情報は以下のとおりです。

・タイマ割り込み: 可変割り込み方式
・タイマの設定値: STM32 システムクロック周波数 80 MHz / 分解能 10μsの場合
 クロックソース: システムクロック
 プリスケーラ:  1 / 800

( 参考値 )
・割り込み発生数: 1秒あたり 800回( 7軸 + ダミー1軸 の場合 )
 平均発生間隔: 1.25 ms

参考情報

他のサイトで参考になる情報は以下のとおりです。

このホームページ内

  • 複数のMCUをつなぐ: このロボットには複数の MCUが搭載されています。その MCU間の接続の概要です。

他のWebサイト

カテゴリー
最近の記事 おすすめ記事

記事一覧を表示するには、カスタム投稿「ブログ」にて、4つ以上記事を作成してください。

記事一覧を表示するには、カスタム投稿「ブログ」にて、4つ以上記事を作成してください。

TOP