Uno R4 Minimaを入手したので遊びつつ、どのような実装になっているのか、仕様を眺めてみた。
UNOは現在のArduino製品の中ではClassic Familyというカテゴリに入っており、歴史的なフォームファクタを継承している。ルネサス製MCUの採用で話題だけれど、5V単電源動作可能なARMマイコンとしては高機能だ。
要点としては、初学者向けのClassicファミリにCortex-M4が降りてきて、内蔵RTC、DAC出力、CANバスといった機能にもAPIレベルで対応しているという点になる。
スペックだけ見ると、反射的に3.3Vで動いてほしいとかいろいろ要望が湧いてくるが、ターゲットはあくまで初心者なのを忘れないようにする。 (いい感じの互換ボードに期待)
ボードとピンマップを眺める
公式サイトのボード紹介ページでは、回路図と基板図をAltium365ビューワーで見ることができるようになっていた。回路図で抵抗を選択すると詳細が表示されるし、基板図上の実装と連携して位置をハイライトできたりする。
Minimaの実際の基板には16MHzの水晶は空きパターンとなっている。内蔵オシレーターで動いているようだ。
Minima 回路図
https://docs.arduino.cc/resources/schematics/ABX00080-schematics.pdf
Wifi R4回路図
https://docs.arduino.cc/resources/schematics/ABX00087-schematics.pdf
MinimaとWifi R4ではソケットに引き出されたSPIバスのマッピングが異なっている。これに伴いCANで使うピンも位置が変わっている。APIが用意されてるのにピンマップ表で表記していないのはボード依存のためかもしれない。 CANを使いたければシールド設計で対処するしかなさそう。
他にも、Minimaのソケットの3.3V出力は、Minimaのデータシートに書いてある通りMCUの内部電圧を生成しているLDOの出力を引き出している。そこまでやるのかというくらい割り切っている。
内部レギュレータから引き出せる電流量はArduinoとしては表向き載っていないけれど、ルネサスのデータシート(REN_r01ds0355ej0100_ra4m1_DST_20191008-1999414.pdf P.86 Table2.41)を見る限り100mAが限度となっており注意が必要。プロトタイピング用のボードとしてはちょっと心配になる。
ちなみにWifiR4はESP32があるため、さすがに外付けのレギュレータがある。
Minimaはコストダウンのためか、抵抗についても値をなるだけ共通化していて興味深い。プルアップ抵抗についても、USB-TypeCのCCに使う5.1kΩにそろえているようだ。
Pins_Arduino.hを眺める
Arduinoボード毎のペリフェラルの差異を記述するPins_Arduino.hを見ると、このボード設計の差異をどう吸収しているかが見えてくる。これはArduinoCore-renesas/variants/各ボード名/直下に置いてある。
WifiモデルとMinimaでPins_Arduino.hを見比べると、UARTの数が異なっている。
USB ポートはCDCなので、ハードウェアUARTは4ポート存在する。ただし、Minimaでは1chのみが定義され、Uno WifiではESP32との通信に2chが追加されている。
Minimaでは残り二つが使えないかというと、SPIバスのピンと被るものが1ch、ハーフピッチのSWD用ピンヘッダの片隅に1ch引き出してあった。
謎の5V分圧抵抗 二つのボードで共通して実装されている5Vを分圧する謎の入力。ADCに繋いでいる?ぽいので調べてみると怪しい定義を見つけた。
ここを見るとAVCC_MEASURE_PINが、計算用の係数とともに定義されている。
ADC入力関係っぽいなと思ってAPI関連のanalog.cppを見に行くとデフォルトの電圧リファレンスを計算する値として使っており。分圧抵抗もDCDCの設定抵抗を流用しているので係数で補正しているのだろうか。
ただ、代入された20という数値がADC番号だとすると、謎分圧入力はADC16につながっているので合わない。(裏でマッピングしてたりする?)
互換性と利便性の狭間
5V対応自体は互換性のためだけど、今日日センサ系は3.3Vがデファクトになっているので、初学者はいきなり分圧回路に直面する。
それも必要な過程かもしれない。UARTの入出力における視座の獲得と共に…。
UNO Wifi R4はLEDのドットマトリクスに目が行きがちだけど、よく見るとSparkfunのQuiic互換コネクタが生えている。Classicファミリユーザーの大半はプロトタイピングでの接続先はジャンパ線とブレッドボードだとおもうし、シールド基板で拡張するという概念に囚われずにいろいろなセンサをつないで遊ぶのであれば正しい。
3.3V駆動は可能か
電圧範囲的には3.3Vでも問題なく動作するはず。
そう思ってUSBを接続せず、電源装置で3.3Vを給電してみると、ギリギリ動いているが電流値が増えて挙動が安定していない。BOR設定などが働いているのだろうか。
回路的に電源部の電圧を弄ろうとしたら、USB5VをDCDCの入力側にダイオードORで繋ぎ、データシートを見ながら、電圧設定の抵抗値を変更すれば実現できる。 若干改造が必要なのと、USBの挙動に関して5V入力の整理と、電圧範囲をソフトウェア的にどう扱っているのか調べる必要がある。
5Vのままであれば、既存のモーター系シールドなどが使えそうなので、CANバスを有効化してみようと思う。