« 2009年10月 | トップページ | 2009年12月 »

2009年11月

モータードライバーについて

モータードライバーについてです。

今まで私は、ロボットのステアリングモーターの駆動もしくは普通にホイールを駆動するために、モータードライバー用のICである東芝セミコンダクターのTB6549を使ってきました。
このモータードライバーICにはフルブリッジ回路が内蔵されており、モーターを一通り制御することができます。こいつは次のような特徴があります。

TB6549HQ
メーカー:東芝セミコンダクター社
出力電流:3.5A(DC)、4.5A(瞬時)
回路数 :1ch
ON抵抗※:0.5Ω
電圧  :10~27V
PWM周波数:100kHz(max)

(※ON抵抗はなるべく低いほうが発熱=ロスが少なく性能がよいことになる。)
ちなみにTB6549はパッケージが3種類あり、上の表は一番大きいものの値です。
小型のパッケージでは出力電流の許容値が小さくなります。

こいつは、IC1つでモーターの正転逆転・ブレーキなどが簡単にできて、さらにマイコンとの親和性もよいので多用してきました。
さらに、このICはとにかく信頼性が高いです。私や友達が多数使ってきた中で、一度もICが燃えたのを見たことがありません(笑)

しかし…久しぶりに私が所属していたサークルであるロボメカ工房の仲間と話していて、目から鱗が落ちるような良いドライバーを教えてもらいました。
ロボット製作者にはたぶんかなり一般的で…私が知らないだけだったと思うのですが…。念のため紹介しておきます。

L6205
メーカー:STMicroelectronics社
出力電流:2.8A(DC)、7.1A(瞬時)
回路数 :2ch
ON抵抗 :0.3Ω
電圧  :8~52V
PWM周波数:100kHz(max)

L6205とTB6549を比べると、出力電流(DC)以外の項目ではTB6549が完敗であることがわかります。モーターを2個駆動できるし。
あとは信頼性がどうなのかという点が気になりますが…まあ、過電流保護回路も内蔵されているし大丈夫でしょう。。

いま、ちょうどモーターを回す回路を製作しているので、今度はL6205を使ってみようと思います。省スペース化にもつながるし…w

| | コメント (2) | トラックバック (0)

A/D再び死亡

本日デバック中に、作業ミスによりSH7144のA./D変換機能がお亡くなりになられました。
具体的には…ふたたび金属部で12.6Vと3.3Vをショートさせてしまったようです。

今年のマシン
Ca3ug74k
HV8「エイチブイエイト」

CPUに予備はなく、また時間もない(→張り替えてから作業して完走可能か?という観点で)ということで今年はこれで終了です。
つくば行きも急遽中止しました。(ほかにたまっている仕事もあるので…)

大学院に入ってからはじめての、全身全霊をかけたマシンがこのような結果になってとても悔しい。
そろそろ本格的に御祓いに行ったほうがよさそうだw

----------
以下、テクニカルシートの内容

・モーターはトルク制御(電流制御)を導入し、自由度の高い精密な制御を目指した
・白線を読み取るセンサーは、パルス発光と交流結合を用いている。そのため消費電力が従来比約1/10と小さく、さらに原理的に外乱に非常に強い仕様となっている
・静電気放電(ESD)によるマイコンの破損を防ぐために保護回路を多数導入
・極力軽量でシンプル、低重心な構成を目指した。自身初のマザーボード1枚からなる機体
・駆動系でホイールに内歯歯車を内蔵した。シンプル&コンパクトな駆動系を実現
・ジャイロをはじめとするセンサー系の充実
・本格的なデジタル制御の導入

----------
今回は野心的に技術開発を行った。
たとえば、ライントレースに用いるアナログセンサーは「交流センサー」となっています。
これはフォトインタラプタのLEDをパルス発光させて、その交流成分のみを読み取ることで、直流成分を100%カットして外乱である照明のムラを効率的に除去する仕様となっています。また周波数特性の設定をうまく行うことで蛍光灯などに含まれる50Hzの交流成分もカットします。
ほかにはライントレースについては、トルク制御と微分先行型PD制御を組み合わせて直進安定性が極めて優れた仕様にしました。
私としては制御にジャイロを本格的に用いたのはこれがはじめてなので、とても期待していたのですが。

詰めがあまいなぁ。
可能でしたら、また来年お会いしましょう。

| | コメント (0) | トラックバック (0)

計算機初心者

本日は割り込みについて記述していました。

10kHz周期で割り込みルーチンを書いていたんですが…
なぜか順調に動いていたプログラムが1行追加するだけでとまる。
きれいにとまる。

…結論としてはこの問題は解決しましたが、だいぶ悩みました。

----------切り取り-------------

割り込みルーチンに追加したソースは以下のようなコード

-----
YiR = IG * (iR * ADTV - VcoR);        //現在の電流値を算出した
YiL = IG * (iL * ADTV - VcoL);        //現在の電流値を算出した
-----

ただ引き算と乗算を使っているだけである。

しかしただの乗算…なぜ10kHzで動かないのだろうか、と考えていたところ次のことに気がついた。

・変数はすべてdouble型であること。

double型…倍精度浮動小数点数だが、あまり変わったことはない。
CPUにハードウェアで乗算器が実装されていればそれほど時間がかかるものではない。
SH7144では事実データシートに32bit×32bitの乗算を2~4ステートで実行すると書いてある。

それでは32bit×32bitの乗算を行っているか?
答えは否。

SH7144+GDLではdoubleが64bit長、floatが32bit長であった。
これはsizeof演算子をつかって実際に調べたから間違えはないはずである。
doubleの乗算では64bit×64bitの乗算である。

このことから変数をdouble→floatに変えた。
すると割り込みが復活し正常にルーチンが動作し始めた。
しかしそれでも計算時間に以上に時間がかかっている。0.06msぐらいだろうか。
10kHzで駆動するにはあまりにも遅い。

そこでさらに次の事実に気がついた。

・浮動小数点数の乗算はきわめて遅い

ということ。詳細は省くが、とても2~4ステートなんかで実行できるような処理ではない。
(浮動小数点の乗算は仮数部と指数部についてそれぞれ別々に処理をするため)
2~4ステートで計算できるのは整数型(int型)である。

floatをintに変更したところでやっと高速に処理できるようになった。

やっぱりブランクがあるとだめですね。
こんな簡単なミスで数時間無駄にしましたorz

| | コメント (2) | トラックバック (0)

A/D変換機能死亡のお知らせ

新型ロボトレーサー完成まであと一歩というところで…
マイコンのA/D変換機能がお亡くなりになられました。享年3週間。
私としたことが…AVCCと12.6Vを一瞬だけショートさせてしまいましたorz

変換後の値がすべて1023になるよm9(^Д^)プギャー


SH7144の予備はあるけど…QFPの張替えなんて…ありえないっすorz

完成したら画像をうpします。

| | コメント (0) | トラックバック (0)

« 2009年10月 | トップページ | 2009年12月 »