● 実験テーマ17

「電子メトロノームの実験〜EAGLEによる基板化〜ケーシングまで」

■ 2012.06.11
  <仕様案>
   @ 拍子音色: 既に確認済のウッドブロック風の音にする。
   A 速度可変範囲: 40〜200bpm(1bpmステップ)

   B 速度可変方法: ロータリーエンコダーによる。
   C ビート選択: 、1, 2, 3, 4拍子
   D ビート選択方法: 2ビットDIP SWによる。(本番は、PUSH_SW)
   E アクセント機能: ビート分けするため、各ビートの頭の音は強くしアクセントをつける。

   F 開始/停止: START/STOP SWによる。
   G 表示部: LCDに、BEATとTEMPO値を表示する。

  NOTE1:
    ハードは、前回作ったチャイム音発生基板のエンベロープ制御部とdsPIC30F4013
    トレーニング基板を使用
  NOTE2:
    またテンポ設定用の、ロータリーエンコーダーには以前ASCIIマウスを分解して外した
    ロータリーエンコーダーを使用して作った冶具を、Bmp設定に使うことにした。
    また、BEAT切替には、トレ基板上のタクトSWを使用

 

 

 

 

 

 

 

 


■ 2012.06.12
  ・プログラム・ソース名は、「metoronome_test.c」とする。
  ・今日は、そのフロー概要を検討した。
   基本は、0.5mS周期毎のT3割込み処理の中で、エンベロープ制御信号の出力(CK1,UP1,DWN1)タイミングを
   正確に制御しようと考えた。


■ 2012.06.13
  ・Cソース作成完了
  → コンパイル+HEX書込みOK


■ 2012.06.14
  ・dsPIC30F4013トレ基板と、前回のチャイム音発生基板を、冶具ケーブルで接続し、デバッグを開始した。
  <不具合点>
   @ 電源ONと同時にT3割込みが入ってしまう。
    → イニシャル時の、Configで、INT_T3_ONにしていた為
    → INT_T3_OFFと修正したら、入らなくなる(単純ミス)
   A LCDの表示がおかしい。
     固定表示の部分がブランクで設定値も重なっている。
    → これも単純ミス
      固定表示ルーチンが抜けていた。表示ロケーション指定が重なっていた。
    → 修正でOKとなる。

  ・上記@、Aを直してもまだおかしい。
   @ 電源立上げ時、BPM表示は、デフォルトの60とならなければいけないのに61となってしまう。
      ただ、一応インクリメント・ディクリメントは、している。
     → 常には起きず、良い時もある。
     → 相当昔のアスキーマウスを分解して外したメカ式のロータリーエンコーダーなので相当回転軸にガタがある
        のが気になるが・・・・
   A START_SW押すとスタートするが、音が鳴らない。
     → これもまた、単純ミス
        エンベロープ制御ポートのTRIS(入出力)設定に問題があった。
   B START/STOPのオルタネート動作が駄目で、STOPしない。
     → ロジックの記述ミスで、修正OKとなる。


■ 2012.06.15
  ・未だ不具合有り。
  → BPMを固定しての、START/STOPは問題ないが、START中にBPMを可変していくと途中で割込みが停止してし
    まうのか?発音しなくなる。(BPMの増減は正常)
    そこで暫く待つと自動復帰する?
    また異常停止した時に、START_SWを2回押すとスタートする?

  ・原因として考えられること
   @ そもそも最初の現プログラム作成時の考えが、STOP中に設定をして、START_ONで発音開始→ビートを繰返す
      という風に、START途中での設定はPASSするるようにフローを考えていたが、その思想のまま無条件でSW類
      を読込むように変更してしまった。

  <対策>
  
・START中に、BPMを変えたことを検知して、変えた時には、一時的にT3割込みを禁止して、カウンタ類の初期化を行い
   再割込みを掛けるようにする。

  → この対策で上手く行く。

  ・後、気になる点
  → 強弱だけのアクセントだと、聞いた感じ不十分ではっきりしない感がある。
  → 強拍をテヌート(100mS位の発音時間)にしてみるか・・・


■ 2012.06.16
  ・今迄、耳だけを頼りにビートが効いているかを判断していたので、ここで波形で確認してみた。
  → 何と強拍も同じ強さになっていた。
  ※ さらに驚いたことに、CK1は出力されているが、UP1とDWN1が出力されていなかった。(Lowぱなし)

  → 原因は、冶具ケーブルのコネクタのピン番の見方が逆でUP1とDWN1が、5,4pin(GND)になっていた為と判明
    (1,2pinにしてOK確認)
  → SP出力も、頭がアクセント(強)になっていることを確認
  → ビートは判別できるのでアクセントは最初の仕様通り、音量強だけにした。(この時点ではそう思っていたが・・後で・・・)

  ・ここで新たな不具合発覚
  
