その他部品

CPUの入力ピンにプルアップ・プルダウンをつけないと何がいけない?(初心者向け)

CPUの入力ピンやその他のICの入力ピンには、基本的にプルダウン抵抗かプルアップ抵抗をつなげないといけません。

 

「プルアップかプルダウンしないと、HighかLowか決まらないからでしょ。でも、使ってない機能とかHighでもLowでもどっちでもいいピンはどうでもいいんじゃない?」

 

と思うかと思いますが、そうじゃないんです。

デジタル回路は「High」か「Low」しかないんです。

中間値というのはないんです。

中間値を入れると大げさでなく壊れることが有ります。

中間の電圧を入れるとデジタル回路ないの回路構成上、IC内で電源とGNDがショートした形になり、大電流が流れてICが破損するのです。

(なので、HighからLowへの変化もあまりゆっくりだと問題がでます。変化も早くないといけません)

 

なので、全く使っていなくて「どっちでもいい」ピンであっても、かならずプルアップかプルダウンをいれましょう。

CPUの場合は出力ピンにすることでプルアップ・プルダウンが不要になりますが、入力しかできないピンはやはりプルアップ・プルダウンが必要です。

 

なお、プルアップ・プルダウンが内蔵されている場合は、外で抵抗を付けても着けなくてもいいですが、内蔵と逆方向に着けないように気をつけましょう。

 

以上、小田切でした。

意外と大事な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を使う際には波形をきちんと見てプルアップ抵抗を調整しましょう!

 

以上、小田切でした。

EEPROMの存在意義

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

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

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

 

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

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

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

 

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

 

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

 

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

 

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

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

 

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

 

と思うかもしれません。

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

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

 

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

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

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

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

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

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

 

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

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

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

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

 

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

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

 

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

 

以上、小田切でした。

湿度に弱い部品はベーキングしないとだめ!

電子部品というのは金属だとかプラスチックなので、湿度がどうこうなんて普通の人は考えないと思います。

しかし、じつは湿度を吸収してしまうのです。

湿度を吸収した状態でなにが問題になるかというと、加熱した時に水分が膨らんで部品を壊してしまうのです。

加熱とはどういうときか?

 

部品を実装するときです。

 

ということで、部品には「MSL(Moisture Sensitive Level)」が記載されています。

レベル1のものはほとんど気にしなくていいのですが、レベルが上がるごとにどんどん厳しくなっていきます。

レベル1以外のものは実装する前に「ベーキング」といって軽く加熱して湿度を飛ばす作業が必要になります。

 

例えば、抵抗だとか積層セラミックコンデンサだとか、こういうものはMSL1なので気にしなくて大丈夫です。

それから、ロジックICのような小さなICもだいたい大丈夫です。

違ってくるのは、

・CPUやメモリのような大きな部品

・LED

などです。

 

部品が大きくなると湿度を沢山吸湿するので、MSLのレベルが上がってきます。

そして不用意に実装ラインに入れると割れて壊れます。

 

ということで、MSLレベルはきちんとチェックしないと面倒なのですが、幸い一目で分かる点があります。

部品の包装です。

 

抵抗や小さなICなどは紙テープやプラスチックテープにぞんざいに貼り付けてあるだけです。

しかし、MSLレベルが高い部品になると、CPUでもメモリでもLEDでも、必ずアルミコーティングされた容器に入っています。

この容器から出してすぐに実装すれば問題ありませんが、容器から出してしばらく放置すると「ベーキング」が必要になります。

 

ということで、アルミ包装の部品があったら「MSL」について確認してベーキングを確実に実施するようにしましょう。

 

以上、小田切でした。

NANDフラッシュを扱うのは結構面倒

一言で言うと、

「きちんと扱えるという確証がない限り、NANDフラッシュではなくeMMCを使え!」

ということなんですが、

ちょっと詳細を説明しようと思います。

 

昔、ある製品でNANDフラッシュメモリーにプログラムを書いていました。

しかし、NANDフラッシュはどんどん劣化していくだけでなく、最初からエラービットがあるというある意味とんでもない部品です。

つまり、買ったときから不良品(こういう言い方するをマズいかもしれないけど)なわけです。

しかもどの程度のエラーがあるかとか、エラーの詳細とかそういうことをメーカーが教えてくれませんでした。

それが原因で製品が正しく動かないとかでトラブルがあったのです。

 

じゃあ、そんなメモリをどうやって扱うのかというと、「誤り訂正符号」という技術を使います。

簡単に言うと100bitのデータを110bitで表現するといったように、データを水増しさせます。

水増しすることにより1bitぐらいの間違いなら「これはおかしい」と検出して訂正することが出来ます。

水増しする量を増やすほど多くの間違いを検出できるようになりますが、当然メモリが無駄になりますので、訂正能力とメモリの使用量のバランスを取ります。

この誤り訂正符号の力でNANDメモリーが実用的に使用できるようになります。

 

しかし、実際に開発するとなると非常に面倒でした。

