MCUプロトタイプ開発のEMS対策とWDT

ノイズや静電気によるMCU誤動作に関する興味深い記事がEDN Japanに連載されました。

どのノイズ対策が最も効果的か? EMS対策を比較【準備編】、2019年10月30日
最も効果的なノイズ対策判明!  EMS対策を比較【実験編】、2019年11月29日

EMS:(ElectroMagnetic Susceptibility:電磁耐性)とは、ノイズが多い環境でも製品が正常に動作する能力です。

MCUプロトタイプ開発時にも利用すべきEMS対策が掲載されていますので、本稿でまとめます。また、ノイズや静電気によるMCU誤動作を防ぐ手段としてWDT:Watch Dog Timerも説明します。

実験方法と評価結果

記事は、インパルスノイズシュミレータで生成したノイズを、EMS対策有り/無しのMCU実験ボードに加え、LED点滅動作の異常を目視確認し、その時点のノイズレベルでEMS対策効果を評価します。

評価結果が、11月29日記事の図5に示されています。

結果から、費用対効果が最も高いEMS対策は、MCU実験ボードの入力線をなるべく短く撚線にすることです。EMS対策用のコンデンサやチョークコイルは、仕様やパーツ選定で効果が左右されると注意しています。

MCUプロトタイプ開発時のお勧めEMS対策

MCUプロトタイプ開発は、ベンダ提供のMCU評価ボードに、各種センサ・SWなどの入力、LCD・LEDなどの出力を追加し、制御ソフトウェアを開発します。入出力の追加は、Arduinoなどのコネクタ経由と配線の場合があります。言わばバラック建て評価システムなので、ノイズや静電気に対して敏感です。

このMCUプロトタイプ開発時のお勧めEMS対策が下記です。

1.配線で接続する場合は、特に入力信号/GNDのペア線を、手でねじり撚線化(Twisted pair)だけで高いEMS効果があります。

身近な例はLANケーブルで、色付き信号線と白色GNDの4組Twisted pairが束ねられています。このTwisted pairのおかげで、様々な外来ノイズを防ぎLANの信号伝達ができる訳です。

信号とGNDの4組Twisted pairを束ねノイズ対策をするLANケーブル
信号とGNDの4組Twisted pairを束ねノイズ対策をするLANケーブル

2.センサからのアナログ入力信号には、ソフトウェアによる平均化でノイズ対策ができます。

アナログ信号には、ノイズが含まれています。MCU内蔵ADCでアナログ信号をデジタル化、複数回のADC平均値を計算すればノイズ成分はキャンセルできます。平均回数やADC周期を検討する時、入力アナログ信号が撚線と平行線では、2倍以上(図5の2.54倍より)のノイズ差が生じるので重要なファクターです。従って、撚線で検討しましょう。
平均回数やADC周期は、パラメタ設定できるソフトウェア作りがお勧めです。

3.SWからの入力には、チャタリング対策が必須です。数ミリ秒周期でSW入力をスキャンし、複数回の入力一致でSW値とするなどをお勧めします。
※弊社販売中のMCUテンプレートには、上記ADCとSWのEMS対策を組込み済みです。

4.EMS対策のコンデンサやチョークコイルなどの受動部品パーツ選定には、ベンダ評価ボードの部品表(BOM:Bill Of Matrix)が役立ちます。BOMには、動作実績と信頼性がある部品メーカー名、型番、仕様が記載されています。

ベンダMCU評価ボードは、開発ノウハウ満載でMCUハードウェア開発の手本(=ソフトウェアで言えばサンプルコード)です。

特に、新発売MCUをプロトタイプ開発に使う場合や、MCU電源入力ピンとコンデンサの物理配置は、BOM利用に加え、部品配置やパターン設計も、MCU評価ボードを参考書として活用することをお勧めします。
※PCB設計に役立つ評価ボードデザイン資料は、ベンダサイトに公開されています。

