2009年3月24日火曜日

MATLABでフィードバック系のシミュレーション

たまにうっかり忘れるのでメモ.

MATLABでプラントPと制御器Kが構成するフィードバック系のシミュレーションをするとき,
>> s=tf('s');
>> P=1/s;
>> K=1/(1+s);
>> step(P*K/(1+P*K))
とかやるのはNG.正しくは
>> step(feedback(P*K,1))
とする.一見結果は同じなのだけど
>> P*K/(1+P*K)

Transfer function:
s^2 + s
-----------------------
s^4 + 2 s^3 + 2 s^2 + s

>> feedback(P*K,1)

Transfer function:
1
-----------
s^2 + s + 1

>>
という違いがあり,高次のシステムを使うときになって初めて問題が顕在化したりしてよろしくない.
システムの割り算はMATLABでは逆システムの計算と直列接続で計算されるので,この場合P*Kと1+P*Kが共通の極を持っているにも関わらず,これらが相殺されないことによって問題が起こる.
ちなみにseriesとparallelを*と+で書くのは,少なくともSISOの場合には問題ない(中でやってる処理は同じ).MIMOの場合は未確認.

MATLABに限らないけど,強力なツールを使うのは楽なようで難しい・・・
ソースを全部追うのは大変だし・・・

2009年3月22日日曜日

使えそうな部品探索@日本橋(モータードライバ編)

昔ほど頻繁に日本橋に行かなくなったので,どこの店にどの部品があるか把握できない・・・
というわけで,今後のためにまとめておきます.今回はモータードライバ関連です.

最初に店ごとにとってきたモータードライバ関連部品コーナーの写真,
続いてカテゴリーごとの部品まとめになっています.

あとトーカイとシリコンハウス共立は重要かと思いますが,見る時間がなかったので入ってません.

