DCモーター制御を試す
コンデンサ
DCモーターのノイズ対策が必要だということなので、
モーターの両極を橋渡しするように、 0.01μF のコンデンサーをハンダ付けしました。
ta7291p
出力側と制御側の二系統電 源端子かつ出力側にはモータ電圧を制御できる Vref 端子を持っており、モータへの印加電圧調整ができます。
とあり、ちょっとまだ意味がよくわからないのですが、
Vrefにかけた電圧を最大電圧として、OUT1,OUT2するようになるという意味かな?
TA7291P/S/SG/F/FG は、正・逆転切り替え用としてブリッジドライバで正転・逆転・ストップ・ブレーキの4 モードがコントロールできます。
とあり、そもそも、PWM制御するためのドライバでは無さそうです。
「正転と停止の切り替えが十分に早ければ,モータは一定速度で回転しているように見えます」という表現をなさっている方も居ります。
私は、USBからモーターに給電するので、Vrefは、10kΩの抵抗を介してつなごうと思っています。
データシートを見て、
ta7291p 接続先 Vcc 7 Rpi 5v Vs 8 USBバッテリー + Vref 4 10kΩの抵抗を介して、USBバッテリー + GND 1 Rpi GND IN1 5 GPIO14 IN2 6 GPIO15 OUT1 2 モーター片方 OUT2 10 モーター片方
に接続して、バッテリー - は、GND共有させました。
テストスクリプト
加速して、減速して、逆転加速・減速のテストスクリプト。
Ctrl + c で終了することと、
何らかのエーラで終わる際にも、終了処理して、モーターが止まるようにした。
#!/usr/bin/python # coding: utf-8 import RPi.GPIO as GPIO import time import sys # GPIO 14,15番を使用 GPIO.setmode(GPIO.BCM) GPIO.setup(14, GPIO.OUT) GPIO.setup(15, GPIO.OUT) p0 = GPIO.PWM(14, 50) p1 = GPIO.PWM(15, 50) # 初期化 p0.start(0) p1.start(0) try: while True: for i in range(0,6): new_duty = i*15 p0.ChangeDutyCycle(0) p1.ChangeDutyCycle( new_duty ) print( new_duty ) time.sleep(1.0) for i in range(6,0,-1): new_duty = i*15 p0.ChangeDutyCycle(0) p1.ChangeDutyCycle( new_duty ) print( new_duty ) time.sleep(1.0) for i in range(0,6): new_duty = i*15 p0.ChangeDutyCycle( new_duty ) p1.ChangeDutyCycle( 0 ) print( new_duty ) time.sleep(1.0) for i in range(6,0,-1): new_duty = i*15 p0.ChangeDutyCycle( new_duty ) p1.ChangeDutyCycle( 0 ) print( new_duty ) time.sleep(1.0) except KeyboardInterrupt: print("\nCtrl + c : Exit") except: print("\nError : Exit") p0.stop() p1.stop() GPIO.cleanup()