2016/07/26(火) [n年前の日記]
#1 [raspberrypi] Raspberry Pi3でDCモータを制御するテストその2
Raspberry Pi3 でDCモータを制御してみたい。
◎ 回路図。 :
ブレッドボード上で配線。
入力端子には、GPIO 22番と23番を繋いでみた。
DCモータドライバ TA7291P は、3つの電源を要求する。
_TA7291P - 滴了庵日録
_Raspberry Pi 2でDCモーターを制御する - カイワレスタイル
_Raspberry Pi 2 で小型モーターを制御する | 桜のはなびら.ネット(12歳)
Vref(制御電源端子)に何を繋いだらいいのかでちょっと悩んだり。PWM制御をしたい場合は、Raspberry Pi3 のGPIOのどれかを繋ぐ場合が多いらしいけど、今回は全開で回してみたいわけで…。
使おうとしているギヤボックスは、 _TAMIYA 6速ギヤボックスHE 72005 で、「RE-260モーター付き」の製品。 RE-260てのは、おそらく _マブチモータ RE-260 だろうと。1.5V-4.5Vをかけられるけど、3Vで使うことを前提にしてるらしい。
なので、Vref(制御電源端子)には、最大でも3V前後をかけたい。GPIOのどれかを繋ぐと、PIOは +3.3V だから、まあ大丈夫だろ、ってことになるのだろう。
ググってみたら、全開で回したい場合、Vref(制御電源端子)に、Vs(出力側電源端子)と10KΩの抵抗を挟んで繋いでる事例をいくつか見かけた。自分もその通りにしてみたけれど、どうして10KΩなんだろう…。実は+6Vかかってしまっている、てことはないのかな…。
入力端子には、GPIO 22番と23番を繋いでみた。
DCモータドライバ TA7291P は、3つの電源を要求する。
- Vcc ... ロジック側電源端子。Raspberry Pi3の +5V を繋ぐ。
- Vs ... 出力側電源端子。モータ側で使う電源。単三 x 4本の電池ボックスを繋ぐ。新品のアルカリ電池なら、+6V程度が入るはず。
- Vref ... 制御電源端子。ココにかかった電圧が、モータにかかる最大電圧になる。らしい。
_TA7291P - 滴了庵日録
_Raspberry Pi 2でDCモーターを制御する - カイワレスタイル
_Raspberry Pi 2 で小型モーターを制御する | 桜のはなびら.ネット(12歳)
Vref(制御電源端子)に何を繋いだらいいのかでちょっと悩んだり。PWM制御をしたい場合は、Raspberry Pi3 のGPIOのどれかを繋ぐ場合が多いらしいけど、今回は全開で回してみたいわけで…。
使おうとしているギヤボックスは、 _TAMIYA 6速ギヤボックスHE 72005 で、「RE-260モーター付き」の製品。 RE-260てのは、おそらく _マブチモータ RE-260 だろうと。1.5V-4.5Vをかけられるけど、3Vで使うことを前提にしてるらしい。
なので、Vref(制御電源端子)には、最大でも3V前後をかけたい。GPIOのどれかを繋ぐと、PIOは +3.3V だから、まあ大丈夫だろ、ってことになるのだろう。
ググってみたら、全開で回したい場合、Vref(制御電源端子)に、Vs(出力側電源端子)と10KΩの抵抗を挟んで繋いでる事例をいくつか見かけた。自分もその通りにしてみたけれど、どうして10KΩなんだろう…。実は+6Vかかってしまっている、てことはないのかな…。
◎ Pythonスクリプト。 :
Python + pigpio で制御してみる。dcmotor_pigpio.py として保存。
sudo python dcmotor_pigpio.py として実行。こんな感じになった。
ウルセー。動作音がウルセー。けど、そこは置いといて。一応動いてくれた模様。ただ、回り始める時にガクッと動いてから回る時と、そうでない時がある。うーん。
ちとよく分からないのが、モータにブレーキがかからないこと。止めたつもりがズルズルッとそのまま動き続けて惰性で止まるというか。入力端子の両方を1,1にしてるのだけど、ブレーキがかかってくれるわけではなさそうだなと…。
もしかして、止めたいと思った瞬間に一瞬だけ逆回転させる、てな感じの処理が必要なのだろうか。でも、モータに余計な負荷がかかりそうでもあるし…。
_模型用モーターを回転させ、ピッタと止めるには... - 工学 | Yahoo!知恵袋
やっぱり逆回転させると壊れるらしい。
#!/usr/bin/python # -*- coding: utf-8 -*- # # DC Motor control with TA7291P - pigpio import pigpio import time PIN1 = 22 PIN2 = 23 pi1 = pigpio.pi() pi1.set_mode(PIN1, pigpio.OUTPUT) pi1.set_mode(PIN2, pigpio.OUTPUT) def set_motor(pi1, a, b, t): pi1.write(PIN1, a) pi1.write(PIN2, b) time.sleep(t) try: set_motor(pi1, 0, 0, 0.5) # stop (neutral) for i in range(4): set_motor(pi1, 1, 0, 0.3) # normal rotation set_motor(pi1, 1, 1, 2.0) # brake for i in range(4): set_motor(pi1, 0, 1, 0.3) # reverse rotation set_motor(pi1, 1, 1, 2.0) # brake except KeyboardInterrupt: print "done." set_motor(pi1, 0, 0, 0.5) # stop (neutral) pi1.set_mode(PIN1, pigpio.INPUT) pi1.set_mode(PIN2, pigpio.INPUT) pi1.stop()
sudo python dcmotor_pigpio.py として実行。こんな感じになった。
ウルセー。動作音がウルセー。けど、そこは置いといて。一応動いてくれた模様。ただ、回り始める時にガクッと動いてから回る時と、そうでない時がある。うーん。
ちとよく分からないのが、モータにブレーキがかからないこと。止めたつもりがズルズルッとそのまま動き続けて惰性で止まるというか。入力端子の両方を1,1にしてるのだけど、ブレーキがかかってくれるわけではなさそうだなと…。
もしかして、止めたいと思った瞬間に一瞬だけ逆回転させる、てな感じの処理が必要なのだろうか。でも、モータに余計な負荷がかかりそうでもあるし…。
_模型用モーターを回転させ、ピッタと止めるには... - 工学 | Yahoo!知恵袋
やっぱり逆回転させると壊れるらしい。
◎ PWM制御で速度を変化させてみる例。 :
Vrefに+6Vかかってたりしないかと不安になってきたので、GPIOを繋いで、ついでにPWM制御を試してみようかと。
回路図は以下の通り。
Vref に GPIO 13番を接続。
Python + pigpio でPWM制御。dcmotor_pigpio_pwm.py として保存。
sudo python dcmotor_pigpio_pwm.py として実行。こんな感じに。
duty比が、25%、50%、75%の時に、動作音の大きさと回転速度が微妙に違ってることが一応分かる、だろうか…。
回路図は以下の通り。
Vref に GPIO 13番を接続。
Python + pigpio でPWM制御。dcmotor_pigpio_pwm.py として保存。
#!/usr/bin/python # -*- coding: utf-8 -*- # # DC Motor control with TA7291P - pigpio import pigpio import time PWMPIN = 13 PIN1 = 22 PIN2 = 23 pi1 = pigpio.pi() pi1.set_mode(PWMPIN, pigpio.OUTPUT) pi1.set_mode(PIN1, pigpio.OUTPUT) pi1.set_mode(PIN2, pigpio.OUTPUT) pi1.set_PWM_frequency(PWMPIN, 50) pi1.set_PWM_range(PWMPIN, 100) pi1.set_PWM_dutycycle(PWMPIN, 0) def set_motor(pi1, a, b, t): pi1.write(PIN1, a) pi1.write(PIN2, b) time.sleep(t) def set_motor_pwm(pi1, a, b, t): set_motor(pi1, a, b, 0.2) for i in range(25, 100, 25): pi1.set_PWM_dutycycle(PWMPIN, i) time.sleep(t) # set_motor(pi1, 0, 0, 2.0) # stop (neutral) set_motor(pi1, 1, 1, 2.0) # brake pi1.set_PWM_dutycycle(PWMPIN, 0) try: set_motor(pi1, 0, 0, 0.5) # stop (neutral) set_motor_pwm(pi1, 1, 0, 1.0) # normal rotation set_motor_pwm(pi1, 0, 1, 1.0) # reverse rotation except KeyboardInterrupt: print "done." pi1.set_PWM_dutycycle(PWMPIN, 0) set_motor(pi1, 0, 0, 0.5) # stop (neutral) pi1.set_mode(PWMPIN, pigpio.INPUT) pi1.set_mode(PIN1, pigpio.INPUT) pi1.set_mode(PIN2, pigpio.INPUT) pi1.stop()
sudo python dcmotor_pigpio_pwm.py として実行。こんな感じに。
duty比が、25%、50%、75%の時に、動作音の大きさと回転速度が微妙に違ってることが一応分かる、だろうか…。
◎ TAMIYA製ギヤボックスの問題。 :
_TAMIYA 6速ギヤボックスHE 72005
を使って実験してるけど、ちょっとこの製品、マズいなと…。停止してるはずの状態でも、ガクガクと動いてしまうわけで…。以下の動画を見れば分かるだろうけど…。
ピタッと止まっていてくれないと、上にカメラを乗せて撮影しようとしたときにブレてしまって困るんだけどなあ…。どうしよう…。どうしたもんか…。何か手は無いか…。
どうしてガタガタしてしまうのか、ギヤボックスをじっと眺めてみたけれど。
ピタッと止まっていてくれないと、上にカメラを乗せて撮影しようとしたときにブレてしまって困るんだけどなあ…。どうしよう…。どうしたもんか…。何か手は無いか…。
どうしてガタガタしてしまうのか、ギヤボックスをじっと眺めてみたけれど。
- 一つは、金属製の軸の六角形部分と、オレンジのプラスチック製のギヤの穴の形がピッタリと合ってない。オレンジのギヤに穴が開いているけれど、その穴が結構緩いというか。
- 複数のギヤが組み合わさっているので、一つ一つのギヤの遊び(?)が積み重なって、大きなガタガタになってる。
[ ツッコむ ]
以上です。