PIC32MZでJR-100用スキャンコンバータを作る(3) PMPの出力について

R2Rの1番ピンの電圧変化

ビデオ信号の出力としてPIC32のPMP(Parallel Master Port)を使おうと思っています。JR-100からのビデオ信号のキャプチャと整形後のビデオ信号の出力を並行処理するために割り込みを多用する必要があると考えていて、そうするとなるべくCPU処理の影響を受けないようにするためにDMAと協調動作できるPMPが有用だと考えたためです。
そこでまずはPMPの動作をテストしてみたのですが、思わぬ結果となりました。

PMPの出力周りの回路を再掲します。

DACとビデオ出力回路
DACとビデオ出力回路

青い線の左側はPIC32のPMD[0:7]ピン(PMDINレジスタ)につながっています。したがって(PMPを適切に設定したうえで)PMDINにデータを書き込むと、それがR-2Rラダー(4610X-R2R-103LF)で作ったDACを介して電圧に変換されるという仕掛けです。

DAC出力を見る前に、まずテストプログラムによりPMD0ピン(R-2Rラダーの9番ピン)の電圧を計測してみました。

R2Rの1番ピンの電圧変化
R2Rの1番ピンの電圧変化

テストプログラムは63.5μsごとにタイマー割り込みを発生させ、そのたびにポートA(比較用)とPMDINレジスタのビット0を反転させるというものです。上の青い線がポートA(PA0ピン)の出力、赤い線がPMDINレジスタ(PMD0ピン)の出力です。ポートAは63.5μsごとに反転するきれいな矩形波となっています。しかしPMDが怪しい。約1.65Vを中心として、63.5μsごとに3.3Vと0Vに向かうスパイクのような波形となっています。まるでCR微分回路のよう。

原因究明のため、まずビデオアンプNJM2267をICソケットから抜いて、同様に電圧を測定します。

R2Rの1番ピンの電圧変化(NJM2267無し)
R2Rの1番ピンの電圧変化(NJM2267無し)

オフセットが0Vになりましたが微分回路っぽい波形はそのままです。

さらにR-2Rラダーも外してみます。

DACとビデオ出力回路(R2Rラダーも外す)
DACとビデオ出力回路(R2Rラダーも外す)

減衰の仕方が弱まりました。

この結果をどう見ればよいでしょう?

推測はこうです。つまりPMDレジスタはPIC内でラッチして出力しているのではなく、コンデンサのチャージ状態でHighかLowかを決めているだけではないでしょうか。

PMDの出力回路(推測)
PMDの出力回路(推測)

こうだとすると微分回路の出力のような波形の説明が付きます。

  1. プログラム上でPMDINに1を書き込むとPIC内部で何らかの方法により+3.3Vを生成する。
  2. コンデンサCがチャージし終わったころにゲートを開けることでPMD0にHighが出力される。
  3. 電荷のチャージは一定の時定数(CRで決まる)で放出され、PMD0の電圧は徐々に下がる。
  4. PMD0に抵抗を接続するとPIC内部のRと並列接続されることになるため、時定数は小さくなる(速く減衰する)。

PMD周りの等価回路の説明がPIC32のデータシートに書かれていないのであくまで推測です。

(2018/5/2追記)
……と書きましたが、コメントでご指摘をいただいた通り、PMDへのデータ出力完了後にPMDの出力ピンがハイインピーダンスになり、その結果オシロ内部とプローブがもつ容量成分により過渡応答が見えていると考えられます。microchipのコミュニティサイトでもそのような言及がありました。したがって上記の私の推測はいったん取り下げまして、再度検討結果をもって修正します。

Yes, PMP is a bidirectional bus interface, so when there is no Write data and WAITE states have been performed, IO lines will be Tristate highZ.
If you want a specific state when lines are not driven by PMP, you could pull PMD lines Up or down using resistors.
http://www.microchip.com/forums/m835821.aspx

(追記ここまで)

さて次に、MJM2267を接続しているときに1.65V付近にオフセットが発生するのはなぜだろう。NJM2267の1番ピンの等価回路をデータシートで調べてみます。

NJM2267-Vin1の等価回路

NJM2267の入力はビデオ信号を1.9Vまでクランプする回路が内蔵されています。この等価回路から分かるのは、300μAの定電流源に基づいて右側トランジスタには一定のベース電流が流れていて、さらにそれにより300Ωの抵抗に定電圧が発生しているのだろうということです。これが1.9Vのクランプ。
(2018/5/2追記)
いただいたコメントより引用します。

左側にトランジスタのベースに1.9V+VBEの電圧をかけておくと、入力端子の電圧がこれより低いとトランジスタがONになり、エミッタから入力端子に向かって電流が流れます。そして、入力端子の電圧が1.9V以上になると、トランジスタがOFFになり、電流はストップします。右側のトランジスタはエミッタフォロワーとして動作しています。割と定番の回路構成ですね。