→ やはりBEAT設定も、START途中で変更した場合の対策として、BPM設定と同じ初期化の処置が必要
     これをしないと、次からの頭が乱れてしまう。
  → 現在DIP_SWでBEAT選択しているが、これをやる為には、レベルセンスなので、Before, Afterの比較が必要になる。
     ならば、タクトSWでエッジセンス選択にしてしまっても、ソフト負担はそれほど変わりなくなるので、そのように変更する
     ことにした。
  → SW2を、そのSWにしソフトを変更→ 上手く行く。


■ 2012.06.17
  ・ここまで、ロータリーエンコーダーの問題と、音量がやや少ない問題が残っているが、大方動いてきた。.
   この実験が上手くいったらEAGLEによる基板化と、ケーシングを考えている。
   そこで、今日は、その構想を練ることにした。
  → いくつか条件を挙げてみた。
   @ できるだけ小型にする。 
   A ケースは、透明のアクリル又は、プラケースにする。
   B 基板寸法は、無償版EAGLEの許容最大の、100*80mm程度にする。
   C スピーカーは、薄型・小口径のものを選択
   D できれば、電池は、薄型(角型)のリチューム電池にする。


■ 2012.06.18
  ・実験途中だが、本番基板の電源を検討することにした。
  <電源候補>
   @ 薄型(角型)のリチューム・イオン電池+DC/DC:MCP1253(LI-355SP "S.T.L.JAPAN")
   A 006P+NJM7805FA
   B 単4ニッケル水素電池(使用実績のある、HR-4UTG eneloop "SANYO")*3本+DC/DC:MCP1253

  → @は、扱い販売店が少なく高価:3000円なのでヤメ
     Aは、一般的に充電できないのでヤメ(充電可のリチューム・イオンタイプ等あるらしいが入手性が悪い。)
     Bにしようと思うが、DC/DCがマルツにも秋月にもなしで、RSにはあるが
     フラットパッケージなので他を探そうと思う。

  ・もう1つ気になっている点あり。
   実験では、MPUにdsPIC30F4013の、40pinDIPを使っているが、これでは、スペースを占有し過ぎてアナログ部を全て
   一枚基板に実装出来ないかもしれない。
     かと言って、PIC24FJ64GA002の、28pinDIPを使うと、電源が2系統必要になってくる。
   → 
単一5V電源で動くピン数の少ない(最低28pinDIP)のPICを探してみたら、「dsPIC30F4012」(28pinDIP)という
     のがあった。

     もともとモーター制御に適したMPUらしいが、今回は単純ポートのみで使用すればよいのでこれに決めた。


■ 2012.06.19
  ・電源決定
   使用実績のある、HR-4UTG eneloop 3本(1.2V*3=3.6V)+
   秋月の昇圧型DC/DC 5V0.2A(3.9V入力時):StepUP・DIP-Ver.2(500円)
   を使うことにした。

  ・ケース決定
   既成のには、ちょうどよい寸法のがなく、大き目になってしまうが、
   秋月の大型ポリカーボネット・ケース140(外寸:約125*110*31mm)
   を使うことにした。


■ 2012.06.20
  ・先に手配しておいた本番で使う、ロータリーエンコーダー:EC12Eシリーズ(メカ式・アルプス製)
   が届いたので早速テストしてみたが、上手く行かず。
  → CW方向のインクリメント、時々反応せず。
     CCW方向のディクリメントが殆どインクリメントになってしまって不安定な感じ。
  → EC12Eの仕様によると、チャタリングは、3mSmax+バウンズ:2mSmaxと書いてあったので、データリードの前に
     10mSの遅延を入れたが症状変わらず。
  → ソフト・オシロ2にて2相クロックを確認したが、DATAとCLKの、回転方向によるタイミング(位相関係)は正しく出て
     おり配線はOKと判断できる。
     チャッターもいつも出ているわけでなく、故意に変?なステップで回した時だけ出るような感じになっていた。
     (ソフト・オシロ2の応答性がよくないからかもしれないが・・・)


  → 尚、実験で使用していたものは、やはりメカ式ではあるが、ハード的にCRフィルタ+インバータ(74HC14)で、
     チャッターフリーにしてある。


■ 2012.06.21
  ・本番で使うロータリーエンコダー:EC12Eにも、実験と同様にCRフィルタ+74HC14をプルアップ出力に追加してみた
   が、症状変わらず。


■ 2012.06.22
  ・
