MicroPython的午睡(66) ラズパイPico、非反転アンプのオフセットとゲイン調整

Joseph Halfmoon

前回前々回とMicroChip社製MCP4018デジタルポテンショメータをラズパイPicoで制御してみています。今回やってみるのは非反転アンプのオフセットとゲインの調整です。やってみて直ぐに分かったのが兄弟チップMCP4017が欲しいということ。MCP4018だけだと片手落ちです。

※「MicroPython的午睡」投稿順 Indexはこちら

マイコン内蔵のADコンバータに信号を入力する前に、外付けアンプで信号を「調整」したいことはままある筈。センサなどの信号は微弱なうえにオフセットが変化したりもするし。今回はアンプ出力をオシロで観察してますが、本来はアンプ出力をマイコンのADへ接続するための応用ですかね。

MicroPythonソース

だんだんMicroPythonネタなんだか、別シリーズのアナログネタなんだか分からなくなってきました。本題はMicroPythonネタです。でも今回のソースコードの変更は極小、MCP4018にセットする値を「標準入力」から受け入れるようにしたところであります。MicroPythonじゃ標準入力当てにするようなコードをまず書かないと思うのですが、前回、1条件の測定30秒で自動遷移としたところが、忙しくて目が回ったための変更です。

実際には、アンプをソフトウエアで自動調整するってもんでしょうが(アルゴリズムは難しそう)、今回は人の目で波形を観察して、人手で設定値を変更してます。あくまで実験。

コードの変更部分は以下に。それ以外の部分は前回、前々回と同じです。

def main():
    global mcp4018
    comparatorOUT = machine.Pin(4, machine.Pin.IN)

    mcp4018 = fullSoftMCP4018(2, 3)
    mcp4018.softResetMCP4018()
    res = 127
    while(1):
        try:
            temp = int(input("Enter(0-127): "))
        except:
            temp = 127
        if temp >= 0 and temp < 128:
            res = temp
            setMCP4018UI(res)

上記の変更を行ったコードをラズパイPico上で走らせると、標準入出力に接続している端末画面で、以下のようにデジタルポテンショメータに設定する値を入力できるようになります。

Settings

今回実験の回路その1、非反転増幅回路

これまた前回の回路と変わり映えしません。

    • R6、オペアンプにフィードバック抵抗22kΩをいれた。
    • MCP4018のA端子を釣り上げていた1kΩの抵抗は外した。

これだけです。

AMP_CircuitA

MCP4018の抵抗は、一端がA端子、他端がVSS端子となっていて、その途中にW端子が接続する構造です。W端子の位置をマイコン側から制御できるのであります。VSSとW端子間の抵抗値をRwとすると、非反転増幅回路のゲインは

(1+R6/Rw )

R6は22kΩ、Rwは振り切ると10kΩなので、そのときのゲインの計算値は3.2倍ということになります。Rwを小さくしていけばゲインはどんどん大きくなる、と。

やってみます。まずはポテンショメータを上限127と設定。入力は黄色のC1、オフセット0.5Vで振幅100mV、周波数1kHzの正弦波を入力してます。青色C2が出力です。右側の計測画面をみると振幅は約314mV。ほぼ3.2倍と予定通りの増幅率。

Res127

続いて設定値を100にしてみたものが以下に。ゲインは伸びてますが、出力波形のオフセットも上がってます。

Res100

設定値をフルスケールのほぼ半分を切る60にすると、以下のように振り切れてます。計算上はRwが2分の1の5kΩのとき、ゲインは5.4倍。でも、ゲインというより、オフセットが上がっているのが主因ですかね。

Res60

Rwを変更すると、ゲインも変化するけれども、オフセットはどんどんズレてしまう。どちらかというとこの位置のMCP4018のお役目はオフセット調整という感じがします。ゲインの調整のためにはR6に直列にデジタルポテンショメータを入れたいです。しかしそれには兄弟チップ

MCP4017

が必要かと。MCP4018の抵抗の1端は常にVSSに接続されてしまっているためです。一方MCP4017は抵抗の両端は浮いているのでフィードバックループに接続できまする。残念。手元にはMCP4018しか買ってません。

回路その2、びんびんオフセット調整

ゲインをもっと上げて、MCP4018はオフセット調整の方に「集中」するために、前回デジタルポテンショメータのA端子に接続していたR5を戻してみます(1kはちょっと小さすぎる感じがしますが目の前にあったのでまあいいかと。)こんな感じ。

AMP_CircuitB

動作点が変わってしまっているので、入力信号のオフセット電圧を1Vに変更しました。MCP4018の設定値は41です。増幅率は10倍近くになってます。

BRES41

設定値40と1ノッチ落としただけで、オフセットは0.2Vくらい上がりました。BRES40

さらに2つ、38まで落としたら下のように振り切れました。

BRES38

逆方向では45に設定すると、下限が引っかかるようになりました。

BRES45

R5の値を上手く設定すれば、ゲインにあまり影響を与えずにオフセット調整ができるんじゃないかと。知らんけど。ゲインの方はMCP4017買ってお任せしたい。

Micropython的午睡(65) ラズパイPico、アナログコンパレータのトリップ電圧 へ戻る

MicroPython的午睡(67) ラズパイPico、5V信号IF取り付け、動作確認 へ進む