エアガン測定

http://www.eonet.ne.jp/~daisaku-tech/index.html

Blue Pill(STM32duino)のanalogRead実行時間は約7μs

STM32duino環境のBlue Pillボード(STM32F103)によるanalogRead実行速度は約7μsです。次のsketchで実行時間を見てみました。

int val[10];
unsigned long startTime;
unsigned long endTime;

void setup() {
  pinMode(PA0, INPUT_ANALOG);
  Serial.begin(115200);
}

void loop() {
  delay(1000);

  startTime = micros();

  val[0] = analogRead(PA0);
  val[1] = analogRead(PA0);
  val[2] = analogRead(PA0);
  val[3] = analogRead(PA0);
  val[4] = analogRead(PA0);
  val[5] = analogRead(PA0);
  val[6] = analogRead(PA0);
  val[7] = analogRead(PA0);
  val[8] = analogRead(PA0);
  val[9] = analogRead(PA0);

  endTime = micros();

  Serial.println(endTime - startTime);
}

analogReadを10回実行し、その時間(μs)を出力しています。forループにしていないのは、ループ処理の時間を含まないようにするためです。 

実行結果は、次のような感じです。1秒ごとに結果出力。

70
70
71
70
70
70
70
71
70
70
70  

 arduino UNOでは、標準状態ではanalogRead実行時間は約100μsで、高速化(ADCの分周値16に変更)して約16μsぐらい。arduino M0 proも、標準の実行時間は約100μsと合わせられており、高速化(ADCの分周値64に変更)して、こちらも約16μsぐらいなので、Blue PillはUNOやM0に比べるとanalogReadがだいぶ高速です。ただし、精度については未確認。

おそらく、UNOやM0でも分周値をさらに小さくしてADCのクロックを速くすれば高速化できると思いますが、精度が悪くなると思われます。そのため、ググって見つかるanalogRead高速化では分周値16(UNO)になっていると思われます。