前年

前年は技術的にはエレクトロニクス関係のスキルセットを多少上げることができたのが、自分の中では非常に大きかった。

ソフトウェア関係ではファームウェア書いてIOいじったりするのがアプリケーションレベルではできるようになったが、アルゴリズム関係が根本的に苦手なので、ファームウェアはあまり得意になれそうな気はしてない。

go 言語で自分的には実用的なアプリケーションを書いて毎日使っているので、そういうのは良かった。

これら、残念ながら本業のウェブ開発には一切生かせていないし、ウェブ開発まわりで自分の中で技術的に進歩があったかなというのは Web Audio まわりの信号処理だけで、これまた一切仕事に生かせなさそう。

今年

抱負とか考えても、実際のところ3日も経てば忘れてしまうが思っていることだけ書いておく。

とりあえず、引き続きエレクトロニクス関係でできることを増やしたい。具体的にはアナログ回路まわりの設計を多少でもできるようになりたい。

単純に「おもしろい」という感じのことをしたい。エレクトロニクスに絡むともっと面白い気がしてるけど、それに限らずに、とにかくおもしろいことをして、おもしろいことを共有したい。

冬は寒い。寒いとブレッドボードに向きあったりするのはとても辛い。なので、布団に入っていても回路と格闘できるようにするため、回路シミュレーションツールである LTspice に手を出した。

LTspice は Linear Technology (半導体メーカー) が提供している回路シミュレーションソフトウェアであり、Windows 版と Mac 版がある。Mac 版しか触ってないが、検索すると Windows 版の画面ばっかり出てくる。UI は Windows 版と Mac 版で結構違う。

回路シミュレーションツールは、だいたい全て SPICE というソフトウェアを元にしており、元のソフトウェアの記述形式がデファクトスタンダードになっているっぽい。LTspice は比較的使いやすい UI 及び、自由度が高く、なおかつ無償のため、アマチュアで良く使われるっぽい。

ハマったところ

GND がない

Mac 版の場合、ショートカットを覚えないと、絶対に呼びだせない機能が存在する。特に罠なのは GND で、Components には存在しないし、メニューから追加できなくて困るが、キーボードショートカットの「G」で配置できる。

いずれにせよキーボードショートカットを覚えないと著しく作業効率が悪いので、公式に提供されているpdf を開いておいたほうがよさそう。

RUN できない

何も考えずに RUN しても、エラーしかでない。Windows 版だと親切なダイアログが出るらしいが、Mac 版では出ない。

シミュレーションコマンド を、キーボードショートカットの「S」を押して出てくるダイアログに入力して、画面内に配置することで、RUN が可能になる。

この S で出てくるダイアログの入力エリアを右クリックすると Help me Edit というメニューがあり、シミュレーションコマンドを対話的に入力できる。

RUN しても結果がでない

RUN をすると、回路図上の任意のポイントで、ポインターがプローブの形に変わる。クリックするとその部分の電圧または電流が見れる。続けで他のポイントをクリックすると、波形が追加される。同じポイントを2度クリックすると、それだけを表示させることができる。

  1. トップ
  2. tech
  3. 冬だし LTspice に入門するぞ!!

デフォルトで入っていないオペアンプを使いたい場合、追加する必要がある。


部品追加の考えかた

オペアンプの場合、最初から、汎用の opamp2 というシンボルが用意されている。これは中身(マクロモデル=等価回路) の設定されていないテンプレみたいなやつ (だと思う)。

この opamp2 を配置した上で、Value にマクロモデルの名前を指定することで、指定したマクロモデルを持つオペアンプにすることができる。

ただ、マクロモデルを適当なディレクトリに置いただけでは読みこまれないので、SPICE directive を追加し、.lib コマンドで使いたいライブラリを読みこむ必要がある。

また、提供されているマクロモデルのピンアサインが、opamp2 と一致するようにする必要がある。

オペアンプの追加

よく使う JRC のオペアンプを追加する。今回は NJU7043 を使いたかった。

JRC はマクロモデルで無償提供しており、これは (本来の対象ではないが) LTspiceでも使うことができる。展開して適当に配置する (lib/sub 以下に配置すると .lib コマンドのとき比較的パスを指定しやすい)

mv ~/Downloads/Operational_Amplifiers_Macromodel ~/Library/Application\ Support/LTspice/lib/sub/JRC_OPAMP

そして、