CPU側に「誤り訂正符号」のファームウェアを組み込まないといけない上に、そのファームウェアにバグが有ってですね・・・

要は、NANDを扱うためだけに四苦八苦しないといけなかったのです。

 

ということで、使うならeMMCです。

これはSDカードとほとんど同じものです。

SDカードは中身にNANDフラッシュが入っていますが、誤り訂正などを行うコントローラが内蔵されており、外からは普通の読み書きすればいいだけになっています。

eMMCも同じようにNANDフラッシュとコントローラが内蔵されており、これまでに書いたような誤り訂正などで苦しむ必要がありません。

また、実装部品なのでSDカードより堅牢です。

(SDカードだと接触不良が起こりうるので、OSイメージを入れるのは少し怖い)

 

なので、大容量のストレージが必要な時にNANDフラッシュを選択していいかよく考えるようにしましょう。

誤り訂正符号の処理などが確立されており問題ないならいいですが、ライブラリなどを活用して自前で作り上げるとなると大仕事です。

そういうときはeMMCなどを活用しましょう。

 

以上、小田切でした。

DCDCのインダクタには閉磁路タイプを!

DCDCコンバータには当然のようにコイル(インダクタ)を使用します。

これの選定にはそれなりに気を使います。

 

1,(当然ですが)必要な電流を流せること

2,内部抵抗ができるだけ小さいこと

3,基板に収まるサイズを選定すること

4,価格

 

お値段とサイズが反比例したりして、「小型高性能にしたら高い」となり、なかなかスペックだけで判断できません。

しかし、これだけでなくもう一つ考えて貰いたい点があります。

 

5、「開磁路」か「閉磁路」か?

 

これはインダクタの構造のことです。

インダクタは当然磁力を発生するわけですが、その磁力をどのように処理しているかということです。

「開磁路」は磁力が外に漏れ出しています。

「閉磁路」は磁力が部品から外に漏れ出さないようになっています。

 

DCDCコンバータのインダクタには激しい電流の変化があるため、激しい磁力の変化が起きます。

ということは、「開磁路」タイプのインダクタだと磁力のノイズが空中に放出されてしまうのです。

これはよくないです。

 

ということで、ノイズをできるだけ抑えるために、(価格やサイズの点で厳しい場合もありますが)可能な限り「閉磁路」タイプのインダクタを選定しましょう。

 

以上、小田切でした。

似たような部品がたくさんある時、どうやって選べばいいのか?

回路設計する際に、「今回はこのCPUで行くからね」「このICで作って」と言われればある意味楽です。

意外と厄介なのが、縛りがほとんどない場合です。

 

例えば、電源です。

「DC15Vから5V,250mA以上作って」

と言われれば、レギュレータでもDCDCコンバータでも山のように該当品が見つかります。

 

「DC5Vラインに使う静電気対策の保護部品を選んで」

と言われれば、これも山のようにあります。

 

まず要求スペックがあってそれに該当する部品を選びます。

しかし、それに該当するものが3つ程度なら話は簡単ですが、数百個と出てきてしまうと……なんというか頭を抱えます。

設計者としては「最も適切だと判断した部品」を選ばないといけません。

「いいやこれで」とはなかなかいきません。

 

ということで、自分なりの基準をちょっと紹介したいと思います。

 

1,メーカー

聞いたこともなくて取引のないメーカー、中国メーカーなどはサポートが非常に心配です。

電子部品はトラブルがつきものですので、サポート・保証が信頼できない部品は出来る限り避けます。

「そのメーカーにしかない」などのやむを得ない理由がない限り、怪しいメーカーは選考外です。

 

2,部品サイズ

設計を開始する頃には「サイズに余裕がある基板」か「サイズに余裕がない基板」かが検討が付いています。サイズに余裕が無いときは、大きなパッケージの部品は選考外にします。

 

3,DIP品

DIP品とSMD品がある場合、DIP品は裏面に部品が搭載できず実装も面倒なことから、DIP品は除きます。

※強度が必要なコネクタのみDIP品を選定することもある

 

4,価格

ここまできたら価格です。

しかし、該当部品が多いと一つ一つ商社に見積もりを出しているとキリがありません。

DigikeyやChip1STOPでリールで買ったときの価格で相場を調べて判断します。

コスパが上位の部品のみ、正式に商社に見積もりをさせます。

 

5,納期

商社に実際に見積もりを出してみて、納期が異様に長い部品は避けるようにします。

 

こんなところでしょうか。

 

なにかのときの参考にどうぞ!

 

以上、小田切でした。

CPUやICでコンデンサを付けろと書いてある端子の正体

どんな部品も電源にはパスコンとしてコンデンサをつけますが、これはそのことではありません。

 

「この端子とGNDの間に0.47uFのコンデンサを接続する」とか書いてある端子のことです。

 

謎、ですよね。

 

CPUを含むどんなICも、ピン配置を見れば大体用途や意味がわかるものです。

