• 締切済み

モータの速度制御

ロータリーエンコーダ(インクリメンタル型)を用いて速度を計測しようとしています。 この場合、ソフト上でロータリーエンコーダから出力されるパルスをカウントし、カウント値を角度に直して(角度(t)-角度(t-1))/サンプリング間隔 で速度は算出できると思いますが、算出結果をプロットしてみるとノイズのような波形になってしまいます。 どうしたちゃんとした速度が算出できるのでしょうか?素人なので文章の意味がわかりにくいと思いますがよろしくお願いします。

みんなの回答

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.5

(レシプロ測定という名称は、もしかしたら某測定器メーカだけが使ってる用語かも、、。) 測定方法の概要は以下のとおりです。 1. カウンタを2つ(AとB)、タイマーを一つ(これはサンプリング周期をセット)用意する。 2. カウンタAにはエンコーダからのパルスを入力、Bには基準周波数(1MHzとか、10MHzとか)を入力 3.測定開始信号直後の、エンコーダのパルス立ち上がりで、カウンタA,B、タイマーをスタート 4.タイマーの終了後、最初のエンコーダパルス立ち上がりでカウンタA、Bを停止(カウンタAは最後の立ち上がりをカウントしないようにする。カウントする場合には、1をカウント値から引く) 5. 周波数は、(カウンタAの値)/(カウンタBの値)*(カウンタBの入力周波数) 要は、エンコーダパルス整数周期(>サンプリング間隔)分の周期測定をカウンタBで行う という測定です。 で、問題になるのが、3.と4.の処理です。エンコーダの立ち上がりでカウンタの動作を制御する必要があります。これが実現できれば、現状のシステムでも可能かと思います。 留意点がいくつかあって、 1.測定分解能は、カウンタBの入力周波数とサンプリング間隔でほぼきまる。(最高周波数が1MHzのカウンタで間隔0.1msだと、1%程度の分解能しか得られない) 2. エンコーダ出力パルスの周期が長いと、測定周期が長くなる。 3. 最低サンプリング間隔は タイマ設定時間+エンコーダパルス幅*2 程度となり、また測定時間は若干ばらつく(エンコーダパルスの周期、スタート信号のタイミングにより) ご参考になれば。

pippi-paso
質問者

お礼

どうもありがとうございました。ちょっとわからないところもありますが参考になります。

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.4

整理すると、 モータの最高回転数 5000rpm(約80rps) エンコーダ出力パルス 2048*4(8kパルス/回転) サンプリング 0.1ms ですか。 この条件だと、最高回転数で回しても1サンプリングあたり64カウント程度ですから、速度計算にそのまま使うのは分解能不足かと思います。(回転数が下がれば、それだけカウント数も減りますし) もし、現状の機材で私がするとしたら、 1. サンプリング時間を見直す。測定に許容できる最大の時間にする 2. エンコーダ分周比を見直し、使用する最高回転数を考慮してボード入力周波数(1MHz)を越えない範囲で最大のパルス数/回転に設定する (場合によっては、もっと高速のPCI-632206(Max50MHz)に変える) をまず試みて、サンプリング期間中のカウント数を増やし、データのバラツキを抑えます。 そののちに、先に挙げた周期測定、レシプロ測定を検討します。 (もっとも、0.1msで0.1%のバラツキにいれようとしたら、10MHzをカウントできるカウンタが必要なので、6204では対応困難ですし、低速域でパルス周期が0.1msを越えないようにする必要が有ります。) 632206では、周期測定、平均周波数測定ができるようなので、こういったものを検討する必要も有るかと思います。

参考URL:
http://www.interface.co.jp/catalog/prdc.asp?name=pci-632206
pippi-paso
質問者

お礼

わかりました。ありがとうございます。 レシプロ測定を現状のシステムでやることはできますよね?外部回路とか必要になってくるのでしょうか?

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.3

