データシートを読んで部品選びをしてみよう



## データシートを読んで部品選びをしてみよう
皆さんドキュメントって読みますか?
今回は安いD級アンプを見つけたので,ICチップのデータシートを見ながらスピーカへの出力ができるかどうかを確認したので,自己流の選定方法をまとめてみました.

## はじめの一歩
世の中にはたくさんの入門書やたくさんの解説記事があります.ソフトウェアの世界では`Hello world`を出力することがはじめの一歩になっています.

電子工作ではLEDを点滅させる`Lチカ`と呼ばれる動作をさせることで,ハードウェアが動いていることを確認します.`Hello World`と違うところは,Lチカのために書いたコードがテスト用や検査用にずっと残り続ける場合があることです.ちょっと違うかもしれませんが,マニュアルにLEDの色や点灯パターンが記載されており,LEDの状態によってトラブルシューティングができるようになっている製品が身近にないでしょうか.

実用的なコードが入門になっているハードウェアは,さぞ入門者に優しく大流行しているかと言うとそうではないようです.qiitaの記事の数を見ても全然違います.

- JavaScript 19,298 posts
- 電子工作 574 posts

ハードもソフトも背後にある理論体系はとても難しくどっちが難しいとも言えないはずですが,なぜこんなにも開きがあるのでしょうか.

