Arduino環境で使用できるMCU基板は数多くあります。
搭載されているCPUの性能も多くて、どのくらいの処理性能を持っているのか気になったので調べることにします。
注意:結果は参考です。CPUの絶対的性能を示すものではありません。
調べること
HIとLOの信号の変化を1サイクルとして、どのくらいの時間で実行できるか(1秒間に何回繰り返すことができるかはHzで表現)を計測します。
Hz = 1(秒) / HIGHとLOWの時間(秒)
測り方
測定はOWON製 オシロスコープ HDS272を使用します。
ブレッドボードにピンヘッダを挿します。
図は、RP2040 pico のGPIO 0を使用した例です。
GPIO 0(1番ピン)をプローブのチップフック、グランドは3番ピンをつまみます。
結果
結果一覧
表はベンチスコア(周波数)の高い順に並び変えています。
結果はTeensyがけた外れに抜き出しています。
Arduino nanoとRP2040 picoは、初めに測っていたために画面時間分解能が少し荒いです。
誤差と考えて問題ないと思います。
2022/8/25 Seeed XIAO BLE nRF52840を追記しました。
2022/9/10 micro:bit v1.5 を追記しました。
2023/8/20 nanoCH32V003 を追記しました。
基板名 | CPU | Clock(MHz) | 周期(us) | 周波数(MHz) |
---|---|---|---|---|
Teensy 4.0 | Coretex M7 | 600 | 0.0696 | 14.37 |
ESP DevkitC V4 | ESP32-WROOM-32 | 240 | 0.238 | 4.20 |
QT Py ESP32-S2 | Xtensa LX7 | 240 | 0.238 | 4.20 |
Seeed XIAO BLE nRF52840 | nRF52840 | 64 | 0.880 | 1.14 |
M5STAMP C3 | RISC-V | 160 | 0.888 | 1.13 |
RP2040 pico | RP2040 | 125 | 1.36 | 0.74 |
Seeeduino Xiao | Coretex M0+ | 48 | 3.08 | 0.32 |
micro:bit v1.5 | nRF52840 | 64 | 3.76 | 0.27 |
nanoCH32V003 | CH32V003F4U6 | 48 | 4.08 | 0.25 |
Arduino nano 328P | ATmega328P | 16 | 6.64 | 0.15 |
Arduino Pro Micro | ATmega32U4 | 16 | 6.88 | 0.15 |
Arduino MEGA 2560 | ATmega2560 | 16 | 7.24 | 0.14 |
※2 周波数は小数点2桁まで記載
ベンチスコアをグラフにしました。
Raspberry Pi Pico のCPU Speed変更のBenchスコアと、消費電力の調査はこちら
Teensy 4.0
HIGHとLOWの1周期の長さは0.0696us(青線AとBの時間差)でした。
周波数で表すと 1s / 0.0696us = 14.37MHz(1秒間に14,370,000回HIGHとLOWを実行できる)でした。
縦 1V/Division
横 10ns/Division
ESP32 DevkitC V4
HIGHとLOWの1周期の長さは0.238us(青線AとBの時間差)でした。
周波数で表すと 1s / 0.238us = 4.20MHz(1秒間に4,200,000回HIGHとLOWを実行できる)でした。
縦 2V/Division
横 50ns/Division
ESP32 QT Py-S2
HIGHとLOWの1周期の長さは0.238us(青線AとBの時間差)でした。
周波数で表すと 1s / 0.238us = 4.20MHz(1秒間に4,200,000回HIGHとLOWを実行できる)でした。
縦 1V/Division
横 50ns/Division
Seeed XIAO BLE nRF52840
HIGHとLOWの1周期の長さは0.880us(青線AとBの時間差)でした。
周波数で表すと 1s / 0.88us = 1.14MHz(1秒間に1,140,000回HIGHとLOWを実行できる)でした。
信号にはオーバーシュートがほとんどない波形です。
CPUのクロック上はM5STAMP C3に大きく劣りますが、GPIOのLow/Highの繰り返しは同等です。
ライブラリの最適化が優れているのでしょうか。
縦 1V/Division
横 100ns/Division
M5STAMP C3
HIGHとLOWの1周期の長さは0.888us(青線AとBの時間差)でした。
周波数で表すと 1s / 0.888us = 1.13MHz(1秒間に1,130,000回HIGHとLOWを実行できる)でした。
縦 1V/Division
横 100ns/Division
RP2040 pico(125MHz)
HIGHとLOWの1周期の長さは1.36us(青線AとBの時間差)でした。
周波数で表すと 1s / 1.36us = 0.74MHz(1秒間に740,000回HIGHとLOWを実行できる)でした。
縦 2V/Division
横 500ns/Division
Seeeduino Xiao
HIGHとLOWの1周期の長さは3.08us(青線AとBの時間差)でした。
周波数で表すと 1s / 3.08us = 0.32MHz(1秒間に320,000回HIGHとLOWを実行できる)でした。
縦 1V/Division
横 500ns/Division
micro:bit v1.5
HIGHとLOWの1周期の長さは3.76us(青線AとBの時間差)でした。
周波数で表すと 1s / 3.76us = 0.27MHz(1秒間に270,000回HIGHとLOWを実行できる)でした。
縦 1V/Division
横 500ns/Division
nanoCH32V003
HIGHとLOWの1周期の長さは4.08us(青線AとBの時間差)でした。
周波数で表すと 1s / 4.08us = 0.25MHz(1秒間に250,000回HIGHとLOWを実行できる)でした。
縦 1V/Division
横 500ns/Division
Arduino nano 328P
HIGHとLOWの1周期の長さは6.64us(青線AとBの時間差)でした。
周波数で表すと 1s / 6.64us = 0.15MHz(1秒間に150,000回HIGHとLOWを実行できる)でした。
縦 1V/Division
横 2us/Division
Arduino Pro Micro
HIGHとLOWの1周期の長さは6.88us(青線AとBの時間差)でした。
周波数で表すと 1s / 6.88us = 0.15MHz(1秒間に150,000回HIGHとLOWを実行できる)でした。
縦 2V/Division
横 1us/Division
Arduino MEGA 2560
HIGHとLOWの1周期の長さは7.24us(青線AとBの時間差)でした。
周波数で表すと 1s / 7.24us = 0.14MHz(1秒間に140,000回HIGHとLOWを実行できる)でした。
縦 2V/Division
横 1us/Division
スケッチ
スケッチの説明
loop()関数のオーバーヘッド(関数呼び出しにかかる時HIGH間)をなくすために、while文で永久ループにして、LOWとHIGHを繰り返します。
基板によってピン番号が違うので、マクロ定義により適当なピン番号で調査をしています。
スケッチ
#define PIN 0
void setup()
{
pinMode(PIN, OUTPUT);
}
void loop()
{
while(1)
{
digitalWrite(PIN, HIGH);
digitalWrite(PIN, LOW);
}
}
関連リンク
履歴
履歴の更新は、評価基板の追加やデータの修正時に行います。
結果や解釈に影響のないサイト内のメンテナンスや修正は省略します。
- 2022/6/17 公開
- 2022/6/18 Teensy, QTPy ESP32-S2, M5STAMP C3,Arduino ProMicro, Arduino MEGA2560を追記
- 2022/8/25 Seeed XIAO BLE nRF52840を追記
- 2022/9/10 micro:bit v1.5を追記
- 2023/8/20 nanoCH32V003を追記
コメント