CANやUSB関連で最も基本的な失敗事例は、通信速度の基準となるクロックの周波数誤差が大きく、データが正常に通信できないというケースです。これはCANやUSBだけでなくUARTなどでもよく起きている事例です。最近のマイコンには発振器が内蔵されていて、外部に水晶振動子や、セラミック振動子がなくても動作します。しかし、内蔵発振器の周波数誤差は小さくても±1%程度です。CAN通信では±0.1〜0.5%程度、USBでは±0.25%以内の精度が必要なため、内蔵発振器では、これらの精度を満たせません。STマイクロエレクトロニクス(以下、ST)のSTM32L431の内蔵発振回路の周波数誤差を示します(図1参照)。
0℃から85℃の間で±1%に規定されています。クロックがPLLで逓倍されて、または直接分周されてCANやUSBに届いた時点でも、周波数誤差は同じ値になります(厳密に言うと、PLLのジッタも考慮する必要があります)。したがって±0.1〜0.5%や±0.25%以内は実現できません(図2参照)
しかし、内蔵発振器にはシステムの部品点数を低減できるという魅力があるので、無理に内蔵発振器を使ってCANやUSBやUART通信を行い、通信不良を起こした例があります。
内蔵発振器を使用したとしても最初は正常に通信できるでしょう。ですが、通信不良という現象は、最初は正常でも、ある程度通信が進むとデータが正常に受信できなくなるという現象です(図3参照)
結論として、通信精度が必要なCANやUSB通信を行う際は、外部の水晶振動子を使うことを強くお勧めします。
Copyright © ITmedia, Inc. All Rights Reserved.