WeMos D1 mini Motor shield 基板を調べて見ました
ESP-01でI2Cのインターフェイスを実装して使えるモータドライブの基板として
WeMos D1 mini Motor Shield が有ったので購入して調べて見ました。
当初、I2Cの応答が全く無く、今回は外れたのかと思っていたのですが、回路を
調べると基板の構成が、I2Cのインターフェイスを担当するマイコンと2チャンネル
のモータドライブとなっており、マイコンのソフトを変更する事を調査しました。
調査の結果、既にこの事を調べて結果をWeb上に公開している人が居て、その方の
コードをI2Cのインターフェイス用マイコンに書き込んだら、あっさり動く様に
なりました。公開している方に感謝・感謝でした。
以下はその時の状況を纏めたものです。
<D1 mini motor shield の概要>
購入した「WeMos D1 mini motor shield」はI2Cによる2チャンネルのモータ
駆動用のWeMos D1 mini 用のシールド基板で、次の様なものでした。
[基板概要]
1.I2Cインターフェイスチップは ST32F030F4 マイコン(書き込み可能)
(購入したものには何も書き込まれていなかった?)
2.I2Cアドレスは、0x2D-0x30 (default)
3.モータドライブチップは TB6612
4.I2Cインターフェイスの電源は3.3V
5.モータ側は、VM=15V(Max)、 Iout=1.2A(ave) / 3.2A (peak) 、
オン抵抗=0.5Ω
今回購入したものには、I2Cのインターフェイスを担当するマイコンチップには
何も書かれていなかった様で、下記の様にチップへのコードの書き込みが
必要でした。なお、動作の検証としては、先の記事で利用した
TAMIYA Tracked Vehicle にダブルギアボックスを取り付けた次の様なもので
行いました。
[動作検証]
1.I2Cのモータ制御はESP-01で行う
2.制御対象は、TAMIYA Tracked Vehicle のギアボックスを両側独立の
Double Gearbox に変更したもの
3.コントロールはスマホからWiFi経由で行う
[動作状況]
動作状況は次のURLから確認できます。
<関連資料>
モータシールド基板のSTマイコン用のコードに関しては次の記事からのものを
使いました。
URL : https://hackaday.io/project/18439-motor-shield-reprogramming
次のURLからSTマイコンバイナリコードの書き込み用ソストを入手しました。
URL : https://sourceforge.net/projects/stm32flash/
ESP-01で利用しているWebSocketのライブラリは次のものを使っています。
URL : https://github.com/Links2004/arduinoWebSockets
このモータドライブ基板駆動用のライブラリは次のものを使いました。
URL : https://github.com/wemos/WEMOS_Motor_Shield_Arduino_Library
この基板の回路図に関しては次のものを参考にしました。
URL : http://i.imgur.com/PKt8gYx.png
基板上のSTマイコンとモータドライバのチップのデータシートに関しては
次のものを参考にしました。
URL : http://www.datasheetq.com/view.jsp?pn=STM32F030F4&fac=ST-Microelectronics&lang=en
https://www.sparkfun.com/datasheets/Robotics/TB6612FNG.pdf
<テスト内容と結果>
I2Cでのモータドライブに関しては、前にTIのDRV8830チップによるもの
を検討しましたが、今回は2チャンネルのドライバなので、ギアボックスを
ダブルのものにして同様な内容を、ESP-01でスマホからコントロールする事
にして行いました。
1.TAMIYA Tracked Vehicle をダブルギアボックスにして、スマホから制御
2.制御内容は、モータの回転速度と回転方向、ステアリングは左右の
モータのバランスで対応
動作させた結果としては、次の様なものでした。
1.スマホからの制御に関しては、目標通りに回転方向および回転速度を
制御する事が出来ました。
2.ただし、ステアリングの為の左右のモータのバランスをスライドバーで
制御する事に関しては、スライドバーの変化の設定がSTマイコンに
スタックされる様で、スライドバーを激しく動作させた後の停止処理は
スタックの消化の為か、かなり時間が掛かる事が判りました。
3.その為、スライドバーでの設定に関しては、時間間隔を置いて対応する
事とし、0.5秒にするとスライドバー動作後の停止がほぼリアルタイム
となったので、時間間隔を0.6秒にして利用する事で対応する方法を
採用しました。
[テストでの機器の接続]
[コード類]
コード類は次のURLからダウンロードできます。
Code download URL : https://www.dropbox.com/s/h1lzzfxg6zzw0r9/WeMos_D1mini_motor_shield_test.zip?dl=0
<STマイコンの書き込み>
購入したものには、I2Cインターフェイス用のSTマイコンにプログラムが
書き込まれていない様で、I2Cのコマンドのレスポンスが全く有りませんでした。
その為、以下のSTマイコンへのプログラムの書き込みが必要でした。
書き込みの方法に関しては、上記の関連資料の先頭の項目で詳しく紹介されて
いて、このページで紹介されているバイナリコードを利用して、次の様な処理を
行いました。
[接続]
接続は、USBtoTTLとWeMos D1 mini motor shield の間で次の様に行います。
USBtoTTL 側 motor shield 側
GND GND
3.3V RTS
3.3V 3V
TxD R
RxD T
[書き込み処理]
stm32flashを使って「motor_shiedl.bin」を書き込みます。
(例はOSがWindowsの場合です。)
check device : stm32flash COMx (COMは大文字、xは割り当て番号)
flash write : stm32flash -w motor_shield.bin -v -g 0x0 COMx
WeMos D1 mini Motor Shield が有ったので購入して調べて見ました。
当初、I2Cの応答が全く無く、今回は外れたのかと思っていたのですが、回路を
調べると基板の構成が、I2Cのインターフェイスを担当するマイコンと2チャンネル
のモータドライブとなっており、マイコンのソフトを変更する事を調査しました。
調査の結果、既にこの事を調べて結果をWeb上に公開している人が居て、その方の
コードをI2Cのインターフェイス用マイコンに書き込んだら、あっさり動く様に
なりました。公開している方に感謝・感謝でした。
以下はその時の状況を纏めたものです。
<D1 mini motor shield の概要>
購入した「WeMos D1 mini motor shield」はI2Cによる2チャンネルのモータ
駆動用のWeMos D1 mini 用のシールド基板で、次の様なものでした。
[基板概要]
1.I2Cインターフェイスチップは ST32F030F4 マイコン(書き込み可能)
(購入したものには何も書き込まれていなかった?)
2.I2Cアドレスは、0x2D-0x30 (default)
3.モータドライブチップは TB6612
4.I2Cインターフェイスの電源は3.3V
5.モータ側は、VM=15V(Max)、 Iout=1.2A(ave) / 3.2A (peak) 、
オン抵抗=0.5Ω
今回購入したものには、I2Cのインターフェイスを担当するマイコンチップには
何も書かれていなかった様で、下記の様にチップへのコードの書き込みが
必要でした。なお、動作の検証としては、先の記事で利用した
TAMIYA Tracked Vehicle にダブルギアボックスを取り付けた次の様なもので
行いました。
[動作検証]
1.I2Cのモータ制御はESP-01で行う
2.制御対象は、TAMIYA Tracked Vehicle のギアボックスを両側独立の
Double Gearbox に変更したもの
3.コントロールはスマホからWiFi経由で行う
[動作状況]
動作状況は次のURLから確認できます。
<関連資料>
モータシールド基板のSTマイコン用のコードに関しては次の記事からのものを
使いました。
URL : https://hackaday.io/project/18439-motor-shield-reprogramming
次のURLからSTマイコンバイナリコードの書き込み用ソストを入手しました。
URL : https://sourceforge.net/projects/stm32flash/
ESP-01で利用しているWebSocketのライブラリは次のものを使っています。
URL : https://github.com/Links2004/arduinoWebSockets
このモータドライブ基板駆動用のライブラリは次のものを使いました。
URL : https://github.com/wemos/WEMOS_Motor_Shield_Arduino_Library
この基板の回路図に関しては次のものを参考にしました。
URL : http://i.imgur.com/PKt8gYx.png
基板上のSTマイコンとモータドライバのチップのデータシートに関しては
次のものを参考にしました。
URL : http://www.datasheetq.com/view.jsp?pn=STM32F030F4&fac=ST-Microelectronics&lang=en
https://www.sparkfun.com/datasheets/Robotics/TB6612FNG.pdf
<テスト内容と結果>
I2Cでのモータドライブに関しては、前にTIのDRV8830チップによるもの
を検討しましたが、今回は2チャンネルのドライバなので、ギアボックスを
ダブルのものにして同様な内容を、ESP-01でスマホからコントロールする事
にして行いました。
1.TAMIYA Tracked Vehicle をダブルギアボックスにして、スマホから制御
2.制御内容は、モータの回転速度と回転方向、ステアリングは左右の
モータのバランスで対応
動作させた結果としては、次の様なものでした。
1.スマホからの制御に関しては、目標通りに回転方向および回転速度を
制御する事が出来ました。
2.ただし、ステアリングの為の左右のモータのバランスをスライドバーで
制御する事に関しては、スライドバーの変化の設定がSTマイコンに
スタックされる様で、スライドバーを激しく動作させた後の停止処理は
スタックの消化の為か、かなり時間が掛かる事が判りました。
3.その為、スライドバーでの設定に関しては、時間間隔を置いて対応する
事とし、0.5秒にするとスライドバー動作後の停止がほぼリアルタイム
となったので、時間間隔を0.6秒にして利用する事で対応する方法を
採用しました。
[テストでの機器の接続]
[コード類]
コード類は次のURLからダウンロードできます。
Code download URL : https://www.dropbox.com/s/h1lzzfxg6zzw0r9/WeMos_D1mini_motor_shield_test.zip?dl=0
<STマイコンの書き込み>
購入したものには、I2Cインターフェイス用のSTマイコンにプログラムが
書き込まれていない様で、I2Cのコマンドのレスポンスが全く有りませんでした。
その為、以下のSTマイコンへのプログラムの書き込みが必要でした。
書き込みの方法に関しては、上記の関連資料の先頭の項目で詳しく紹介されて
いて、このページで紹介されているバイナリコードを利用して、次の様な処理を
行いました。
[接続]
接続は、USBtoTTLとWeMos D1 mini motor shield の間で次の様に行います。
USBtoTTL 側 motor shield 側
GND GND
3.3V RTS
3.3V 3V
TxD R
RxD T
[書き込み処理]
stm32flashを使って「motor_shiedl.bin」を書き込みます。
(例はOSがWindowsの場合です。)
check device : stm32flash COMx (COMは大文字、xは割り当て番号)
flash write : stm32flash -w motor_shield.bin -v -g 0x0 COMx