どうにも駄目なので、まさかと思うが、メインの1ループの時間を確認しようと考えた。
   サンプルが遅いためとも考えられる。
  ※ 現メイン・ループの処理時間を測定してみた。
  → 約40mSであった。
    予想以上に時間が掛かっている。
    何の処理にこんなに時間が掛かっているのか???
    LCD処理で入れているタイミングを取る為のディレイは、計0.5mS位なはずなので、掛かりすぎである。
    これでは、ロータリー・エンコーダーの1クリック応答時間(実測でゆっくり回した時に30mS位で、早回した時は10mS位)
    に対しマージンが無いので反応が鈍くても当然である。

  → メイン処理中の、どの関数及びステートメントで時間を食っているのか実測してみた。(待機時)
    @ Start_Stop_SW_read(); → 約10uS
    A Beat_No_Sel_SW_read(); → 約5uS
    B Rotary_Encoder_read(); → 約10uS
    C Beat_Period = 60000/BPM; → 約18uS
    D T3_count_MAX = Beat_Period*2; → 約5uS以下
    E beat_no_disp(Beat_No, 0x8b); → 20mS

    F tempo_disp(BPM, 0xc6); → 20mS

  ※ 結局、LCD処理で40mS掛かっていることが判明
  ※ この原因が、今迄動いていたので表面上気が付かなかったが・・・
     LCDのインストラクション書込み関数(lcd_inst_wr)にバグが発覚(記述ミス)

 
 → この関数の処理のお尻にウエイトを入れているのだが、クリア・コード=0x01か、カーソル・ホーム=0x02の時は、20mS
    その他のコードの時は、50uSとしていたはずなのに、記述はそうではなく
     if ((inst_code & 0x03) != 0) Waitx1ms(20);
     else Waitx1us(50);
     となっていて、コードが0x00以外の時は全て20mSのウエイトになってしまっていた。
  → どうしてこのような素直でない記述にしたのかを説明しても、しょうがないと思うが・・・・
  → 元々は後閑氏のLCDライブラリがあるのだが、オリジナル性にこだわって、後閑氏の記述をもとに自分なりの関数に
     していった段階で記述ミスが生じてしまった。
  → 後閑氏のLCD表示のさせ方は、固定表示部と可変表示部に分けることは、しておらず、最終的に全て、lcd_str()
     としてストリングデータで出力している。
     その為、文字表示位置の指定は1行目の先頭:0x80か、2行目の先頭:0xc0しかしていない。
     よってカーソル位置指定での0x03とのアンドは全て0になり、Waitは50uSの方になる。
  → 自分のは、オリジナルを採用しているため固定表示部と可変表示部に分けて、表示しており、その時に必要な
     任意位置を指定して表示しているので、0x8*, 0xc*という風に下位4bitが存在するため、0x03とのアンドだと結果が
      0以外になることがあり、20mSになってしまうことがある。
    (後閑氏の記述では2mSとしているが自分は安全をより見て20mSとした。)


■ 2012.06.23
  ・どうソースを修正するか?
  <修正案>
   @ インストラクションコードに、0x00は存在しないので、下記のように書いても問題ないはず。
      if (inst_code <= 0x03) Waitx1ms(20):
      else Waitx1us(50);

   A または明示的に
       if ((inst_code >= 1) && (inst_code <= 0x03)) Waitx1ms(20):
       else Waitx1us(50);
   ※ 判り易さから、この表現にした。

  ・修正後の確認で
   @ MAIN LOOP 1周の時間は、実測 約580uS(計算通り)になった。
   A LCD表示問題なし。
   B ハード上でのチャッタ防止回路が無くても、安定してインクリメント・ディクリメントすることを確認(早回しでも問題ない)
     (ハード上でのチャッタ防止回路は省略することにした→ プルアップのみ)

  ※ 尚、今迄公開してきた実験テーマの中で、これと同じオリジナルのLCD関数を使っているものが数点あるので
     それは、追々ソースを修正していく予定です。


  ・次にスピーカーの音量問題について検討する。
   小坊主(8Ω, 0.1W)から、本番で使用予定の、マイクロSP(8Ω, 0.5W)に替えてみたが聞いた感じは殆ど変わらず。
   そこで、パワーアンプ(LM386N-1)のGAINを可変できるので試してみた。

  ・現在はLM386Nの、1-8pinをオープンにし、20倍にしてあるが、例えばここに、10uFを接続すると、200倍まで拡大される。


