google-site-verification: google3bd66dd162ef54c7.html
fc2ブログ

Arduino に 0.96インチOLED (SSD1306)を接続する回路

以前、3.3VのI2Cを5VのArduinoに接続する場合の注意事項という記事を書きました。あと、0.96インチOLEDのスリープ特性、他 という記事でもインターフェイス回路について触れています。いろいろ書いているのをまとめると、0.96インチのOLEDの電源には3.3VのLDOレギュレーターが入っているので、電源電圧5Vで使ってもOK。但し I2Cバスの信号レベルは 3.3Vなので 5Vの Arduino で使うと入力レベルのマージンがほとんど無いので、気を付けてと言う話です。

そんなことで、この話はこれでおしまいと思っていたのですが、新たな情報が出てきました。

◆新たな情報
1) 3.3V のシリーズレギュレーターが入っていない物もある
先日 aitendo に行った時に見たのがこのタイプでした。あと、先月号のトラ技の記事の中にも aitendo の 0.96インチOLEDが出て来ますが、その記事では電源電圧を合わせるために、CPUの電圧を3.3Vに改造されていました。

これまでは、0.96インチのOLEDには3.3VのLDOレギュレーターが入っている、という前提で記事を書いてきました。しかし、実際には3.3Vのレギュレーターが入っていない物も存在していました。

2) 3.3Vのリップルが大きいために I2Cバスでエラー発生
これは、yoshiさんからのコメントで教えて頂きました。また、この件に関し、1.3型OLEDとAVR電圧 2019/4/23-と言う記事で解説されています。ちなみに、マージンがどれくらいあるのか確認するのに、CPUの電源電圧を5Vから上下に少し振って確認するやり方はとても参考になりました。

実はちょうど同じ頃に同じ現象でエラーが発生していて、対策方法を検討しているところだったのでタイムリーなコメントで助かりました。

ということで、1) 項は買う時に注意するしかありませんが、2) 項については回路上の問題なので、対策方法についてもう少し検討してみます。

◆現象の確認
I2C波形
これは以前の記事に出したものと同じ写真で、I2Cバスの波形です。I2CバスのHi レベルが 3.3Vの電源電圧変動の影響で揺れていて、最悪では 2.6Vくらいまで下がっています。これでも動いていればアマチュア的にはOKですが、現実に動かないケースが出て来ると対策を考えないといけません。

ということで実験用の回路を作って確認して行きます。

▼調査中
OLEDの接続テスト

◆対策なし
5VのArduinoに直結
これは何も対策していない状態で、今回の議論の出発点になります。Arduino側のプルアップ抵抗 (R-arduino) も効いてくるので、I2Cバスは等価的に4.1kΩで3.5Vにプルアップされている状態になっています。

Arduino から見ると、3.5V は0.7Vcc なのでギリギリOKです、ただバスの配線が長かったり3.3V電源ににリップルがあったりすると、誤動作する危険性が高まります。そうは言っても、私が作ったペン型オシロはこの回路でやっていて、これまで誤動作したことはありません。配線がすごく短かいのが幸いしたのだと思います。

以下、マージンアップのための対策方法について検討します。

◆対策-1 OLEDの電源にデカップリンゴコンデンサ追加
手っ取り早く対策するためには、OLED内部の3.3Vのリップルを減らしてやれば良いので、LDOレギュレーターの出力側のデカップリングコンデンサの容量を増やす方法があります。yoshiさんもそうされています。

この対策は回路的には簡単ですが、表面実装になっている回路の改造なので、慣れていないと難しいかも知れません。それに、買ってきた部品をそのままコネクタに刺すだけでは済まなくなります。

◆対策-2 5V側にプルアップ抵抗追加
外部プルアップ抵抗併用
比較的簡単に出来る対策として、外部に抵抗 (Rp) を追加して5V側に引っ張る手があります。この抵抗の値を下げるほどバスのHi レベルが上がります。ただむやみに低い値にするとD3がONになってしまうので好ましくありません。D3が一般的なシリコンダイオードなら、0.5Vくらい引っ張る、つまりHiレベルを3.8Vまで引き上げても大丈夫な気がします。Hiレベルが0.5V上がればマージンはかなり確保できはずです。

但し、SSD1306のデーターシートによると信号電圧の上限はVcc+0.3V (絶対最大定格) となっているので、計算上のPpの下限は20kΩ程度となります。実際の電圧はRpとD3の引っ張り合いで決まるのでここはやってみて確認するしか無さそうです。なお、R-arduino の値は20-30kΩとなっているので中央の35kΩで計算しています。
ちなみにRp=10kΩでも動作上は大丈夫で、この状態ではバスのHi レベルが3.8Vくらいまで上がるのでかなりマージンが増えました。

