● 実験テーマ89

「心電計・計装アンプの実験」
(LT社の計装アンプ:LT1167を使った心電計アンプの回路例+dsPIC30F+DACで心電波形を自作オシロに表示してみました。)

以下、この実験の顛末記です。

■ 2017.3.25
  ・温湿度・気圧計プロジェクトが一段落したので、次のテーマを考えないといけない。
   久しぶりに、アナログアンプ系にしようと、前からやってみたかった心電計の実験にしようと思う。
   心電計というと生体センシング(医療系)の分野で、敷居が高そうなイメージがするが・・・
   計測分野のヘッドアンプとしては、平衡差動入力・不平衡出力の、計装アンプが、一般的である。
   私自身も、正社員時代には、工業計測(工業はかり)分野で、ロードセル入力の、計装アンプを、
   いじっていたので、その部分の経験値は少しはある。
   しかし、生体から発生する、1.5mVp-p程度の微小電圧(ロードセルの場合は、ブリッジに印加電圧を
   掛けられるので、ロードセル出力は、10mV位になる。)を入力してノイズ少なく増幅するのは、
   そんなに容易なことでないと思う。
   しかし、「心電計 回路」でWEB検索すると、このテーマで電子工作をされている方が、結構いらっ
   しゃる。
   その中でも、トラ技とか、Interfaceにその関連記事を載せている、「私設研究所ネオテックラボ」
   の、上田さんの記事が、図解入りで解り易く、非常に参考になる。
   このサイトで紹介されている計装アンプ例は、ICL7621或いは、LM358の単体のOPアンプを
   組み合させて構成されていて、実装が大変そうである。
   他のサイトで、「作りながら学ぶ整理心理学」さんのは、LT社(リニアテクノロジー)の、計装アンプ:LT1167
   のデータシートに載っている、サンプル回路(EMG用途の神経インパルスアンプと称してる)を、多少の
   変更(電源を±3Vから、±5Vに変更/Rg=6kHz→系列にないので、5.6kに変更等)でそのまま使って
   いる。
   これだと、全て、LI社のOPアンプ 2個で済むし、外付けのGAIN抵抗:Rgを実装するだけでGAIN設定
   出来る計装アンプを使っているので、実装が割と楽に出来そうである。
   また、2個のOPアンプ(LT1167, LT1112)共に、秋月で購入可能である。
   マイナス電源(-5V)が必要だが、いつもの、LTC1144(秋月で購入可能)を使えば、全てLT社の
   OPアンプでいける。
   主電源の、+5Vは、秋月の、DC/DCモジュール:5.0V_STEPUP_DIP_VER2(HT7750A使用)
   単3エネループ 2本で駆動すれば、こじんまりとしたセットで実験が出来る。
   心電計アンプ部は、これで行くことにした。


■ 2017.4.2
  ・アンプ部のユニバーサル基板の実装が上がった。
   DC/DC電源基板部は、前作(サーミスタ温度計)の、3.3V DC/DCモジュールを、5V用モジュールに
   差替えてそのまま使うことにした。
   また、心電計プローブ部の、3本の電極ケーブル(普通のビニール線でシールド線は使わなかった。)
   も作成した。
   電極は、ホームセンターのダイソーで売っていた、家具固定などに使う、L型金具を流用した。
   買った時、あまり材質を気にしなかったが、後で、鉄+ニッケルメッキということが判った。
   まあ、安かったのを選んだまでだが・・・
   それから、手首に電極を固定するのに、サポータも購入した。

  ・早速動作チェックに入った。
   プローブ未接続で、電源電圧確認。
   +5.01V, -4.77Vで、OK.

   まずは、F.G(自作DDS低周波信号発生器)にて、100Hzサイン波を入力して、自作オシロで出力波形を確認した。
   アンプのトータルGAINは、約1000倍(正確には、1076倍)。
   生体から検出される電圧は、1mVp-pから、1.5mVp-p程度だが、自作のF.Gではそんな微弱な信号を、ノイズ少なく
   出せないし、自作のオシロの方も、50mV/Dが最小レンジなので表示できない。(市販のオシロでも、1mVを正確に読むのは難しい)
   なので、アンプ出力で、6Vp-pになるように、入力を合わせた。
   入力は、約6mVp-pとなるはずだ。これなら何とか感覚的だが、入力レベルが判るはずだ。
   2現象オシロV6で、観測した結果を以下に示します。
   尚、差動の、-IN側を、GNDに落として測定しました。
   結果は、目立つノイズもなく良さそうである。

   尚、LT社のサンプル回路で特徴的な、アクティブGND(Right・Leg Drive:左足駆動とも言うようだ)の実測レベル
   であるが、解放時で、-4Vが出ていた。
   ここのアンプの入力には、GAIN抵抗:Rgにパラ接続された抵抗の中点が接続されていて、そこの電位は、0.7V
   だった。
   左足に電極を接続した状態では、0Vに近ずき、0.5V位だった。 

  ・次に、周波数特性も、自作FRAもどきで、取ってみた。
   このアンプには、Fc=0.3Hzの、HPF(重要でないDC分カット)と、1kHzの、LPFが実装されている。
   