## ハードウェアの難しさはデータシートにあり
私の初めて書いたプログラムは,`Borland C++ Builder`で書いたC言語で,このときの入門は[猫でもわかるプログラミング](www.kumei.ne.jp/c_lang/)と[wisdomsoft](http://www.wisdomsoft.jp/)を見ながら写経するものでした.

一方電子工作は,Microchip Technology社`PIC`を使ったLチカだったと思います(正確に言うとそのプログラムを書き込むライターでした).パラレルポートにライターを差し込んで,動作確認用のLEDが光ったとき嬉しさに声が出ました.

どちらも場合も理論的な裏付けなど分からず,ただ書いてあるとおりに組み立てていくだけでした.違いはこの後に現れます.なにか新しい機能を組み込むときに電子工作は`データシート(datasheet)`を読むことを強要されます.

ソフトウェアにはデータシートに該当する書類はありませんが,しいて言えばライブラリの開発者ドキュメントでしょうか.ソースコードが公開されていないときはもちろん,オープンソースの場合であっても重要な情報が載っていることがあるため必ず目を通すようにしていますが,実際に自分でコードを書く場合には,サンプルプログラムやテストコードを集中して読み込みます.サンプルなどに合わせてコードをとりあえず書いてみて見ると大抵のミスはコンパイラが指摘し,問題が解決しなければちょっと探すだけで同じ問題を抱えている人や解決策が簡単に見つかります.

電子部品を使ってみたいと思ったとき,とりあえず1番ピンに電圧をかけてみようなどとは絶対しません.やろうと思えばICチップのどのピンでも電源や負荷を接続できるため,あっさりと部品が壊れてしまいます.間違って接続していても誰も指摘してくれないため開発者がドキュメントを読んで正しく使用していることを確認する必要があります.

巷でRaspberryPiが流行って,フォロアー製品があまり流行らないのは,自分の使いたい用途の例がないからだと思っています.みんな書類を読みたくないのです.

## それでも読まないといけません
でもデータシートって読みづらくないですか.まずたいてい英語で書いてあります.これで日本人の半数ぐらいが脱落するんじゃないでしょうか.
仕様書の構成にも癖があります.`PIC16F84A`のデータシートを見てみると以下のような記載があります.

```text
Peripheral Feature
High current sink/source for direct LED drive
- 25 mA source max. per pin
```

ピンに対して電流を考えるとき,供給量(source)は25mAまで流せるとあります.この最大値は開発者ががんばって遵守する値で,努力目標ではなく絶対に守る必要があり,破るとICが壊れます(今後どんな動作になるかわからず,動作が未定義になるという意味で).ここだけ見ると13本あるI/OピンにLEDをつけてチカチカさせられそうです.

一方で別な所を見ると

```text:9.0_ELECTRICAL_CHARACTERISTICS
Maximum current into VDD pin : 100 mA
```

電源ピンには100mAまでしか流せないとあります.最大出力する場合には,4ピンまでしかできないようです.表の下の方に目を向けると以下のように記載があります.

```text:9.0_ELECTRICAL_CHARACTERISTICS
Power dissipation is calculated as follows: 
Pdis = VDD x {IDD - ∑IOH} + ∑{(VDD-VOH) x IOH} + ∑(VOl x IOL)
```

消費電力の計算式が書いてあり,I/Oの出力の他にチップ自体の消費電力を考えないといけないようです.
動作条件(FOSC = 20 MHz, VDD = 5.5V)にあう項目を見ると

```text:9.1_DC_Characteristics
IDD = 20mA(Max)
```

と記載があります.これを考慮して出力を3ピンにして,Aポートを出力用のポートにするとプログラム上簡潔にできそうです.これをやろうとすると

```text:9.0_ELECTRICAL_CHARACTERISTICS
Maximum current sourced by PORTA : 50mA
```

ダメみたいです.`PIC16F84A`のデータシートは80ページほどありますが,こんな感じにいろいろなところが関連しているため,結局全部読むことになり,加えてデータシートの正誤表,ユーザーズマニュアル,アプリケーションノート,ホワイトペーパを確認する必要性があるでしょう.しかもこれらのドキュメントは,重要な部分の記載であっても間違っていることがあります.

[obniz](https://obniz.io/)では12本あるI/Oピンから最大1Aの出力ができ,ペリフェラルはどのIOでも使用でき,5v/3v切り替えをソフトからでき,過電流保護までついています.これならどんな形でも接続できそうですが,それでも接続する電子部品に合わせて作り込みが必要になります.結局,書類を読む他に解決方法はないのです.

## 習うより慣れろ
読みたくないものなら薄くて簡潔な方がよいように感じますが,これは罠で,書いていないことが全て許されているわけでもなく間違ってても誰も指摘してくれません.書いていない隠しパラメータを推定しながら考えなければならなくなるため明確に決まっているほうが楽だったりします.

こういうのは実際にやってみる以外に覚える方法はないかと思います.
ICチップのデータシートを見ながらスピーカへの出力を満たすことのできるかどうかを確認してみましょう.

必要な要件は以下のとおりです.

- ICチップの電源は5[V]
- 入力はVp-p=5[V]
- 出力は1個のスピーカに接続し,抵抗値はスピーカで4[ohm]程度
- 音は聞こえればいいので,ひずみとかはなんでもよし

##パーツの選定

D級アンプの乗ったチップがアマゾンで安売りしています.
[EasyWordMall PAM8403 5V 電力 オーディオ アンプ ボード サポート USB 電源 2 チャンネル 3W [並行輸入品]](https://www.amazon.co.jp/Rasbee-PAM8403-%E3%82%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%82%AA-%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB-%E4%B8%A6%E8%A1%8C%E8%BC%B8%E5%85%A5%E5%93%81/dp/B01MQSC0RH)

`D級`とあると精度の良くない増幅器なのかと思ってしまいますが,そんなことはなく歴史的な経緯から名前がつけられた名前です.[マルツエレック株式会社の解説記事](https://www.marutsu.co.jp/contents/shop/marutsu/mame/185.html)に動作原理の解説があります.

このボードには`PAM8403`というチップが乗っているようです.データシートは購入先から入手するというのがありますが,今回は貰えそうにないので,Googleで探すことにします.

`www.diodes.com`で[データシート](https://www.diodes.com/assets/Datasheets/PAM8403.pdf)が引っかかりました.細かい型番が違うみたいですがコンパチ品でしょう.2Chの出力のうち1つを使用します.

`Absolute Maximum Ratings`という項目があります.この項目の名称はいろいろと違いますが,どんなICの仕様書でも乗っている項目です.
電源に5Vを使えば問題ないでしょう.はんだ付けの際に`Soldering Temperature`を超えないようにします.

`Recommended Operating Conditions`は,ものによってはなかったりします.推奨と言いつつこれ以外の条件では動かないことがあります.

`Electrical Characteristics`に動作させたときの条件が書いてあります.

```
3.2[W](動作条件 RL = 4[ohm], VDD = 5.0[V])
```

動作条件は,今回の用途にあっているので問題ありません.

ずっとこの出力ができるか確認します.ICの温度が上昇して絶対最大定格を超える場合がないか確認しましょう.(ちなみに`Over Temperature Protection`を見ると単位が間違っているようです.)

熱については,電源やMPU以外では考えなくてもだいたい大丈夫ですが一応見てみましょう.効率が80%程なので,3Wの出力を出すのに,8割が出力,2割が熱になるとして

```
(3.0[W] / 80[%]) * 20[%] = 0.80[W]
```

瞬間的な電力印加による温度上昇は,過渡熱抵抗を用いて計算します.今回見たデータシートには書いてありません.このようなときには他の似たパッケージからデータを引っ張ってきたり実測したりしますが`Thermal Resistance (Junction to Ambient)`を使って

```
110[°C/W] * 0.80[W] = 88[°C]
```

であり,周辺温度が高くても`Maximum Junction Temperature`にある150[°C]には全然届きません.問題ないでしょう.(実際はもっと低くなります.)

入力について考えます.こんな感じの入力を入れたいと考えています.
![入力電圧](https://raw.githubusercontent.com/noolbar/noolbar.github.io/master/res/Vpp.jpg)

```text:Absolute_Maximum_Ratings
Input Voltage -0.3 to VDD +0.3V 
```

マイナス側に振れているのでバイアス電圧をかけて底上げしてやります.

バイアスを掛けると入力が上限を超えてしまうため,分圧を行い入力します.入力電圧を制限したいときにはリミッタ回路を使ったりしますが今回は省略します.(入力を確かめるため,ブロック図を見ましたが,これも矢印が間違っています.)

ボードにはオーディオ用2連ボリュームがついています.同じようなボードは他のショップでも売られており,その回路図によればAカーブの可変抵抗を示す`A50K`とあります.Aカーブの変化は直線的でなく尻上がりの変化をします.人間の耳はこのような変化が段階的であるかのように感じるため,ボリューム用のつまみに使われています.写真には`B50K`と書いてありますが気のせいでしょう.


## いい感じ
記事についてはどうだったでしょうか.実際にICの使い方を想像してみてその条件に合うかを見ていきました.
使用用途にマッチしているのを確認できたのでポチってみました.輸送事故とかなければいいのですが祈ることしかできません.

この記事を書くにあたっていろいろと情報を集めていたのですが,Wikipediaにて`仕様書(specification)`と`データシート(datasheet)`の用語に違いがあることが書いてありました.これって出典とかあるんでしょうか?