ではカテゴリーごとのまとめ編

  • モータードライバIC
    一番楽な選択肢で,基本的に一つの部品でモータードライバが構成できます.
    この手のICでよく使われているICにTA7291とかTA8440とかTA8429などがあります.これらのICは,東芝のカセットレコーダー用のICで入手が容易ですが,バイポーラトランジスタでできてるICなので電圧降下が激しく(1~3Vくらい),発熱が大きいことなどから,電池で動くタイプのマシンには使いたくありません.また,スイッチ速度も遅いのでPWMにもむかないです.
    ちなみにTB****という型番のモータードライバはFETベースなので電圧降下が小さく使いやすいです.ただし,こちらは滅多に見かけませんが・・・
    TA****については,どこでも手に入るし,個人的にあんまり使わないので,ここではバッサリ省略してます.
    DCモーター用
    TA****以外のICってやっぱりほとんど日本橋では出回ってないですねー.
    このジャンルに関しては通販で探した方がいいかも.
    1. μPD16805GS
      パーツランドの部品棚ではMPD16805になってます.これはこれで正しい気もしますが,uPDって書いてあることの方が多いかな?
      はんだ付けが少し困難であることを除けば,田宮の工作セット系のモーターFA130とかRA260の制御に申し分ない性能で使いやすいICです.
    ステッピングモーター用
    あんまり使わないけど,ついでにリストアップ.
    1. STK672-050
      ユニポーラ定電流チョッパ方式(他励PWM方式)ステッピングモータドライバ(正弦波駆動)出力電流3.0A
    2. LB1845
      PWM 電流制御式 ステッピングモータドライバ
    3. TB6615PG
      3相/4相ステッピングモータドライバ
    4. (PMM8713)
      製造中止のステッピングモーター用IC.直接ステッピングモーターを駆動するドライブ能力はないそうです.
      今後の入手性に難はありそうですが,デジットにはまだあるようですね.
    ブラシレスモーター用
    いつか使おうと思って全然使ったことがないブラシレスモーター・・・
    この機会に使ってみるか?
    1. ECN3022SP
      ECN3022はIGBTを6個内蔵したワンチップ三相ブリッジICです。
      特に三相DCブラシレスモータ制御用に最適です。
    RCサーボモーター用IC
    使ったことないですが,RCサーボで使われているICも売っています.何度か調べようと思って調べ損ねているのでついでにまとめ.自作の機械をラジコン化するときに便利かな?
    1. NJM2611D
    2. M64611FP
    3. M52461GP
    データシートを見た感じだと,安価なRCサーボのほとんどはデッドバンド付きのP制御のようですね.

  • ゲートドライバ&MOSFET
    適したモータードライバが見つからない場合,大抵はディスクリート部品でMOSFETを使ったモータードライバを組むことになります・・・が,MOSFETのゲートを駆動する回路は電源投入時や電圧低下時の安全性,ゲート電圧の確保などを考えると結構難しく,この部分の間違いでモータードライバが炎上する事故がよく起きます.
    というわけで,僕はゲートドライバは可能な限りIC使って設計を避けることにしてます(笑)
    昔はゲートドライバICとかあんまり売ってなかったのですが,最近は結構売っているようで,いい時代になったものです.
    ゲートドライバ
    マルツパーツ/千石電商の参入で入手できるものがだいぶ増えたようです.
    D級アンプとかが流行ってるのも要因のひとつか?
    1. HCPL-3180
      2 Amp Output Current, High Speed IGBT/ MOSFET Gate Drive Optocoupler
    2. HCNW3120-000E
      2.0 Amp Output Current IGBT Gate Drive Optocoupler
    3. HCPL-316J-000E
      2.0 Amp Gate Drive Optocoupler with Integrated Desaturation Detection and Fault Status Feedback
    4. HCPL-3150-000E
      0.5 Amp Output Current IGBT Gate Drive Optocoupler
    5. HCPL-314J
      HCPL-3140-000E
      HCPL-314-000E
      0.4 Amp Output Current IGBT Gate Drive Optocoupler
    6. IRS2011SPBF
      HIGH AND LOW SIDE DRIVER
    7. IRS2110PBF/IRS2110SPBF/IRS2113PBF/IRS2113SPBF
      HIGH AND LOW SIDE DRIVER
    8. IRS21271SPBF/IRS21281SPBF
      CURRENT SENSING SINGLE CHANNEL DRIVER
    9. IRS2092PBF/IRS2092SPBF
      PROTECTED DIGITAL AUDIO DRIVER
    10. IRS20955SPBF
      PROTECTED DIGITAL AUDIO DRIVER
    11. TLP250 / TLP251
      IGBT/MOSFET駆動用フォトカプラ
      昔結構探してみつからなかった思い出が・・・
    FETアレイ
    たぶん4AM12(廃品種)とかMP4212
    みたいなPch×2,Nch×2の構成のFETアレイがよくつかわれてるんですが,今回なぜか見つからなかった・・・また探しておきます.
    1. MP4208
      Pch×4 RDS:0.2Ω ID 5A(Peak 10A)
    2. MP4209
      Nch×4 RDS:0.28Ω ID 3A(Peak 12A)
    3. MP4210
      Nch×4 RDS:0.12Ω ID 5A(Peak 20A)
    4. MP4211
      Pch×4 RDS:0.16Ω ID 5A(Peak 20A)
    5. MP4410
      Nch×4 RDS:0.12Ω ID 5A(Peak 20A)
    6. MP4411
      Nch×4 RDS:0.28Ω ID 3A(Peak 12A)
    7. MP4412
      Nch×4 RDS:0.28Ω ID 3A(Peak 12A)
    8. MP6404
      Nch×3 Pch×3 RDS:0.12Ω(Nch) 0.16Ω(Pch) ID 5A(Peak 20A)



2009年2月22日日曜日

PowerPoint 2007 と TeXclip

この記事の情報は古いです
TeXclipで作成した数式の再編集については


を参照してください.

2009年2月19日木曜日

MATLABで可観測正準形/可制御正準形

制御の教科書では必ず出てくる可観測正準形/可制御正準形ですが,数値計算上は大変扱いづらく,実際に数値的にこの形式にあえて変換することなんて試験かレポート以外ではあまりないと思います.
そのあたりの事情を反映してかMATLABにはこれらの形式に変換する関数というのは存在していないようです.
ctrbf/obsvfという関数があります.

しかしまぁ研究の都合上これらの正準形を計算したい場合もあるわけで,そんな場合に使うルーチンを作りました.1入力1出力の場合にしか使えません.1入力1出力の場合だと伝達関数形式に変換した時点でこれらの形式は単純に決まるわけですが,復習をかねて教科書的な方法で計算しています.

可観測正準形
function [ csys ] = obsvcanon(sys)
%OBSVCANON Compute observability canonical form

[n,d]=tfdata(tf(sys),'v');
W=hankel(fliplr(d(1:numel(d)-1)));
G=ss(sys);
U0=obsv(G);
S=W*U0;
csys=ss(S*G.a*inv(S),S*G.b,G.c*inv(S),G.d);

end


可制御正準形
function [ csys ] = ctrbcanon(sys)
%CTRBCANON Compute controllability canonical form

[n,d]=tfdata(tf(sys),'v');
W=hankel(fliplr(d(1:numel(d)-1)));
G=ss(sys);
UC=ctrb(G);
S=UC*W;
csys=ss(inv(S)*G.a*S,inv(S)*G.b,G.c*S,G.d);

end