■ 2012.06.24
  ・SP音量のツメを行う。
   使用SP:S36G04K-3 "東京スピーカー社"→ 8Ω0.3Wtyp(単純計算でE=1.55Vtyp)
                                8Ω0.5Wmax(単純計算でE=2.0Vmax)
   なので、このSP負荷に合わせ、GAINを設定すると、実験の結果、1-8pin間に、1.2k+10uFを接続して、50倍に設定すると
   実測で、SP出力は、ピークで、約1.7Vになり、大き目の調度良い設定になる。
   定数はこれに決めた。
   聞いた感じは、SPが小口径でW数も少ないのでしょうがないのかもしれないが、
   正直はもう少し音量感が欲しいとも思うが・・・・ここいらで妥協か?
 
  ・
あと遅いテンポでの、強拍と弱拍の区別が希薄になる感じがあり、これを何とかしたい・・・
   対策としては、頭のアクセント要素にテヌートを加えるか、音程を変える(アクセント音は、高い音、他の音は低い音にする)
   ことが考えられる。


  ・結局、アクセントは音量を変えることの他に、「音程を変える」を加えることにした。
  → 頭拍:1kHz, 他拍:500Hzに決めてソフト変更することにした。
   <結果>
   ※ 音程の違いは上手くいった。
      アクセントに聞こえる。
      しかし、SP自身のF特が、500Hz側の方が、1kHz側に比べ、+2dBほど音圧が高く、弱音レベルが強音と変わらなくなる。
     <調査>
     ・LPFを通す前のエンベロープ制御出力では、強弱のレベル差は出ている。(強:140mVp-p, 弱:80mVp-p)
     ・そういえばLPF部の、カットオフ周波数:fcはチャイム音発生回路の記事のオリジナル値のままで
      計算上:アクティブLPFのfc≒1.6kHz, CRパッシブLPFのfc≒678Hzに
      なっている。
      これでは、1kHzの方はパッシブのfcの影響で減衰しても当然だ。
   <対策>
   ・LPFの定数変更を行うことにした。
    アクティブLPF:fc≒1.6kHzから、3.4kHzに変更(C4,5=0.01u→ 4700p)
    CRパッシブLPF:fc≒678kHzから、2kHzに変更(C6=0.047u→ 0.015u)


■ 2012.06.24
  ・LPFの定数変更の実験用パーツをマルツに手配した。


■ 2012.06.26
  ・パーツが届いたので、LPFの実験を行った。
  → 結果、聞いた感じは良くなった。(MAXレベルで大きな音になった。)
     ソフト・オシロ2でレベル差を確認すると、0.4Vp-p程度であった。
     もうちょっと音量さが欲しいが、まあこんなものでしょう・・・
  → 音量VR中央位置からやや右側の位置で、強拍がサチリ始めるが、この時まだ強拍のサスティーン部はサチッてない。
     VR MAXにすると、アタック音は両方サチルが、サスティーン部はサチらず音量差は出ている。


■ 2012.06.27
  ・もうちょっと、音をツメよう!!(3回目の変更)
   現在、立上り時間を30mSにしているが、10mS以上にすると立上がりのピーク(充電完了電圧)までの時間が約10mS弱
   なので、その後はピークレベルが続き本来の立上りでなくなる。
   またサチリ状態が目立つ(VR MAX近辺)
   そこで次のようにADSRの各区間の時間の内、AとSの時間を変更することにした。(ソフト変更)
  → アタック:30mS→ 10mSに変更
     ディケイ:2mS→ これはこのまま
     サスティン:30mS→ 50mSに変更
     リリース:18mS→ これはこのまま
  <結果>
   ・音量感は殆ど変わらず。
    サチリも、そんなに目立たなくなり、音色も打楽器系に近ずいたので、これで音色はFIXすることにした。

  ・いろいろ問題が多いが、未だ残っている問題が1つある。
   
それは、ビートを刻む音が、時々ずっこけるように聞こえる現象である。
  → これを調べると、この現象が起きている時の、SP出力は、キャリア(CK)の周期が一瞬広がるような動作になる。

   <もうちょっと細かく調査することにした>
    ・20秒位、WAV+MIDI音源:SC-D70で、CK1ラインとSP出力をサンプルし、その結果をみると、20秒間に3回その現象
     が起きていることが確認できた。
    → その時、制御CK1の、0.5mS毎の反転が瞬間1回だけ行われず、そこでパルスが間延びするため、おかしな音に
       なっていることが判明


    → 原因は、ソフトの可能性が強いか?
       @ T3割込みルーチンのお尻にある割込みフラグクリアを頭に移動してみたが症状変わらず。
       A LM386出力の寄生発振が、CK1入力まで回り込んでいるのか?
         の仮定原因振り分けで、アナログ実験基板を外して、デジタル部だけ(ポートCK1出力負荷なし)でやってみたが
         それでも時々パルス抜けが起こる。
    → やはりソフトのせい?
       割込み処理が、0.5mS以内に終わってなくギリギリのところで動いているのか??
    → 予想は、50uS以内
       この時間を測定するのは持ち合わせの測定器では厳しかったが、ソフト・オシロ2の、x4オーバーサンプリング機能
       で何とか50uS以内を確認した。
       割込み処理時間の問題ではなさそう。  