とにかくこの方法は簡単に出来ます。また、原因調査としてやってみるのも良いと思います。

◆対策-3 FETでレベル変換
FETレベルコンバーター
確実に対策するなら、この回路のようにFET による5V-3.3V 双方向レベル変換回路を入れると良いと思います。もちろん、お金とスペースがあれば専用のレベル変換IC を使うのがベストです。
ただ、この回路図では FET のゲートに加える 3.3Vは、OLED のインターフェイス基板から引き出しているのがちょっと問題でした。実際にこの回路を作るためには、基板から線を出して、出来ればコネクタを通して接続したいところですが、これをやるのはちょっと厄介です。

ちなみに、Arduino UNO のように 3.3V がコネクタに出ていれば、そっちを使うのが簡単です。

◆対策-4 FETレベル変換外部バイアス付き
FETレベルコンバーター w 外部3.3V
前項の問題を解決するために、5V を抵抗で分圧してゲート供給電圧の 3.3V を作っているのがこの回路です。なお、バスの動作に伴いゲート静電容量を経由して 3.3V が揺らされるので、C1 が必要になります。

I2Cバスには SCL と SDA があるので、この回路が二組必要 (R1,R2,C1は共用可) になって部品の量も増えてしまいます。でもここまでやれば万全です。

◆別の対策
こういう対策が必要になるのは、OLED のインターフェイス基板に内蔵されているシリーズレギュレーターの過渡性能が悪くてリップルが大きいことが原因です。デカップリングコンデンサの容量が小さいというハンディはありますが、レギュレーターがもっと頑張ってくれていたらこういう苦労は不要だったはずです。

そのあたりを確認するために、シリーズレギュレーターが頑張らなくても良い状態を作って比較してみます。

まずは比較のために電源電圧5Vの状態、つまりここまで議論していた状態をもう一度見てみます。

▼OLEDの電源電圧5V
OLE電源電圧5Vの場合
上が SDA,下が SCL で縦軸の目盛りは1V/div. です。波形のHi 側が上下にブレているのは、ここまでに何度も話題にした 3.3V 電源のリップルが原因です。

このまま OLED の電源電圧を 3.3V まで下げてみます。

▼OLEDの電源電圧3.3V
OLE電源電圧が3.3Vの場合
Hi 側のブレがほとんど無くなって綺麗な波形になっています。これがあるべき姿です。これなら、I2C バスが誤動作する可能性は低いと思います。

これは電源の LDOレギュレーターは入力をそのまま出力に伝えている状態。別の言い方をすると、電源スイッチ代わりに使ったp-MOS FETがONになったのと同じ状態だと思います。この状態では電源が直結されているのとほぼ同じなので、LDOのレギュレーションの悪さは見えなくなっているのだと思います。

つまり、OLEDに3.3Vのレギュレーターが入っていることを無視して、電源電圧3.3Vで使えば良いことになります。まあもったいないですが、、

◆まとめ
いろいろ書いてきましたが、まとめると。
・ 5V電源対応の 0.96インチOLED(SSD1306) を電源電圧5Vで使うと、I2C バスの信号レベルのマージンがギリギリなので注意が必要。

・ 万全を期すなら、3.3V-5V双方向レベル変換回路を入れる。無理なら、5V電源から10から20kΩ程度のプルアップ抵抗を入れるとマージンが増える。

・ どれくらいのマージンがあるか確認する方法としては、
1) 5V側の電源電圧を上げて限界を確認。
2) 5V側のプルアップ抵抗の値を変えて限界を確認。(CPU内のプルアップ抵抗は命令でOFFに出来ます)

いまさらですが、SSD1306のデーターシートをよく読むと、ロジック系の電源(Vdd)と表示素子駆動用の電源(Vcc)が別系統になっています。これは、Vcc系はチャージポンプに使われていてノイズが発生するので、その影響がロジック系に及ばないように考慮したのだと思います。
せっかくそういう設計になっているのにOLEDのインターフェイス基板上では両者を一緒に接続してしまっているので、この記事に書いたような弱点が見えてしまっていのだと思います。まあそうは言っても、両者を別にすると使い難くなるし、真面目にノイズ対策するためには部品が増えてコストがかかる、ということなんでしょう。

ともあれ、0.96インチOLEDは安いのに優秀な表示デバイスだと思います。これをうまく使うことでマイコン応用の幅が拡がることは間違いないので、積極的に使って行きたいと思っています。
カレンダー
03 | 2019/04 | 05
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。
記事の内容のご利用は読者の自己責任でお願いします。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード