【パワーメーター2019】外部発振器割り込みで精度18ppm達成<内部クロックだと198ppm>

mbed用格安CPUのSTM32F103C8T6で内部クロックで割り込みを使ってクランクのトルクと角度を測定していたらサンプリング時間ばらつきが大きくて、とてもデータとして使えなかったため対策をしてます。

●外部水晶発振器と内部クロックでの割り込み時間ばらつき測定
  プログラムは、内部の場合は、TICKER割り込みAPIで1280usec毎に割り込み関数を
  呼び出す場合、外部クロックの場合は、InterruptIN APIで外部タイミングを待って割り込み関数を呼び出す方法、両者は同じ割り込み関数で、ポートを立ち上げて、オシロでそのポートを測定します。本測定では、時間の絶対値が問題ではなく1回ごとのサンプリング時間のばらつきがどの程度あるのかを調べてます。絶対値は、後のデータ処理で治せますが、1個ずるばらばらなサンプリング時間だと後で補正がきかないので、測定データがNGになってしまいます。

①内部クロック割り込みの誤差
水晶と分周で12.8MHzを2^14分周して781.25Hz=1.28msec周期なので、内部クロックも1280usecにセットして測定しましたが、198ppmと結構ばらつきました。通常マイコンが100ppm程度といわれているのに、STM32F103C8T6は200ppmくらいで相当劣悪です。

測定方法:オシロでトリガーをかけてランダムに10回測定して3σ計算してばらつきとしました。

➁外部クロックをいれた場合
これは、昨日測定した基板をそのままCPUにいれてあります。

ランダムに9回測定して、ばらつきはゼロでした。平均値が18ppmずれていいるだけですのでSG8002DBのスペック±20ppm以内に入ってました。昨日測定したときよりノイズがすくなかったです、マイコンにつないで負荷をかけたので、電流が安定したのかもしれません。

●以後
クランクの基板に外部クロックをいれる準備をします。本番用の外部発振器基板は、もっと小さくして、時計用の水晶32.678KHz ±20ppmを使って10msec付近まで分周して使います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です