• 締切済み

組み込みマイコンの誤動作について

ある組み込みマイコン(ASSP)を使っています。AD変換と、コンパレータが入っていて、コンパレータは閾値以上の電圧が入ると割り込みをかけてくれます。 そのマイコンで誤動作が見つかり、AD変換値のレジスタにアクセスしているとき、コンパレータからの割り込み要求があると、マイコン自身がエラーが発生したと誤判定してプログラムをとめてしまいます。 コンパレータは電流を電圧に変えた信号が入るようになっていて、一定以上の電流が流れたら、スイッチ(FET)を切るため=保護のため使っているので、それをやめることはできません。 メーカーはマイコンを設計しなおすのはお金がかかるから、AD変換値を読んでいるときは、コンパレータを動作させない(=保護ができない)ようにして使ってくれといいます。 AD変換も電源電圧を読んでいてこれまた保護のために使っています。 もともと、そのコンパレータで保護もできるというのがウリであったのですが、メーカー・日本の販売商社の見解として、マイコンは不具合のまま(保護できないタイミングがある状態で)使ってくれというのですが(日本の販売商社がリクエストをとめている可能性もあります)、海外メーカーのマイコンというのはそういうものでしょうか? ちなみにこのマイコンはすでに売られている車にも搭載されているものです。 みなさんのご経験と「こんな風に回避またはメーカーに働きかけた」といったことがあったら教えていただけませんでしょうか? よろしくお願いいたします。

みんなの回答

  • kabasan
  • ベストアンサー率44% (264/588)
回答No.4

ADのレジスタは非分断連続アクセスしないといけないのではないですか? (例えば8ビットマイコンでADレジスタが16ビットなんて組み合わせ) そうであればメーカーの言うとおり「操作している間割り込み禁止にする」のが当たり前だと思います。 コンパレータ割り込み条件が発生してから数クロックの遅延も許されないのなら、上流設計レベルで間違えていますね。

R360-2000
質問者

補足

確かに、変数破壊防止のために、AD値をバッファ変数に退避させるときに、よく割り込みとかAD変換を禁止にしています。割り込みが途中で入って、バッファ変数破壊にならないためです。 しかし、今回の場合は、もとのAD値がの入っているレジスタが、マイコン自身の割り込みによって破壊されてしまいます。 AD値を読むのがAD変換完了割り込にあるして、コンパレータ割り込みのほうが優先度が高いので、同時に発生しても、優先順位に従って、コンパレータ割り込みの処理とレジスタの更新をしてから、AD完了割り込みの処理をしてくれればよいのですし、ユーザープログラムはそうなっているのですが、マイコンの中では実際には1つのレジスタにリードとライトが非同期で同時に行われているのです。 マイコンは2チップ構成で、CPUとアナログ部分はユーザーのさわれない通信でやっていて、そのレジスタの値が壊されることによって、チップ間の通信エラーになってCPUが勝手にとまってしまうのです。 変数破壊防止のために、割り込みを禁止したりはしますが、マイコンがマイコン自身の処理でレジスタ値破壊を起こして止まってしまう何であるのかなという感じです。1チップ構成なら、通信がないので、CPU停止までいかないかもしれませんが。

  • tadys
  • ベストアンサー率40% (856/2135)
回答No.3

>「その2」はマイコンメーカーから提示されたのですが、保護機能を切ってしまうまたは遅れてしまうことになるので、難しいです。 割り込み禁止→ADレジスタ読み出し→割り込み許可 の3命令で実行できますけど。 これで間に合わないほどクリティカルなのですか? もしそうであれば、コンパレータ割り込みより優先順位の高い割り込みを使用できない事になります。 コンパレータの応答時間のほうが気になりそうです。 そもそも、異常事象の発生から保護が完了するまでに許される時間はいくらなのですか? これにはアナログ回路の応答時間も含みます。

R360-2000
質問者

補足

お察しのとおり、時間にして数μ秒ですが、この間にどのくらい電流が上がってしまうかによります。 ただ、設計思想としてコンパレータ割り込みをとめてしまう時間が存在してしまうことを許してくれるかです。

  • tadys
  • ベストアンサー率40% (856/2135)
回答No.2

