意外と大事なI2Cのプルアップ抵抗

I2Cバスをご存知でしょうか。

I2Cはデータ線:SDAとクロック線:SCLで双方向通信ができる、とても低コストな信号規格です。

(正確にはもともとのI2Cの規格をきっちり守ったわけではない「なんちゃってI2C」ばかりですが、まぁ、I2Cです)

 

信号線が少ないだけでなく、「バス」なので複数のデバイスをつなげます。

つまり、CPUから伸びる配線はSDA&SCLの二つだけですが、そこにEEPROM、RTC、センサー・・・といろいろなデバイスを複数個繋げられるのです。

ピン数が少ないCPUでは非常に心強い味方です。

(ICごとにアドレスが違うので、CPUがアドレスを指定して通信することで複数個つなげても通信が混信しない)

 

また、信号速度も最大400kHzと低速です。

 

・信号線が2本のみ

・速度も遅い

 

ということで、ハードウェア設計的には非常に簡単です。

よほど酷いパターンをひかない限り普通に動きます。

 

が、一つだけ注意するべきところが「プルアップ抵抗」です。

 

I2Cは信号線がプルアップされており、それぞれのデバイスがそれをLに落とすことで通信をしています。

理想状態ではプルアップ抵抗は何Ωでも大丈夫なのですが、実際にはそうはいきません。

I2Cバスに接続される信号線にはGNDとの間に寄生容量が発生します。

さらに、各デバイスのピンにも寄生容量があります。

 

つまり、I2CのバスをLやHに変化させるときにはその寄生しているコンデンサを充放電する必要があるわけです。

その事自体はどんな信号線も同じです。SPIだろうがMIIだろうが。

でも、他の通信規格はたいていプッシュプルで駆動するので、寄生容量の充放電は速いのです。

ところが、I2Cは・・・

H→Lのときは、問題ありません。

デバイスが信号線とGNDをショートさせるので速やかに電荷が抜けてLになります。

問題は、L→Hのときです。

このとき、デバイスはハイインピーダンスになるだけです。

プッシュプルのように電源と信号線をショートさせたりしません。

ただ単純にプルアップ抵抗から流れてくる電流で寄生容量に充電していくのです。

ということは、「物凄く遅い」のです。

 

対策としてはプルアップ抵抗を小さくすることですが、あまりに小さくするとデバイスのドライブ能力を超えてしまいますし、消費電流も大きくなります。

なので波形的に問題ない範囲でプルアップ抵抗は大きくしたいのです。

というところで、現実的には1~10kΩという範囲内で大体うまく行きます。

 

I2Cを使う際には波形をきちんと見てプルアップ抵抗を調整しましょう!

 

以上、小田切でした。

電子回路は意外とアバウトなシロモノであることについて

閑話休題的な話。

 

電子回路というのは「きっちり」したものだと大抵の人は思っています。

しかし、エンジニアは知っています。

「適当なもの」だと。

 

そして、適当なものだからこそきちんと動かすのが面倒だと。

 

たとえば、古典的なタイマーIC(555)とかで時間を測るとしましょう。

これはコンデンサに電荷がたまる時間で時間を計測します。

しかしコンデンサというのは普通に誤差が20%ぐらいあったりします。

なので、1分を測定しようとして設計したのに、ものによっては50秒になってしまったり、ものによっては1分10秒になってしまうわけです。

想像以上に適当な感じなのです。

 

抵抗だって5%も誤差があって、インダクタだって10%以上の誤差があって、CMOSのスレッショルドでさえ誤差があります。

その上、すべての要素が温度や経時変化でさらに変化します。

 

実は電子回路の中できっちりしていて精度の高いものは非常に限られています。

ハッキリ言って水晶振動子ぐらいです。

こいつは誤差が「20ppm(100万分の20)」とかなので、コンデンサなどで時間計測するのに比べて飛躍的に精度が上がります。

ほとんどの電子機器はCPUに水晶振動子が付いています。

だから、水晶振動子でクロックを刻んでいるから正確なのです。

水晶振動子を使用しない時間を測定する仕組みはどれも精度が数%程度です。

 

それ以外はすべて適当です。

高精度抵抗でも1%、そこそこ高精度な電源でも2%程度のずれはあります。

つまり、量産品は個別に調整しない限り、すべての部品で%単位のズレが発生してしまうわけです。

製品全体ではそれ以上のズレが発生することになりますが、それでも製品として成り立つようにしないといけません。

 

ということで、電子回路というものは「きっちりしたものを組み立ててきっちりしたものを作る」のではなく、

「誤差が大きくておおざっぱな物を組み立てて、それでもきちんと動くように考えるのが設計の仕事」

と考えてもらうと現実に近いかと思います。

 

