今日ももくもくとコーディング。少し前にミーティングで決まった仕様変更のリクエスト群(「こっちに移動してもらったボタン、やっぱり前の場所に戻してくれ」とか、「初回にこの機能を実行しするときにはあっちの機能は自動的にOFFにしてくれ」とか)に沿ってGUI画面を変更している。難しいところはあまり無いけど、ややこしくて面倒くさい。まあこういう変更が起こるのはしょうがないし、仕様変更がしやすいようにソフトウェアの構造を考えてはあるけど、「どってことないでしょ。すぐできるでょ。」とか言われるのはなんだか嬉しくないものだ。
 夕方、この前一区切りつけて動作検証に渡した装置で電圧が低く計測される問題が見つかった。何が悪いのか分からないから(つまりソフトのバグかも知れないから)一緒に見てくれと呼ばれた。
 こういう場合、まずは回路とソフトのどちらに問題があるのか切り分ける。具体的には、回路に適当な既知の信号を入力して、信号が回路を経てADコンバータまで想定通りに来ているかを確認する。この時点で異常があれば回路の問題だし、そうでなければADコンバータもしくはソフトウェアの問題ということになる。
 今回もそうやって回路に沿って電圧を調べてみると、ADコンバータに入る電圧が想定よりちょっと小さい。そこでADコンバータから遡って順に電圧を調べていくと、ADコンバータ直前の保護用の抵抗で電圧が発生していることが分かった。
 抵抗で電圧が発生するということはつまり、この抵抗で電圧降下が起こっているというわけで、電圧降下の分だけADコンバータに入力される電圧が減ることになる。
 さて、電圧降下が起こるということは抵抗に予想以上に大きな電流が流れているということになる。抵抗の後にはADコンバータと電圧クリップ用のダイオードがあるだけなので、このどちらかの抵抗値が低くて電流を吸い込んでしまっているのだろう。
 と言うわけで、とりあえずダイオードを外してみたところ、あっさり電圧が正常になった。つまりこのダイオードが良くなかったわけ。このダイオードはADコンバータに規格以上の電圧がかからないようにADコンバータと並列に逆接続されている。つまり逆電流がずいぶん大きい(0.5mAくらい)。
 調べてみると、同様の失敗事例があった。

 今回の回路でも保護用にツェナーダイオードが使われていたのだが、ツェナーダイオードはツェナ電圧が低いほど漏れ電流が大きいらしい。今回使われていたのも 3.3V と低電圧のものだったので漏れも大きかったのだろう。
 なんにせよ、こういう計測用電圧の制限にそのままツェナーダイオードを使うのは失敗
 代わりの方法としては、バリスタを使うとか、普通の小信号ダイオードを複数直列に使うとか、普通の小信号ダイオードにオフセット電圧を与えて使うとか、…などがあるらしい。その辺は回路担当に任せるとして、ともかくソフトのバグ疑惑が晴れたので退散した。