アフィリエイト広告
アフィリエイト広告

サーボモータ・ドライバを作ってみた

PWM シリーズ (^_^;)
サーボモータ・ドライバを作ってみました。こんなアナログな回路に需要があるかどうかは、わかりません。が、まぁ、Arduino 使わなくてもサーボモータをギコギコ動かすぐらいはできるよね、って話です。
制御入力は 1〜5V なので、Arduino のアナログ出力で動かすことも可能、かもしれません。少し工夫が必要になると思いますが。

電源について。サーボモータ SG90 は最大 1.2A の電流が流れるので、電源を分離して 3A 程度まで取れるようにしてみました。

回路図

左側は電源部。入力は 12V 3A の AC アダプタで、上がサーボモータ用の 5V、下が制御回路用の 5V 出力です。サーボモータはかなり電流喰いますので、制御回路用電源と分離しています。
右上が三角波発振部。周期が 20ms と長いので、オペアンプを使う方式にしました。
右下がサーボモータの制御部です。1〜5V 信号を入力し、サーボモータを制御する PWM 信号を出力します。試作では、この部分を 2 組作って、2 台のサーボモータを動かしています。

電源部

制御電源部は、いつものように、三端子レギュレータ 7805 を使って 5V を出力しています。
いつも「最大出力電流は 1.5A」なんて安直にいってますけど、入力電圧を 12V とすると、消費電力は 10W 以上にもなりますから、まぁヒートシンクつけてファンで冷やしてやりたくなります。今回は、せいぜい数 mA 程度ですから、考えること、ないです。
サーボモータの電源を分離することで、制御部に影響を受けなくなり、動作が安定します。

サーボモータ電源部。こちらは、7805 で不足する電流を、PNP トランジスタ 2SA1725 でブーストします。全体で 3A ですので、7805 に 1A、2SA1725 に 2A を流すことにしましょう。
増幅率 hFE を 50 とすると、ベース電流 IB は、

IB = 2 / 50 = 0.04 [A]

ベースエミッタ間電圧を 0.8V とすると、抵抗 R17 は、

R17 = 0.8 / ( 1 - 0.04 ) = 0.83 [Ω]

部品箱にあったのは 1Ω でしたので、1Ω としました。消費電力は、

P = 0.82 / 1  = 0.64 [W]

ですから、1.5W 以上の定格電力のものを選定しましょう。

これで、サーボモータに 1A 以上の電流が流れるとき、2SA1725 がその分を補ってくれます。

ヒートシンクは、いつも使っている 20℃/W のものをそれぞれにつけています。サーボモータ 2 台を連続して動かすと、やや暖かくなっている感じです。

三角波発振部

オペアンプ BA10324 の U1 で矩形波を作り、U2 で積分して三角波とします。その三角波を利用して矩形波を作る、というオペアンプによる三角波発振回路。以前に作った回路とほぼ同じです。

三角波発振回路
以前、オペアンプを使った矩形波発振回路を実験してみました。 今回は、この回路を拡張した三角波発振回路を作ってみようと思います。 三角波は、矩形波を積分することで作ることができます。オペアンプで作った矩形波を、積分回路に通すことで三角波になる...

発振周期は 20ms、VR1 と R5 で調整しています。周期はラフでいいので、定数が決まったらボリュームを取っ払っていいんじゃないでしょうか。
ちなみに、サーボモータの数を増やしても、この部分は共通で使います。

サーボモータ制御部

VR3 と R18 は、とりあえずの制御入力 1〜5V を作っています。だいたいこのぐらい、です。

Vi(max) = 5 [V]
Vi(min) = 5 x 1.5 / ( 10 + 1.5 ) ≒ 1 [V]

これをオペアンプ U4 で増幅 (減衰) します。バイアス電圧は 1.05V とします。

Vo(max) = ( 5 - 1.05 ) x 4.7 / 100 + 1.05 = 1.24 [V]
Vo(min) = ( 1 - 1.05 ) x 4.7 / 100 + 1.05 = 1.05 [V]

オペアンプ U3 はコンパレータです。上の出力と三角波とから PWM 信号を作ります。三角波は振幅 1〜3V、周期 20ms なので、

T(max) = ( 1.24 - 1 ) / ( 3 - 1 ) x 20 = 2.4 [ms]
T(min) = ( 1.05 - 1 ) / ( 3 - 1 ) x 20 = 0.5 [ms]

ということで、1〜5V の入力から、サーボモータを制御できる 0.5〜2.4ms 幅の PWM 信号が発生します。なお、反転増幅器なので、実際には 1〜5V の入力で 2.4〜0.5ms (180〜0°) の動きになります。ややこしいっすね (^_^;)

VR3 で入力電圧を 3V にしておき、そのときサーボモータが 90° の位置になるように、VR2 でバイアス電圧を調整します。それでだいたいうまくいくと思います。

ブレッドボード

サーボモータ・ドライバ

上のブレッドボードは、サーボモータ用の 5V 電源部。下が、制御用の 5V 電源部と制御部です。

サーボモータ電源は、ヒートシンクを付けた三端子レギュレータ 7805 とPNP トランジスタ 2SA1725。
ベースエミッタ間の抵抗 1Ω は、部品箱にあった 3W 型を使っています。

制御電源の 7805 にもヒートシンクが付けてありますが、電流が少ないので、なくていいです。
中央の変換基板に載っているのがオペアンプ BA10324 です。下側が三角波発振部、上側が制御部です。
右にある DIP はオペアンプ LM324。2 台目のサーボモータの制御を行なっています。

ちなみに、LM324 はオペアンプ 4 個入りで、2 個は使用していません。未使用のオペアンプは、ー側入力と出力をショート (ボルテージフォロワ) して、電源電圧の半分 2.5V ほどを+側に入力しておきましょう。ブレッドボード右下の抵抗 (22KΩ 2 個) は、2.5V を作る分圧回路です。出力側はオープンです。
また、VCC と VEE には 0.1μF のコンデンサをつけておきます。
こういうのは、回路図に書かれていなくても、しておきましょう。やるんですよ。

あっ。問題なく動いていたので気付かなかったですが、ジャンパーの接続位置が一箇所間違ってます (;´Д`) 内緒にしときましょ。

製作後記

ライブラリのように角度を指定してという動かし方は難しいですが、一定の範囲を移動させるぐらいの使い方はできるんじゃないでしょうか。制御入力の 1〜5V はどこからでも取れますし。使いみちは、ある。あることに、したい (^_^;)

たかだか SG90 なんていう小型のサーボモータですが、電源がしっかりしていないと不安定になります。つねにギコギコ動いて止まってくれないってのは、たぶん電源が問題。
モータ用の電源は専用に作り、制御用と分けるってのは、基本ですね。

さて、次はサーボモータを使って、何か動かしてみたいですねぇ。

タイトルとURLをコピーしました