マイコンの性能調査 High/LoW

コンピュータ、組み込み

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 を追記しました。

基板名CPUClock(MHz)周期(us)周波数(MHz)
Teensy 4.0Coretex M76000.069614.37
ESP DevkitC V4ESP32-WROOM-322400.2384.20
QT Py ESP32-S2Xtensa LX72400.2384.20
Seeed XIAO BLE nRF52840nRF52840640.8801.14
M5STAMP C3RISC-V1600.8881.13
RP2040 picoRP20401251.360.74
Seeeduino XiaoCoretex M0+483.080.32
micro:bit v1.5nRF52840643.760.27
nanoCH32V003CH32V003F4U6484.080.25
Arduino nano 328PATmega328P166.640.15
Arduino Pro MicroATmega32U4166.880.15
Arduino MEGA 2560ATmega2560167.240.14
※1 周期は有効桁数3桁で記載
※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を追記

コメント

タイトルとURLをコピーしました