関連知識

リアルタイム制御の時間感覚

リアルタイム制御ではどのくらいの時間を意識してプログラミングするのでしょうか。このページではリアルタイム制御で扱う「時間」を感覚的に知りましょう。

◀ この記事の前に: リアルタイム制御を意識する
▶ この記事の次に: バックグラウンド処理とフォアグランド処理

自動車のエンジン制御

ここでは自動車のエンジン制御を例にします。自動車のエンジンで燃料噴射装置を使用している場合、シリンダに燃料を噴射する量を制御する必要があります。制御は自動車に搭載しているエンジン制御ユニット(装置)が行い、ユニットには MCUが組み込まれています。この MCUが利用しているプログラムはリアルタイム制御が求められます。あらかじめ決められた時間を守って制御できないとエンジンは始動しなかったり、回転を続けることはできません。

燃焼噴射量はひとつのシリンダが吸い込んだ空気の量に応じて決まります。実際は空気の温度やその他の状況に応じて計算して決めます。

ここでは仮に以下の条件としました。

  • 方式: 4ストロークエンジン
  • 気筒数: 4気筒
  • 回転数: 3,000rpm

この条件で計算すると1秒間に100回の燃料噴射が必要なことが分かります。燃料噴射の間隔は 10msec( 1/100秒 )になります。回転数が 6,000rpmになった場合の燃料噴射の間隔は 5msecになります。

燃料噴射のたびに噴射量を計算するとした場合は、3,000rpmの回転数の場合で 10msecごとに計算する必要があります。毎回、各種センサーから状況を集めて、燃料噴射量を計算して、その噴射量のためにフューエルインジェクション( 燃料噴射装置 )の弁を開いている時間を求めて、実際に弁を駆動する出力ポート( 端子 )の電圧を変えます。この過程を 10msec以下のする必要があるということになります。

実際はこれ以外の制御もあります。また、6,000rpmにした場合は 5msecとなります。実際は 1msecより短い時間の中で処理を終える必要があります。プログラミングでは常にこの時間を意識しておく必要があります。

ロボットのサーボモータ制御

Qumcum Lab. は常に全体を制御していますが、ここではサーボモータの制御を見ていきます。

サーボモータの制御

サーボモータを制御するための信号線には常に 50Hzの矩形波を送っています。その中の ON時間を変えることによりサーボモータの軸の角度を変えることができます。
ON時間を制御することによりサーボモータの制御を行うことができるということです。

ON時間を 0.5msecにするとサーボモータの角度は 0度、2.4msecにすると 180度になります。ここだけ見ると 0.1msec単位で考えれば良いように思います。実際は角度の制御が必要になります。1度ごとに制御する場合に必要な角度は以下の計算式で求められます。

( 2.4msec – 0.5msec ) / 180度 = 0.0106msec / 度

1度あたり 0.00106msecの ON時間となります。単位を変更して見やすくすると 10.6μsecです。ここから約10μsec単位で考える必要があることが分かります。しかし、これは 1度毎の制御の場合で、サーボモータの加減速を考慮した場合はさらにこの 1/10から 1/100の時間で考える必要があります。( 1μsec ~ 0.1μsec )

サーボモータは頭部、四肢で合計 7軸(個)ありますので、7個のサーボモータをマイクロ秒単位で制御する必要があります。

この制御を実現するために、以下の方法を採用しています。

  • 時分割による分散処理: 7軸あるサーボモータを同時に処理するのではなく、時分割して順番に制御する
  • タイマ割り込みによる負荷低減: ON/OFF時間をタイマに設定してその割り込みにより処理を起動する

詳しくはサーボモータ制御の項目で説明します。

参考情報

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

このホームページ内

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

他のWebサイト

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

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

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

TOP