ホーム › フォーラム › Texas Instruments › マイコン › MSP430 › MSP430で動作が止まってしまう
このトピックには5件の返信が含まれ、2人の参加者がいます。4 年、 3 ヶ月前に nachan さんが最後の更新を行いました。
-
投稿者投稿
-
MSP430で動作が止まってしまう
デバイス型番:MSP430F5528この度は宜しくお願い致します。
皆様のお知恵を拝借したく、お力添えください。現在、MSP430F5528にて制御プログラム開発しているものが御座います。
搭載機能としては、以下になります。
尚、基板回路はカスタム開発したものです。・LED点灯制御(PWM)
・加速度センサーICとの通信(I2C)
・ADコンバーターとの通信(SPI)
・電源電圧をCPUでA/D入力
・タクトSW入力
・DCモーター制御開発環境は以下になります。
ICE・・・MSP-FET (Spy-Bi-Wire (2-wire JTAG) )
IDE・・・CCS ver7.4.0.00015DCモーター制御以外の機能を搭載し、動作確認を行う上では問題はありません。
しかし、DCモーター制御を含むと、不規則に暴走してしまいます。DCモーターは、DRV8837のドライバーを用いた簡単な制御になり、
PORT1から2本用いて、HIGH or LOWの組み合わせ制御をしています。
モーター電流は、最大400mA以下になります。暴走原因を探っている過程にあり、考えられる要因は御座いますでしょうか?
現状で分かっている事を箇条書き致します、、、・DCモーター制御処理をMASKし、それ以外の機能を制御させると発生しない
・デバッグ用として、DCモーター制御だけを一定周期でMAIN関数でさせると、
暴走状態が発生する・電源は安定化電源を用いており、モーター電源は安定化電源から取得し、
CPU電源は安定化電源 -> 基板回路上のLDOにて3.0V生成して供給。
CPUのDVCC1,2ともに+3.0Vで、オシロで確認する限りモーター駆動時に電圧降下はない・MSP-FETを起動直後の初期化でブレークしていると、
暴走時は、RESETが掛かっている様で、初期化ブレークにくる(恐らくSystem Reset)・WDTはmain関数の冒頭で1箇所のクリア処理とし、WDTをインターバルモードにて割り込み設定すると、
暴走発生時に、WDTのベクタへ飛んでくることがある(必ずではない)
・暴走後の初期化ブレーク状態にて、SFRの中をモニターすると、
全て0xFFで埋められている事がある・stack、heap領域を増加させ、メモリFillしながら確認したが、通常時はオーバーフローしている様子はなかった。
但し、暴走時はstack領域が全て0xffになることがある。
全てのメモリが0xffにならないこともあり、頻度や傾向はわかりません、、、・ICEを繋がず、スタンドアローン動作を試みても現象は変わらず発生する
・暴走現象は、電源印可 -> モーター起動直後に発生することもあれば、
数分間駆動し続けて発生することもあり、時間的な傾向はみられない長文となってしまいましたが、見落としや考えられる要因があれば、どの様な事でも結構なのでご指示ください。
以上、宜しくお願い致します。
自己解決とまで行きませんが、モーター駆動時のノイズの影響がありそうな感じです。
オシロで確認していたものの、高周波だったことで捕まえられておりませんでした。現況では、降下電圧が数usの間、最大で600mVほどあり、
モーター制御は周期性のない制御をしている為、恐らく起動・停止時にノイズとして出ている模様です。ハード側では、電源部、CPUのパスコン部共に、
コンデンサが十分に入っていることと、追加でいくらか周波数に効きそうな乗数を入れてみましたが、
大きな改善がありませんでした。後は、制御側でPWM駆動でソフトスタートの様な緩やかな制御にて効果を確かめようと考えています。
恐らく、MSP430に対しては電源の瞬時降下が誤動作の要因と考えていますが、
もし、他にありそうでしたら、後学の為にご教示ください。nachan様
ご投稿いただきありがとうございます。
現在頂いている情報から考えられる要因としては、ご認識の通り、電源の瞬時降下が発生したことでCPUが暴走している可能性が高いと考えられます。
また、モーターと接続している端子(PORT1)や、RSTピンなどにノイズ等の影響を受けている可能性がございますので、合わせてご確認いただければと思います。MSP430F5528の場合、データシートの「Figure 5-1. Maximum System Frequency」に、VCC電圧、コア電圧とMCLKの適正な範囲が以下のように定義されております。
MCLKの動作周波数は20MHz以上を使用されていますでしょうか。
20MHz以上で使用されている場合、VCCが2.4Vを下回った際にViolationが発生してしまうと、クロックの発振が不安定になり、プログラムカウンタが壊れるため、暴走することがあります。対策方法の1つとしましては、内蔵されているPMM(Power Management Module and Supply Voltage Supervisor )機能を使用し、電源電圧を監視する方法がございます。
PMM内の、SVSHRVLによってしきい値を設け、VCCがSVSHRVLより下がると、PORを起こしてシステムをreset状態にして止める(Violation防止)ことができます。以下のリンクより、PMM機能に関するまとめと、PMM機能を使用してVCCの監視・異常停止を実現する方法について、ドキュメントにて解説されておりますので、ご参考下さい。
○MSP430 F5/F6シリーズ VCCのdrop検出などに使用できるPMM機能の解説また、暴走時にRESETがかかっているとのことですが、リセットベクタレジスタ(SYSRSTIV)を確認しREST要因を判定することできるかと思います。
○ユーザーズ・ガイド「1.15.10 SYSRSTIV Register」を参照。以上、よろしくお願いいたします。
umamiti 様
ご回答ありがとうございました。
先の通り、電源ラインにノイズがあり、綺麗にRESETが掛かった後は、
SYSRSTIVレジスタの値が0x02(POR)になっております。なので、恐らくCPUの電源ラインが電圧降下した結果、PORにてRESETされるというのが、
現象の一つになります。駆動周波数ですが、16MHzにしております。
PMMはLevel 3で使用しており、イニシャライズでのPMM処理を、
仕様書、TIのサイト、フォーラムを参考にして構築しました。PMMもCORE電圧と設定値は、「2.2.2.1.2 Recommended SVSH Settings」に記載の通り、組み合わせで決まってしまう様なので、レジスタ設定の変更などでトリガー電圧が決めれる様なものでは無いようですね、、、
一つご質問ですが、
16MHzで駆動していますが、VCCが2.4Vを下回った際にViolationが発生しないのでしょうか?
ご教示頂いた20MHz以上の場合のみに限るケースと捉えて良いものかどうかという質問です。nachan様
>一つご質問ですが、
>16MHzで駆動していますが、VCCが2.4Vを下回った際にViolationが発生しないのでしょうか?
>ご教示頂いた20MHz以上の場合のみに限るケースと捉えて良いものかどうかという質問です。16MHzで駆動されている場合は、PMMCOREVx=3では、VCCが2.4Vを下回ってしまいますと、推奨値から外れてしまいViolationが発生してしまう可能性があると考えられます。
16MHzで駆動されている場合は、PMMCOREVx=2であれば、VCCが2.2~3.6Vでの範囲で動作が可能となりますので、こちらの設定値での動作をご確認いただければと思います。
以上、よろしくお願いいたします。
umamiti 様
ご回答ありがとうございました。
最初の投稿につきましては、ノイズ対策にて解決ができました。
お手間を掛けましたが、ありがとうございました。 -
投稿者投稿