スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

振動対策_その2

今日はプロッタアームのブルブル対策その2として,ディジタルフィルタによる振動成分の除去を試してみる.
 ディジタル信号とかフィルタとか言うと小難しいイメージがあるが,難しいのはフィルタ係数を設計する段であり,いったん係数さえ求まればフィルタリング処理自体は数行のプログラムで難なく実装できる.
Cソースコードの例:
FIRフィルタ
/*
FIRフィルタの計算を行う
リングバッファを使えば配列の並び替えが不要(読み出し・書き込みが高速化)

x 入力信号
buf[] リングバッファ(配列サイズlength-1)
h[] フィルタ係数の入る配列(配列サイズlength-1)
unsigned int*ix リングバッファ書き込み・読み出しのためのポインタ
unsigned int length フィルタ・タップ長
*/
float fir(float x,float buf[],float h[],unsigned int *ix,unsigned int length)
{
float sum;
unsigned int i;

buf[*ix]=x;
*ix=(*ix+1)%length;
sum=0.0;
for(i=0;i < length; i++){
sum=sum+h[i]*buf[(*ix+i)%length];
}
return sum;
}

IIRフィルタ

float a1,a2;
float b0,b1,b2;
//**********160-240Hz フィルタ係数****************
a1=-0.50796622;
a2=0.5921698;
b0=0.7960849;
b1=-0.50796622;
b2=0.7960849;
float iir(float in,int mode)
{
float out;
static float in_old1,in_old2;
static float out_old1,out_old2;

if(mode==0){
in_old1=0.0;
in_old2=0.0;
out_old1=0.0;
out_old2=0.0;
}

out=b0*in+b1*in_old1+b2*in_old2-a1*out_old1-a2*out_old2;
in_old2=in_old1;
in_old1=in;
out_old2=out_old1;
out_old1=out;

return out;
}

上記のコードのようにフィルタ係数と過去の値を保持するバッファを用意して順番どおりに積和演算を実行するだけである.
(高速・高性能を狙うならDSPやその他専用プロセッサを使う必要があるが・・・)

今回フィルタの係数は こちらのサイト を利用して求めた.
今回は共振周波数らしき200Hz帯のみカットしたいため,BEF(帯域阻止フィルタ)を使う.
FIRフィルタではタップ数が多くなり位相遅れが大きすぎるため,IIRフィルタを使う.

2軸プロッタの速度ゲインを目いっぱい上げ,□を描かせて比較した結果
フィルタ無し

IIR BEF CutOFF=160~240Hz


フィルタが無い場合は途中からブイーンとけたたましい音がして盛大に波形が揺れているが,IIRフィルタで共振周波数をカットしたほうはほとんど振動していない.
いろいろ試してみたが,フィルタ無しに比べ2倍近いゲインまで上げることができ,サーボの追従性が大きく改善した.
また,外乱オブザーバ等の加速度フィードバックとも相性は良いようで,エンコーダ分解能が不足しがちな低速域でも発振しにくくなった.

ただし,デメリットもある.
同じゲインでフィルタ無しに比べると,共振しない部分での応答性は悪くなる.(負荷イナーシャ増大と同様の効果.)
また,ある一定以上ゲインを上げると共振周波数より低い,うなりのような振動が発生する.
そして最大の問題はフィルタ性能のチューニングが難しく時間がかかるということ.
トライアル&エラーをやるたびにWEBでフィルタ係数を計算してプログラムに打ち込むのがめんどくさ過ぎる.

やはりフィルタ係数自体はマイコンに計算させて,ユーザはカットオフ周波数や帯域幅のみ入力するというのが本来あるべき姿だ.
スポンサーサイト

この記事へのコメント

トラックバック

URL :

プロフィール

もやね

Author:もやね
長野県在住の会社員(メカニカル・エンジニア).
ロボットは完全な趣味としてやってます.
E-mail:
mo_ya_ne[a]yahoo.co.jp
[a]⇒@

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
FC2カウンター
ブログ内検索
RSSフィード
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。