ダウンロード

2009年2月2日月曜日

IEEEのLaTeX投稿用テンプレで紹介されてるスタイルファイル

IEEEの投稿用のクラスファイルについているテンプレート(リンク)に,推奨スタイルファイルが結構詳しく紹介されているのでメモ.
  • \usepackage{ifpdf}
    Heiko Oberdiek 氏の ifpdf.sty は,出力の種類(pdfかdviか)に応じて条件コンパイルを行う時に便利です.
    使い方:
    \ifpdf
    % pdf code
    \else
    % dvi code
    \fi

    ifpdf.styの最新版は,
    http://www.ctan.org/tex-archive/macros/latex/contrib/oberdiek/
    から入手できます.
  • \usepackage{cite}
    文献の参照を改良するスタイルファイルです.たとえば,[1], [9], [2], [7], [5], [6] は自動的に [1], [2], [5]--[7], [9]とかになります.あと,参照の直前の余白は自動的に調節されるらしいです.
    IEEEのクラスファイルはこれを使うことが前提でnatbib.styとは基本的に共存できませんが(何かオプション付けたらできるはず),他のところではnatbib.sty使うことの方が多い気がします.最新版は
    http://www.ctan.org/tex-archive/macros/latex/contrib/cite/
    から入手できます.
  • \usepackage[pdftex]{graphicx}
    \usepackage[dvips]{graphicx}
    \graphicspath{{../eps/}}
    言わずと知れた図を挿入するためのスタイルファイルです.日本では日本語の問題からかあんまりメジャーじゃないですけど,海外ではpdftexって結構使われてるんですね.
    密かに\graphicspathでパスを指定できるのは知らなかった・・
  • \usepackage[cmex10]{amsmath}
    定番のAMSの数式環境.cmex10とオプションを付けると,ビットマップフォントが組み込まれるのを防げるらしい.
  • \usepackage{algorithmic}
    アルゴリズムを書くためのalgorithmic環境を提供.今の自分の専門分野ではアルゴリズムを書くことはあんまりないですが,一度使ってみたいなぁ〜
    algorithmic.styのドキュメントと最新版は
    http://www.ctan.org/tex-archive/macros/latex/contrib/algorithms/
    に,サポートサイトは
    http://algorithms.berlios.de/index.html
    です.あと,より新しくてカスタムが可能なalgorithmicx.sty
    http://www.ctan.org/tex-archive/macros/latex/contrib/algorithmicx/
    もあるそうです.
  • \usepackage{array}
    LaTeX2eの標準的なarrayとtabular環境を改善して,よりよい見た目と出力の制御を実現するものらしいです.「標準での表の出力はひどいから,とりあえず入れとけ.」という感じで紹介されています.次から使おう・・・
    大抵のシステムにデフォルトでインストールされていますが,最新版は
    http://www.ctan.org/tex-archive/macros/latex/required/tools/
    で入手できます.
  • \usepackage{mdwmath}
    \usepackage{mdwtab}

    これらは Mark Wooding さんによるMDW tools の一部です.
    他にも色々なツールを提案されているようです.
    http://www.ctan.org/tex-archive/help/Catalogue/entries/mdwtools.html
    ざっと見た中ではsyntax.styのgrammer環境が目を引きます.

    (↑の図はドキュメントから抜粋したものです)
    こんな感じのコンピュータ言語の文法を記述できるようです.
    いつかは自分言語の文法を書くようなことをしてみたい・・・
  • \usepackage{eqparbox}
    自動的に同じ幅に調整されるボックスを実現するパッケージです.TeXで同じ幅の表を作ったりする作業は地味にめんどうですが,これを使えばスマート(?)に実現できます.
    他にも通常は揃えにくい場所の位置や長さを揃えることができそうです.単純な原理でありながら応用範囲の広い秀逸なパッケージですね.
    入手先はhttp://www.ctan.org/tex-archive/macros/latex/contrib/eqparbox/です.
  • \usepackage[caption=false]{caption}
    \usepackage[font=footnotesize]{subfig}
    subfig.styはsubfigure.styをより現代的にしたものらしいです.今までずっとsubfigure.styだったので次から使ってみます.もともとsubfigureを使いこなせてないので差はよくわかりませんが,従来の\subfigureに代えて\subfloatコマンドが提供されています.これは図だけでなく表にも適用できて,Figure 7(a)みたいにsubfigure を直接参照したり,図目次に subfigure の Caption を入れられたり, Caption の見た目を色々制御したりできるみたいです.
    ちなみにsubfig.styはcaption.styに依存していて自動で読み込みます.そのため IEEEtran.clsのcaption周りと衝突するらしく,IEEE用の原稿では上のような並びで使います.ダウンロードは
    http://www.ctan.org/tex-archive/macros/latex/contrib/subfig/
    から.
    ※ 日本語を使っているとき,タイトル等の書式設定がおかしくなる問題が発生する事があるようですが, caption.sty を最新版に置き換えることで解決するようです,
  • \usepackage{fixltx2e}
    LaTeX2e の問題点を修正するパッケージです.例えば,2つのカラムに及ぶ図と1カラムの図が混在したときに,それらの順序が入れ替わることがある問題とかが修正されるます.次から使ってみます・・・.最新版とドキュメントは
    http://www.ctan.org/tex-archive/macros/latex/base/
    から.
  • \usepackage{stfloats}
    二段組みの文書で二段使う図を,ページ下に配置することができるようになったりするパッケージです.float周りをごっそり書き換えるので他のパッケージと共存できないことが多いらしい・・・あんまり使う機会はないかも??
    ドキュメントと最新版は
    http://www.ctan.org/tex-archive/macros/latex/contrib/sttools/
    から.
  • \usepackage{endfloat}
    IEEEtran.cls を captionoff オプションで使うタイプの文書で便利らしい.今のところそういう流儀の雑誌と縁遠いかなぁ・・・必要な時が来たら調べます.最新版とドキュメントは
    http://www.ctan.org/tex-archive/macros/latex/contrib/endfloat/
    から.
  • \usepackage{url}
    URL をかしこく扱うためのスタイルファイルです.改行する場所とかも改善するらしい.これは結構使いますね.ほとんどの場合デフォルトで入ってますが,最新版は
    http://www.ctan.org/tex-archive/macros/latex/contrib/misc/
    から.
