DCオフセット自動調整回路を検討する!の巻き 2020.6.5

 すこし前に、Tea Timeでディジタルポテンショを動かしてみました。小さい素子ですがI2Cで制御できて結構便利です。ただ、本当に小さい!
まあ、面白半分で試してみたわけですが、それをイザなににつかうか考えても、あまりいいアイデアがでてきません。最初に
アンプのオフオフセットキャンセルに使えば便利かな〜と思ってみましたが、電源投入時に調整するとしても、そのときが一番不安定なので
そこでキャンセル回路を動かしても意味がありません。

 でも、BBSでキャンセル実行のスイッチをつかったら?とか、DAC回路のキャンセルなどは?などの投稿もあり、
どうつかえるか風呂に入りながら考えてみました。例えばパワーアンプなどだったら、

 アンプの作動時間を概ね10時間を目処に、無音状態が10分続いたらキャンセル機能を作動させる。
 
というようなことができたら、アンプもノーメンテで使えそうですし、それにオフセットが常にゼロに近い状態というのも気持ちのいいものです。

まあ、手っ取りばやくオフセットキャンセルしようと思えば、アンプにDCサーボをいれれば済みますが、それをするにはアンプ回路を
かなり変更する必要があります。できるなら、アンプ回路はそのままで、できるだけ簡素な形の外付けでキャンセル機能が使えれば便利でしょう。

オフセット発生をどう計測するか?
 まず、アンプのオフセットをどのように測るかが、ポイントになります。というのもマイコンのPICをつかうことを考えており、その中に10ビットの
ADコンバータが入っているので、それを使えばいいわけですが、負電圧も測定できなければなりません。さて、どうやったらできるかな?

で、このこのような投稿を頂きました。色々な方法がありそうです。

負電圧を測定するためのアイデアをいただきました。


このような回路で負電圧も測定できます。

思い出した!
 そういえば、だいぶ前からですがインテリジェントMUTE回路なるものをリリースしています(まだまだ現役です)。
この中でパワーアンプのDC漏れを検知をPICでしているものがあり、久しぶりに回路をみて思い出しました。



ちょうど下図のような入力の回路になっており、Rの値は20kΩにしていますが、これで±10Vの電圧を0〜5Vに変換することができます。



PICの前段に抵抗の分圧・加算回路を追加すれば±10Vの電圧を0〜5Vで計測することができます。
出展はここ(マニュアル)

念のため、SPICEで再度確認です。SPICEをつかうのもひさしぶりかも。
最近はどうもディジタル系に走っているもんな〜。


入力回路部分をSPIECしてみました。


青線が入力、緑が出力(PICのAD入力)
入力の電圧範囲がPICのADの入力範囲に納まります。

すこし分解能が不足

パワーアンプのDC漏れを検知するなら、およそ1V程度を検知できればいいのでこれで十分ですが、オフセットキャンセルとなると
もうすこし分解能が必要です。±10Vの電圧を0〜5Vに変換して、10ビットのADをかければ、分解能はおよそ20mVです。
回路定数を変更すれば±5Vの入力範囲に変更できますが、それでも分解能は10mVです。
すくなくとも、1mV以下の分解能はほしいところです。
まあ、オフセットの計測はもうちょっと後で考えるとして、まずはオフセットのキャンセル方法です。

どこに、オフセットキャンセラを置くかな?

たとえば、お気楽でないアンプを例にとって、考えてみましょう。このアンプの構成を等価的に示すと
下図のようになります。ちょうど10倍のアンプになっています。10倍って低くない?って声が聞こえてきそうですが、
DACの出力2Vrmsを考えると最大値で2.8Vの出力があります。10倍もあればアンプ出力は28Vになりますので、
十分なゲインです。そもそもアンプの電源電圧が25V程度なので、オーバしてしまいます。そのため、
もう少しゲインを下げてもいいわけですが、あまりゲインを下げると、今度はボリュームをかなり回さないといけなくなるので、
ちょっと気分的な問題との兼ね合いです。
 私の場合は、だいたい大きな音をだすときは12時の位置を越えるくらいになります。あまり回さないといけないようだと、