自作FRAもどきでは、10Hzからのスキャンなので、0.3Hzでのカットオフは確認できないが、
   概略の周波数帯域の確認としては十分である。
   以下に結果を示します。
   これもよさそうである。


■ 2017.4.3
  ・電極を装着して、アンプ出力に心電波形が出るかやってみたが?
   出力が飽和して、矩形波になることがある。しかもその周期が、20mS。
   正常な心拍数なら、私の場合、たぶん、70bpm〜 90bpmなはずなので、90bpmとして、90/60= 1.5Hz= 0.67秒
   になるはず。
   ただ、その飽和した波形に混ざって、心電波形の面影が観測されることもある。
   これは、その飽和した矩形波は、商用AC電源の誘導ノイズ(関東地区=50Hz(T=20mS)であることが判った。
   どうも、電極と皮膚の間の接触が悪いと、誘導を拾い易いらしく、サポータの上からさらに、輪ゴムで補強固定
   するようにしたら、P波(心拍インパルス)がノイズから頭を出し、その周期を確認できた。
   最初の確認には、自作のモノクロオシロ:Scope V2の、500mS/Dレンジを使った。
   このレンジの、0.5秒目盛幅が広く見易いサンプルが取れた。
   以下にそのサンプルを示します。
   電極の装着から時間が経つと、次第に皮膚との接触抵抗が減少してくるのか、AC誘導ノイズも減少してくるようです。

   この心電波形に重畳してくる商用AC誘導ノイズの周期を確認する為、PIC24FGCシリーズで作った自作オシロ
   でも確認してみました。
   以下の通り、20mSであるのがはっきり判ります。

  ・次の段階では、この誘導ノイズを、ノッチ(BRF)フィルタで取り除く実験をしてみたい。
   これには、ハード的に、CR+ボルテイジ・バッファによる、BRFとする方法(このサイトのPDFが参考になります
   と、ソフト的に、移動加算(移動平均)を行ってノイズキャンセルとする方法があります。
   
上田さんの記事では、PIC16Fを使っての、このアルゴリズムについての詳細が載っています。
   この方法がコンパクトで良さそうなのですが、せっかくdsPICで処理するので、DSP機能を使って、BRFを構成し
   その後、PWMモジュールに渡してLPFを通過させアナログ信号に変換して出力する方法にしました。
   (最終的には、S/Nの良いDACで変換したが、最初は手軽なPWMで試した)

   最初、2次IIRフィルタ(バイクワッド)で試した。
   FIRで構成するより、フィルタ係数が少なくて済むので、こちらにした。
   以前やった実験テーマ75:「各種デジタルフィルタの実験」の記事と、
   
岩田氏の著書「dsPIC基板で始めるディジタル信号処理」を参考にしました。

   以前の例では、Fo=2kHzのBRFをやっているので、これを、Fo=50Hz用のフィルタ係数に変更してみる。
   係数は、ツール(DSPLinks)で算出した。
   変更後、自作FRAもどきで、F特を確認してみる。


■ 2017.4.5
  ・どうも、低い周波数での、BRFが上手く行かない。
   シュミレーションと違い、50Hzで、ディップしないし、シャープなスロープにならない?
   (シュミレーションでは、ディップ点:Foを、直接設定出来ない。-3dB点の帯域周波数を、2点設定するようになっている)

  ・この後、設定を変えたり、FIRでも試したりしたが、思うような特性になってくれない。
   そこで、もう一度、岩田氏の著書をよく読んだら、39ページに、Appendix Aとして、「くし形フィルタ」についての
   記事が目に留まった。
   読むと、元の信号を遅らせて、元の波形と加算するのが基本動作らしいことが書かれていた。
   この原理は、前記した、上田さんの記事の、
移動加算(移動平均)によく似ている。
   元の信号(ターゲットの50Hz)を、半周期:10mS遅延させて、加算すると、元の信号がキャンセル(出力=0)に
   なるという理屈である。
   DSPライブラリに用意されている、遅延配列を一個ずらしてコピーする関数:VectorCopy()を使って実現してる。
   1kHzのソース例が載っているので、これを、50Hzに変更して試してみる。
   これで、BRF特性は減衰量・スロープともにシャープな特性になった。
   ところが、電極プローブを装着し、生体センスして自作オシロで、心電波形を確認したところ、商用50HzACノイズ
    は、1/3程度低減されたが、未だ相当残っている。
   この時の、条件は、ADサンプル周波数=16kHz, PWMキャリア周波数=16kHz


■ 2017.4.6
  ・現在は、サンプル=16kHzで、50Hzノイズ入力を、10mS遅延させて、元の波形と加算している。
   (DelayLine[0]と、DelayLine[160]を加算して出力)
   16kHz(62.5uS)サンプルなので、サンプル定理により、8kHz入力までは、AC誘導ノイズ以外
   の高域ノイズの再現が可能になってしまうので、その成分が出ているものと思われる。
   心電計では、1〜100Hz程度の帯域があれば十分と思うので、1.6kHz(625uS)サンプルに
   変更して試してみる。
   DelayLine[0]と、DelayLine[160]を加算して出力してたのを、[0]と[16]に変更。
   これで、AC誘導成分は殆どなくなった様(希望的観測?)で、残るは少し速い成分のノイズ
   だけになった感じ。


■ 2017.4.7
  ・電極の材質によっても皮膚との接触抵抗が変わってくる。
   WEBの説明によると、ステンレス製(現在のは、鉄+ニッケルメッキ)が良さそうなので、少し幅が広い
   ステンレス製の、L型アングルに変えて試してみる。(やや高価ではあるが・・・)

  ・心電計アンプ出力では、鉄+ニッケルメッキ製アングルより、ややノイズが少ないようである。
   但し、電極を装着してから、約10分ほど経たないと、安定した波形が得られなかった。
   たぶん皮膚と電極が馴染む(接触抵抗が減る)までに時間が掛かるのだと思われる。
   また1人で波形写真を撮るのが難しい。
   今回は、自作オシロをシングル・トリガモードにし、携帯用の孫の手を使って、READY SWを押し、そっと
   そこから手を離してトリガを待つ方法で何とか撮ったが。(その時、腕に力が入ると筋電図まで撮れてしまう。)

   DSPによるBRF(50hZノイズくし形フィルタ)を通過した後の波形は、鉄+ニッケルメッキ製と比較して
   それほど差異は無かったが、電極と皮膚との接触状態が良い時は、かなりノイズが少ない波形を
   確認出来た。(現在の処理系の流れは、心電アンプ出力→ADC→フィルタ処理計算→PWM→LPF)
   ただ、もうちょっとノイズの少ない波形が見たい。

  ・残ったノイズは、PWMのキャリア周波数:16kHzに起因するものかもしれない。
   アナログ信号に復調するのに、PWMでなく、DACを使えば、S/N(振幅精度)が改善するかもしれない。
   これを試してみた。
   FRAもどきで、BRFのF特を確認したら、ディップ周波数:50Hzでの減衰量が、-36dBに増えていた。
   以下に、処理系(
心電計アンプ出力→ADC→フィルタ処理計算→DAC→LPF)各部の波形を示しました。
   画像をクリックすると、100%に拡大されます。
   dsPICを接続した状態の、心電計アンプ出力は、無負荷の時と比較するとかなり、AC誘導ノイズレベルが
   増えていることが判ります。
   この状態で、処理系を通過すると、綺麗にその成分が除去されていくのが良く判ります。
   最終波形も少しはシャープになったようです。
   今回の実験はここまでとします。


<最終回路図>
 ・こちらから、どうぞ→ 「心電計アンプ実験回路」


<最終ソース>
 ・こちらから、どうぞ→ 「dsPIC30F_CombFilter_50Hz.c」 (遅延+加算による、BRF(くし形フィルタ)の、メインソース)

※ プロジェクトを組む時に、DSPライブラリの登録が必要になります。
   これについては、実験テーマ77の末尾を参照してください。


← 実験テーマ1に戻る   TOP PAGEに戻る   実験テーマ90へ →