スピーカアンプのICモジュールは複数のIC製造メーカから色々な種類が出ているが、 それらの多くは、入力・出力両方か少なくともどちらかがコンデンサでカップリングされたACアンプとなっている。 音声用のアンプとしては問題ないが、加振器をドライブするためのアンプとしては、DCまで出力できるアンプが必要になる。 DCまで出力可能なアンプとなると、市販品では高価なものが多く、できたら安価なICモジュールで制作したい。 TDA1517はアンプモジュールの一つで、上記の通り基本的にはACアンプである。安価にDCアンプを作るために、 オフセットをオペアンプで調整し、DCアンプとして使用するための方法を考えてみる。
アンプモジュールには、オペアンプタイプと、ゲインが固定されているタイプがあり、今回取り上げたTDA1517は、 ゲインは20dBに固定されており、負帰還を調整する必要がない。 オペアンプのタイプのICモジュールの場合は、負帰還と位相補償の調整を行う必要があり、 ゲインが固定されているタイプに比べてオフセットを安定させるのがやや難しいことがある。 TDA1517の場合、BTLでは入力のみ、ステレオ出力では入出力でコンデンサカップリングであり、 DCアンプとするためには入力でのオフセットを調整した上で出力はBTLを使用する必要がある。 データシートには明示されていないが、BTL時の出力の基準電圧は電源電圧の約半分で(Vcc/2)、 入力端子のオフセットは、電源電圧が12Vの時大体2V程度となっている。 正入力と負入力にそれぞれオペアンプでオフセットを調整して入力すれば良い。 左右のオフセットは調整されていないので、両入力のオフセットとも別個に調整できるようにする必要がある。 ちなみに、TDA1516だと、入力の基準電圧が外部に出ており、これを使うこともできるが、 それでも左右のオフセットの誤差が無視できないことがあるので、調整は出来るようにした方が良い。 一番簡単な方法は、半固定抵抗で2V程度あたりに仮想GNDを設定し、入力は仮想GNDを中心とした信号として入力し、 正入力はオペアンプのボルテージフォロワで受け、負入力はオペアンプの反転増幅回路で作成し、オフセットはオペアンプの非反転入力で調整する。 ゲインが20dBあるので、ノイズについては注意する必要があり、使用する帯域によって、位相補償を行う。 入力インピーダンスがかなり適当になっているのと、入力のグランドとはフロートにする必要があるのに注意。 オペアンプはグランド付近まで入力・出力可能なタイプを選定すれば良く、必ずしもR2Rでなくて良い。 今回は手元にあったAD8666を使用した。AD8666は、入力はグランド-0.1Vから電源電圧-2V、出力はR2R対応である。
ちなみに、今回のアンプでドライブする加振器はS-0105 (WaveMaker Mobile) という有限会社旭製作所が製造・販売している機種で、周波数特性は下図の実線のようになる。点線は一般的なACアンプで、特に100Hz以下の低周波の出力が不足していることがわかる。 加振器に附属する電力増幅器+ファンクションジェネレーター+振動計も販売されているが、最新機種ではD級アンプになっており、通常用途では問題ないのだろうが、 今回の研究では高周波ノイズが問題になるため、自前で用意することになった。旧型アンプではデジタルアンプでなくてノイズは少なかったようだが、 発熱等の問題が大きく切り替えられたと思われる。
<convivial> high-rez, but I don't know enough to help you because I am
a newbie to perl programming and although I am in deep luv
with perl and planning on marrying perl, I still have a lot
to learn.
<rindolf> convivial: you can only marry Perl if polygamy is legal
where you live.
<rindolf> convivial: because Perl and I are already married. :-D
<convivial> why is that? i'm single :)
<rindolf> convivial: but Perl isn't.
<convivial> oh crap !
<convivial> all the good languages are already married :(
<rindolf> convivial: COBOL is still single.
<rindolf> convivial: but I heard she's a total bitch.
<convivial> ewwwwwwwwwwww, so is JCL and no one is knocking down either
of their doors
<convivial> rindolf, janet reno is single!
<rindolf> convivial: what kind of programming language is "Janet
Reno"?
<convivial> :)
<convivial> she is a person
<rindolf> convivial: I'm not interested in people, I'm only
interested in programming languages.
<shaldannon> rindolf: you should try Ada
<rindolf> shaldannon: Ada 95?
<shaldannon> yeah
<shaldannon> the syntax of Pascal, the power of Basic and the
friendliness of Java
-- Commiting yourself to a programming language on Freenode's #perl.
-- #perl, Freenode
<Mel|work> Yaakov: icke==troll?
<rindolf> Mel|work: no, he's not a troll.
<Yaakov> Mel|work: No, icke is just... enthusiastic about "channel
purity"
<Mel|work> k....
* rindolf hates when people abuse the == operator in English
for "contained in"
<apeiron> rindolf, "icke contained in troll"? That's not what Mel|work
meant.
<tarbo> sure he did, if you make troll a set of users
<rindolf> apeiron: what he meant by icke == troll is that icke belongs
to the set of trolls.
<rindolf> apeiron: not that every troll in the world is icke.
<apeiron> rindolf, No, he was asking if icke is a troll.
<icke> $icke->isa('Troll');
<icke> (false)
<rindolf> apeiron: is-a means "contained in the set of objects with the
property of"
<rindolf> apeiron: mathematically speaking.
<apeiron> rindolf, Okay, so you're assigning the mathematical meaning
of == to its usage in a *perl* channel?
<apeiron> rindolf, Now who's fiddling with meanings, eh?
<rindolf> apeiron: whatever.
<apeiron> 'whatever' is what those who have lost their argument say.
<rindolf> apeiron: whatever.
<apeiron> ^ QED
<rindolf> apeiron: whatever.
<PerlJam> apeiron: I thought that's what people who don't care say.
<apeiron> PerlJam, If one doesn't care, they wouldn't respond.
<PerlJam> apeiron: whatever
<PerlJam> ;-)
<rindolf> LOL.
-- Whatever
-- #perl, Freenode