2014年3月1日土曜日

CAN経由のサーボコントローラ


CAN経由でサーボを制御できるコントローラを作ってみました

STBeeMiniの下にDIPのMCP2551が乗っています
サーボ用の電源は外部から供給し、マイコンの電源はCANに使われる配線のもう1ペアで供給します
そのためケーブルはツイストペアが2ペア入っているケーブルで、ものすごく硬くて太いです
このケーブルは100m売りで、あと99mくらいあります ジャマです…

ビットレートは多分750kbpsくらいです
STM32F1のペリフェラルはあまり自由にビットレートを設定できないのが不便ですね

データフォーマットとして
拡張CAN(アドレス29bit)
1バイト目がコマンド(サーボ制御は2)
2バイト目が対象のサーボ(現状1-4の範囲)
3バイト目がパルス幅(マイクロ秒)のMSB
4バイト目がパルス幅(マイクロ秒)のLSB
という感じになっています

CANはこういう「何かに命令を出す」というデータが苦手で、全体に命令を出す もしくは全体にお知らせする というのが適しています
今回はコントローラ1個1個に違うメッセージアドレスを設定するという方法で対応していますが、あまりいい方法では無いですね


サーボ制御はTIM2のPWMを使っています
これはGPIOA0-3に出力ポートがあるので使いやすいです


何に使うかとかは特に考えていなくて、信頼性の要求される用途 例えばモデルロケットの動翼とかに使えそうですが そもそもCANコントローラ経由で制御するとなると全長3mクラスとかにならない限りメリットが無いので、あまり現実的な用途ではないですね
家の中で電気のスイッチを押したりするのが関の山かなぁ と思います

0 件のコメント:

コメントを投稿