« 2014年6月29日 - 2014年7月5日 | トップページ | 2014年8月24日 - 2014年8月30日 »

2014年7月20日 - 2014年7月26日の1件の記事

2014年7月26日 (土)

心電計プロジェクト:DACのMCP4726でオシロに波形が出た

 前回のブログ記事から20日以上も経ってしまった。それにしても今回の心電計プロジェクトは予想以上に難航している。遅れたのは他にやることがあって時間がなかったこともあるのだが、それでも、やっとのことで心電波形をオシロで確認することができた。これでステップ3の終了である。

201407240009  うまくいかなかった原因は、いつもながら、わかってしまえば、なぜこれに気が付かなかったのかと思うばかりの下らないミスである。まあ、これが面白くて電子工作をやっているようなものだが、それにしても動かなかった時の暗澹たる気分がまだ頭に残っている。因果なものである。

 負け惜しみになるが、こんなものでも問題解決のケーススタディとしては役に立つかもしれない。ともあれ以下はこの20日余りの顛末である。

DAコンバーターを変換基板につけてデータシートを勉強(7/2/2014)
 身体から取り出した微小な電圧をアナログアンプで増幅し、それをAVRマイコン(Tiny861)のADコンバーターで数値化し、デジタルフィルターでハムノイズを除去した。そこまでは良かったが、数値データをグラフにする手間がかかって繰り返しテストができない。

 そこで、DAコンバーターで数値を再びアナログに戻し、オシロで波形をみようと(ロードマップではステップ3)、秋月電子で最近売り出されたDAコンバーターMCP4726を買ってきた。 1チャンネル、12ビットのDACで値段も安い(2ケで¥180)。ディジタル側のインターフェースはI2Cである。

 MCP4726には詳細なデータシートがついているが、ウェブには使用例がどこにも見当たらない。I2Cインターフェースはこれまで色々使っているので何とかなると思うが不安は残る。まあ、人柱になるのもたまには良いだろう。

201407240010  まずはデータシートを慎重に読み込む。マイクロチップ社のICなのでやたら丁寧なデータシートである。86ページもある(職場の裏表印刷のプリンターでやっと印刷)。O-Familyさんのように翻訳してあげれば喜ばれるのだろうが、そこまでの気力がない。

 それにしても、たかがDACなのになぜこんなたくさん機能があるのだろう。I2Cでデータを受け取ってアナログ電圧に換えるだけにしてはEEPROMまでついている。何のためなのか。

 ひととおり目を通しただけで、全部を理解したとはとても言えないレベルだが、単に数値データをアナログに変えるだけのオペレーションならそう難しくはなさそうだ。

 EEPROMの使い道はまだ良くわからない。判然とはしないが、電源断を含む運転を想定していて、前の値を保持しているだけのようだ。コマンドが沢山あって色々なことが出来そうだが、当面は関係ない。ディバイスのアドレスは出荷時に固定で、あとからは換えられない。

 データシートには具体例があるので、数値入力12ビットをアナログ化する手順だけなら間題ない。1ブロックを27ビットとし、頭1バイトをI2Cのマスター書き込み宣言、続いてデータバイト2バイトを送る。それぞれのバイトのあとにACKビットが1ビットづつ付くので計27ビット分を送ると、ディバイスはアナログ電圧をラッチする。

 リニアPCMプレーヤーのミニLCDを動かすのに使ったI2Cライブラリーを持ち込む。これはChaNさんがFatFSのモニターの中でタイマーに使っていたGPIO版を移植したものだ。そっくりソースコードでプロジェクトに放り込み、必要な機能だけを絞っていく。

 沢山、LCD用の関数があるが全部取り除く。I2Cのクロックは、625μsのサンプリング期間に27ビットが送り終える速さにしなければならない。ビットレートを100khz程度で、30ビット->300μsで送れるようクロックを調整する。