■ 2012.06.28
  ・これは、自分の感であるが、割込み関数の書き方(書式)に問題があるのでは??
   以前もファンクションジェネレータを自作した時、割込み記述に関して問題があったことを思い出した。
   それは、割込みに於けるスタックへの退避・復帰動作等に関するオプション記述の問題である。
  → 次のように書式を変えていって動作がどうなるか確認してみた。
     @ no_auto_psvを削除しshadowのみにしてみる。
       (no_auto_psv属性を指定すると、const変数に割込みハンドラ内からアクセスできなくなるが、割込みコール遅延
        を抑えられるらしい。)
      → 1回目から症状出たが、2回目はOK
     A auto_psvを、shadowの前に明記
      → 3回目の頭でNG
     
B shadowをやめ、no_auto_psvのみにしてみた。
       元々割込み周期500uSに対し、処理時間が50uS以下なので高速PUSH/POPは必要ないと考える。
       もしかしたら高速ゆえにズッコケることがあるのかも・・・
      → 1分以上サンプルし後で、波形を確認したが、CK1の間延び(反転欠け)現象は起きなかった。
        尚これを2回テストしたが、2回共OKであった。
      → 今回の割込み記述はこれでFIXすることにした。


  ・実験段階でのハード・ソフトは、これでFIX!!
   EAGLEによる基板化の準備に入ることにした。

  ※ 実験用の最終ソースは、こちらからどうぞ→ metoronome_test.c 
  ※ 実験用の最終回路図は、こちらからどうぞ→ METRONOME_実験基板回路図.gif

  ・SPの音量調整用ボリュームは、前面パネル上で操作できるように基板実装型(ストレートタイプ)を選択した。
  → これがライトアングル実装タイプはあってもストレートタイプは、なかなか見付からなかったが、RSでアルプス製のもので
    使えそうなのがあったのでそれを発注することにした。
  → RK09L1140A2U(10kΩ) 179円


■ 2012.06.29
  ・電池入力用と、SP出力用のコネクタ及び、電源SWを決める。
   高さの関係で、仕事でもよく使っていた小型の、XHストレートタイプ(日圧)を選択
  → SP用:2P→ ベース付きポスト:B2B-XH-A
             ハウジング:XHP-2
    電池入力用:3P→ ベース付きポスト:B3B-XH-A
                ハウジング:XHP-3

    電源SW→ 単極双投スナップ:M2012P "NKK"(基板実装タイプで前面パネルで操作できる寸法)

  ・そろそろ新規パーツ登録作業に入る。


■ 2012.06.29〜 2012.07.05
  ・13種類の新規パーツ登録(部品マクロ作成)作業を行う。
   (MPU, ROTARY_ENCODER, AUDIO_POT, PUSH_SW, マイラフィルムC等)


■ 2012.07.06〜 2012.07.07
  ・いよいよ回路図入力開始
   実験では、MPUにdsPIC30F4013を使ったが、本番ではdsPIC30F4012を使用するため、ポートの再割付けを考えながら
   の回路図入力になる。


■ 2012.07.08
  ・デジタル部の入力が終わったところで、未登録パーツ(ダイオード:1S2076A)があったことに気が付く。
   早速登録を行う。


■ 2012.07.09
  ・回路図入力続行
   最後に、>NAMEと、>VALUEの文字サイズを揃え、コメントを追加して回路図を書き終えた。
  ・回路図入力終了後の作業
   @ 回路そのもの(結線等)に誤りがないか、まず目視でチェック→ OK
     (特にVRと、Cの極性、新規パーツのピン番等)
   A NET_LISTでの結線チェック


■ 2012.07.10
  ・NET_LISTでの結線チェック→ 特に問題なし。
  ・ERCチェックを行う。
   「OUTPUT and SUPPLY pins mixed on net+5V(SUP)」
   のエラーが、+5Vに繋がっているラインに大量に発生
  → NETは正常に繋がっているので無視しても問題ないと思われるが気持ち悪いので次の処置をする。
  → 新規作成した、DC/DCのOUTピンの電気的属性をそのまま、OUTとした為に出たエラーなので、受動端子(Pas)と
    すればエラーは出なくなるはずである。
    (例えばEAGLEライブラリの、3端子レギュレータの、VOピンはPasになっている。)
  → 結果、mixed on netエラー(20個)全て消える。