修正にはお金がかかります。 修正の為にはエンジニアを割り当てなければならないし、そのエンジニアがするはずだった仕事が止まってしまいます。 メーカーがマイコンの修正に応じてくれないのであればそのまま使うしかないです。 実際にやってみなければ効果が有るかは分からないので、アイデアだけですが その1.AD変換の読み取りをDMAで行う。(ソフトで読まなければエラーにならない可能性がある) その2.AD変換を読み取る間は割り込み禁止にする。(割り込みは禁止解除後に発生する) その3.コンパレータを外付けにする。 コンパレータの安いものなら10円ぐらいで購入できます。 http://www.digikey.jp/product-detail/ja/AP331AWRG-7/AP331AWRGDITR-ND/2095586

R360-2000
質問者

補足

ありがとうございます。 AD読み込みより、割り込みが原因としてのウエイトが重いようで・・・ しかし、「その1」は確認してみます。 「その2」はマイコンメーカーから提示されたのですが、保護機能を切ってしまうまたは遅れてしまうことになるので、難しいです。 「その3」も考えて見ますが、10円アップを許してくれるかどうか(量産になると価格管理が厳しいのです) このマイコンは、すでに量産車へ使われている実績があってそれを当てにしていたので残念です。 (すでに売られているマイコンと車はどういう扱いになるのか)

  • minis8566
  • ベストアンサー率50% (29/58)
回答No.1

膨大なオカネがかかるから、騒がないと動いてくれないと思います。 20年位前のIntelのペンティアムプロセッサのリコール事件も、 個別ユーザーがというより、世間的に騒がれたことが全数リコールにつながったようです。

参考URL:
http://ja.wikipedia.org/wiki/Pentium_FDIV_%E3%83%90%E3%82%B0
R360-2000
質問者

補足

ありがとうございます。 ペンティアムのことは少し覚えています。 民生品にもリコールがあるんですね。 やはり声の大きさなのでしょうか。 マイコンメーカーの言われるとおり修正するならば、すでに売られてしまった車についているマイコンのソフトも直さなければならないので、自動車メーカーの判断によってはその車はリコールになるのでしょうか。 (ちなみに、その車はリコールで有名になったあのメーカーの車です)