MCU誤動作防止の最終手段WDT

EMS対策は、誤動作の予防対策です。EMS対策をしても残念ながら発生するノイズや静電気によるMCU誤動作は、システムレベルで防ぐ必要があります。その手段が、MCU内蔵WDTです。

WDTは、ソフトウェアで起動とリセットのみが可能な、いわば時限爆弾です。WDTを一旦起動すると、ソフトウェアで定期的にリセットしない限りハードウェアがシステムリセットを発生します。従って、ソフトウェアも再起動になります。

時限爆弾を爆発(=システムリセット)させないためには、ソフトウェアは、WDTをリセットし続ける必要があります。つまり、定期的なWDTリセットが、ソフトウェアの正常動作状態なのです。

ノイズや静電気でMCU動作停止、または処理位置が異常になった時は、この定期WDTリセットが無くなるため、時限爆弾が爆発、少なくとも異常状態継続からは復帰できます。

このようにWDTはMCU誤動作を防ぐ最後の安全対策です。重要機能ですので、プロトタイプ開発でもWDTを実装し、動作確認も行いましょう。

※デバッグ中でもWDTは動作します。デバッグ時にWDT起動を止めるのを忘れると、ブレークポイントで停止後、システムリセットが発生するのでデバッグになりません。注意しましょう!

STM32G0x専用テンプレート発売

LL API利用のSTM32G0x専用テンプレートを、2019年6月1日発売開始します。

STマイクロエレクトロニクス(以下STM)2018年12月新発売のSTM32G0xデバイスは、高性能・低電力なCortex-M0+と70nm新プロセス動作速度向上により、STM32G0x単独で従来汎用STM32F0/F1をカバーする性能と超低電力動作、低価格が特徴です。

このSTM32G0x専用LL (Low-Layer) API利用テンプレートが、今回1,000円(税込)で発売するSTM32G0x専用テンプレートです。

※従来から販売中のSTM32Fxテンプレートは、HAL API利用の汎用テンプレートです。

STM32G4シリーズ追加、全5種となったSTM32 Mainstream MCUs

2019年5月28日、超高性能汎用STM32G4xが発表されました。これでSTM汎用MCUは全5種となりました。一覧が下図です。

STM32汎用MCUラインナップ
STM32汎用MCUラインナップ(出典:STM32 Mainsterm MCUsに加筆)

STM32G0x専用テンプレートは、軽量・高速・エキスパート向きLL APIを利用します。STM32G0x性能をフル発揮するアプリケーションのプロトタイプ開発に最適です。

※STM32G0xや専用テンプレートの本ブログ関連投稿は、下欄タグ🏷:STM32G0x、または、専用テンプレートをクリックしてください。

STM32G0x専用テンプレート適用例2種、API比較評価用2種

LL APIとHAL APIの比較評価のため、汎用テンプレートをSTM32G0xへポーティングしたHAL APIテンプレートも添付します。同一アプリケーションでのLLとHALのリソース使用量、ユーザ記述量、API可読性などを具体的に評価・分析できます。全て評価ボード:Nucleo-G071RB上で動作確認済みです。

STM32G0x専用テンプレート適用例
STM32G0x専用テンプレート適用例

SimpleTemplateは、最も簡単なテンプレート適用例で、基本的なSTM32G071RB周辺回路とテンプレート動作が理解できます。AdcTemplateは、全STM32G0xシリーズ共通周辺回路:2.5Msps 12ビットADC制御をSimpleTemplateに追加し、全てのSTM32G0xプロトタイプ開発の起点となるテンプレートです。

SimpleTemplate、AdcTemplateともにLL APIを利用したSTM32G0x専用テンプレートと、汎用テンプレートをSTM32G0xへポーティングしたHAL APIテンプレートを提供します。

STM32G0x専用テンプレート適用例は、評価ボードのGPIOやLED、LPUART通信など必須の複数STM公式サンプルプロジェクトが実装済みで、すぐにプロトタイプ開発着手ができるLL API利用アプリケーションプロジェクトです。

