uchan note

プログラミングや電子工作の話題を書きます

DRV8830 と電源電圧が異なるマイコンを直につないで良い

English translation is below.

前回の記事 モータドライバ DRV8830 に関するメモ の続きです。

概要

本記事は DRV8830 という TI (Texas Instruments) 製のモータドライバと各種マイコンを I2C で接続する際の注意点をまとめたものです。結論は、DRV8830 とマイコンの電源電圧が異なる(DRV8830 < マイコン)場合でも、SDA と SCL ピンをマイコンと直接接続しても壊れない。ただし電圧変換をすることを推奨する、ということです。

I2C 基礎

DRV8830 は 2.75V から 6.8V までと幅広い電源電圧に対応しており、乾電池 2 本でも動くので電子工作には最適です。マイコンと I2C で接続して速度制御と方向制御ができます。I2C 方式は SDA と SCL のたった 2 本の線で複数の機器を接続できたりして便利なので、組み込み分野ではよく使われます。

I2C は SDA と SCL を機器の電源電圧までプルアップする必要があります。例えばマスタとなるマイコンが 5V 駆動なら 5V にプルアップするのが普通でしょう。

電源電圧が異なる機器を I2C でつなぐ

さて、マスタ機器とスレーブ機器の電源電圧が異なる場合はどうすればいいでしょうか。例えばマスタとして 5V 駆動の Arduino を、スレーブとして 3V 駆動の DRV8830 を使う場合です。この構成は、ロジック側電源とモータ側電源を分けたいときに自然に思いつく構成ではないでしょうか。

この構成で問題になるのは、5V にプルアップされている線を DRV8830 にそのまま接続して良いのか、というところです。一般的に IC チップの端子には、電源電圧より高い電圧を印加してはいけません。許されるのは、その端子が「5V トレラント(tolerant)」である場合だけです。

DRV8830 の場合

DRV8830 のデータシートを読んでも、SDA と SCL ピンが 5V トレラントかははっきり分かりませんでした。そこで TI に問い合わせ、回答が得られましたので、ここに要点を記します。

  1. DRV8830 の SDA と SCL を 5V でプルアップしても問題ない
  2. DRV8830 の電源電圧が低いとローと認識する閾値も低くなるから注意せよ
  3. したがって電圧変換することを勧める

1 は、データシートの絶対最大定格にある "Input pin voltage" が SDA と SCL にも当てはまることを意味していると思われます。したがって、5V と言わず 6.8V までは印加しても大丈夫でしょう。(6.8V トレラント) 一般に、電源電圧の低い側の機器が 5V トレラントであれば、SDA と SCL を 5V にプルアップするのが電源電圧の異なる機器を I2C でつなぐ最も簡単なやり方です。DRV8830 もこの方法が使えます。

2 は少々複雑な話です。データシートの VIL についての記述によると DRV8830 は 0.38 x VCC 以下の電圧をローと認識します。閾値には個体差があって、ひどい時は 0.25 x VCC 以下でないとローと認識しません。DRV8830 の VCC がプルアップ電圧に比べて相対的に低い場合、この閾値が問題になる可能性があるというのです。電池駆動の場合はさらに、モータの消費電力によって、また電池の減り具合によって、VCC がもっと下がることも考えられます。VCC でプルアップするのに比べ、ローレベルの閾値が厳しくなるので注意しなければなりません。

したがって 3 の結論が得られます。DRV8830 が誤動作する(ローをハイと認識してしまう)可能性を減らすために、適切な電圧変換をしたほうが良いということです。幸い、電圧変換(レベルシフト)は MOS-FET を用いた簡単な回路で実現できます。回路図は NXP 公式ドキュメント Level shifting techniques in I2C-bus design で確認できます。日本語のブログ記事 I2Cインターフェースで異なる電圧の接続 も参考になるでしょう。いずれにせよ、1 個数円から買える安い MOS-FET を 2 つ使うだけで、適切にレベルシフトできます。

DRV8830 can be connected to a microcontroller with different power supply voltage

Conclusion: DRV8830's SDA and SCL pins are 5V tolerant, so you can pull up these pins to 5V.

DRV8830 is a motor driver developed by TI (Texas Instruments). Its speed and direction can be controlled by I2C bus.

TI's product information center said that:

  1. DRV8830's SDA and SCL pins can be pulled up to 5V supply voltage even if its VCC is 3V (for example, battery).
  2. Take care of a malfunction: the more VCC drops, the more its threashold gets lower.
  3. It is recommended to insert a level-shifter between DRV8830 and a microcontroller.

You can view an example schematic of a level-shifter on NXP's document: Level shifting techniques in I2C-bus design. According to the document, only 2 MOS-FETs are needed to make a level-shifter. So economical!