STM32F3のOPAMPのフォロアのサンプル


以前、STM32F3のDACで正弦波を出すサンプルを書きました。その話題の続きです。


データシートによると、DACの出力範囲は0.2VからVDDA-0.2Vまでだそうです。見てみましょう!!

結構端まで振れてますね。少なくとも0.2Vどころではありません。あくまでも0.2Vというのは保証できる範囲はここまで、という数値です。
ちなみに上の図は無負荷時です。4.7kくらいのRをつけると上はVDDA-0.2Vくらいまで落ちてきます。


DACの出力バッファを無効にすると0.5mVくらいまで振れるようです。見てみましょう!!

しっかりレールツーレールで振れてますね。
しかし、バッファがOFFなので少し大きめの負荷をかけるとあっという間に歪んでしまいます。これではキレイな波形の意味がない……


さて、STM32F3には便利なオペアンプが内蔵されています。これをフォロアモードにして使ってみましょう。
303RE Nucleoの場合、DAC1 ch1とOPAMP4 VIN+が共にPA4に出ているので、直結できます。OPAMP4はPB12に出ているので、これも合わせてオペアンプの初期化を行います。

__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_SYSCFG_CLK_ENABLE();

GPIO_InitTypeDef gpio = {
    .Pin = GPIO_PIN_12,
    .Mode = GPIO_MODE_ANALOG,
};
HAL_GPIO_Init(GPIOB, &gpio);

OPAMP_HandleTypeDef hopamp = {
    .Instance = OPAMP4,
    .Init = {
        .Mode = OPAMP_FOLLOWER_MODE,
        .NonInvertingInput = OPAMP_NONINVERTINGINPUT_IO2,
    },
};
HAL_OPAMP_Init(&hopamp);

HAL_OPAMP_Start(&hopamp);

簡単ですね。

出力はこんな感じです。

ch1(黄色)がDACの出力、ch2(紫色)がOPAMP4の出力、DACは無負荷(OPAMPのみ)、OPAMPは4.7kΩでGNDに接続、という感じです。4.7kだと負荷とも思われていないのか、入力と出力がピッタリ重なって見えなくなっています。振幅もレールツーレールでしっかり振れています。


STM32F3はオペアンプが内蔵されていて、1倍、2倍、4倍、8倍、16倍の非反転増幅は外付けの抵抗類すらも不要で簡単に使えます。入力インピーダンスを高くしたいとか、振幅を少し増やしたいと言うときには結構便利です。今回はDACで使いましたが、オペアンプの出力をADCで読むこともできて、その場合はADCの入力インピーダンスを下げられたり振幅を増やしたりできるので、ADCと組み合わせると便利だと思います。
と、いうような話は以前に書いているので、そちらも合わせて御覧ください。
STM32F3、ADCとFIRとDAC。ついでにタイマとオペアンプ。