I2CインターフェースのDAコンバーターは動いた(7/7/2014)
 Tiny861を載せたブレッドボードの横に、MCP4726を載せて配線する。6ピンしかないので接続はいとも簡単だ。どんな波形が出てくるかわからないので、最初からロジックアナライザーをI2Cの端子、SCL、SDAにつないだままテストに入る。

 おーし、出てきた出てきた。スタートコンディションは出ているようだ。ロジアナのプロトコルアナライザーを早速入れてコードの解析に入る。うむ、これまでUARTに出力していた数値らしい値が送られている。ただ、ビットレートが100Khzにしては遅い。625μsのサンプリング期間を超えてしまっている。

 ロジアナの波形をさらに分析する。どうもクロックSCLのDuty比がおかしい、ソースコードをチェックする。おやあ、delayコマンドが沢山入っているなあ。データを送るところや、スタートコンディションを作るところに無駄と思われるdelayが入っている。

 ミニLCDのときは速度に十分な余裕があったので神経質になっていなかったが、今度はシビアなので、このあたりは直さないといけない。delayコマンドを少しづつ減らしてロジアナでチェックする。余り減らしすぎるとSCLクロックがおかしくなるので慎重に減らしていく。

 何回かのコンパイルで27ビットの送信は、サンプリング期間に収まった。これはもう動いているだろう。ロジアナでの出力はバッチリだ。出力ラインをオシロのプローブにつけて本番実験開始である。

 おやあ、出てこない。入力は完全なのに。あっあっあ、そのピンは出力ピンではなくてVrefピンだ。6ピンしかないピン配置を間違えている。あせるとろくなことはない。気持ちを落ち着けてジャンパーを付け替える。 Mcp4726_i2c

 出てきた、出てきた。それらしいアナログ出力が出てきた。アナログアンプの入力端の操作で上下する。しかし、心電波形らしい波形は全くでてこない。ただ、直流が出るだけ。オシロを2現象にして、アナログアンプの出力と、DAコンバーターの出力を調べる。

 DACは完全に動いているようだ。見事にハムノイズはとれているが、肝腎の波形が出てこない。ハムノイズのレベルに合わせて基線部分は上下するが(これがUARTに出した時に見た脈流だろう)、心電波形らしい鋭いパルスはどこにも見当たらない。ディジタル部は問題ないが、やはりアナログアンプの問題に戻ってきた。

 アナログアンプは、あれから進展はない。相変わらずハムノイズの嵐で心電波形らしいデータはまだお目にかかれない。どこを直して良いのかわからないのだ。暗礁に乗り上げたままである。