■ 2012.07.11
  ・Lyoutエディタにて、外形→取付穴→禁止帯設定を行った。


  ・部品配置に入る前に懸念材料が、2点ばかしある。
   @ 100V0.1uの、ポリエステル・マイラフィルムCは寸法が大きく(特に高さが、13mm)実装スペースを食うし、このCは、
      LCDの真下に配置するので、高さ制限に引っかかってしまう。
      そこで、同じ定格のもので、背が低く全体的に小型のメタライズドフィルムC(EQC-V1104JM "Panasonic")に
      変更することにした。
      早速、マクロ登録を行った。
   A また、アナログ部の部品点数が多く実装が、きつそうである。
      これは前々から考えていたことだが、現在のエンベロープ制御回路はチャイム音発生基板の、2声(パート1・パート2)
             対応のものを、そのまま使っているが、今回の目的では、パート2は必要ないので何とか、回路をパート1のみにして
      簡単にできないものか?

  ・そこで、実験基板にてその実験をしてみることにした。
   元々この回路は山名氏が設計されたものなので、回路図を公開してない。
   回路図で説明するのが早いが、都合で文章で説明する。
   エンベロープ制御回路部は、上下にパート1とパート2用に同じ充放電制御回路が2CHあり、その出力をLM3900(OPアンプ)
   の入力で合成しているだけと考えれば、そっくりパート2用の制御回路を無くすだけでよいのかも?
   そうすると、大幅に部品点数が減少する。
  → これで実験した結果、SPレベルも前と同じで動作も問題ないことを確認


■ 2012.07.12
  ・回路図に戻り、エンベロープ制御部を、単音制御に変更する。
   そして、再びLyoutエディタで、BOARDデータを開き変更が反映されているか確認→ これなら入りそうである。

 

  ・位置をFIXしなければいけない部品(LCD, RE, AUDIO_POT, PUSH_SW, TOGGLE_SW)及びVR, コネクタ類の配置を行う。


■ 2012.07.13
  ・部品レイアウトが全て完了した。
  (但し、1点アースポイントのダミー抵抗は暫定位置)


■ 2012.07.14
  ・電源パターンを引き終えた。
  ・次に、アナログ部を手配線で引き終えた。


  ・AUTOルータで、デジタル部を引いたのだが、100%ルーティングにはなるものの、AUTOルータは、AGND及び、DGND領域
   の境を無視して引いてしまっていて、このままではとても満足いかない。
   素直に引けてない要因として、PICの電源バスの引き回しを全てICの下(部品面)でしたことが考えられるので、1部手動で、
   ハンダ面側に移動することにした。


■ 2012.07.15
  ・デジタル部_AUTOルータ後、納得の行かない所を手修正しベタGND処理前まで漕ぎ着ける。


■ 2012.07.16
  ・DGND及び、AGNDベタ作成〜ビア打ち〜シルク整理まで終える。


■ 2012.07.17
  ・DRCにて、クリアランスエラーが20個発生
   何故かAGNDベタ領域の設定がDGNDと重なっている部分あり(心当たりなし??)


  ・上記修正して2回目のDRC→ クリアランスエラーが8個に減少


  ・SP出力コネクタ:CN5周辺のベタGND領域設定でクリアランスエラーになっている模様
  → CN5を方向に約0.3mm上方に移動しクリアランスを広げたらDRCエラー0になった。


  ・DRCエラー0後、ベターONしガーバー作成前まで漕ぎ着ける。



  ・ガーバ・データの作成を行う
  ・シルク文字の太さを統一する


  ・ドリル・データ生成

  ・ガーバ・ビューアにて、発注前確認を行う
  → シルクを確認したところIC1の位置を移動し忘れたことに気付く。(パスコンと重なっていた。)
    早速、ビューワで気付いたIC1シルク位置をボード上で修正



  ・修正したので念のためもう1度、シルク文字の太さを統一する。

  ・ここまでの修正後、・ビューアにて、発注前確認を行う。

  ・マルツへ見積り依頼済

  ・19950円の見積り回答有り→ 早速ガーバーデータを送付した。


■ 2012.07.18
  ・マルツ・エレックよりデータ確認問題無しの回答届く。→ これでP板製作を進めて頂くことにした。


■ 2012.07.19
  ・P板が上がってくるまでに、1Wあるので、今日は、dsPIC30F4012用にポート割付を修正し、プログラムのまとめを行った。
  ・新プロジェクトを作成し、コンパイル1発OKとなる。


