コンテンツにスキップ

MG996Rサーボモータ

ハイトルクで安いサーボモータがほしかったので Amazon で買いました。 たまにニセモノを掴まされることがあるらしいので注意しましょう。 僕が買ったのはたぶん正規品なので一安心です。

MG996R の仕様

広大なネットの中から漁ってきたので正確かどうかはわかりません。ご注意を。

単位 仕様
トルク(4.8 V) 9.4 [kgf]
トルク(6.0 V) 11 [kgf]
動作速度(4.8 V) 0.19 [sec] / 60 [deg]
動作速度(6.0 V) 0.15 [sec] / 60 [deg]
重量 55 [g]
周期 20 [msec]
パルス幅 0.5 ~ 2.5 [msec]

ラズパイから Python で動かしてみる

構成

  • Raspberry Pi 3

    • ubuntu mate 16.04
    • Python 3.6.5
  • PCA9685

  • MG996R
  • eneloop x 4

今回はサーボモータをつなぐために、PCA9685 を使用しました。eneloop は PCA9685 に追加で電源供給するために使用しました。

デューティ比の計算

GitHub から adafruit-pca9685 を clone します。

もしくは 、sudo pip install adafruit-pca9685としてライブラリをインストールします。

adafruit-pca9685 は 12bit(=0 ~ 4095) の分解能をもっているので、デューティ比にそれに当てはめます。

デューティ比は周期とパルス幅から求めることができ、

\[ { デューティ比 = \frac{パルス幅}{周期} \times 100 } \]

から、2.5 ~ 12.5% であることがわかります。

つまり、PCA9685 に 102 ~ 511 ぐらいのパルスの間で MGR996R が無理なく動く範囲となります。

テストプログラム

Python
import Adafruit_PCA9685
import time

pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(50)
while True:
    pwm.set_pwm(1, 0, 500)
    time.sleep(1)
    pwm.set_pwm(1, 0, 100)
    time.sleep(1)
    pwm.set_pwm(1, 0, 300)
    time.sleep(1)

最大角、最小角、ニュートラルに変化する無限ループのプログラムです。