音楽教室おさらい会とワールドカップで電子工作はお休み(7/14/2014)
 そうこうするうちに一年に一度の音楽教室の発表(おさらい)会が近づいてきた。所長は、中断もあるが足掛け何十年と楽器(フルート)を同じ先生から習っている。先生のお年はもう75 才、レッスンというよりお年寄りの茶飲み話仲間のようなつもりで教室に通っている。

 ここでは、一年に1回か2回、生徒(全部大人か年配者)を集めた仲間内の発表会を開く。半年がかりで課題曲を仕上げていくのだが、前にも書いたように、この発表会というのが麻薬性の強い行事なのである。誰かに聞かせるわけでもない、単なる仲間内のおさらい会、勉強会という位置づけなのだが、これがなぜかはまる。

 プロになるわけもないのに、先生からは容赦ない指導が加わる。今さらうまくなるわけがないのだがこちらにも意地というものがある。一生懸命にさらう。そのかいあって始めはたどたどしかった曲が、音楽らしくなってくると嬉しいものである。しかしあとで録音を聞くと大抵がっかりする。

 何度さらっても、うまく行かないところがある。音程やリズムもおかしい。先生は、「なぜこんなところではずれるのか信じられない」などと嘆かれると、いくら本当でも、正直、気分が落ちこむ。

 しかし本番は容赦なく近づく。練習が気になって、電子工作はすっかり手が付かないでいる。というのも昔々、発表会でかなりうまい人が、突然あがってしまい最初から最後まで音が出なくて、みんなでじっとうつむいて曲が終わるのを待っていたという恐怖の経験がある。そうならないよう必死に曲を繰り返し練習し、最低限の音はでるようにさらっていく。

 本番である。これまでの練習の成果が試される時だ。何のために何ヶ月も同じ曲をさらってきたのか。これまでの投資が実を結ぶかはすべてこの演奏で決まる。所長は血液型がB型なので、ようするに「安定した不安定」である。吹いてみるまでわからない。

 あがっていないので気分よく吹いていると、不用意なミスが続いて自滅に近い結果になるときがある。そうかと思えば、ガチガチに緊張していても、なぜか調子が上がってきて練習以上にうまく吹けるときがある。

 細かいミスを気にしないで、耐えて吹いていると知らぬうちに難しいところが通過できる。あがってしまうとだめだが、あまり冷静でもかえってうまくいかない。このあたりの回復力は、何と言っても練習量で決まる。だから練習はさぼれない。

 今回は、まあまあで、70%の出来か。電子工作のデバッグは、解決しないと勝利の美酒を味わえないが、演奏は終りさえすればあとは極楽である。ドーパミンがたっぷり放出され、本人は数日は幸せな気分にひたれる。恐らくマラソン完走のあとの解放感と同じである。

 1ヶ月くらいは、楽器をケースから出すのもいやなくらいだが、そのうちいつのまにか取り出して吹いている。そして数カ月もすると、次の発表会の曲の選定がやってくる。あんなに苦しい目をして練習し、会場費やピアニストの謝礼に高い出費をしているのに、なぜかまた発表会に出る気になる。不思議なものである。

アナログアンプ不調。あきらめるか(7/18/2014)
 発表会とワールドカップでとられていた時間が電子工作に戻ってきた。アナログアンプのトラブルシューティングである。両腕からとった微弱な心電波形をノイズの中から拾うにはどうしたら良いのか。

 いろいろ手を尽くしたが、すべてうまくいかない。まずノイズ自体が大きすぎる。ディジタル系をつなぐと電源を入れなくても出力ラインには盛大なノイズがでる。それに20Khzあたりの細かいノイズもあらわれ、これはオペアンプの発振が疑われる。オペアンプをLM358から、LPCMプレーヤーに使ったNJM4580などに換えてみるが事態は改善されない。 201407260011

 DACはうまく動いているようだが、オペアンプの出力がべた(クリッピングされた)な矩形波なのが気に入らない。心電波形がすべて隠れてしまっているのではないか。増幅率が過大で、ノイズと心拍波形が上限を越えれば、ノイズフィルターそのものも動かないはずだ。

 というので、前段の計装アンプ部と、そのあとの増幅部(LPF付)に半固定のVRを入れて増幅率を可変にしてみた。抵抗値を上げて増幅率を落としていくと、矩形波のハムノイズはちゃんとした正弦波に戻った。しかし心電波形らしいものはどこにもあらわれなかった。ウェブの資料では心電波のR波(一番鋭いパルス)はノイズを突き抜けて観測されているが、ここにはそれが出てこない。

 理屈が良くわかっていないので、原因究明の方向が見えないのである。ハムノイズを軽減する方法がわからない。アースなどをつけたり、シールドケーブルを使ったりするのだろうが調べた限り、心電計でこういうことをしている例はない。

 助けを求めてウェブをさまよう。あれから「心電計」だけではなく、「心電計 回路図」で検索すると、以前より多くの回路例を見ることができた。いずれもLM358のような廉価版のオペアンプではなく、高額な計装アンプなどを使った例が多い。やっぱりLM358ではだめなのだろうか。

 段々自信がなくなってきて、仕事の帰り秋葉原に寄り、秋月電子で1ケ¥400の計装アンプLT1167や高精度オペアンプLT1112を買ってしまう。このまま引き下がるのは悔しい。2台目を作ろうという算段である。