※HAL版はAPI比較評価用です。2019年5月末時点のコード生成ツールSTM32CubeMX(v5.2.1)とSTM32G0 FW(v1.2.0)は、LL APIでのみSTM32G0x性能をフルに引き出すことができます。

※STM32MCU間でアプリケーション移植・流用性を最大限に保証するHAL APIを利用したソフトウェア開発を希望される方は、STM32Fxテンプレートの購入をご検討ください。

付属説明資料でLL APIアプリケーション開発着手時の障害解消

STM32G0x専用テンプレート付属説明資料のもくじを示します。

STM32G0x専用テンプレート付属説明資料もくじ
STM32G0x専用テンプレート付属説明資料もくじ

説明資料P1~P3は、STM32G0x専用テンプレートサイトから無料ダウンロード可能です。全14ページの詳細な説明により、LL APIが理解でき、STM32G0xデバイス専用アプリケーションのプロトタイプ開発着手時の様々な障害を取り除き、スピード開発するのに専用テンプレートは最適です。

STM32G0x専用テンプレートは、コチラの手順でご購入可能です。よろしくお願いいたします。

*  *  *

STM32CubeMX v5.2.1改版時の注意点

2019年5月24日、STM32CubeMXがv5.2.1へ改版されました。インストール時の注意点を示します。

STM32CubeMX v5.2.1改版
STM32CubeMX v5.2.1改版

STM32CubeMX v5.2.1ダウンロードは、Install Nowクリックのみです。但しダウンロード後、一旦STM32CubeMXを終了し、再起動時は、下記のように管理者と してインストールを実行する必要がありますので注意してください。

STM32CubeMX v5.2.1.Update
STM32CubeMX v5.2.1.Update。インストールは管理者として実行する必要がある。

Cortex-M0/M0+/M3比較とコア選択

デバイスが多く選択に迷う方も多いマイコン:MCU。周辺ハードウェアも異なるので、最初のMCUコア選択を誤ると、最悪の場合、開発のし直しなどに繋がることもあります。

本稿は、STマイクロエレクトロニクスのSTM32マイコンマンスリー・アップデート10月号P8のトレーニング資料、STM32L0(Cortex-M0+)掲載のARM Cortex-M0/M0+/M3の比較資料を使ってMCUコア選択方法についての私案を示します。

STM32L0(Cortex-M0+)トレーニング資料

各種STM32MCU(Cortex-Mx)毎の非常に良くできた日本語のテクニカルスライド資料が入手できます。例えばSTM32L0(Cortex-M0+)は194ページあり、1ページ3分で説明したとしても、約10時間かかる量です。他のMCU(Cortex-Mx)資料も同様です。

開発に使うMCUが決まっている場合には、当該資料に目を通しておくと、データシート読むよりも解りやすいと思います。しかし、Cortex-Mxコア差を理解していない場合や、開発機器の将来的な機能拡張や横展開等を考慮すると、どのMCU(Cortex-Mx)を現状開発に使うかは重要検討項目です。

ここで紹介するSTM32L0(Cortex-M0+)トレーニング資料には、Cortex-M0+特徴説明のため、通常データシートには記載が無いCortex-M0やCortex-M3との違いも記載されています。

そこで、STMマイコンのみでなく一般的なARMコアのMCU選択に重要な情報としても使えるこの重要情報ページを資料から抜き出しました。

Cortex-M0/M0+/M3比較

バイナリ上位互換性

Cortex-Mxのバイナリ互換性(出典:STM32L0(Cortex-M0+)トレーニング資料)
Cortex-Mxのバイナリ互換性(出典:STM32L0(Cortex-M0+)トレーニング資料)

先ず、P22のCortex-Mプロセッサのバイナリ互換性です。この図は、Cortex-Mxコアの命令セットが、xが大きくなる方向には、上位互換であることを示しています(ただし再コンパイル推薦)。逆に、xが小さくなる方向は、再コーディングが必要です。

