2020年1月31日金曜日

DRV8830をESP32-DevKitCで動かした話




 卒論発表が終わった日にモータ回してる中の人です.発表自体は特に問題なく終わったので,あとは卒論を提出するのみです.ヤッタネ.
 今回はESP32でDRV8830を動かした話です.I2Cで制御できるMDとしては一番ポピュラーなICで中の人も何度か使っていますが,ESP32と一緒に使ったことがありませんでした.復習もかねて動かしてみましょう.



1.回路回り

 IC自体は絶対最大定格が7Vとなっていますが,実際は5Vあたりが上限になります(実はDACの関係で5V一択になります).ICの裏面にはGNDパッドがあるため,回路設計やはんだ付けの際には十分気を付けてください.
 VCCが1つだけなので,ロジック電圧とモータ電源電圧が一致するはず(と思いたい)です.ロジック電圧とモータ電源電圧が違う場合は,レベル変換のICや回路をロジック側に追加します.
 モータにかける電圧はDACで生成しており,0.48[V]から5.06[V]のまで57段階で調整できます.昇圧回路などはないので,この範囲をフルに使う場合は電源電圧を5V以上になります.フルにしないとあまり使えないので,結局モータ電源電圧は5V一択になります.(6Vとかを生成しても結局5.06Vで頭打ちになる)
 パスコンは0.1uFが最低になっていますが,10uFを突っ込んだ方が安定します.あとはモータの端子にセラコン直付けがでどうにかなります.
 I2C線のプルアップは様子を見つつやってください.単体で動かすならSCL/SDAともに10kで動きました.
 ISENSEの抵抗は適宜付けますが,電流制限がいらない場合はGNDに落としておきましょう.
A0/A1はアドレスの設定に使います.各ピンをGND/未接続/VCCのどれかに設定することで変えられます.
 FAULTnはレジスタ1(FAULT)と同期する形で,障害を通知します.使わないときは未接続にするか,抵抗を介してVCCにつないでおきましょう.障害が発生したときにはLowになるので,LED(と電流制限抵抗)をつけておくことでレジスタを読まなくても障害発生がわかります.

参考:シリアル・インターフェイス内蔵、低電圧モータ・ドライバ 日本TI

2.I2C

 ユーザが叩くI2Cのレジスタはわずか2本と,わかりやすい構造です.

2.1アドレス

 A1/A0ピンでアドレスを指定するのですが,データシート上ではアドレス(書き込み)とアドレス(読み込み)とありますが,DRV8830は7bitアドレスのはずです.
 これは,I2Cの仕様として,7bitのアドレスの後に読み込みか書き込みかを示すビットを付与する仕組みになっているためです.よくよく見てみると,同じピンの状態における読み込み/書き込みアドレスは1つ違いになっています.
 ArduinoのWire.hでは,最後の1bitを自動付与するので,アドレスはデータシートにあるものの上位7bitを書き込むことになります.(A1=A0=0だと0xC0>>1 = 0x60)

2.2レジスタ0(0x00)

 出力電圧や回転方向の指定はここで行います.
 ┌────┬──┬──┐
|D7- D2  |D1 | D0 |
 ├────┼──┼──┤
 |VSET    |IN2 |IN1|
 └────┴──┴──┘
 VSETがモータの電圧,D1/D0で回転の仕方を決めます.
 VSETは0x06から0x3Fまでの整数を設定します.もし電源電圧が0x3F(=5.06[V])より低い場合は,電源電圧以上の電圧を指定しても出力されません.
 D1/D0=0で惰性,1で逆転,2で正転,3でブレーキと,普通のMDの方向指定とあまり変わりません.

2.3レジスタ1(0x01)

 障害通知用です.
 ┌────┬────┬───┬──┬───┬──┬────┐
|D7        | D6-D5 | D4    | D3 | D2   | D1 | D0       |
 ├────┼────┼───┼──┼───┼──┼────┤
 | CLEAR |未使用 |ILIMIT|OTS|UVLO|OCP| FAULT  |
 └────┴────┴───┴──┴───┴──┴────┘
 D7に1を書き込むときは,D0が0になっていることを確認しましょう.障害が発生している状態でやっても意味ないですからね.

参考:シリアル・インターフェイス内蔵、低電圧モータ・ドライバ 日本TI
   I2Cの基本データフォーマット 電子工作室

3.動かしてみた


 とりあえず動かしてみました.昔作った基板にたまたまDRV8830が載っていたので,使いまわしてます.秋月で売っているDRV8830のブレークアウトボードレベル変換IC10uFセラミックコンデンサ10k抵抗x2,5Vレギュレータ9V電池あたりで代用ができそうです.
ソースコードはこちらから.

4.まとめ

 ロジック電源とモータ電源が分離していないなど電源回りに癖がありますが,それを除けば扱いやすいMDです.



©2020 shts All Right Reserved.

0 件のコメント:

コメントを投稿