● 実験テーマ92

「PIC16F_心電計の、P板化」
(基板製造外注先として、初めて、中国深圳市に工場を持つ、Fusion PCBを使ってみました。)

※ 170703:
   ソフトを更新し、_V2aとしました。
   ※ 心拍数の表示を追加しました。

  ・6月29日からの記事を参照してください。


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

■ 2017.5.17
  ・
My HPの、問合せフォーム(「Nobosan_HPに関する連絡の件」)に、Fusion PCBから、依頼の
   メールが届いた。
   要約すると、以下のような内容だった。
   「5月4日にfusionの日本語サイト(https://fusionpcb.jp)が営業に運びになりました。
   もしよかったら、弊社のFusion PCBへレビュー記事をお書きいただけませんか。
   日本の皆様に格安のプリント基板をご紹介いただければ幸いと思います。
   御礼として、弊社のクーポン$20をお送りいたします。」


■ 2017.5.18
  ・突然の昨日のメールで、正直少しビックリし
た。
   「
弊社のFusion PCBへレビュー記事」というところが少々気になったので、メールで確認してみたら、
   Fusion PCBを利用しての基板作りの過程(顛末)を記事にして、HPに写真入りで紹介すれば、
   良いとのこと。
   尚、クーポン$20は、P板料金のみにしか使えない。送料は別払いである。
   しかし、通常、10枚・2層・寸法≦100x100mmの、試作で、$9.9のところ、現在キャンペン中なのか、
   $4.9と、かなり格安になっている。

   Fusion PCB(SeeedStudio社の、Fusion PCB課)は、前から中国の格安の、基板屋さんという認識で、
   いつかは利用しようと思っていた。
   サイトが英語なのと、私が主で使っている P板設計ツールの、EAGLE+CAMソフトで生成したガーバーを、
   そのままでは使えないこともあり、国内の基板屋さんに発注していた。
   しかし、いつかは、
Fusion PCB対応のガーバー作成のノウハウを覚え、発注したいという思いはあった。
   今回、
Fusion PCBの日本語サイトも運営が始まったようなので、これを機会に、挑戦しようと思う。  
   丁度、実験テーマ91の、心電計のユニバーサルでの実験が一段落したので、心電アンプと一体化して、
   P板化しようと思う。

  ・P板化に際しては、ハードの追加を考えている。
   たいした追加ではない。
   スライドSW 2個の追加。以下の2点です。
   SW3:時間軸レンジ: 1秒/Dと、0.5秒/Dの切替え(今迄は、P_ON時の、READY SWの状態で判断していた。)
   SW4:トリガレベル: 4Vと、2.5Vの切替え(新規) 

   また、P板設計ソフト(回路図CAD+レイアウトエディタ+CAM)は、無償版Eagleを使うので、
   前回のユニバーサル版で使った、GLCD: SG12864ASLB-GBは、サイズが大きくて、無償版で使える
   最大寸法の、100mm x 80mmでも、これだけで一杯になり他の部品が乗らない。
   なので、コントローラ互換であるはず?の、小型版(54mm x 50mm)の、TG12864E-01XWBVを使う
   ことにする。
   これなら、100mm x 80mmの中に、全ての部品が収まりそうである。


■ 2017.5.19
  ・本番に使う液晶について検討してみた。
   本当に、
コントローラ互換かちょっと心配。
   調べると、今迄使ったことのある、大型の、GLCDは2種類(緑ベース:SG12864ASLB-GBと青ベース:TG12864B-02WWBV)
   で、緑のコントローラは、AT89C52/ 青のコントローラは、SBN6400G と異なるが、同じライブラリで動かしている
   実績あり。
   今回予定している小型のGLCD:TG12864E-01XWBVのコントローラは、SBN6400Gであるので、たぶん
   動くと思われる。
   念のため、手配して、今のユニバーサルで、動作確認してみることにした。

  ・Eagleを、久々にいじる。
   Eagleで設計するが、ポイントは、DRCの時、Fusion PCBの、ルールファイルを適用すること。
   このファイルは、サイトからダウンロード出来る。
   なので、今回は、最初は今迄通りパターンを引いてみて、Fusion PCBのルールを掛けた時、出るエラーを
   無くしていけばよいかも。
   まあ時間がある時に、あらかじめそのルールを、まとめておくことも必要と思うが。

   まずは、新規パーツの登録から入らないと、先に進めない。
   今回、新規登録の部品は、9点ほどで結構ある。
   今日は、手始めに、FH2-1X20SBG (20X1_PIN_SOCKET_2MM_PITCH)を済ます。


■ 2017.5.21
  ・
小型のGLCD:TG12864E-01XWBVが、現行と同じライブラリで動くか確認してみた。
   結果、コントラストVRを少し上げたら、表示が見え、正常表示を確認。
   下にその時の写真をアップしました。(保護シートを付けたまま撮ったので、ちょっと見にくいですが・・)

   ※ 同じライブラリで動いた。ここで、SG12864Aとの違いを整理してみた。
      @ コントローラの型番が異なるが、互換だった。
         SG12864A→ SBN6400G
         TG12864E→ S6B0107相当
      A Vee(Vout)が異なる。
         SG12864A→ -4.8Vtyp
         TG12864E→ -10Vtyp
      尚、ピンアサインは、両者全く同じ。

   ・今日の新規登録は、FH2-1X2SBG(2X1_PIN_SOCKET_2MM_PITCH)のみ。


■ 2017.5.22
  ・今日の新規登録は、以下の3点
   @ JACK-PLUG-MARUSHIN(M04-730A0)
   A TRIM_POT(3386K)
   B SLIDE_SW(SS12D01)


■ 2017.5.23
  ・今日の新規登録は、以下の4点 これで新規登録は完了。
   @ 
PIC16F1938(DIL28-3)
   A 
LT1112(DIL08) 
   B 
LT1167(DIL08)
   C L(インダクタ: AL0307)


■ 2017.5.24〜 2017.5.26
  ・
回路図入力完了・目視チェックOK
   NET及びBOMリストチェックOK
   ERCチェックもOK (Errorが6つ出たが、承認できるエラーなので承認する。


■ 2017.5.31
  ・部品配置まで終了

  ・パターン配線に移る前に、Fusion PCBの、DRC(Eagle Design Rule404)と、My DRC(CQ_drc_set.dru)の
   差分を把握しておく。
   ※ 主なルールでの差異で、気にしなければいけないのは、最小パターン間隔= 0.006inch= 0.1524mm(My DRC= 0.005inch= 0.127mm)
   この他のファクターでも、多少異なるが、許容範囲内。
   なので、今迄通リの感覚で、クリアランスだけ注意して、パターンを引いて行けば、何とかなりそう。
   パターンを引き終えた時の、DRCファイルを、Fusion PCBのにして、チェックし、Error対応すれば良い。
   (ガーバー(CAM)も異なるが、それは後ほどに。)


■ 2017.6.2
  ・
ベタグラ生成〜ビア打ち〜シルク整理まで完了
   (この時点では、気が付いて無い問題が、2点ほどあったが、これは後で説明します。)


■ 2017.6.3
  ・WEB記事などに、Fusion PCBから指定の、オーダー番号を、シルクで入れるというのが書いてあった
   記憶があったので、まずは、見積り依頼が必要と思い、依頼をしようと、もう一度、上画面を眺めている時、
   L1(インダクタ)のシルクが、裏シルクになっていることに気が付く。(上写真、右下の、C2-C3間の部分)
   調べると、Pac登録時には、21tPlaceで問題なし。
   ところが何故か、パーツを置く時に、Mirrorを掛けたまま置いてしまったようだ。
   これを直すのは、ちょっとやっかい。
   単に、一度ボード上で、L1の両ネットをリップアップしてから、ミラーのチェックマークを外すと、
   シルク(コイル)の向きは正常だが、クロス配線になってしまう。
   当然、これを、ローテ―トで回転させれば、ストレート配線になるが、コイルシルクが上下逆さになって
   見栄えが悪い。(結構、美観を気にする方なので・・・)
   結局、あまりやりたくなかったが、回路図に戻って、L1の両端ネットを切ってから、シンボルにミラーを
   掛け再度、ネットを繋いだ。
   これだけだと、デジグネータ(回路記号)が左右ひっくり変えるので修正。
   念のため、この時点では、セーブせず、ボードに戻ると、ちゃんと、部品面実装の部品面シルクに
   なっていた。
   ここで、ネットを繋ぎ直し、セーブでOKになった。
   そして、回路図に再び戻って、上書き保存した。(この時、ワーニングもエラーも発生しなかった。)

  ・見積依頼の時には、ガーバーデータ(ZIP圧縮)も準備が出来ていて、送信しないといけないようだ。
   Fusion PCBの発注番号を入れるというのは、過去の話なのかは不明だが・・
   とにかく、Fusion PCB向けガーバーデータ生成方法を、WEB検索してみることにした。
   自分の知識では、Eagleの、CAMで生成したガーバーデータの拡張子を、Fusion PCB向けの拡張子に変更
   して提出すれば良いような気もしているが、Fusion PCBサイトから、専用の、CAMソフトをダウンロード
   出来る様なので、それでやってみることにした。
   WEB検索したが、1つのサイトで、なかなか整理された形で記事が書かれているところは見当たらなかったが、
   結局、「Web nucky」さんのサイトが、かなり参考になった。
   手順の概要をまとめると以下である。
    @ Fusion PCBサイトから、専用の、CAMソフトをダウンロードし、インストール
    A Seed_Gerver_Generata_2_layer.cam を、Eagle-camディレクトリ下にコピー
    B Eagleメイン画面- CAM_Jobs- Seed_Gerver_Generata_2_layer.camをダブルクリック
    C Eagleの、Boardファイルをオープン
       [File]- Open- Board- ボードファイルをセレクトし開く
    D 設定は特に変更しないで、[Process Job]をクリック
    E CAMプロセッサをクローズ
    F Projectフォルダ下に、ガーバーファイルが出力されている。
    G シルク文字の太さを変えないのであれば(この時点では、そう思っていたが後日変更)そのまま
       発注に必要なガーバーデータを、ZIPファイルにまとめる。以下の、8ファイル。
       ・**.GBL: 半田面パターン(Eagleの場合: sol)
       ・**.GBO: 半田面シルク(Eagleの場合: pls)
       ・**.GBS: 半田面レジスト(Eagleの場合: sts)
       ・**.GML: 外形線データ(Eagleの場合: out)
       ・**.GTL: 部品面パターン(Eagleの場合: cmp)
       ・**.GTO: 部品面シルク(Eagleの場合: plc)
       ・**.GTS: 部品面レジスト(Eagleの場合: stc)
       ・**.TXT: ドリルデータ(Eagleの場合: drd)
    ➈ これを、Fusion PCBに読込ませる。
    I 注文画面にある、[Gerber Viewer]を開くと、簡単な完成イメージがつかめる。
       尚、詳細確認は、今迄使っていた、CADLUS Viewerでも確認出来る様なのでやってみる。

  ・ CADLUS Viewerで確認してみた。
   大方は、OKなようだが、ビアが見えない?(マスクされている?)
   例えば、ビア打ちのところを見ると、ベターで埋もれて見えない感じ。
   ビアのネットは、ちゃんとベタグランド(DGND or AGND)に接続されていることを確認。
   CADLUS Viewerだと、HOLEまで確認出来ない。


■ 2017.6.4
  ・CADLUS Viewerでなく、フリーのガーバービューア「gerbv」を使ってみることに。
   これだと、ホールまで確認出来る。
   gerbv-2.6.1をダウンロード→ インストール(exeファイルを実行)してみた。
   やはり、全てのホールは、ビアを含め表示されているが、そこにはレジストが掛かってしまっている。

  ・この件を、WEB検索してみた。→ このサイト: すzのAVR研究: Fusion PCB
   Fusion PCBの、ガーバーCAMの場合、何も指定しないと、ビアがレジストされてしまうとのこと。
   これを回避するためには、Eagleで、ビアを置く時に、infoで、stop→ onに設定(これでビアがレジストマスクされる)
   すればよい。
   これで上手く行った。(Chang→ stop→ onで、当該ビアをクリックしていけば効率的に変更できる。(計33個あった)


■ 2017.6.5
  ・この、gerbvなかなか使い勝手が良いが、レイヤ等の設定保存が上手く行かなかった。
   たぶん環境の問題(私の環境:64bit版 windows10)と思っている。
   或いは、バージョンが一つ古いせい?
   最新は、gerbv-2.6.2('17/3/25)であるが、未だ試してない。
   とりあえず今回は、先に進めることにする。

  ・ここで気になっているシルク文字の太さであるが、Fusion PCBの規定だと、最小0.006inch= 6mil= 0.1524mm
   である。
   シルクファイルを見てみると、最小2milのがあったので、今迄通リ、全て7milに統一することにした。

  ・念のため、新規登録部品の内、GLCDと、DCジャックの、フットパターンが、ガーバーと合っているか、ビューワ画面
   を原寸で、プリントアウトして照合してみた。 OKであった。

  ・これでやっと発注する準備が出来た。
   Fusion PCB 日本語サイトを使っての発注を試してみた。
   手順を簡単にまとめてみた。→ この手順で、無事発注が済んだ。
    @ 見積+ガーバー圧縮ファイル送信
    A Fusion PCBの、ビューワで確認(かなり見易いビューワだと思います。)

    B カートに追加ボタンをクリック

    C 追加が成功しましたと表示後、カートアイコンの隣に、点数表示
    D お支払いに進むボタンをクリック
    E ショッピングカート画面に移行し、安全に支払いボタンをクリック
    F 配送先情報を入力し、この住所に配送ボタンをクリック
    G ログイン画面になる。
    ➈ 配送先住所が確定し配送業者選択画面になる。
    I 今回は、FedExを選択してみました。($17.31/ 4〜8日)、続くボタンをクリック
    J 支払方法に進む。予め登録済み8のPayPalを選択しました。
       今回はクーポンを使うので、チェックマークを入れ、お支払い手続きに進むボタンをクリック
       (支払方法に進む前に、見積送り状(リンク)をクリックすると今迄の見積状況が確認できる)
    K PayPalのログイン画面になる。
    L PayPalでの配送先と支払方法(クレジット)の確認画面になる。
    M 同意して続行ボタンを押し、成功すると、FusionPCBサイトに戻り「支払いが成功しました」と表示される。


■ 2017.6.6〜 2017.6.16
  ・注文(2017.6.5)から、P板着(昨日不在で、再配達:2017.6.16 19:00)まで、12日間で届いた。
   結構、早いと感じました。
   以下に、その経過を、簡単に整理してみました。
    @ 6/5: 発注
    A 6/6: 基板製造開始(PCB Processing)
    B 6/12: 出荷済(Shipped)→ 貨物情報はFedExに送信された
    C 6/14: 出荷地のFedEx営業所(Yuen Long 香港)を出発〜 FedEx経由地(中国広州市)に到着
    D 6/15: FedEx経由地(中国広州市)出発〜 仕向国仕分け場所(成田市)着〜 輸送中(江東区)〜 FedEx営業所(川口市)着・荷物搭載
           〜 15:00 配達したが不在(再配達依頼する→ 日本郵便に委託)
    E 6/16: 19:00 P板到着・受け取る


■ 2017.6.17
  ・昨日の晩、到着した、梱包を開封した。
   1枚ピックアップして、目視チェックしてみた。
   特に問題になるようなところは、無く、今迄の国内で製造した、P板と比較しても、遜色ない仕上がりで
   満足している。
   思ったより、シルクも綺麗でした。

   seedの袋の中に、10枚パックされた形で、FedExの専用袋の中に、梱包されて届きました。
   以下に開封した時の、写真をアップしました。
   何故か、Fusionのシールが、2シートおまけに付いていました。


■ 2017.6.18〜 2017.6.19
  ・部品実装完了(18日に、フルートの発表会があった関係で、19日の午前中に実装が終わりました。)
   GLCDとの高さ制限の為、PICのみ、ソケット無しの直接実装にしました。
   また、DGNDと、AGNDの一点アース・ポイント(回路図では、R18=0Ω)は、半田面より
   メッキ線で、ストラップしました。

  ・まずは、PICkit3にて、HEX書込みOK。
   GLCDを装着して電源チェック
   +5V電圧源は、2600mAhの、モバイル・バッテリーを使いました。
   また給電ケーブルには、JA1WBYさんから譲り受けた、百均で売っている、PSP用USB電源コード
   (プラグの、+電極の径=2.1φ)を使いました。



   以下、測定値です。
   +5V→ +4.99V
      -5V→ -4.80V
   +5V入力消費電流→ 約35mA

  ・特に、問題無く動いているようである。
   いきなり、アナログ系全体の確認をしてもよいのですが、なにせ人体から得られる生体電圧が、1mVp-p程度と
   大変微小なので、これの代わりに、自作F.G(信号発生器)から入力する場合、信号源ノイズが問題になります。
   ある程度大きく10mVp-p位にしないと、まともなチェック(全体の系だと、約3000倍のゲインがある為、
   最終出力が飽和してしまう。)ができない為、回路図の、カップリングC4=10uを一時外して、約1000倍の
   計装プリ・アンプ部と、最大約6倍の、後段アンプ部を分けて、チェックし、良かったら、C4を実装して、
   全体の系をチェックすることにしました。
   自作F.Gは、2種類あって、DDS物と、波形データテーブル方式(PIC32MX)の物です。
   前者は、1Hzまで出せるのですが、試したところ、1mVp-p程度に於けるノイズが多いらしく、全体の系の
   チェックはまともに出来ませんでした。
   後者の、原典が後閑さん設計の、波形データテーブル方式(PIC32MX)の物は、最小6Hzほどですが
   ノイズは少ないようで、何とか確認出来たので、こちらで全体の系をチェックしました。
   最終的には、人体に電極をセットして波形取りしました。
   今回の動作確認手順を簡単にまとめてみました。(今回は、オシロのみで確認)
    @ まず、カップリングC4=10uを一時外し、計装プリ・アンプ部のチェックを行う。
       VR2:ZEROポテンショを、中央付近・ VR1:GAINポテンショを、中央やや左寄り(GAIN:3倍位)にしておく。
    A アンプ単体チェック時は、差動入力の、−IN側を、DGNDにクリップなどで落とすこと。
       アンプ出力(IC3B-7pin)で、6Vp-pになるように、入力を合わせる。
          入力は、約6mVp-pとなるはずだ。これなら何とか感覚的だが、入力レベルが判るはずだ。
       2現象オシロV6で、観測した結果を以下に示します。

    B Aが、OKなので、今度は、後段アンプ部のみをチェックしてみる。
       外した、C4の+側(R9の片側)にクリップで、C4を外付けし、−側より、入力。
       
1Vp-p入力→ 1stアンプ(G≒3倍)出力= 反転3Vp-p(センタ≒2.5V)→ 2ndLPF出力= 3Vp-p(DC4Vピーク)
       となればOK。

    C これで個別ブロック共にOKが確認できたので、C4を実装し、アナログ系全体の動作を、GLCDで
       確認します。


    D いよいよ人体に電極をセットしてのテストを行う。
       この時は、
VR1:GAINポテンショを少し上げ気味に、中央やや右寄り(GAIN:4倍位)にしておく。
       電極が皮膚に馴染むまで数分時間が掛かる。
       この間は、出力電圧も低目になり、不安定だが、安定してくると、以下のような、見慣れた心電波形が
       表示される。
       波形取りの時は、シングル・トリガ・モードに切替えた方が、GOOD。
       以下の写真は、シングルモードで取得した。

  ・これで、無事、Fusion PCB製造による、P板で、心電計が動くことが確認出来た。
   とにかく、格安な割には、大変品質もよく、満足しています。
   これから、P板化する機会が増えそうです。

   今後のこのテーマの課題としては、1S/D時のサンプル周波数が、液晶分解能の関係で、ちょっと低いので
   500mS/Dの時と比較すると、波形再現性は悪い。(例えば、ピークを捉えられない時がある等)
   なので液晶をもう少し、X方向の分解能の高い(今128dotだが、256dotのモノクロがあればよいのだが・・)もの
   に替えてやってみたいという思いはある。(たぶん先の話になるだろうが・・・)
   それから、出来たらハード追加して、心拍数も表示したい思いもある。(たぶん先の話になるだろうが・・・)


---<ここから、追試:「ソフト更新:V2a」の記事>-------------------------------------

■ 2017.6.29
  ・最初は、ハードを追加しないと、心拍数表示は無理かな?と思っていました。
   WEBで、よくある例では、フォトインタラプタを使って、指先から心拍波形を検知(
赤血球に含まれる
   ヘモグロビンは赤外線を吸光する性質があり、動脈の脈拍動に伴って赤外線吸光度が変化することを捕捉
   して心拍を計測)して心拍を計測するというもの。
   これをやるためには、検知波形を計測可能な、パルス列に成形するフィルタ回路が必要になります。
   このパルス列を、PICに搭載の、
CCPモジュールを使って、その周期を測定するのです。
   心拍数[bpm]= 60000mS/周期で求まります。

   なので、心電波形表示と同期して、そのアナログ波形をコンパレータを通して、パルス列に変換し
   CCPピンに入力して、心拍数を表示するよなことが出来ないかと考えました。
   しかしこの心電波形表示と同期してという部分が以外に難しそうで、もっと簡単に、ソフトだけで出来ない
   もんかと考え直しました。
   例えば、トリガ検知ルーチンのところで、4V以上のレベルが格納されているバッファポインタの
   データから表示するので、そこから次の、4V以上のレベルに相当する変換値が格納されている
   ポインタまでの間隔にサンプル周期を掛ければ、それがR-R間隔(周期)になる。
   トリガが検知された時のみ、心拍数を表示することになるが、それで問題はない。


■ 2017.6.30
  ・PIC16F1983(XC8コンパイラ)は、データ型に、浮動小数点を扱える、flout, double型は無いので、
   
心拍数[bpm]= 60000mS/周期の計算の際、サンプル周期が、0.01秒又は、0.02秒なので、
   分母・分子にそれぞれ、100を掛けて、整数どうしの計算をさせる必要があると考えます。
   例えば、
サンプル周期が、0.01秒の場合は、bmp= 6000/n(但し、nはR-R間隔)で計算出来ます。
   この計算結果は、小数点以下を含む場合もあります。
   例えば、n= 85の場合は、bpm= 70.59と小数点以下を含みます。
   これをXC8は、暗黙のキャストで、小数点以下を切捨てて整数(bpm= 70)にしてくれるかが、心配だった
   ので、まずはその部分だけ簡単にテストプロを組んでみて試してみました。
   結果は以下の通り、整数(bpm= 70)に丸めてくれているようです。
   簡単に組んだこの時のテストソースです→ PIC16F_float_calculate_test.c


   


■ 2017.7.1〜 2017.7.2
  ・心拍数計測・表示のソフトで苦労した点は、いかに最初の立上りエッジ検知以降の、次の立上り検知を
   させるかという点でした。
   下写真の上2枚の波形の上に表示されている、nは、立上り検知2点間の間隔数(サンプル回数)を示し
   xは、最初のトリガが検知されるまでにコンペアした回数をデバッグのために表示したものです。
   詳細は、末尾にアップしたソースを参照して」ください。


■ 2017.7.3
  ・ここまでユニバーサル基板で動作確認出来たので、今日は、本番のP板化した_V2ハードに
   そのままHEXを書込み、人体に電極をセットして心電波形+心拍数表示を確認してみた。
   電極が皮膚に馴染むまで多少時間が掛かるが、以下のような波形と心拍数が得られる。


<回路図>
 ・こちらから、どうぞ→ PIC16F_ECG_BOARD」


<最終ソース>
 ・こちらから、どうぞ→ 「PIC16F_ECG_Scope_V2.c」 (P板化・TRG LEVEL切替えSWと、SEC/D切替えSW追加)
                   「PIC16F_ECG_Scope_V2a.c」 (170703:心拍数表示の追加)

 ※ この他に、GLCDライブラリと、アスキーフォントが必要ですが、それは、実験テーマ91の末尾にあるものと同じです。


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