確かにその通りだと理解しました。私の見解は取り下げます。まだまだ電子回路は勉強不足であることを痛感しました。
(追記ここまで)

そしておそらくこの電圧がR-2R側にも影響を与え、1.65Vの電圧になっているものと考えます。したがって、NJM2267が発生させる電圧が外に影響を及ぼさないようにするためには、Vin1の入力側に直流カットのためのコンデンサが必要と考えられます。よく考えると当たり前でした。

以上より、当初の回路設計が誤っていることが分かりました。そこで次の方針で回路を修正します。

  • PMDの出力にラッチを取り付け、PMDの状態を保持するようにする。幸いPIC32のPMPはチップセレクト信号を自動で生成する仕組みをもっているので、ラッチのタイミングはこれを使えば良さそう。
  • NJM2267のVin1の手前にコンデンサを取り付ける。

一歩前進しました。次はDMAをテストしてみます。

投稿者: けむしろう

プログラミング、サーバ構築、電子工作、旅行が好きです。

「PIC32MZでJR-100用スキャンコンバータを作る(3) PMPの出力について」への7件のフィードバック

  1. こんばんは。
    着々と計画が進行しているようで、本当に羨ましいです(笑)

    クランプ回路について補足させてください。
    NJM2267のデータシートによりますと、等価回路の右側のトランジスタがクランプ電圧を決定していると思います。データシートでも指定されております通り、本来は入力端子に直列にコンデンサを接続してACカップリングとします。このコンデンサをIC内部からチャージするのがクランプ回路の役割です。左側にトランジスタのベースに1.9V+VBEの電圧をかけておくと、入力端子の電圧がこれより低いとトランジスタがONになり、エミッタから入力端子に向かって電流が流れます。そして、入力端子の電圧が1.9V以上になると、トランジスタがOFFになり、電流はストップします。右側のトランジスタはエミッタフォロワーとして動作しています。割と定番の回路構成ですね。
    なお、データシートでは、入力端子への信号源インピーダンスを200Ω以下にするよう指定されてます:今の回路図だとおそらく2kΩ以上ありますので、間にボルテージフォロワを入れる必要があるかもしれません。あとクランプ回路用のカップリングコンデンサ等も必要です。

    参考まで。

    1. いつもコメントありがとうございます。
      本業が忙しくなるとこちらの更新をしばらく放置してしまうのですが、頭の中では少しずつ考えを進めています。
      NJM2267の動作解説、とても役に立ちます。だいぶ理解がクリアになりました。記事の方はあとで訂正しようと思います。
      今回の回路だとNJM2267を使うのはちょっと大げさで、DAC出力を単に高スルーレートのオペアンプ(LM7171とか)によるボルテージフォロワーで受けて、75Ωの負荷抵抗をつなぐだけでいいかなと思っていました。ただ負電源を用意するのが面倒だなということでNJM2267を無理やり使っています。
      結局無理やり使っていることが災いして負電源を生成するのと大差なくなっているかもしれませんね。
      アナログ回路部分はまだまだ経験が足りないので、いまも勉強中です。

    2. すみません、「左側のトランジスタがクランプ電圧を決定している」と書いていたつもりが「右側」となってました。また「入力端子の電圧がこれより低いと」も「1.9Vより低いと」でした。訂正します。

  2. PIC32のデータシートを見る限り、PMDはPMDINに書き込んだ瞬間の4CPUサイクルの間だけドライブされて、それ以外の期間はHiZになるのではないでしょうか。
    過渡波形が出ているのは測定器の入力容量の影響だと思います。

    1. なるほど、測定機側の容量の影響というのは盲点でした。確かにデータシートを見るとデータ書き込みサイクルが終わるとハイインピーダンスに遷移しているような書き方になっています。
      ただHigh→HiZの変化では過渡応答が出るのに、HiZ→High(プローブから見るとLow→High)の方向だとほぼ垂直に立ち上がっている(→HiZ方向とHiZ→方向で時定数が異なる)ように見えるのがちょっと説明しづらいです。これはどう見ればいいでしょうか。

      1. それは私もちょっと困ってます(笑)
        ただ、直列にコンデンサが入っているとすると、2枚目の波形でアンダーシュートがない事と、電源電圧一杯まで振れている事が説明できないと思います。
        いずれにしても、立ち上がり付近の波形をμsオーダーで観測してみないと、なんとも言えないと思います。
        あまりお役に立てずすみません。

        1. やっぱりそうですよね(笑)
          測定器側の容量の影響があるかもしれないことを踏まえ、あとでもう一度測ってみます。
          ただハイインピーダンスになるにしても、波形を生成するという目的のためには電圧の状態を維持してくれないと意味が無いので、ラッチを入れなきゃいけないことには変わりはないと思いました。
          役に立たないということは全然無いです! 今回もプローブの問題かもというヒントをもらいました。
          今後もよろしくお願いします!

コメントを残す

メールアドレスが公開されることはありません。