「DC Motor + Stepper FeatherWing Add-on For All Feather Boards」(以下、FeatherWing モータードライバ)を入手したので、動作確認も兼ねてmicro:bitで動かした記録です。
目次 (クリックで展開)
結果
画像じゃ伝わらないけど、micro:bitから2つのモーターを自由に制御できた。
このFeatherWingモータードライバは、とても小さくていいけど、小さ過ぎてモーターが動かないときには途方にくれた。各ICの出力を確認するにも、こんなに小さいICだとどうやって確認すればいいのやら。。。結局、地道に見直して無事動作。まー経験も積んだし、今後はすんなり動かせそう(?)。
材料
- FeatherWing モータードライバ
- micro:bit
- micro:bit用ブレークアウトボード
- モーターを動かすのに十分なスペックの5V電源
- モーター(geek servo)
仕様と制御方法
FeatherWing モータードライバ
名称:DC Motor + Stepper FeatherWing Add-on For All Feather Boards
4つのDCモーターを扱えるモータードライバ
使用チップ: PCA9685、TB6612 * 2
制御方式:I2C
I2Cアドレス: 0x60 0x70 いずれもPCA9685に接続されている。I2Cアドレスは変更可能
PCA9685
16-channel PWM controller
PCA9685のPWM出力ピンはTB6612に接続されている。そのため、PCA9685を制御すればモーターの挙動も変えられる。
PCA9685のPWM出力ピンとTB6612の関係は次のとおり
TB6612
2チャネルモータドライバ
絶対最大定格:
出力電流(IOUT, 1ch当たり):1.2A(平均)、2A(ピーク)
許容範囲:
モーター側電源電圧(VM):2.5V〜13.5V 標準5V
IC側電源電圧(Vcc):2.7V〜5.5V 標準3V
CWは出力軸側から見て時計方向。Clock Wiseの略。
CCWは出力軸側から見て反時計方向。Counter Clock Wiseの略。
モーター(geek servo)
モーターの仕様 (クリックで展開)
仕様: -タイプ:ギアモーター -色:赤 -動作電圧:3.3V〜6V -定格電圧:4.8V -定格電流:200ma -ストール電流:700ma -スライド電流:450ma -最大トルク:500g.cm -最大速度:70rpm(3V)
接続方法
micro:bitの3V,GND,SCL,SDAを使う。モータードライバの接続方法は画像のとおり。


まずは、I2Cの接続を確認。
96(=0x60)と112(=0x70)が認識できればOK。
確認方法はこちら参照。
プログラム MakeCode用プログラム(python)
必要な拡張機能
拡張機能 pca9685を追加する必要がある。
拡張機能はMakeCode上で検索すれば見つかる。
PWMの制御のみ行えればいいので、resetとset pin pulse rangeというブロックのみを使用する。
set pin pulse rangeのパラメータは次のとおり。
setPinPulseRange(pinNum, onStep, offStep, chipAddress) NOTE: Direct Pin control is done using index's 0-15 NOT 1-16 like the LED and Servo helpers above. Options: chipAddress - Address of the PCA9685 in decimal pinNum - Pin number to change the duty cycle of, accepts 0-15 onStep - When during the frame to turn on the pin, accepts 0-4095 offStep - When during the frame to turn off the pin, accepts 0-4095
プログラム
プログラム (クリックで展開)
i2c_address = 96 m1_in1_pin = 10 m1_in2_pin = 9 m1_pwm_pin = 8 m2_in1_pin = 11 m2_in2_pin = 12 m2_pwm_pin = 13 low = 0 high = 4095 PCA9685.reset(i2c_address) def on_forever(): set_speed(4095) cw() basic.pause(1000) stop() basic.pause(1000) set_speed(1000) ccw() basic.pause(1000) short_brake() basic.pause(1000) basic.forever(on_forever) def set_speed(speed : number): PCA9685.set_pin_pulse_range(m1_pwm_pin, 0, speed, i2c_address) PCA9685.set_pin_pulse_range(m2_pwm_pin, 0, speed, i2c_address) def cw(): PCA9685.set_pin_pulse_range(m1_in1_pin, 0, high, i2c_address) PCA9685.set_pin_pulse_range(m1_in2_pin, 0, low, i2c_address) PCA9685.set_pin_pulse_range(m2_in1_pin, 0, high, i2c_address) PCA9685.set_pin_pulse_range(m2_in2_pin, 0, low, i2c_address) def ccw(): PCA9685.set_pin_pulse_range(m1_in1_pin, 0, low, i2c_address) PCA9685.set_pin_pulse_range(m1_in2_pin, 0, high, i2c_address) PCA9685.set_pin_pulse_range(m2_in1_pin, 0, low, i2c_address) PCA9685.set_pin_pulse_range(m2_in2_pin, 0, high, i2c_address) def stop(): PCA9685.set_pin_pulse_range(m1_in1_pin, 0, low, i2c_address) PCA9685.set_pin_pulse_range(m1_in2_pin, 0, low, i2c_address) PCA9685.set_pin_pulse_range(m2_in1_pin, 0, low, i2c_address) PCA9685.set_pin_pulse_range(m2_in2_pin, 0, low, i2c_address) def short_brake(): PCA9685.set_pin_pulse_range(m1_in1_pin, 0, high, i2c_address) PCA9685.set_pin_pulse_range(m1_in2_pin, 0, high, i2c_address) PCA9685.set_pin_pulse_range(m2_in1_pin, 0, high, i2c_address) PCA9685.set_pin_pulse_range(m2_in2_pin, 0, high, i2c_address)
途中で遭遇した問題
モーターが一瞬しか動かない
プログラムミスによるPCA9685のPWM制御ミス
モーター用電源の供給不足 → 電源の見直しで解決。モーターは起動時の流入電流がとてもとても多い。
micro:bitにUSBケーブルをつないでも、オレンジLEDが点灯しない
3VやGNDピンの配線ミス
FeatherWingモータードライバの緑LEDが点灯しない
モーター電源の配線ミス。
保護回路の動作? → 電源の変更で解決
リンク
FeatherWing モータードライバ
PCA9685
上級者向け講習会課題 1 - RTC-Library-FUKUSHIMA
PCA9685の使い方が詳しく解説してくれている
PWM/サーボシールド(PCA9685)を動かしてみます(1/2)
Mode1,Mode2の使い方を詳しく書いてくれている
TB6612
MakeCode 拡張機能 pca9685

サンハヤト 面実装IC用テストクリップ 10色各1個セット HP-2-10
- メディア: Tools & Hardware