ホーム > 製品概要 > EMMA-U0A > サーボ制御 Vol.4

会社概要

・EMMA-U0A(エマ・ユーゼロエー) ソフトウェア

サーボ制御 Vol.4

サーボ制御  Vol.4 Vol.3で紹介した方式では、サーボモータの位置更新にかかる時間が余りに大きくなってしまう。最低で13.75ms、最大で63.75msという数字は、ただ大きいだけでなく、時間のバラつきも問題にあげられる。本項ではバラつきの改善については触れない。まずは余りに大きい更新時間を改善する方法を考えてみる事としよう。
20数個のサーボモータを同時に生成する事は困難である事は、前項でも話したわけであるが、どの程度までの並列数が認められるのかを考えてみようと思う。最低限必要なプログラムの命令数と、CPUの処理速度、サーボモータの角度分解能、ON時間の変動分、と、この辺りがわかるならば概算は可能である。
まず、CPUの処理速度であるが、ここでは1命令をこなすのにかかる時間と定める事にしよう。注意としては、高級言語を使用した場合の1命令ではなく、あくまでマシン語の1命令・・・言い換えるならアセンブリ言語での1命令である。


信号を並列にする事で、大幅に必要な時間を短縮する事が可能。しかし規格をいい加減に決めてしまえば、CPUの性能を十分発揮する事はままならない。


EMMA-U0Aに使用したCPUは、PIC18F452である。周波数は40MHZ。1命令に必要なクロック数は4クロックなので、1命令にかかる時間は、
1命令にかかる時間=(1 / 40×10^6[HZ]) × 4[クロック] = 0.0000001[秒]
である。
ON時間の変動分とは、ON時間が0.55msから2.55msまで変動するにあたって、変化する部分の最大値となる。
ON時間の変動分=2.55[ms] - 0.55[ms] = 2[ms]
というわけで、単純に上記のようになる。
角度分解能は実用最大9BITである。これは結局16BITの演算をする事を意味する。理由は、CPUの仕組みによるものなので、説明は控えさせていただこう。
さて、かかる命令数であるが、固定命令が19命令、変動命令が4命令である。ここで言う固定命令とは、信号を並列にしてもしなくとも変わらず必要な命令である。変動命令とは、信号の並列数によりその分、かかってくる命令である。
以上の事を踏まえた上で、考えてみると、
固定命令にかかる時間=1命令にかかる時間 × 19[命令] × 角度分解能(512)
=0.0000001[秒] × 19[命令] × 512 = 0.0009728[秒]

この部分は、理解するのに敷居が若干高いので、よく考えていただきたい。プログラムを書くとすれば大抵、プログラム1ループで角度分解能の1つを担う構造となる。すると、10の分解能を見積もれば10ループ必要となり、EMMA-U0Aのように512の分解能を見積もれば、512のループが必要になるのである。1つの信号が512の分解能で構成されており、1つの分解能が4つの命令で構成されるとき、1信号に必要な固定命令数は、19と512を乗じた数となる。それに1命令にかかる時間を乗じれば、固定命令にかかる時間が算出できる。
で、残りのON時間の変動分、つまり変動命令に使用しても良い時間は、
変動命令に使用しても良い時間=ON時間の変動分 - 固定命令にかかる時間
=2[ms] - 0.0009728[s] = 0.0010272[秒]

となる。
更に、ひとつの信号に必要な変動命令数は4命令で、9BIT(512段階)なので、
1信号に必要な変動命令数=変動命令数(4) × 角度分解能(512) = 2048[命令]
変動命令にかかる時間=1命令にかかる時間 × 1信号に必要な変動命令数
=0.0000001[秒] × 2048[命令] = 0.0002048[秒]

となる。結果、信号の並列数を1つとすれば、
1信号にかかる時間=固定命令にかかる時間 + (変動命令にかかる時間 × 信号並列数)
=0.0009728[秒] + (0.0002048[秒] × 1) = 0.0011776[秒]

である。この時間がON時間の変動分(2ms)を越えない限り、EMMA-U0Aでのスペックを、現実的にプログラムが可能となる。並列数が1つである場合、1信号にかかる時間は1.1776ms程度なので、2msに比べかなりの余裕がある事が伺える。そこで、並列数を5つまで増やしてみる事にする。
1信号にかかる時間=固定命令にかかる時間 + (変動命令にかかる時間 × 信号並列数)
=0.0009728[秒] + (0.0002048[秒] × 5) = 0.0019968[秒]

となる。2msに比べ、1.9968msとなっており、丁度折り合いのつく数字となっている。これ以上の並列数では、現実的にプログラムが不可能となり、それ以下では、無駄な時間をCPUに過ごさせなければならない事になる。
以上のことから、EMMA-U0Aには、並列数5個の信号生成プログラムを搭載している。これは、製作する前から現実的に可能であり、最高のパフォーマンスを実現するために上記のような考察と、それ以外の要素を考え合わせ決定したものである。
次回は、並列に信号を生成した場合の効果などを紹介したい。
必要な制御時間がそれぞれのサーボモータの目標角度により異なる、という問題点も現段階の方法では解決していないことを追記しておこう。


ページの先頭へ

Copyright 2009 ROBO Engine Co., Ltd. All Right Reserved.