やっつけな日常(61) Arduino Uno R4 MINIMAのオペアンプを使ってみる

Joseph Halfmoon

みんな大好きArduino Uno R4のMCUルネサスRA4M1にはオペアンプが搭載されています、4個も。ただしボード的に使えるのは1個限定みたい。以前からその辺がどうなっているのか気になっていたので、今回調べてみました。ついでにありがちな非反転オペアンプにして動作を実感。使い途はやっぱり「フロントエンド」用かね~。

※「やっつけな日常」投稿順 Index はこちら

この頃OPAMP搭載のマイコン多い気がする

この頃のマイコンにはフツーにOPAMPが搭載されていたりします。用途としてはマイコン搭載のADコンバータへの入力を増幅するための「アナログ・フロントエンド」回路向けだと思います。センサの種類によっては直接ADコンバータにかけるのに困るような微弱な信号だったりするので、オペアンプが搭載されていれば外付け部品無でインタフェースが取れるのでコストもかからずOK、ってことでしょう。入出力とも端子が出ているので、汎用「単電源」オペアンプ的な回路をこさえることも可能です。ただし、外付けのオペアンプにとって代わるような代物ではないみたいです。ADコンバータの友、くらいか。

さて、Arduino Uno R4 に搭載のルネサスRA4M1マイコンの場合、データシートを拝見するとオペアンプを4個搭載してます。この4個について端子を調べてみると以下のようでした。

+入力ピン -入力ピン 出力ピン
AMP0 P000(A1) P001(A2) P003(A3)
AMP1 P013(TX LED) P012(RX LED) P003(接続なし)
AMP2 P011(接続なし) P010(AREF/VREFH0) P004(接続なし)
AMP3 PINなし PINなし PINなし

上のAMP0からAMP3までが4個のオペアンプです。Arduino Uno R4の場合、RA4M1の64ピンLQFPバージョンである以下の型番のマイコン搭載です。

R7FA4M1AB3CFM

上記の機種はピン数が64ピンと限られているため、そもそもAMP3の端子はパッケージ的にピン割り当てが無かったです。使えんというこってす。

AMP0からAMP2までの3個については、端子(該当端子をPxxx表記)には入出力とも出てますが、こんどはArduino Uno R4ボード(以下はMINIMAの場合)側の都合でAMP1とAMP2は使えませぬ。上記の(接続なし)というのはパッケージ的にはピンが存在するものの、ボード上で接続が無いケースです。TX LEDとかRX LEDというのは出力端子としてLEDに接続しているもの。AREFはアナログの参照電圧端子として使われているものです。

そういうわけで、結局オペアンプとして使えるのはAMP0だけみたいです(まあ、ボード改造すればAMP1、2は使えるかもだけれども。)

AMP0については、Arduino Uno R4のA1、A2、A3というアナログ端子に出ているのでそこに必要な受動部品などを接続すれば構成可能です。

Arduino Uno R4ボードで非反転オペアンプ構成

オペアンプ1個を使えるようにしてくれてあるみたいです。ADのフロントエンド向けということで非反転オペアンプ構成にして動作確認してみました。「やっつけな」回路はこんな感じ。ざっくり入力を「6倍くらい」に増幅してくれる筈の構成です。ArduinoUnoR4_OPAMP_DUT_schematic

なお、オンチップのオペアンプなので、ソフトウエアか他のペリフェラルハードウエアで「オペアンプのスイッチ」を入れてやらないと動作しませぬ。オペアンプは電気を食うので、必要な時以外は寝かせておけよ、ってことだと思います。また低速な動作モードと高速な動作モードもありです。高速にすると当然電気を食います。

また、入出力がレールツーレールなどということは無く、AVCC0=@5.0VでHigh-speedモードの場合、入力は0.3V~4.4Vみたいです。流し出せる(引ける)電流も±100μAみたいなので、汎用としては使えないでしょう。

制御方法についてはArduino御本家の以下のページにザックリした解説があります。

Arduino UNO R4 Minima OPAMP

今回使ったArduino式コードが以下に。オペアンプにスイッチを入れるだけでなく、動作していることを知らせるためにLチカもするもの。

#include <OPAMP.h>

void setup() {
  pinMode(13, OUTPUT);
  OPAMP.begin(OPAMP_SPEED_HIGHSPEED);
}

void loop() {
  digitalWrite( 13, HIGH);
  delay(1000);
  digitalWrite( 13, LOW);
  delay(1000);
}
動作結果

実機結線の様子が以下に。ArduinoUnoR4_OPAMP_test

まずは時間波形が以下に。黄色C1が入力波形、青色C2が出力波形です。OPAMP_TIM2
結構、波形ガタガタだな。なんもアナログ電源に配慮せず、USBからの供給の5V電源そのままでデジタルもアナログも動かしてるからか? 後で改善策をば考える?

いっぽう周波数領域ではこんな感じ。波形がガタガタなのでデコボコしているけれども、10kHzくらいまでは増幅OKな感じね。センサ相手にゆっくり動かそうってことかね。IOAMP_BODE

まあ、気になっていたことは確認できたっと。

やっつけな日常(60) Gplatesで伊豆鳥島の位置にポッチを記入。どしたら良いの? へ戻る

やっつけな日常(62) Arduino Uno R4 Arduino環境でのIOレジスタ直接アクセス へ進む