以上、小田切でした。

プリント基板のプリフラックスと金メッキ

プリント基板を作る時に、層構成以外にもう一つ重要な物がありました。

書き忘れていたので書こうと思います。

 

それは「表面処理」です。

 

基板というのはガラス繊維と銅箔が積層した物体です。

表面にはレジストというものがかかっていて、その部分は銅箔は露出していません。

しかし、部品が乗るパッドの部分はレジストがかかっておらず、銅箔が露出しています。

 

なお、銅は錆びます。

十円玉を見ればわかります。

 

そこで、プリント基板(生板)を作る際に銅箔露出部分に「プリフラックス処理」というものをします。

要は銅箔を守るためにフラックスを塗ってあるのです。

 

これで一安心・・・ではありません。

何ヶ月も放っておいたらだめになります。

なにより実装の時にフラックスはなくなってしまいます。

ということは、実装工程で部品を載せて製品に組み込まれてしまうと、部品が乗らなかったパッドは銅箔が露出した状態になってしまいます。

そうなると、そこから錆が入って広がっていって、配線が切れたりショートして故障に至ります。

 

そういう場合にどうするかというと、部品が乗らないパッドにも「ハンダだけ」載せます。

そうするとハンダで保護されて、その下の銅箔は錆びなくなります。

 

ということで、これで良さそうに見えますが、そうもならない場合があります。

例えばPCI-EXPRESSカードだとか、基板の隅がコネクタになっていますよね。

そこにハンダを載せたら厚みが変わってしまいますし、そもそもハンダは激しい摩擦を想定していません。

さらに、それ以外によくあるのがネジ穴がある場合です。

ネジ穴の部分がGNDベタやフレームGNDになっていて、ネジ穴から筐体にノイズを逃す仕組みなっていたりします。

まぁ、ネジ穴の部分にハンダを盛ることもあるかもしれませんが、普通はしません。

 

こういう時に使うのが「金メッキ」です。

プリント基板を作る際に銅箔すべてが金メッキされた状態になるので、錆びません。

これでハンダなど載せずにネジを締めたり、コネクタにしたりできるようになります。

もちろんコストは上がります。

 

以上、小田切でした。

EEPROMの存在意義

メモリの中でEEPROMというメモリがあります。

数十円と安価で不揮発性(電源OFFでも消えない)ですが、容量が1kbyteとか数キロバイト程度しかありません。

一体何に使うのでしょうか?

 

小規模な組み込み機器ならFLASHメモリ内臓のCPUを使っているので、CPU内に数十kB程度のFLASHメモリがあります。

大規模な組み込み機器なら数Gバイトのフラッシュメモリが外付けされています。

そんな場合でも、意外とはじっこにちょこんとついているのがこのEEPROMです。

 

おそらく、普通はこう思うと思います。

 

「大きな不揮発性メモリ(フラッシュメモリ)がたくさんあるのに、1kBとか少ないメモリを外付けしてどうするの? 意味ないんじゃない?」

 

鍵は大量生産にあります。

 

はじめに答えを言ってしまうと、EEPROMは「設定値の格納」に利用されます。

機器の設定値や、シリアル番号や、LANに繋がる機器ではMACアドレスなどが書かれています。

 

「そんなのもともと使っているフラッシュに書けばいいじゃん」

 

と思うかもしれません。

実際、設定値をCPU内部のフラッシュメモリに保持している機器もあるにはあります。

しかし、大量生産の時に困ってしまうのです。

 

シリアル番号やMACアドレスは1つずつ違うので、全て違う値を書かないといけません。

しかし、もしフラッシュメモリに書く値を変えようとすると大変です。

まず、CPU内のフラッシュメモリや外付けフラッシュメモリにデータを簡単にコピーできるツールが有ります。

なので、全く同じ内容のフラッシュメモリを量産することは簡単なのです。

しかし、1台ずつ内容の一部を変えながらコピーというのは特殊です。

普通のツールでは出来ないことが多いです。

 

また、ソフトウェアのアップデートの際にも困ってしまいます。

組み込みソフトウェアのアップデートでは通常フラッシュメモリの全領域を書き換えて更新します。

ということは、フラッシュメモリの一部に設定値が入っていると、それも書き換えられてしまいます。

こうなると、特定の領域だけコピーしない仕組みが必要で煩雑になります。

 

と、このような理由によりフラッシュメモリは1台毎に変えることはせず、共通としたほうが楽なのです。

そこで一台ごとに違う情報はフラッシュメモリに書き込まずに、別付けの小容量メモリのEEPROMに書くということが慣例になっています。

 

そんなところでわかりましたでしょうか。

 

以上、小田切でした。

無線設計は本当にハードル高い!

