Hobbuy Blog
趣味と購入のブログ

2.ArduinoのIO速度を測る① - 2025.10.28

前回の記事に続き,今回はArduinoのIOの速度を測っていきます.
手元にはDueしかないのですが,RA4M1マイコンのボードが必要になり,Uno R4 Minimaの互換ボードを購入しました.
だからと言って互換品を大いにお勧めすることはできないので純正品の購入リンクを貼っておきます.

Arduino Uno R4 Minima(純正)の購入はこちらから!

前回の記事でも述べましたが,このボードのRA4M1マイコンは最大14 bitの高性能ADCを搭載しています.
この高性能ADCを活用するためには,以下の処理が必要になります.


  void setup() {
    analogReadResolution(14);
  }
  

このanalogReadResolution()関数でADCの読み取りビット数を指定します.
このADCはハードウェア14 bitで,後からビット処理で10 bitに落としていると考えられます.
ですが,そのことをすっかり忘れてADCの速度をビット数ごとに測ってみました.
が,どれも同じだったので数字だけ言っておきます.
結果は47,619 Sa/s(毎秒47,619読み取り)でした.
その速度はArduinoの浮動小数点演算で導かれた値なので,桁数誤差は大きいです.
ただ毎秒50,000読み取りには到らないという事実は分かりました.

デジタル入力はアナログ入力の遅さとは裏腹に高速です.
833,333 Sa/sです.
不確かな記憶ですが,関数電卓で割り出した値は825,000 Sa/s程度だったと思います.

Arduino Dueはアナログ入力243,902 Sa/sという,もはや比べるまでもない優秀な成績を残していますが,デジタル入力では同じ値を叩き出しています.
放射線カウンターとするなたデジタル入力を用いるのが良さそうです.
しかし簡易エネルギー測定も目指しているためアナログ入力で頑張ることにしています.


次に,IOの反応速度を測る必要があります.
なぜなら実際のコードはアナログ入力された値の処理やif文を用いた測定関連の処理があるからです.
この測定は,計測以外の無駄な処理を挟みたくないため先日紹介した2C53Tという多機能オシロも用いて測定します.
(これがオシロスコープを買った目的の1つ)

処理としては,2C53TからArduinoのアナログ入力ピンに矩形波(3.0 V・100 Hz)を入力し,閾値(今回は1.5 Vに設定)を超えたらデジタル出力ピンの出力状態を切り替えます.
ADC読み取り,変数処理,条件分岐処理と最低限予想される処理は入れているので,実際の状況に近い測定ができると思います.

と,測定をしたのですが問題が発生しました.
Unoの方が測定できません.
Dueの方はうまく測定できて,計測したいくつかのデータの平均値は396.00 μs,つまり約2,525 Sa/sで測定できるということが分かりました.
つまり,どういうことか,Unoには毎秒100回測定するというのがキツすぎたようです.
時間がなくて一旦はセットアップを片付けてしまいましたが,また毎秒10回の測定に変更して試してみます.
(矩形波の周波数を10 Hzにするということ)

兎にも角にも,RA4M1で測定をしようと思ったらシェーピングアンプを用い,入力波形の持続時間を伸ばしてやる必要があるということが分かりました.

← 前回:放射線測定器を作ろう
次回:ArduinoのIO速度を測る② →

←目次へ戻る ←メインページに戻る