プロが教える店舗&オフィスのセキュリティ対策術

ATmega168を購入してWinAVRでプログラムを書いています。GWServoのS03T 2BBMGと書かれているサーボモーターを動かそうとしています。パルスを送ればいいのかなと思ってdelayと出力を使ってPWMしているのですがまったく制御できません。どういうプログラムを組めばいいのでしょうか?AVRに外部の発信子はつけていません。ATmega168に内蔵されている発振子でしています。というかそれでいいのでしょうか?ごちゃごちゃですが、何か動かすためのアドバイスをください。お願いします。

A 回答 (2件)

こんにちは。

まずは話を整理して、一つずつ解決していきいましょう。

> どういうプログラムを組めばいいのでしょうか?

GWServoは、RC用のサーボモータですよね。RCサーボモータの動作原理はすでにご存じだと思いますが、念のため。
【TekuRobo工作室/ソフトウェア編/ラジコンサーボモータを動かす】
http://homepage1.nifty.com/rikiya/software/112se …

> モータードライブ用の回路ということはトランジスタで電圧を上げるということでしょうか?

そういう意味ではないと思いますよ。回路図も上記リンク先を参照してください。ラジコンサーボモータの端子の並び方は(現在は)各社とも同じ並び方ですので、2番ピンに6V(5VでもOK)500mA程度を供給できるようにしましょう。ただ動かすだけなら電流はもっと少なくて良いでしょう。(トルクの大きなサーボだと、ロック時に平気で 1A程度食ったりしますが。)

> パルスを送ればいいのかなと思ってdelayと出力を使ってPWMしているのですが

delay使うのは悪いやり方です。というのは、今後RWSPさんがプログラムの処理内容を増やしていったときに、サーボモータを制御するPWM信号を正しいタイミングで生成できなくなるからです。具体的には、シリアル通信やボタンの押し下げ制御、複数のサーボモータを同時に制御するなど、処理内容が増えてくるとdelayを使ったのでは約20ms周期のサーボ制御信号時間を管理できなくなります。管理できなくなると、サーボモータが動作中に、ビビッ、ビビッ、と振動します。

時間を正確に管理するためには、ATmega168の内蔵周辺回路にあるタイマモジュール(8-bit Timer/Counter0 または 16-bit Timer/Counter1)を使用します。このモジュールの詳細はATmega168のハードウェアマニュアル
http://www.atmel.com/dyn/resources/prod_document …
を参照してください。
    • good
    • 0
この回答へのお礼

親切に回答ありがとうございます。「delay」を使うのは悪いやり方なんですね。確かにサーボモータはビビビビと振動していました。16-bitTimer/Counter1というのもうすうす感じてはいたんですが、どう使っていいものかわからなかったから手をつけていませんでした。少し勉強してみます。

お礼日時:2009/05/09 10:41

回答します。



ATmega168というのは、ただのMPUで、ボードがあるはずです。もしも、サーボモータをドライブするならば、ATmega168にモータドライブ用の回路をつけていないと動きません。なぜならば、出力が足らないからです。

回路は簡単ですので、一応電子回路の基本を勉強されると良いでしょう。

その後、プログラムすれば所望の動作ができるはずです。

では。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました。モータードライブ用の回路ということはトランジスタで電圧を上げるということでしょうか?まさか出力が足りなかったとは考えていませんでした、ありがとうございました。

お礼日時:2009/05/09 01:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!