いくつか気になる点が、、 角度を算出するカウンタがフルスケールを越えたときの処理はどうやってますか? カウンタがフルスケール越えたときには、角度(t)<角度(t-1) になりますので、ここの処理を適切に行なわないと、速度信号にノイズが入ります。 サンプリング間隔とエンコーダの一回転あたりのパルス数はいくらでしょうか。これが判らないと、的外れなアドバイスをしてしまう可能性が、、。 このボードにはZ信号でリセットする機能が有りますが、これは使ってませんよね? これを使うと、リセット前後で角度(t)<角度(t-1) になり、速度信号にノイズが入ります。(しかもリセットが一回転毎に行なわれるため、ノイズが頻繁に入ります)

pippi-paso
質問者

補足

>角度を算出するカウンタがフルスケールを越えたときの処理はどうやってますか? 今のところ一回転すらさせていない状況で使用していますのでフルスケールになるまで使っていません。 >このボードにはZ信号でリセットする機能が有りますが、これは使ってませんよね? Z信号は使っていません。 >サンプリング間隔とエンコーダの一回転あたりのパルス数はいくらでしょうか? サンプリング間隔は0.1[ms]、一回転あたり65536の分解能があり、分周出力16~16384[パルス/1回転]です。現在、分周出力は2048[パルス/1回転]で使用し、カウンタボードで4逓倍しています。

  • pactaka
  • ベストアンサー率44% (45/102)
回答No.2

まずどの程度の速度(m/min)を測定したいのかが知りたいですね それとソフト上でと言う事は使用機器はPCですかPLCですか,それとも高速カウンタから測定値を入力しているのですか? 結論から言うとパルスの受け側が正常にエンコーダパルスを受け取れていないのでは? パルスの受け側のスキャンは相当高速ですか? エンコーダが1回転すると例えば4096パルス出力したとすると受側も4096パルスきちんと受け取れる入力精度がなければ正確な演算は無理ですよ 単純平均値ぐらいしか出ないのでは・・・ 私が経験した機械では巻出装置で速度は(25m/min)でロータリエンコーダはOMRONでPLCもOMRONのCVM1(スキャンは約10msec)これで速度ではなく距離演算してましたが,OMRONのロータリエンコーダ用の高速カウンタを使用してもパルス飛びが出ていたので,相当早いスキャンの高速カウンタを使用しなければ,まともに速度が算出できないと思いますよ

pippi-paso
質問者

補足

どの程度の速度で使うかは未定ですが最高5000[1/min]まで出せるモータを使ってます。 使用機器はPCでソフトにはVisual Basic6.0、アップダウンカウンタボードにはInterface社製のPCI-6204を使用しています。ロータリーエンコーダはモータに最初から付属しているものを使用しています。

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.1

サンプリング間隔が短いと、角度の差分(カウント数の増分)が少なくなって、非常に荒い速度しか出てきません。 (例えば、サンプル時間内でのカウント数が十程度しか増えないとすると、速度データは+-10%程度のバラツキを持ってしまいます。) これは、回転数が低い場合(パルスの周波数が低い場合)には顕著です。 で、どうやって対処するかとなると、ひとつの方法は、例えばパルスの周期を測定して、周波数(回転数)を計算する方法が有ります。この方法は低速で精度の良い測定が出来ますが、高速になると周期測定の確度が下がるという問題が有ります。 両者を組み合わせた方法として、 ・一定時間以上、パルスをカウント(カウント数をnとする)する。 ・nパルス分の時間(T)を測定する ・T/nで平均周期を求め、そこから回転数を出す という方法を使うことも有ります。 (レシプロ測定とか呼ばれていたような) また、周期測定をする場合には、ロータリーエンコーダのパルス間隔が均一である必要が有ります。周期測定をする場合には、パルス数をエンコーダ一周分のパルス数の整数倍にして、エンコーダのパルス間隔不均一さの影響を受けないようにする必要が有るかもしれません。

pippi-paso
質問者

お礼

だいたいわかりました。ありがとうございます。パルスの周期はソフト上でどうのようにしたらいいのでしょうか? よろしくお願いします。

関連するQ&A