つまり、Cortex-M0ソースコードは、M0+/M3/M4へも使えるのです。Cortex-Mxで拡張された命令セットの特徴を一言で示したのが、四角で囲まれた文章です(Cortex-M3なら、“高度なデータ処理、ビットフィールドマニピュレーション”)。
さらに、STM32MCU内臓周辺ハードウェアは、各シリーズで完全互換なので、同じ周辺ハードウェア制御ソースコードはそのまま使えます。

もちろんxが大きくなるにつれコア性能も向上します。しかし、よりCortex-Mx(x=+/3/4)らしい性能を引き出するなら、この四角文章のコーディングに力点を置けば、それに即した命令が用意されているので筋が良い性能向上が期待できる訳です。

超低電力動作Cortex-M0+、39%高性能Cortex-M3

P22ではCortex-M0とM0+の違いが解りません。そこで、P19のCortex-M0/0+/3機能セット比較を見るとCortex-M0+が、Cortex-M0とCortex-M3の良いとこ取り、中間的なことが解ります。また、Cortex-M3が、M0比39%高性能だということも解ります。

Cortex-M0_M0+_M3セット比較(出典:STM32L0(Cortex-M0+)トレーニング資料)
Cortex-M0_M0+_M3セット比較(出典:STM32L0(Cortex-M0+)トレーニング資料)

具体的なCortex-M0+とCortex-M0との差は、P20が解りやすいです。Cortex-M0+は、性能向上より30%もの低消費動作を重視しています。また、1サイクルの高速GPIOも特徴です。Cortex-M0+は、M0の性能を活かしつつより既存8/16ビットMCU市場の置換えにチューニングしたからです。

Cortex-M0とCortex-M0+の比較(出典:STM32L0(Cortex-M0+)トレーニング資料)
Cortex-M0とCortex-M0+の比較(出典:STM32L0(Cortex-M0+)トレーニング資料)

さらにP21には、低電力化に寄与した2段になったパイプラインも示されています。Cortex-M0/M0+は、今年初めから話題になっている投機的実行機能の脆弱性もありません。

Cortex-M0とCortex-M0+のブランチ動作(出典:STM32L0(Cortex-M0+)トレーニング資料)
Cortex-M0とCortex-M0+のブランチ動作(出典:STM32L0(Cortex-M0+)トレーニング資料)

関連投稿:Cortex-Mシリーズは、投機的実行機能の脆弱性はセーフ

共通動作モード:Sleep

Cortex-M0とCortex-M0+の低消費電力モード(出典:STM32L0(Cortex-M0+)トレーニング資料)
Cortex-M0とCortex-M0+の低消費電力モード(出典:STM32L0(Cortex-M0+)トレーニング資料)

低電力化は、Cortex-M0+で追加された様々な動作モードで実現します。この一覧がP70です。つまり、Cortex-M0+らしさは、M0にない動作モード、LP RUNやLP sleep (Regulator in LP mode)で実現できるのです。

逆に、SleepやSTANBYの動作モードは、Cortex-M0/M0+で共通です。さらに、Cortex-M3でも、アーキテクチャが異なるので数値は異なりますが、SleepとSTANBY動作モードはM0/M0+と共通です。

ここまでのまとめ:Cortex-M0/M0+/M3の特徴

Cortex-M0/M0+/M3の特徴・違いを一言で示したのが、下表です(関連投稿より抜粋)。

各コアの特徴は、MCUアーキテクチャや命令セットから生じます。但し、M0/M0+/M3でバイナリ上位互換性があるので、全コアで共通の動作モードがあることも理解できたと思います。

ARM Cortex-Mx機種 一言で表すと…
Cortex-M0+

超低消費電力ハイパフォーマンスマイコン

Cortex-M0

低消費電力マイコン