気分的にアンプを非力に感じてしまいます。多くの市販のアンプなんかは9時ごろの位置でも大きな音がでるように設計
されていますが、ちょっと回しただけで大きな音がでるからアンプの出力が大きい!と勘違いさせる戦略ではとおもったり
です(笑。まあ、実際には昔のチューナなどは出力が低い(200mV程度)ので、それにあわせた設計になっているのだと
思いますが・・・・・。

さて、話はもどって下図のアンプではわざと帰還回路にオフセットを発生させる電圧源(OFFSET)をいれて、およそ-0.2Vの
オフセットを発生させています。

お気楽でないアンプを等価回路です。わざと-0.2Vのオフセットを発生させています。


-0.2Vのオフセットを発生させています。


入力部分だろうな〜
 一番簡単な方法、というよりここしかないような気がしますが、カップリングコンデンサを出た直後にキャンセラ回路を設置です。
ディジタルポテンショの出力を2.2MΩの抵抗を介して接続します。


これが一番シンプルかな?

上記のようなキャンセラの接続で、出力電圧の調整範囲はおよそー200mAから800mVになります。2.2MΩの抵抗を
もっと大きなものにすれば、調整範囲を狭めることもできますが2.2MΩ以上はなかなか手にはいらないので、
この値としました。
 で、このときの調整の分解能ですが、-200〜800mVをディジタルポテンショの分解能7ビット(127)を考えると、およそ
8mVになります。ちょっと微妙だなあ〜。分解能としてはもう少しほしいな〜。
 せめて10ビットあればサブmVになるのになあ〜。
 まあ、8mV程度の分解能でよしとするか、あるいはディジタルポテンショメータをあきらめて、
DAコンバータを用いて10ビットにするか。DAを用いれば分解能の問題はわりと簡単に解決します。ちなみにDAを
12ビットにすればおよそ0.25mVの分解能なのでオフセットをゼロにかなり追い込めそうです。

オフセット計測の高分解能化
つぎは、オフセット計測の分解能をあげることを考えていきましょう。PICのADだけだと10bitですから分解能は10mVなので、
すくなくとも1mV以下にはしたいと思います。で、考えられのが増幅のためのアンプの挿入です。
OPアンプがあれば簡単ですが、別途電源も必要になるので5V単一で動くアンプを探します。
ちょうど、こんなICがありました。これをつかえば、外付け部品なしに最大32倍のゲインに設定することができます。
秋月から最近販売されるようになりました。 値段的にも100円なので導入しやすいです。


このアンプが便利に使えそうです。価格も100円です。


内部の構造はこうなっています。

ちょっとこのアンプを試してみましょう。このアンプにはREF入力があり、これを2.5Vに設定すれことになります。


REF電圧を2.5Vに設定してつかうといいでしょう。

REF入力がすこし検討しどころ
プログラマブルゲインアンプを使う場合で気をつける点はREF電圧のインピーダンスを低く保つ必要があるということで。
メーカのカタログにも下図のような回路が載っています。基準電圧元をOPアンプを介して、アンプのREFに接続しています。

REFの駆動は十分に低いインピーダンスで行う必要があります。

基準電圧元とOPアンプを用意するのも大げさだなあ〜。たとえば基準電圧元にTL431あたりを使えば、出力インピーダンスも
低くてよいかもしれません。あるいは、OPアンプ内蔵のPICをつかって、電源電圧を抵抗で1/2に分圧したものをバッファアリング
して使用するかな??

そうだ!
 ちょっと目先をかえて、DA変換器を基準電圧源に用いれば回路は簡単になりそうです。ディジタルポテンショが7ビット分解能
で少し足りないので、10ビットあるいは12ビットのDAを使ったほうが良さそうなのですが、下図のDA変換器には出力が2CHあります。
そこで、1個をオフセットキャンセル用、そしてもう1個を基準電圧源とすればいいでしょう。そうすれば、部品点数を増やさずにすみます。
 

これ(2chの10ビットDAコンバータ)を使いましょう。

具体的な回路を描いてみましょう!

必要なICは3個と、抵抗は3本です。電源レギュレータは割愛してます。普通の3端子レギュレータでいいかな?
精度が必要なところはあまりないかな?しかし、表示がなにもないな〜。LEDの一つでもとりつけたほうが良さそうです。


こんな回路になります。PICとアンプ、DACとの配線は配線しやすいようにおそらく変わるでしょう(笑

 抵抗値の誤差や各素子のばらつきがあるでしょうから、かならずしも計算どおりにオフセット補正値がきまるとは思えません。
そのため、オフセットゼロの状態を記憶させる必要があるので、なんらかの調整機能は必要だと思われます。そこで、スイッチもとりつけておきましょう。
また調整モードと実行モードの区別も必要でしょうから、ジャンパーも設けておきます。まあ、不要なら不要で使わないまでです。

PICの使わない端子はICSP(In-Circuit Serial Programming)につかうのと、デバッグのときに液晶をI2Cで取り付けたほうがやりやすいので
そのための通信端子です。

このくらいの簡単な週末にちょいちょいと作れそうです。最初はブレッドボードがいいでしょうね。

ソフトはすこし悩むかな。でも18PinのPICのプログラム容量(4kW)で納まるだろうか?というのも本体のプログラムは問題ないでしょうが、
デバッグのための通信ソフトや液晶表示ソフトもいれないといけないので、そちらが結構圧迫するかもしれません。

あ〜CPM68Kがまた遠ざかってしまいそう・・・・・。


ブレッドボードに組んでみましょう! 2020.6.7

最初は部品点数も少ないので、小さい基板に組んでみようかという考えが脳裏をよぎり、部品をあつめだしましたが、
配線が面倒そうな思いが次第に強くなり、結局ブレッドボードに日和ってしまうことになりました。だって、便利なんだもん!
いつもは、PICからの配線は適当で、プログラムを書く段になって、どこにつないでたっけ?と確認する始末なのですが、
今回は回路図どおりに組み立てます(笑。
 あと、PICの実行内容を表示するため、I2C通信で動作するLCDを取り付けました。これは、実機に組み込むときには必要ないでしょう。


ブレッドボードに組み立てです。

基本的な素子の駆動の確認

ブレッドボードに組み終わったら、早速プログラムの作成です。
まずは実装されたDAコンバータやゲインアンプの動作のためのサブルーチンの作成と、動作の確認です。
特段、難しいところはないで、とくにトラブル無しで進んでいきます。


まずは素子の動作確認です。下の波形(CH1)がDA出力の波形。
上の波形(CH2)がゲインアンプによる増幅後の波形です。


LCDにはPICでの変数の値を表示しています。
左側がAD変換値、0.5秒毎の平均値、最大値、最小値です。AD変換は1ms毎に動作させています。
処理に余裕がありそうなので、最終的には500us毎に変更できるでしょう。
そして、右側がゲインアンプのゲインと、経過時間です。経過j時間は電源を切っても積算するようにしています。


PICの変数が表示できるようにLCDもとりつけています。配線数が少ないI2Cで通信です。

さて、気になるのがROMの使用率です。使用しているPICが4kWの小さいものなので、
この段階で大きな値だと、あとあと苦しいですが、必要となりそうなサブルーチンをほとんど組み込んだ
状態では56%でした。ということは、あと処理ロジックを組み込むには十分な容量が残ってそうです。
と、期待しましょう!

現時点でROMは56%になりました。


実使用をイメージして機能を考えよう! 2020.6.8

このオフセットキャンセラをアンプ基板に搭載する場合をイメージして、必要な機能を考えてみましょう。

(1)アンプ基板に取り付け
  SP出力をオフセットキャンセラの入力に接続。
  オフセットキャンセラのオフセット出力をアンプの入力部分に接続。接続する箇所はカップリングコンデンサの出側。
  ※DCアンプの場合の接続については、後述することにしましょう。

(2)オフセットキャンセルを調整モードに設定する
  モード設定ジャンパーを短絡させます。

(3)アンプのオフセット電圧を調整する。
 アンプに電源を投入してアンプ自体のオフセット調整します。オフセットキャンセラは調整モードで起動したことを知らせます(LEDを1回点滅
 スピーカ端子出力をテスタで計測しながら行います。
 この調整は通常のアンプのオフセットの調整です。スピーカ端子出力がゼロになるようにアンプ基板のVRを調整しますが、
 完全にゼロになるまで調整する必要はありません。ほぼほぼゼロになるように調整。
  このときオフセットキャンセル基板は、分圧抵抗の誤差を内部で修正する。すなわちスピーカ出力のオフセットがゼロになっている
 状態で、ゲインアンプの出力がゼロ(実際にはVcc/2)になるように、REF電圧(DA出力)を調整します。

(4)オフセットキャンセラのSW1を一度押す

  アンプ自体のオフセット調整が終わったら、SW1を一度押して,アンプオフセットの調整が終わったことを教えます。
 このとき、無音状態のノイズレベルを記録し、この値をベースにして以降の無音状態を判定(*)します。
 オフセットキャンセラはLEDが2回点滅して知らせます。
 (*)残留ノイズの多いプリアンプを使用する場合は、予めプリアンプを接続した状態にしておく必要がある。

(5)アンプのオフセットを-100〜-200mV程度に設定する。
 今度はアンプのオフセット調整VRををわざと動かして、オフセット値を-100〜-200mV程度に変更します。
 この理由は、オフセットキャンセラの調整範囲がプラス方向しかできないので、最初にアンプ自体のオフセットをマイナス側に設定しなければ、
 オフセットをゼロにすることができないためです。

(6)SWを押してオフセットの微調整モードに入ります。
 SW1あるいはSW2を押して1STEPづつアンプオフセットを調整します。
 テスターで観測しますが、1ステップで変化する量は小さいはずなので、
 変化がわからなければ何度もSWを押す、あるいは長押しします。ここで、ほぼゼロにもっとも近い値に設定します。
 PICは最終的なオフセットの測定電圧を記録します。この値が、今後目指す値になります。
 これで設定終了です。

(7)オフセットキャンセラを自動調整モードに設定する。
 アンプの電源を投入したまま、モード設定ジャンパーを開放します。
モード設定ジャンパーの開放で自動的に、(9)に移行します。

(8)アンプの電源を一度落とす(これはスキップ可)。

以上で調整作業は完了です。

(9)アンプを使用
 オフセットキャンセラは起動時にモード設定ジャンパーが開放であれば、自動調整モードで動きます。
 オフセットキャンセラが自動で調整を行うタイミングは下記とします。
   ・アンプ起動10分以降とする。
   ・調整間隔は1時間毎(*)。ただし、無音状態が1分間以上(*)継続した場合のみ。 (*)要調整です。
    (したがって、アンプから音が鳴っている場合は時間に関係なくオフセットキャンセルは行われない)
   ・SW1を押すと、無条件でオフセットキャンセルを行う。


また、オフセット調整中は下記も実行。
   ・オフセットキャンセルの実行中はLEDは点灯
   ・キャンセルを行う1秒前にリレー制御出力をONにし、オフセット調整完了後、1秒後にリレー制御出力をOFF
    ※リレーの接点はアンプ入力に接続してもいいが、通常は要らないでしょう。

あと、すこしリミッタみたいなものも設けたほうがいいかもしれません。というのも、アンプのオフセットが急激に変化することは
あまりないと思うので、一度のオフセットキャンセル量は一定以下に抑えてほうがいいでしょう。

プログラムを組んでいきましょう!

2156年問題?
 オフセットキャンセラには内部で稼動時間の積算タイマーを持たせます。というのも調整時間を1時間毎に設定しているので、
それを計測しなくてはいけません。そのためタイマーの変数をLONG型(32ビット)で定義していますが、タイマのオーバフローは
考えていません。そのため、常時電源ONで、つねに音楽信号がはいってくると、いつまでもリセットできずにカウントし続けます。
この場合は136年後にプログラムが暴走するかも・・・・。いまから136年後なので2156年問題です(笑。

表示を拡充!
 やることは単純なのですが、必要な定数が数多くあり、また変数もたくさんあるのでできるだけ多く表示しないと
デバッグが大変です。ということで、できるだけ多くの変数が表示できるように液晶に詰め込みました。


無音検知はどうしよう?
 無音状態とは、厳密にいえば音が鳴っていない状態のことになりますが、この検知は意外と難しいかもしれません。
人間の耳はとてもいいので、ノイズに埋もれた状態であっても音楽を聞き取ることができます。まあ、そんな残留ノイズの大きな
アンプにとってはこの装置は対象外かもしれませんが・・・。
 で、実際にスピーカ(卓上の小さいもの)に信号を加えると、10mVpp程度の振幅を入れると、リスニングポジションでは聞こえませんが
スピーカに耳をあてるように近づけるとわずかに聞こえてきます。ほとんどヘッドホン状態にすると、かなり小さいレベルの音でも聞こえてきます。
かといって、あまり無音の条件を厳しくしすぎると、わずかなノイズでも無音でないと判別してしまいます。ここは、すこし割り切りが必要で
リスニングポジションでの無音というのを一つの条件に設定することになるでしょう。
 ということで、残留ノイズに対してその2倍以内の振幅の信号であれば無音状態というように設定してみましょう。
実際にそれでいいかどうかは実機で試してみましょう。


プログラムの骨子ができてきました。 2020.6.9

まだ、実際には動かしていません。コンパイルを通しただけですが、ROMの占有率は88%まできました。あとちょっとしかありません。
これからは修正する場合でも、プログラムのコードを短くすることを意識しなくては・・・。


だいぶプログラム容量が増えてきました。

なにかシミュレータはないかな?
オフセットキャンセラの動きを確認したいのだけど、チェックのために実機に搭載すると机の上が埋まってしまいそうだし、
なにか手軽にチェックできるようなシミュレータはないものだろうか?


お気楽でないアンプで試してみましょう。 2020.6.10

わざわざシミュレターを用意するくらいなら、実際のアンプで試したほうが早そうなので、お気楽アンプでないアンプのSMD版
を引っ張り出してつかうことにしましょう。2枚あるので1枚の方にパワートランジスタ(MOSFETのIRF140/9140)を取り付けて使用します。
アンプの定数を確認しおくと
 入力抵抗:47kΩ
 帰還抵抗:1.5kΩ+100Ω (ゲインは16倍)
でした。念のため動作を確認しておきましょう。

お気楽でないPA-SMD版でテストを行いました。



一応、アンプの動作も確認です。ゲイン16倍になっています。


接続箇所は
 まず入力オフセット電圧を加えるところは、カップリングコンデンサの出側になります。そして、スピーカ出力については
位相補償のLRの出側ではなく、その入り口、すなわち終段のトランジスタの出力部分に接続します。


接続位置がここです。

動かしてみましょう!

手順どおりに動作することを確認できました。
途中でアンプのオフセットをわざと動かしても、キャンセルの動作が動くとスウ〜とオフセットが減っていきます。
でも、操作していてすこし重大なことに気づきました。

こんな感じで動作確認です。

動いているかどうかがわかりにくい・・・・・

横にデバッグ用のLCDがあるので、現状どのような動作をしているかわかりますが、
もしLCDがなければ、というか通常はないわけなのですが、LCDがないと現状どのモードで動いているのか
さっぱりわかりません。動作モードが変わるときにLEDがフラッシュするので、そのときはわかるのですが、
それ以外はちょっとわかりません。便りのないのは元気な証拠なわけですが、使うほうとしては不安になります。
ということで、最終確認の前にすこしLEDでの表示方法を検討しましょう。

オフセットの発生状態を常に表示しようかな?

動作中はオフセットの状態に応じてLEDが点滅するとわかりやすいでしょう。またゼロ点調整のときにも使えるはずです。
ということで、通常動作時には下記のような点滅パターンを考えます。

オフセット発生量 状態 LEDの点滅パターン
  +30mV以上 赤(要調整) 1秒周期でより長く点滅(DUTY=80%)
 +30mV〜+3mV 黄(要注意) 1秒周期で長く点滅(DUTY=40%)
  +3mV〜-3mV 緑(OK) 1秒周期で短く点滅(DUTY=10%)
-30mV〜-3mV 黄(要注意) 3Hzで点滅(DUTY=50%)
-30mV以下 赤(要調整) 6Hzで点滅(DUTY=50%)


要は、早く点滅したり、長い点灯が発生するとオフセット量が増えてきているということがわかるようにしましょう。
あとは、動作状態での点灯方式も考えておきます。

モードジャンパー 動作モード LED表示
モードジャンパー
(短絡)
調整モードSTEP1(REF設定)

マニュアルでアンプのオフセットVRをほぼゼロに調整し、オフセットキャンセラのREF設定を学習させる。SW1を押すことでSTEP2に以降。
エントリー時には2回点滅。
その後に、1秒周期で2回短く連続点滅。
「ピピ・・・ピピ・・・」
調整モードSTEP2(オフセット調整)

最初にアップのオフセットをわざと-100〜150mV程度になるように設定。
その後にオフセットキャンセラのSW1,SW2を使ってオフセットをゼロに追い込み、オフセット発生設定を学習する。調整が終われば、モードジャンパー開放して通常動作に以降。再度、STEP1に戻るには、一旦モードジャンパーを開放して、通常モードに移行したのち、再度モードジャンパーを短絡する。


エントリー時には3回点滅。

その後は、1秒周期で3回短く連続点滅。
「ピピピ・・・ピピピ・・・」

モードジャンパー
(開放)
通常モード(自動調整モード)

自動でオフセット修正を実行。あるいはSW1を押すと、マニュアルで修正実行。

平時の動作はこれだが、モードジャンパーが短絡されると、調整モードSTEP1に移行。

エントリー時には4回点滅。その後はオフセット発生量に応じて点滅。

I2CのLCDが接続されている場合は、最初に早く10回点滅し、I2C通信が確立されていることを示す。

これが入るほどプログラムの容量に余裕あるかな〜?? 現在94%です。と、プログラムを書き出していて
途中でコンパイルすると全然足りません。LCD表示をすべて取り除けばはいりそうですが、LCD表示なしで
デバッグなんか無理です。プログラムの開発だけもうすこし容量の大きいものに変更する必要がありそうです。
それとも、18PINのPICはあきらめて28PINのPICに置き換えるかな?でも、ちょっと大げさだな〜。
とりあえず帰ってから考えよ!

さて、久しぶりの上京です。準備しよ〜!


開発プラットフォーム変更! 2020.6.11

久しぶりの出張ってやっぱり疲れるな〜と感じつつ、今日はとりあえずプラットフォームの変更を行いましょう!
いままでPIC1827という18Pinの小容量(4kW)のPICをつかっていましたが、デバッグに必要なLCD表示関係で
プログラム容量を圧迫していて納めることができませんでしたが、容量の大きいPIC16F1938(16kW)に変更して
まずは必要な機能をもつプログラムを開発しましょう。
 でも、調子に乗っていろいろと付け加えて完成後にLCD関連のサブルーチンを抜いても、PIC16F1827に
納まらなかったらお笑いですが・・・・。


改修前です。PIC16F1827を使っています。



改修後です。中央のPICがすこし大きくなりました。PIC16F1938です。



とりあえず動くところまで作業を進めました。また明日継続しましょう!


見落としてました。 2020.6.12

やりたいLEDの表示もプログラム容量の制限が緩和されたこともあり、無事に導入することもできました。
まあ、動作には直接関係ありませんが、動作状態の把握という点ではわかりやすくなりました。
そして、デバッグモードであるLCDをとりつけた状態でオフセットをわざとずらしても、オフセットキャンセルも
正常に働きます、そこで、次に実機モードということで、LCDの表示部分を削除して動かすと、
あれ?オフセットキャンセルがうまく動作しません。
 たとえば、-100mVのオフセットを最初に与えると、オフセット値が模式的に

-100mV → 10mV → -10mV → 10mV ・・・・

と、ハンチングしています。LCD表示の有無で違うのでは、LCDがある場合はループサイクル時間が長くなる
くらいで、ほかはなにも変わらないしな〜。何がおかしいのだろう?

で、回路を眺めて肝心なことを見落としていることに気づきました。

カップリングコンデンサがLPFになっている!

オフセット調整を行うときは、入力ノイズを抑えるために入力部分を短絡して行います。
そのため、カップリングコンデンサがGNDに接続されることになるのですが、そうすると
下図のC1とR2でLPFが形成されます。これが問題の原因でした。

入力部分を短絡すると、C1,R2でLPFが構成させています。

ほとんど思い込みでしたが、オフセットの発生をDACで行ったら、その結果はアンプの出力にすぐに反映されると考えていました。
というのもアンプの周波数特性はよいからです。そのため、オフセットの変更を行ったら、すぐにアンプの出力のオフセットを測定し、不足していたら
またオフセットの変更を行い・・・というプログラムになっていました。
 しかし、入力部分のC1でLPFが構成されるので、オフセットをDACで発生させてもすぐにアンプの出力には反映されません。
そのため、オフセットの測定値には時間遅れがあったため、過剰にオフセットの調整が行われていたことになります。

たとえば上記の回路だとLPFの時定数は3.3uFと2200kΩですから7秒近くになります。ただ、R3があるので実際の時定数は
もっと小さいでしょう。

対策は?
 原因がわかったので対策ですが色々と考えられます。一つはオフセット調整に時間をかけることです。すなわちDACでの
オフセット電圧変更後に十分時間がたってから、アンプのオフセット値を測定すればいいわけです。これが一番簡単ですが、
オフセット調整に時間がかかりすぎます。というのも、オフセット電圧のDACでの変更は1ビットづつ行っています。というのは、
オフセットキャンセラの接続するアンプ回路の入力抵抗もアンプゲインもわかりませんから、アンプのオフセット電圧が測定できた
からといって、オフセット調整量が決定できません。そのため、安全策をとってオフセット電圧を1ビットづつ変更させる必要があります。

 そこで次善の策として、またプログラムの容量が増える要因になるのですが、最初の調整モードのときにDACによるオフセット電圧の
変更による感度特性と時定数を予め測定しておこう、という案です。すなわち、人為的にDACで一定のオフセット電圧を発生させて、
どの程度のアンプのオフセットが変化するか、そしてその変化する時間を測定してデータとして記録しておくことです。
そして、次からその値に基づいて、オフセット調整量を変更すればいいことになります。

プログラムを改造!
 ここでは次善の策をとりいれることにしました。そうすれば、オフセット調整は1回で済みます。整数演算の除算が加わることになりますが、
プログラム容量への大きな問題はないでしょう。

完成! 

 まずはプログラム完成(?)です。色々と操作してとくに異常のないレベルまで到達できました。
テスターで電圧は観測しているのですが、オシロで連続的に観測してみました。
アンプ基板を途中で動かしている途中にオフセット調整VRを動かしたりとかなり無茶な使い方をしていますが、
かなりの精度でオフセットキャンセルの機能が動いていることが確認できました。


定期的にオフセットがキャンセルされていることが確認できました。


さて、とりあえず一度基板に小さくまとめて、本当の実機に組み込んでみるかな?
週末のお楽しみです。


基板にまとめました!2020.6.13

部品の中で少し悩んだのがリレーです。手持ちのリレーをいくつか探してみました。一番の候補は
一番右の4.5Vのリレーです。これだと、PICと同じ電圧で動作できます。ただ、巻き線抵抗が142Ωなので5Vで
30mAの電流がながれます。そうすると5Vのレギュレータの負担が大きくなります。アンプの電源電圧から
降圧して5Vをつくりますが、アンプ電源が約25Vなのでレギュレータの損失が600mWになります。ちょっと大きいな〜。
そうなると、対極は一番左の24Vリレーです。これも比較的小型です。巻き線抵抗も高いので8.5mAしか流れません。
これならアンプの電源が直接つかえるのでレギュレータの損失は増えません。ただ、実機に組み込む前のテストアンプ基板
の電源は15Vなので、それでは低すぎて動かないだろうな〜。

どれを使おうか悩んでしまいます。

さらにいろいろ探していて、基板に取り付いた状態のリードリレーを1個発見です。
これがいい!! なんせ5V10mAで動くので、PICに直結できます。駆動用のトランジスタも
省略できます。

試作基板からとりはずしたリードリレー。これがいいでしょう。

さて、その他の部品を探してきます。そして、大体のレイアウトを決めて制作にかかりましょう。

必要な部品を探して、まずはレイアウトを検討です。

完成!

小さい基板で、部品点数も多くはありませんがやはり手組みは結構時間がかかります。とくに、基板を裏返すと、大抵一二回は
ICピンの左右を間違えてしまうのですよね〜。一旦半田付けしてから、基板を表に向けると「あ!」ということになってしまいます。

とりあえず完成しました。

なお抵抗についてはすべて5%のチップ抵抗にしました。本来はオフセットを測定する部分の分圧抵抗は1%のものをつかう
べきですが、5%の炭素皮膜の抵抗でどこまで性能がでるか試してみたかったこともあります。炭素皮膜だと温度係数も悪いから
ちょっと心配ですが・・・・。でもチップ抵抗をつかった最大の理由は、サイズの問題とリード線の抵抗より実装が簡単そうだったからです。
1608サイズのチップ抵抗なので基板のランド間にちょうど納まります。
 さて、どこにチップ抵抗が隠れているでしょう?(笑

半田面の様子です。チップ抵抗はどこにあるでしょう〜!


答え:オフセット出力部の2MΩ(1MΩを2個直列)


答え:オフセット入力部の分圧抵抗(15kΩ×2) 半田面のメッシュは
VCC(5V)になっています。



まずはテスト基板で動作確認!
ずいぶんスッキリしたテスト環境になりました。
で、やっぱり何点か要修正点がでてきました。それをちょこちょこと修正です。

テスト基板で動作の確認です。

で、問題なく動いているようなのですが現状どういったステージで動いているのかが、まったく外から
わかりません。単にLEDが点滅しているだけなので・・・すくなくともリレーが動いている間は、LEDが点灯する
ようにした方が、いいかな〜と。というのもリレーの動作音が小さくて聞き取れません。やっぱりもっと大きな
リレーで「カチ」という音が出たほうがよかったかも。

実機に組み込んでみよう!
組み込む実機はお気楽でないアンプのミニ版(MINI AMP2)を使います。オフセット電圧は組み立て時に調整しましたが、
再度測ってみたところ、2.8mVと8.6mVでした。普段なら、全然気にしない値ですが、この企画で0mV付近のオフセットばかり
みてきたので、結構大きな数値に思えてきました(笑。まあ、実際にはまったく問題のないレベルなのですけれどね。

これに組み込んでみましょう!

さて、明日の作業ということにしましょう!


実機につないでみる! 2020.6.14

実機につないでみて、色々と改造すべき点がみえてきました。
まず、無音状態になっているかどうかの表示が必要なことがわかりました。
というのオフセットキャンセルが作用するには無音状態であることが必要です。もし残留ノイズ等の
レベルが高くで無音状態と認識されなければ、いつまでたってもオフセットキャンセルが効きません。
ということで、無音状態かどうかがわかるように、サウンドオン表示用のLEDを追加でつけました。
このLEDをつけたこともあり、さらに無音検知のための閾値もボタンで設定できるようにしました。

あと、オフセットキャンセルボタンは外だしすることも考えて、そのボタンを外だしとしました。


少々基板に追加のLEDとボタンを追加しました。




改造後の回路図です

組込みは、アンプ基板から線を取り出して接続します。
どこに接続するかは、アンプ基板によって違いますが、MINI AMP2の場合は下記のようになります。
今回は1個しかオフセットキャンセラを作っていないので、片チャンネルにのみ接続しています。


片チャンネルにキャンセラを接続しました。


接続位置になります。

アンプ単独で稼動中です。

メインのシステムに接続して使い出すと、色々な機器の電源をいれないといけないので、部屋が蒸し暑くなることもあり、
まずはこのアンプに安物ですがCDPを接続して単独でシステムとして組み込んで稼動させました。


まずはシンプルなシステムで稼動させています。

オフセットキャンセルの機能の評価には時間がかかります。通電しながら、定期的にオフセット電圧を測定してみたいと思います。

さらに改造しなくっちゃ!

稼動中はLEDが点滅の仕方でオフセット電圧を表示してくれますが、音楽が鳴り出すと点滅の仕方が結構不規則になってきます。
というのも、オフセット電圧は約0.5secの平均値を計測していますが、どうしても音が鳴り出すとオフセット測定が難しくなります。
もっとも、LEDはアンプのケースの中に入るでしょうから、普段はみることはありませんがアクリルケースのアンプなのでLEDが丸見えです。
ということで、音が鳴っているときは、オフセット表示の点滅をやめたほうが良さそうです。それに、オフセットを気にしなければいけないのは
音が止まってからですからね。この改造は、実機でのオフセット評価が終わったら施しましょう。

測定結果 キャンセラ無し キャンセラ有り
電源投入時 +4.0mV 0.2mV(設定直後)
稼動3時間後 +14.1mA -2.4mV
稼動5時間後 +12.5mV -0.7mV
稼動7時間後 +7.8mV -0.1mV
電源OFF
翌日電源ON +9.1mV 7.8mV
3時間後 7.7mV 7.7mV
5時間後 9.2mV 7.8mV

あれ? 2020.6.16

次の日からオフセットはちょっとずれていますね。ずれたまま安定している・・・・
なにが起こったんだろう?ソフトのバグかな?それとも初期調整不良?
それとも入力分圧抵抗を5%の炭素皮膜にしたせいかな????

もう一度、再調整して測ってみましょう!

(づくかな?)