という話について。

通常の回路設計が問題なくできるスキルがあっても、無線を扱う回路を作るとトラブル多発するよ、という話です。

無線が難しいのは当たり前なので、特に目新しい話ではないですが、今回の事例で見えてきたポイントについて解説したいと思います。

 

◯無線は微弱なノイズが問題になる

通常の基板でもノイズが酷いとVCCIなどの規格にクリアできなくなります。

しかし、しょせんそのレベルです。

無線になるとVCCIとはレベルが違うわずかなノイズでも問題になります。

ノイズがあっても通信はできるのですが、受信系の性能が極端に落ちるので通信到達距離が短くなります。

 

◯理想的なレイアウトをしないと性能が出ない

デジタル回路では多少乱暴な配線をしても、デジタル信号の伝達に影響がなければ動きます。

しかし、無線ではちょっとした不備で性能が出なくなってしまいます。

小さな基盤に押し込むとなると無理がでやすいのです。

特にGNDが弱くなるとそこにノイズが乗ってしまうようです。

 

◯マッチングが難しい

電波を扱うICとアンテナの間にマッチング回路という物があり、この定数を調整することでアンテナの性能を出します。

この調整「マッチング」を行わないとアンテナの性能が引き出せません。

普通にデジタル回路を設計しているだけではこの知識は身につかないので、新たに勉強するか別の専門家が必要です。

今回のプロジェクトでは別の専門家が付いていました。

 

◯測定が難しい

マッチングをしてから実際に通信距離の評価をしないといけませんが、

距離が長くなると研究室で行う訳にはいきません。

必然的に外でやる必要があり、広い公園のような場所かオープンサイトを借りて行うことになります。

そういう場所が近くにないとマッチングの評価作業が進みません。

こんなところもハードルの一つです。

 

◯電波法にクリアするための知識を得ないと行けない

電波を扱うので法律をクリアしないといけないのですが、測定方法や基準などの知識がないと手が出せません。

そういった所を勉強するのも大変なポイントです。

 

◯申請系が面倒

どういう風に申請するかなどのポイントを踏まえた上で、TELECなどで申請をして試験をします。

しかし、そういったところに出す書類も初見では意味がわからなくてどう書いていいかわかりません。

そういうところも窓口に確認しながら進めなくてはならず、スムーズに進まない点です。

 

◯トラブルが出ると追い込みが難しい

普通のトラブルはオシロスコープで各部の波形を見れば見当がつくことが多いですが、

無線系になってくるとオシロスコープでは無理です。

基本的にスペクトラムアナライザーで見ることになりますが、「~~MHzがおかしい」とわかっても実際に回路のどこが原因かはっきりしないことも多いです。

そういった面で、普通の回路よりもトラブル対応が難しいです。

 

とまぁ、こんな形で非常に面倒なのが無線です。

できることなら関わりたくない。

しかしそうも行かないのが実情です。

 

以上、小田切でした。

その電源ICは積層セラミックコンデンサ対応品か!?

案外と見落としがちな点なのでちょっと紹介したいと思います。

 

電源IC、例えばLDOでは出力側にコンデンサをつけますよね。

どんなコンデンサを使いますか?

普通のアルミ電解コンデンサ?

高分子アルミ電解コンデンサ?

タンタル?

積層セラミック?

 

電源とは低インピーダンスなほうがいいので、通常は積層セラミックを使うことが多いと思います。

 

が、積層セラミックコンデンサは数mΩという超低ESRです。

電源のパスコンとしては理想的ですが、昔ならありえなかった特性です。

 

設計が古い電源ICはそんな高性能なコンデンサは想定していません。

アルミ電解コンデンサとかESRが1Ω以上あるような低性能なコンデンサを想定しています。

そんな古い電源ICに積層セラミックコンデンサをつけるとどうなるか。

 

発振します。

 

電源がノイズだらけになります。

酷いものです。

 

ということで、レギュレータを使うときにはよく読みましょう。

「◯Ω以上のコンデンサが必要」などと書いてあればまず積層セラミックは使えません。

そういう記述がなければ大丈夫な可能性がありますが、できれば「積層セラミック対応」とはっきり書かれている部品を使いましょう。

 

以上、小田切でした。

GNDベタの穴はなんとかフォローする!

通常の4層基板では、2層目はGNDになっていて、そこに他の層からVIAを通すことで全層に渡って頑強なGNDが作れます。

しかし、配線が多く、2層目にも配線が来てしまうこともままあります。

そうすると、2層目が綺麗なGNDベタではなく、穴が空いたベタになってしまいます。

穴も小さければいいですが、配線が長かったりすると大穴が空くことになります。

 

ベタに大穴が開くとどうなるのでしょうか。

 