Cortex-M3

汎用マイコン

Cortex-M4

デジタル信号制御アプリケーション用マイコン

関連投稿:ARMコア利用メリットの評価

MCUコア選択方法

  1. Cortex-M0またはCortex-M0+コアでプロトタイプ開発を行い、性能不足が懸念されるならCortex-M3コア、さらなる消費電力低下を狙うならCortex-M0+コアを実開発で選択。
    プロトタイプ開発に用いるソースコードは、そのまま実開発にも使えるように、全コアで共通の動作モードで開発。
  2. 早期にプロトタイプ開発を実開発に近い形で作成するために、弊社マイコンテンプレートを利用。

1.は、本稿で示した内容を基に示したMCUコア選択指針です。低消費電力がトレンドですので、プロトタイプ開発の段階から超低消費電力のCortex-M0+を使うのも良いと思います。しかし、初めから超低消費動作モードを使うのでなく、全コアで共通動作モードでの開発をお勧めします。

理由は、万一Cortex-M0+で性能不足が懸念される時にCortex-M3へも使えるソースコードにするためです。プロトタイプ開発の段階では、ソースコードの実開発流用性と実開発の評価を目的にすべきです。チューニングは、実開発段階で行えばリクスも少なくなるでしょう。

2.は、プロトタイプ開発実現手段の提案です。マイコンテンプレートは、複数のサンプルソフトを結合して1つにできます。実開発に使える(近い)サンプルソフトさえ見つけられれば、それらをバラック的にまとめて動作確認できるのです。これにより、当該コアのプロトタイプ評価が早期にできます。

また、マイコンテンプレートで使用したSTM32評価ボードは、ボードレベルでピンコンパチなのでCortex-M0/M0+/M3への変更も簡単です。

関連投稿:マイコンテンプレートを使ったアプリケーション開発手順

MCUコア選択の注意事項:重要度評価

ARMコア向けの弊社マイコンテンプレートは、全てCortex-M0/M0+/M3共通の動作モードで開発しています。
その理由は、テンプレートという性質・性格もありますが、本稿で示した他のARMコアへのソースコード流用性が高いからです。試しに開発したソースコードであっても、無駄にはならないのです。

最後に、P184、P185に示されたCortex-M0(STM32F0)とCortex-M3(STM32L1)、Cortex-M0+(STM32L0)のADCの差分を示します。

Cortex-M0/M0+/M3のADC比較1(出典:STM32L0(Cortex-M0+)トレーニング資料)
Cortex-M0/M0+/M3のADC比較1(出典:STM32L0(Cortex-M0+)トレーニング資料)
Cortex-M0/M0+/M3のADC比較2(出典:STM32L0(Cortex-M0+)トレーニング資料)
Cortex-M0/M0+/M3のADC比較2(出典:STM32L0(Cortex-M0+)トレーニング資料)

STM32MCU内臓周辺ハードウェアは、各シリーズで完全互換と先に言いましたが、スペックを細かく見るとこのように異なります。

このハードウェア差を吸収するのが、STM32CubeMXで提供されるHAL(Hardware Abstraction Layer)です。つまり、STMマイコンを使うには、コア選択も重要ですが、STM32CubeMX活用も同じように重要だということです。もちろん、STM32FxマイコンテンプレートもSTM32CubeMXを使っています。

ARMコアは、バイナリ上位互換ができる優れたMCUコアです。MCUベンダーは、同じARMコアを採用していますが、自社のMCU周辺ハードウェアレベルにまで上位互換やその高性能を発揮できるような様々な工夫・ツールを提供しています。

開発MCUを選択する時には、コア選択以外にも多くの選択肢があり迷うこともあるでしょう。多くの場合、Core-M0/M0+/M3などの汎用MCUコアでプロトタイプ開発を行えば、各選択肢の重要度評価もできます。スペックだけで闇雲に選択するよりも、実務的・工学的な方法だと思います。