「ああ、コレはJTAG用か」

「これはGPIOか」

「電源接続ね」

「USB通信用ね」

 

しかし、そうでないものがあります。

何の説明がなく「未接続」と書いてあるものや、今回話題にしている「コンデンサを接続しろ」という端子です。

こういうの、普通に不明です。

一体何でしょうか。

 

え、知らなくていい?

 

知らなくてもOKですが、ちょっと知識として知っておきましょう。

 

実はこんな例があります。

 

1,内部電源用

たとえば、外部給電は3.3Vであっても内部で1.2Vなどを生成しているICがあります。

要はレギュレータを内蔵しているICということです。

しかし、レギュレータそのものはIC内に内蔵できてもコンデンサは無理です。

そのため、コンデンサは外付けしないとレギュレータとして動作しません。

そのため「(レギュレータ用のコンデンサとして)この端子とGNDの間に0.47uFのコンデンサを接続する」と書いてあったりします。

 

2,ローパスフィルタとして

中でアナログ信号を平滑化する際にフィルタとしてコンデンサが必要です。

そのフィルタ用のコンデンサを外付けする場合があります。

 

一番多いのは「1」だと思います。

あやしいなと思ったらそのコンデンサの両端をテスタで触ってみましょう。

それっぽい電圧が出てたら「なるほど」と納得してにやにやしてみてください。

 

以上、小田切でした。

Ethernet(LAN)の実現方法

「基板にLANコネクタを付けて、Ethernetにつなげたい!」

 

というのはよくあるパターンです。

一応、方法は2つあります。

 

1,Ethernetの通信を全部処理してくれるモジュールを買って、UARTで通信する

例えばXPortのような製品です。

基板のメインCPUには全く普通のものを利用して、メインCPUからUARTなどでモジュールを制御します。

Ethernetのハードウェア・ソフトウェアを作らなくていいので非常に楽です。

ただ、コストが高いので、単価が高い製品にしか使えません。

 

2,メインCPUでEthernetを処理する

まずメインCPUの選定から違います。

「Ethernet対応」とうたっているCPUを選びます。

が、それを買って直結すれば実現できるかというとそんな簡単なものではありません。

CPUに載っているのはMAC層まで・・・

 

WikipediaのOSI参照モデルを見てもらいたいのですが↓

https://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB

 

こんな風にネットワークは層構造で実現しています。

そしてCPUにのっているのは下から2番めのデータリンク層(MAC)までです。

一番下の物理的に通信する層は搭載されていません。

つまり、「通信するデータは作れるけど、実際に電気的に通信するハードウェアを持っていない」ということです。

 

「だめじゃん!」

 

いや、そういうものなんです。

ほとんどすべてのEthernet対応CPUがそうなので諦めてください。

ということで、PHYというものが必要になります。

 

1,Ethernet対応CPU

2,PHY(CPUと接続されるLSI)

→実際に通信する電気信号を作る部品

3,パルストランス

→ショートや他の機器との電位差などから製品を保護するために通信を絶縁する部品

4,LANコネクタ(RJ-45)

→よく見る四角コネクタです

 

とまぁ、これだけ必要になります。

結構面倒なので、メーカが出している資料をじっくり見ながら作ることになります。

また、ソフトウェアの方もLinuxやTRONなど、TCP/IPがちゃんと扱えるOSが必要になるので、開発もそれなりに大変です。

 

以上、小田切でした。

 

P.S.

SoC(System on Chip)では、PHYがCPUと一緒に内蔵されている製品もある模様。

ICの「5Vトレラント」とは?

ロジックICやCPUで「入力は5Vトレラントです」という記述にぶつかることが有ります。

これはなんでしょうか。

 

例えば、3.3Vで動いているロジックICの入力電圧は普通最大3.3Vです。

1.8Vで動いていれば入力電圧は1.8Vまでです。

(正確には絶対最大定格で電源電圧+0.3Vぐらいは許容されていますが)

このように、普通のICの入力電圧は電源電圧と同等です。

もし電源電圧以上の電圧を入力端子に入力すると、電流が電源に戻っていってしまいます。

つまり、3.3V電源のICの入力端子に5Vを入れると、3.3V電源に電流が流れて3.3V→約5Vまで上がってしまうわけです。

そもそも部品が壊れます。

 

ということで、3.3Vで動いているIC・CPUに5Vやそれ以上の電圧の信号を入れる場合、電圧レベルを変換する回路(レベルシフトICやトランジスタで組むなど)が必要になります。

でも、やっぱり面倒なんです。

 

ということで「5Vトレラント」というのは、「電源電圧に関わらず入力端子に5Vまで入れてOK」という設計だということです。

これは嬉しいです。

例えば、3.3Vや1.8Vといった低電圧で動いていても5Vを入れられるので、回路が非常にシンプルになります。

こんな便利な5Vトレラントですが、結構レアです。

もし使おうとしている部品が5Vトレラントだったらラッキーと思ってください。

 

以上、小田切でした。