201407220001 何のことはない。電極をしっかりつけたら波形が出た!(7/23/2014)
 それが、2台目の制作にとりかかろうとした矢先、解決してしまったのである。あてもなくオシロに電源を入れ、べたな出力電圧を漫然と見ていた時だ。何となく一秒ごとの小さなパルスが画面に出ているのに気が付いた。

 ふーむ、雑音にしてはパルスの出方が周期的だ。これは何だろう、試しにオシロのDCカップリングをACにして、感度を上げてみた。おおー、これは心電波形だ。間違いない。腕に付けた電極を動かすと波形が飛んでしまうが、暫くするとまた波形が戻ってくる。

201407230006  半固定抵抗を動かして増幅率を変えてみる。腕を動かすと波形が乱れるし、筋電流が出るということなので自由には変えられないが、増幅率の大小は関係ないようだ。リップルが矩形波になっていても関係ない。

 腕を机の上でなく、座っている膝の上まで降ろすと波形はさらに強くなった。これは間違いなく心電波形だ。一番鋭いR波だけでなく付随したS波など他の波も見える。1divを100mVまで上げるとくっきり心電波形が見える。

 いやあ、感動である。念願の心電波形である。自宅のオシロで見えている。調子の良い時だと、300mV P-PのR波(一番鋭いパルス)が観測できる。要するに、電極をしばらく当てていると、波形が強くなっていくのだ。

201407230007_2  嬉しくて、家族を久しぶりに工作室に誘い、彼女の心電波形も見てみた。皮膚抵抗が違うのか、夕食のビールのせいか簡単に心電波形が出てきた。やれやれ、何をやってもうまくいかず、あげくにもう一台別のアナログアンプを作ろうとした直前に動いてしまった。

どうしてこれがわからなかったのか分析する(7/25/2014)
 気持ちが落ち着いて、今回のトラブルの集約をしてみる。要は、電極を完全に皮膚に密着させていないことによる入力電圧不足である。実に簡単な最初にチェックするべきポイントである。何故これに気がつかなかったのか。

 人のせいにするには気が引けるが、まず参考情報にこうした注意がなかったのがここまで迷走した原因であることは否めない。銅やアルミは接触部で電気化学反応が出るのでステンレスにしなさいとはあるが、十分皮膚と密着させなさいとはどの資料も書いていない。

 次は、自分が慌て者なので、電極を付けて反応がないと次々に電極をずらして様子を見ていたため、波形を見落としていたこともあるだろう。皮膚と電極の間の接触抵抗は、どうも変化するらしく、暫く同じ個所に密着させていると抵抗が低くなっていくようだ。

201407230008  さらに、1.5mV P-Pの元の心電波を1000倍近くするのだから、DAコンバーター出力は、1V近く振れるはずという思い込みがあった。そのためオシロのDCカップリングでなくACカップリングにして感度を上げるということに思い至らなかった。

 考えてみたら、最初のアナログアンプ出力は、2.54V P-Pだが、ディジタルフィルターのAD変換とDA変換で単位が大幅に変わって来るので、パルスは倍率通りにはならない。調子の良い時は、アナログアンプ出力でも、R波のピークが観測でき、そのときのP-Pはスペックどおり1.5Vを超えているのだ。

 何度も再現テストをして、心電波形がオシロから出ることを確認した。いやあ、苦労したけれど、心電計プロジェクトは難関を突破した。サポーターをもう少しきつくして電極を皮膚に密着させるようにすれば、つけて10秒後には間違いなく波形が出てくる。

 これで、心電計プロジェクトは、次の映像化ステップに移ることができる。こちらは得意のディジタルなので先行きは明るい。I2CのDAコンバーターのソースコードライブラリは、全部が終わってから公開するつもりだが、もし要望があればまだ半かけではあるが、いつでも公開できる。

| | コメント (0) | トラックバック (0)

« 2014年6月29日 - 2014年7月5日 | トップページ | 2014年8月24日 - 2014年8月30日 »