● 実験テーマ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へ →