答え:ループ(コイルになる)

 

穴のまわりがコイルになってしまい、そこで共振したりします。

現在、それが原因と思われるトラブル発生中です。

 

そうなると、その穴を塞がないといけません。

しかし、もともと苦しくて2層目に配線を走らせているので、その配線をなくすことは難しいです。

 

そこでどうするかというと、他の層でカバーします。

その穴の中を通るようなGND配線を他の層に作り、VIAでつなぎます。

例えば、長い穴があって、その中央を他の層で繋いだとしましょう。

そうすると、大穴の外周がそのままループになっていたのが、VIAを通して中央の配線で繋がれることにより、外周が半分のループ二つになります。

こうすることにより、共振周波数が上がります。

ループは消えないのですが、周波数が上がることにより共振しにくくなっていきます。

 

文字ばかりでは正直わかりにくいと思いますが。

是非ともよーく考えてみてください。

 

以上、小田切でした。

電子回路で一番最初に寿命が来る部品は?

電子回路というのは物理的に動くわけでもないし、なんとなく永遠に動きそうなイメージが有ります。

しかし、実際には寿命があります。

そのなかでも一番寿命が短いのはなんでしょうか?

特殊なセンサーとかごくごく一部のものではなく、一般的な回路の中で一番寿命が短いものです。

 

・・・

・・・

・・・

 

はい、答えは「電解コンデンサ」です。

殆どの部品はシリコンやセラミックで出来ているのですが、電解コンデンサだけ「液体」を使っています。

つまり、生物(なまもの)なわけです。

どんどん液体が蒸発していき、容量が小さくなっていき、最終的にコンデンサの役割をしなくなります。

 

しかも、高温では想像以上に寿命が短いです。

例えば「85℃ 1000時間」という電解コンデンサが標準ですが、これはわずか41日で寿命が来ます。

製品を使い始めて1月少しでダメになるわけです。

 

これでは話になりません。

ここにはからくりがあって、10℃下がるごとに寿命が2倍になります。

なので、25℃で使えば、64倍になって7年持ちます。

 

ということで、寿命を考えるときには電解コンデンサに注目しましょう。

オールセラミックコンデンサの基板はかなり長い間使えると想定できます。

 

以上、小田切でした。

電源ノイズが大変ならLDOにしてしまえ!

今開発している基板でノイズが問題になっています。

ノイズフロアが高くてRFの性能が出ない!

 

そして、よくよく解析しているとどうにもDCDCコンバータがノイズを出している模様。

しかしこのDCDCコンバータ、外付けしているものではなくRFICに内蔵されているDCDCです。

つまり、他のDCDCコンバータに変えると言ったことができません。

 

しかし、こういうICの内蔵電源というのは、たいてい「外部供給もできるよ」となっています。

推奨ではないのであまり詳しく説明されて居ないことも多いです。

そして、評価ボードの回路も内蔵電源をつかう回路になっています。

つまり、外部供給にするのはあくまでオプション扱いで情報が少ないわけです。

 

しかし、内部のDCDCを無効にして外部から電源を供給することで、実際にノイズが大幅に減りました。

ということで、外部から電源を供給する方向で行く予定です。

 

このように内蔵電源を使うとイマイチ性能が出ないこともある模様。

評価ボードの回路だからと言ってアートワークなどの制限もあり、コピーして性能が出るとは限りません。

そんなときは思い切ってLDOでクリーンな外部電源を使うのも手です。

 

以上、小田切でした。

ノイズ対策のめどの付け方

基板を作ったけど、VCCIが通らない!

と、なったらだいたいパニックになってやたらめったら対策部品をつけたり、いろんな手をうつとおもいます。

ですが、それ、泥沼になります。

 

大事なこと:すべての対策部品を施してから、部品を減らしていく

 

これが大事です。

何も考えずにやっていると、ありとあらゆる対策の組み合わせが発生してしまい手に負えなくなります。

 

1,考えうるすべての対策部品を施す(シールド追加やノイズ除去フィルター追加、フェライトコア追加など)

2,その状態でVCCIに通っていることを確認する

(それでも通らなかったら解析をもっとしないと駄目です)

3,対策部品を一つずつ外していく。

4,VCCIをクリアできなくなったらやめる。

 

一つずつ追加しているといつまで経っても「VCCIをクリアできる正解」にたどり着けない可能性があります。

そこでまずどれだけコストがかかるかを度外視で、全部のせで「正解」を作ってしまうのです。

そして、そこから部品を取っていって、できるだけコストがかからない「正解」を見つけるのです。

 

これはVCCIだけでなくノイズ系のトラブルでは全般で使えるので、是非とも覚えておきましょう。

 

以上、小田切でした。