■ 2012.07.20
  ・今日は、予め手配してあった、透明ケースの加工を行った。
  ・透明ケースに罫書きする。
   梱包用の透明テープをプラ表面の保護として貼り付ける。
   そこに、ボールペンで罫書くことにした。


■ 2012.07.22
  ・穴加工と、スタッド取付終了


■ 2012.07.26
  ・マルツ・エレックから、プリント基板が到着した!!
   2枚の発注で、4枚到着
   (内2枚は、ベア・ボード:製造の都合で通常1〜2枚のベア・ボードになるそうです。)

  ・P板の簡易チェックを行う。
   @ 見た目には、問題なさそう。
   A 電源パターンのショートだけは、いつもチェックしているのでチェック。→ 問題無かった。
   B 新規に登録した部品の実装具合のチェック
      ROTARY ENCODER, PUSH_SW, AUDIO_POT, TOGGLE_SW等、全て問題無し。

  ・早速部品を実装した。


■ 2012.07.29
  ・電池の減りを気にしたくなかったので、まずは、ACアダプターから+5Vを供給して、動作確認を行うことにした。
  → ACアダプターから直接+5Vを供給する治具を作った。
    (当然、DC/DCコンバータはソケットから外して、IN-OUTをスルーにする治具も作った。)

  ・初めての、dsPIC30F4012へのHEXロード→ 一発で上手く行く。
  ・各機能動作も全て上手く行く。

  ・ユニバーサル実験ボードと同等のレベルまでOKとなった。
  ・ここでVccを確認→ 供給元で、5.07V

  ・ちょっと気になっているのが、このセットの消費電流である。
   dsPICは、消費電流が多目の認識があったので・・・・
   またパワーアンプも積んでいるし・・・・
  → ここで、テスターにて+5V電源電流(Icc)を実測してみた。
  
 <Iccの実測(Vcc=5.07V)>
    @ 待機時: 101.8mA (やはり予想通り多目)
    A 音量VRmin, 120bpm, 3ビートでスタート時: 102mA
    B 音量VR中央, 120bpm, 3ビートでスタート時: 105mA(max)
    C 音量VRmax, 120bpm, 3ビートでスタート時: 110mA(max)


  → このデータより、Vcc=5V, Icc=100mA, Vbat= 3.6V(公称1.2V*3)とし、DC/DCの効率を85%として、DC/DCの
    入力電流(電池電流:Ibat)を入出力の電力比から逆算すると、Ibat=163mAとなる。
    使用電池の容量定格が、750mAh(min)なので、連続使用だと、単純計算で約5時間位は持つ計算となる。
    実際の連続通電時間は、10〜20分程度の使用なので暫くは、どの位持つか、これで様子をみることにした。
    (PICのクロックダウンという手もあるが今回は見送り)

  ・これで電池電源(DC/DC)を除くハードは、ほぼよさそうなので電池電源を、じっくり検証してみることにした。
  ・ここで、電池+秋月のDC/DCに戻してみる。
   まず、アイドル時のノイズ音は聞いた感じはそんなに気にならないほどである。(音量VRmaxでも)
  ・ちなみに、DC/DC出力では、VRmax(TEMPO=120,BEAT=3設定)でも5.08V出ている。
   またこの時の電池電圧も、VR位置に関係なく3.86V出ている。
  ・リップルも確認したが、電源立上げ直後の待機状態では、リップルとしては出ていない。
   若干の高周波ノイズだが、
時間が経つにつれて突発的なリップルノイズが、0.1V以下位のレベルで発生する。
   DC/DCの特性上リップルが出るのは、ある程度しかたのないことかもしれないが、C容量を増やしてみようと、DC/DC出力に
   470uのCを手で入れようとした時、出力をショートさせたようで、DC/DCが壊れてしまった。
   (DC/DCに使用されているPFMコントローラIC:HT7750Aには、出力過電流保護は付いてないのか??)
   しょうがなく、再手配した。


■ 2012.07.30
  ・DC/DCが届くまで、ケース加工の続きを行う。
   SP取付金具の、取り付け穴加工を行った。
  → ここで、上下ケースの勘合時、方向があるのに気付く。
     ケースの左右サイドの厚みが異なっている。
     これを合わせないと、上下合体した時に段差が生じる。
     方向を無視して、下カバーの基板取付穴加工をしたため、合体時、段差が出来てしまった。
  → 基板取付穴位置を180度反転した位置に加工することにした。


