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は安いのに優秀な表示デバイスだと思います。これをうまく使うことでマイコン応用の幅が拡がることは間違いないので、積極的に使って行きたいと思っています。

ブラデカのコードレス掃除機に自動LEDライトを取り付け

1.まえがき
ブラックアンドデッカーのバッテリー式ハンディクリーナーを外部バッテリー仕様に改造し、さらに電圧計を取り付けて便利に使っています。このクリーナーにLEDライトが付くと便利だろうなーと、かねてから思っていたので、今回改造してみました。先に完成状態の写真です。

▼バッテリー掃除機に取り付けたLEDライト
バッテリークリーナーに付けたLED照明
吸い込み口の上の四角い箱が今回取り付けたLEDライトです。形が全然スマートではありませんが、結構実用的です。

2.点灯回路の検討
掃除機の運転時間はさほど長くないので、電池でLEDを点灯させても電池寿命はたぶん問題にはならないと思います。でも、せっかくクリーナー側に大容量のバッテリーがあるので、この電源を使うことにしました。

で、12Vだから白色LEDを4直列にして、ちょっと抵抗を入れておけば良かろう、と思ってやってみたのですが、全然ダメでした。クリーナーのモーターが廻っていない時は明るく光るのですが、モーターが廻ると電圧が下がるので、LEDがすごく暗くなってしまいました。

電圧計の表示で10.5Vくらいになっていたのでまあ当然の結果でした。というか、そんなことは実際にやる前から予想出来た話でした。

3.定電流点灯回路
ということで、電圧が下がっても明るさが変わらないようにするために、定電流回路を入れることにしました。また、クリーナーには電圧計の電源の自動ON/OFF回路があるので、電源はそこから取ることにしました。

▼回路図
バッテリークリーナー用LED点灯回路
右側のポリスイッチ以降の回路が今回追加した部分で、トランジスタを使った定電流回路になっています。R6の電圧が約0.6V以上になると、Q2がONになってQ3がOFFになるので定電流になる仕掛けです。
参考:LED一つの状態でシミュレーションした結果はこちら。

実際の回路を測定してみると、R6の電圧は0.56Vでした。つまりLEDの合計電流は56mAで安定化されていることになります。また、電源電圧が10V程度まで下がっても定電流特性を維持できていました。

あと、バッテリーの電流供給力は凄いので、安全のためにポリスイッチを入れておきました。

4.製作
▼LEDと定電流回路の基板
LEDと点灯回路
ゴミ捨ての時に掃除機のヘッド部を取り外す必要があるので、5mm/2.1mmのDCジャックを経由して電源供給するするようにしました。使ったLEDは5mmの高輝度白色の砲弾型で、照射角15度の物で。これを回路図のように3直列の3並列に接続しています。

▼配線面
LEDと点灯回路(配線面)
FETは少し発熱するので、ドレインのパターンに薄い銅板をはんだ付けして放熱を助けてやっています。まあ、発熱すると言っても、200mW程度なので、ここまでやらなくても良いのですが、場所が空いていたのでちょっと遊んでみました。

▼ケース
ケース
このあいだ aitendo に行った時に買っておいたプラケースで、サイズは厚さ17mm、幅70mm、奥行42mm.。フタがパチンと嵌るタイプの物です。これを加工して、LED が露出するようにしました。

▼取り付け
ランプケースをクリーナーに取り付け
ケースに基板をホットボンドで固定し、ケースはクリーナーに両面テープで取り付けました。

5.完成
▼光らせている状態
LED点灯
クリーナーの運転に連動して照明が点灯。クリーナーを OFF にしても約20秒間は光ったままなので便利です。また、電圧チェックボタンを押しても LED が点灯します。

また、定電流回路が入っているので、モーターやバッテリーの状態によらず、LED の明るさは一定です。なお、モーター起動時にはの電圧低下のために LED が一瞬暗くなりますが、すぐに回復します。

▼掃除中
使用状態
クリーナの前方を浅い角度で照明するので、ゴミが見易いです。

▼延長ノズルを使用
延長ノズル
クリーナーに内蔵されている延長ノズルを出した状態です。期せずして、ノズルの先端と光の中心がほぼ一致したのはラッキーでした。

6.まとめ
使ってみるととても便利です。これならもっと早く作ればよかったです。LED ライトの消費電流からすれば、バッテリーの容量はほぼ無限大なので、電池切れを気にしなくて済みます。

機能的には問題無いのですが、ランプハウスの形が四角形で不格好なのが残念な点です。もっと無駄を省いたすっきりしたデザイン。例えば、先端に向けてテーパー状に薄くし、横幅も出来るだけ絞ったケースを作ることが出来れば最高です。実はプラ板を切って接着して、そういうケースを作ることも考えたのですが、面倒そうなので止めました。3D プリンターとかあれば格好良いケースが作れるのでしょうね。まあ、それ以前に3D でモデリングするスキルを身に付けないといけないのですが、、
カレンダー
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コード