1. Components から opamp2 を選択して配置する
2. 配置されたオペアンプを右クリック
3. Value を nju7043_s とする (サブサーキット名と一致させる)
4. S を押して SPICE directive を追加し .lib JRC_OPAMP/NJU7043/nju7043_2.lib とする (パスを指定)

OK

サブサーキット名は

grep SUBCKT JRC_OPAMP/NJU7043/nju7043_2.lib 

で名前とピン配置をさがせる。

この .SUBCKT の指定は、opamp2 とピンの順番を一致させる必要がある。ピンの名前 (VDD とか VSS とか) は元のままで順番だけ一致させる。opamp2 のピン配置は右クリックして Open Symbol して、Netlist Order を全部見ていくとわかる (一発でわからない?)

結果として

.SUBCKT nju7043_s  IN+ IN- VDD VSS OUT

みたいになる。

こんな感じ

このオペアンプはオフセット電圧が最大10mVと結構大きいので、それがよく出てる(と思う)


  1. トップ
  2. tech
  3. LTspice で任意のオペアンプを追加する

最近 NXP Smartphone Quick-Jack Solution というドキュメントを読んだ。要約すると

  • スマフォのオーディオジャックに繋ぐアクセサリについて
  • 電源を音量最大にしたヘッドフォン端子の R チャンネルからとる
    • チャージポンプダイオード昇圧 + LDO レギュレータで 3.3V を得る
  • L チャンネルをスマフォ → マイコンの通信経路とする
  • マイク入力をマイコン → スマフォの通信経路とする

というもので、特に電源をヘッドフォンジャックからとってしまおうというところが、自分の中では結構びっくりだった。確かにヘッドフォンを駆動しているわけで、多少の電流はとれるだろうけど、マイコン動かすほどとれると思っていなかった。

このソリューションの良いところは

  • 電源と信号線と一括で接続できてお手軽
  • オーディオ出力とマイク入力でコミュニケーションするので、WebAudio からでも応用可能

ウェブエンジニア的には後者は特に夢が広がるところで、デバイスを用意してもらって、繋いでもらえれば、普通のウェブページから直接ハードウェアを殆ど面倒な手続きなしで利用できる (マイク入力が必要な場合だけブラウザの確認画面がでるぐらい)。もし何かしら出力してマイコンに処理させたいだけならば、権限取得的なことが一切いらない (ただし、音量は上げてもらう必要がある…)

やってみた

やってみたといっても、特に気になる電源部分だけ。

手元にある HTC J butterfy (旧) を実際に使い、オーディオ出力を最大にして、どれぐらい電流をとれるか、LED を光らせることはできるか? を検証した。

気になるところ

とりあえず、無負荷時の出力をとっておいた。こんな感じで電圧は出ていた。

回路

回路図書かずにさくっとやってしまった。

NXP のドキュメントだとチャージポンプ+LDOなのだが、チャージポンプ部分で無極性10uFのコンデンサを要求しており、手元にないので、この通りやるのはさっそく面倒になった。

なので、効率は落ちると思われるが手元にあるもので

  • 普通に全波整流を行う
    • 一応ショットキーで4本で整流
  • 3.3V へステップアップするICに突っ込む
    • HT7733A というICで効率は最大でも85%

という方法で3.3Vを得た。

これに200Ωの抵抗と高輝度な白色LEDを繋いだところ、冒頭の写真のように十分 (というか眩しく) 明るく光ってくれた。最近のLEDは微小な電流でもクソ明るい…

LED 光らせてるて安定した状態でこんな感じだった。黄色はステップアップ後の電圧 (ちょっと3.3Vより下がってる)、赤色は整流後の電圧 (600mV程度になってる)。

結果

適当な大きめの抵抗負荷をかけてみた感じ、今回の構成では最大でも5mA程度が限界のようだった。

あとやっていて気付いたのだが、20kHz の出力を使うとなぜかしっかり電流がとれず、10kHz のほうが良い結果になるみたいな現象があった。ちょっとよくわからない。

今後

突発的にやる気を出して2時間ぐらいでやったので、もうちょっと検証したいが、またやる気がでたらにする。

NXP のドキュメントのように大きなチャージポンプを組むほうが効率が良い?のだろうと思うのでやる気がでたらやりたい。

WebAudio でのコミュニケーションは作ったらまぁできるだろうという感じだけど、これもやる気がでたら (つまり良いアプリケーションが思いついたら) やりたい。

  1. トップ
  2. tech
  3. よしお前ら!!! WebAudio で LED を光らせるぞ!!