関連するQ&A

  • 1Vで動作するマイコン

    電圧1Vで動作するマイコンってありますでしょうか。 ・電源、I/O電圧とも1V ・速度は数MHz以上あれば理想的ですが、もっと遅くてもかまわない。 ・C言語でプログラムできる ・1個から(多くても数十個単位)で手に入る(個人では買えなくても商社を通して買えればいいですが) ・フラッシュROM(何度も書き直せる) ・ライタが簡単に手に入る(or簡単な回路で書き込める) ・PCと簡単につなげる。(UARTとかがあればいいです。)  (超理想的には)USBとかでつながって、しかもマイコン上にレギュレータ(or DC-DCコンバータ)ものってて、USBバスパワーから1Vも作れる、とか都合がいいものがあるといいんですが。。 まあ、条件を全部満たしていなくても、とりあえず、1Vで動作するマイコンで使いやすそうなのがある、という情報だけで結構です。 よろしくお願いします。

  • 電流遮断回路2

    以前,下のリンクで 「電流がだんだんと下がっていく系で,電流値がある値以下(例えば3mA程)になったときに電源を切る回路を作りたい」 という質問をしたものです. http://oshiete1.goo.ne.jp/qa4092810.html リンクのANo.9でのtanceさんの考えていただいた回路を早速自作してみたのはいいのですが,どうもうまく動作しませんでした.抵抗値の組み合わせがわるいのかな・・・などと考えて,色々試してみたのですがどうもうまくいきません. コンパレータで電流値を比較してある値になったらFETで切ると,という予定だったのですが,コンパレータの数値が2vほどしかでず,FETもうまく作動しないのです. 打開策として回路シュミレータ(Circuit-Maker 6.0 Student)を使ってコンパレータの動作確認からボトムアップ的に回路の確認・設計を行っていますがやはりFETの動作がうまくいかず困っています.コンパレータのoutputをFETのGateにコンパレータの出力が入れば,sourceからdrainに流れる電流がONになる(N型FETなので)だと思ったのですが・・・ 何でも良いので,よろしければ知恵を貸していただけないでしょうかm(_ _)m

  • FETの動作

    Pch-MOSFETの使い方がいまいちわかりません。 3.3V動作のマイコンで5Vの電圧を負荷にかけたいのですが、 マイコン--->FET(G) 5V----->FET(S) 負荷----->FET(D) と接続し、3.3VのON-OFF(マイコン制御)でFETのON-OFFができたり するものなのでしょうか? FETのデータシートにゲートしきい値電圧(VGS(th))が2Vとかありますが これはG-S間電圧が2V以上でONするとか2V以下でOFFするとかいう 意味なんでしょうか? という以前にこんな接続で動くかいっ!! って見当ハズレなことを言うてるかもしれませんが・・・ 教えて下さい。よろしくお願いします。

  • オペアンプの動作電圧に幅をもたせるにはどうすれば

    個別部品で簡易的なオペアンプを作ってみようと考えています。 差動増幅などで構成されていると思うのですが、どうすれば動作電圧に幅をもたせることができるのかがよくわかりません。 うろ覚えですが、FETの定電流源でツェナーダイオードを動作させ基準電圧を作り、そこからカレントミラー等で各回路に定電流を供給する、というようなオペアンプの等価回路を見たことがあるような気がします。 こういった定電流源が動作電圧に幅を持たせるポイントなのでしょうか? どうかよろしくお願いします。

  • FETの駆動電圧

    回路設計初心者なので、詳しい方教えてください。 FETのデータシートで、駆動電圧が、2.5Vのと4Vの物がありますが、良くわかりません。 FETのゲートを動かす電圧と考えてよいのでしょうか? 社内の昔作った回路図では、3.3VのマイコンでFETを動かしている物があるのですが、 そのFETは2.5Vの駆動電圧の物を使ってました。 今回、5V動作のマイコンでFETを駆動したいのですが、 5Vの場合は、4V駆動のFETを使えばよいのでしょうか? また、2.5Vの電圧の物でも、5Vのマイコンで動作させることが出来るのでしょうか? ポイントを教えていただけると嬉しいです。

  • AVR ISR(ANALOG_COMP_vect

    AVRマイコンのISR(ANALOG_COMP_vect についての質問です。 このISR(ANALOG_COMP_vectはAVRに内蔵されているコンパレータの 入力電圧が基準電圧を上回ったときに実行される割り込みなのでしょうか。

  • 最大電圧5Vのアナログ信号を最大電圧3.3Vに変換したいのですが

    3.3V動作のマイコンでAD変換をするために 最大電圧5Vのアナログ信号を最大電圧3.3Vに変換したいのですが どのような回路を組めばいいのでしょうか。

  • コンパレータ(オペアンプ)の定格電流

    コンパレータのメーカ仕様書を読んでいると、電圧に対する制限は記載されているのですが、電流制限は記載されていません。コンパレータ(オペアンプ)では、入力・出力の電流制限が無いのは何故でしょうか?

  • ステッピングモーターの過電流検出方法

    ステッピングモーター(2相・ユニポーラ)で過負荷を検出したいのですがコイルに流れる電流量の増加を検出すればよいのではないかと思いますがどのようにすると良いでしょうか? おおよそで電流を電圧変化に変換しコンパレータで検出できるかなと考えていますがどういう形で電流を取り出し、電圧変換すればよいでしょうか? よろしく御願いします。

  • MOS-FETの使い方 2

    OV~8Vの直流電圧の変化をLEDの光に置き換え、CdSの抵抗値を変化させる下図のような回路を製作しています。 電圧の変化はMOS-FETを使って電流に変換しているのですが、MOS-FETの閾値が2Vほどあるので入力電圧が0V~2Vのときの電圧の変化をLEDに反映させることが出来ずに困っています。 数日前にもここでアドバイスして頂きゲート電圧を閾値分シフトする、つまり入力電圧が0VのときVgsに2Vかかるようにすればよいということが分かっているのですが、実際にやってみるとうまくいかず具体的な方法がよく理解できていなかったようです。 できればオペアンプは使わずになるべくシンプルな方法で済ませたいのですが、どなたかアドバイスお願いします。 ちなみにVinはオペアンプ4558の出力です。(http://kazukiakiyoshi.cocolog-nifty.com/photos/schem/image1.jpg)