■ 2012.07.31
  ・DC/DCが届いたので実験続行
   今日は、Vbatが減少していった時の動作確認として単4電池3本の場合と、2本にした場合での動作を確認してみた。
  <結果>
   @ 単4電池3本の場合
      Vbat= 3.84V→ Vcc(DC/DC出力)= 5.07V
                 リップル電圧≒ 0.1V(電源ON後、約2〜3秒後に発生)
   A 単4電池2本の場合
      Vbat= 2.47V→ Vcc(DC/DC出力)= 4.90V
                リップル電圧≒ 0.1V(電源ON後、約2〜3秒後に発生) 
      尚、LCD文字のコントラストは十分維持されており未だ十分見える。

  ・ここで、リップルが気になったので、次の対策をしてみた。
   @ DC/DC出力の100uに、0.1uの積層セラ追加
    → リップル変化無し
   A DC/DC出力の100uを、220u25Vに交換で、リップル減少
    <結果>
    ・@ 単4電池3本の場合
        Vbat= 3.84V→ Vcc(DC/DC出力)= 5.00V
                   リップル電圧≒ 5mVp-p(VRmin時)
                            (50mVp-p(VRmax時))



    ・A 単4電池2本の場合
        Vbat= 2.47V→ Vcc(DC/DC出力)= 4.92V
                   リップル電圧≒ 5mVp-p(VRmin時)
     ※ VRmax時、強拍を鳴らしている瞬間に、200mV位の突発的なリップルが出るが、
          再生波形には影響がないことを確認

  ※ 下に、VR中央位置での、強弱拍のSP出力全体波形を示す。

  ※ 実際はこんな感じで聞こえます。(BEAT:3, TEMPO:120)→ METRONOME_WAVE_120731.wav



  ・未だ長時間ランニングテストをしてみないと判らない点もあるが一応これで電源はFIXし、
   明日から実際に練習で使ってみてデータを取る事にした。

  ・ケースと基板の最終位置合わせを行い、最後に電池フォルダを両面テープにて固定し組立終了


■ 2012.08.01〜 2012.08.02
  ・自宅アパートと、いつもの貸しスタジオで、実際に使い始めた。
  ・満充電の、実測Vbat= 4.05Vからスタートし使い始めの、VbatとVccを都度、テスターで測り記録することにした。


■ 2012.08.03
  ・いつものように自宅で使い始めると、以下のような不具合発生
   @ この時のコンディション
     Vbat= 3.73V, Vcc= 5.00V
   A 不具合内容
     電源ON後暫くは、SPからのノイズは聞いた感じ殆ど気にならなかったが、1〜2分経つと、VRを絞った状態でも、シャーという感じの
     ノイズが発生
     → ソフト・オシロ2で、DC/DC出力のリップル分を見ると一定ではないが、約500uS周期で、40mVp-pほどのリップルが確認された。
        SP出力では、18mVp-pほどであるが耳に気になるノイズとして聞こえる。
        3日前に、コンデンサを220uに交換した時は、電源ON後、2〜3秒で発生してたので、それ以上時間を置いての確認をしていな
           かった為、気が付かなかった。

     → そこで、220uを発注した時に、念のため470uも発注しておいたのでそのコンデンサに交換してみた。
        25V耐圧のしかなかったので、サイズは大きくなってしまうが・・・
       → 電源ON後7分位様子を見るが、6分位からややリップルが断続的にDC/DC出力に出始めるが、10mVp-p以下なので
        ノイズ音として気にならないレベルになった。
        コンデンサの容量としては、これでFIX


■ 2012.08.06
  ・ランニング・テスト中、バグ発覚
   (結果的にはバグというか、単純ミスであったが・・・)
  <症状>
   START中、START/STOP_SWを押すと、音は必ず止まるが、LEDが消灯しない時がある。
   → STARTして、LEDが点灯しているタイミングで、SWを押した時に、LEDが消えない感じである。
  <原因と対処>
   結局、プログラムの単純記述ミスであった。
   LEDポートは、RB4なのに、SWリードルーチンで扱っているLEDのみ、RD0になっていた。
   (このRD0というのは、実験で使っていた、dsPIC30F4013トレーニング基板の、デバッグ用LEDポートで、何故かこれと
    混同してしまったようだ・・・  )
   START中に、SWを押すとLEDを強制的にOFFしてるつもりが関係ないポートをOFFしていたので、消えなくて当然である。
   修正しOKを確認した。

  ・これで暫くは練習に使ってみて、電池の持ち具合など感触を見てみたいと思っている。
   何とか、思い描いていた自作の「電子メトロノーム」が出来たので本件は、クローズしたいと思う。


 <最終ソース>
 ・こちらから、どうぞ→ metronome.c

  ※ 尚、EAGLE回路図に関しては、チャイム音発生実験の時と同様に、山名氏の設計されたエンベロープ制御回路(WEB未公開)を
    使用 している関係で、未公開とします。


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


   

 

.