実は今までTeXファイルの受け渡し時のトラブルもあって,スタイルファイルを使うのを敬遠していたのですが,標準的に入っているのも多いみたいだし,今後はちょくちょく使うことにします.

2009年1月16日金曜日

MATLABのグラフに目盛りを追加

MATLABでグラフを作るとき,自動でつく目盛り以外に特定の値の目盛りがほしい場合があります.真値のところに目盛りがほしいとか収束先のところに目盛りがほしいとかそんなときです.

じつはこれをプログラムからやるのは結構面倒だったりします.
なので専用の関数を作ってみました.

こんなグラフに
>> addxtick(2/pi)
とすると

こんな風に目盛りがつきます.
ラベルもいじりたいときは
>> addxtick(pi/2,'pi/2')
と入れれば

となります.便利ですよ.
短いプログラムなのでコピーしてaddxtick.mという名前で保存して使ってください.

function [] = addxtick( tk, tklbl )
%ADDXTICK --- Add new tick to x-axis
%   Ex.    addxtick(3.14)
%   Ex2.  addxtick(3.14, 'Pi')

if nargin==1
    set(gca,'XTick',unique(sort([get(gca,'XTick'), tk ] )));
else
    temp = cellstr(get(gca,'XTickLabel'));
    temp = {temp{:},tklbl};
    [temp2,idx] = sort([get(gca,'XTick'),tk]);
    [temp2,idx2]=unique(temp2);
    idx=idx(idx2);
    set(gca,'XTick',temp2);
    set(gca,'XTickLabel',temp(idx));   
end

end
あと,ほとんど同じですがaddytick.mも置いておきます.
function [] = addytick( tk, tklbl )
%ADDYTICK --- Add new tick to y-axis
%   Ex.    addytick(3.14)
%   Ex2.  addytick(3.14, 'Pi')

if nargin==1
    set(gca,'YTick',unique(sort([get(gca,'YTick'), tk ] )));
else
    temp = cellstr(get(gca,'YTickLabel'));
    temp = {temp{:},tklbl};
    [temp2,idx] = sort([get(gca,'YTick'),tk]);
    [temp2,idx2]=unique(temp2);
    idx=idx(idx2);
    set(gca,'YTick',temp2);
    set(gca,'YTickLabel',temp(idx));   
end

end

2009年1月15日木曜日

三叉ヘビ型ロボットの製作

三叉ヘビ型ロボットというおもしろい構造のロボットが
杉江研の石川先生たちによって研究されています。
僕は研究に深く関わっているわけではありませんが、とてもいい動きをするロボットなので一度作ってみたいと思っていました。研究室には一応理論を検証するための機械がありますが、データを取ったり精度を確保するためにそれなりに大がかりな装置になっています。

今回は、より単純に三叉の動きを楽しむために、小型で小回りの良いロボットを製作してみました。
以下製作記録です。
デモ用のプログラムを書き込んで動作

いつもより多めにまわってます。
学部生の勧誘で本部に出張する時とかに役立てる予定。