名称 エレキトラブルシューティング集
番号 MIRS1201-ELEC-0006

最終更新・2013.1.25

版数 最終更新日 作成 承認 改訂記事
A01 2013.1.25 大塩雄馬,齊藤卓也,齋藤亮 出川教員 初版

目次




1.目的

本ドキュメントは、MIRS1201エレキ開発時に発生したトラブル、その原因・対処方法をまとめたものである。来年度以降、同様のトラブルが発生した際のスムーズな問題解決への寄与を目的とする。

2.トラブル内容

各ボード、全体に関するトラブル内容を以下に示す。


モーターコントロールボード
  • ロータリーエンコーダの値が取れない
  • ロータリーエンコーダの値がどちらに回しても正(又は負)の方向にみ加算される
  • モータが回らない
  • モータの出力が常に最大になる
  • モータがかくかくと動作する


超音波センサボード
  • 測定距離が間違っている
  • AVRが書き込み不能となった
  • マイコンが超音波センサモジュールのパルスを測定出来ない
  • 複数のUSSの値がしっかりと取れない
  • 複数のUSSの値が返ってこない
  • 受信データが間違っているときがある。
  • 2byte読み込まれる
  • 測定値が返ってこないことが続く


ドーターボード
  • DB-FPGA間のケーブルによる接触不良



CPU
  • OSが起動されない(Floppy disk(s) fail(40))
  • OSが起動されない(UnkownFileSystem)


全体
  • FPGAのダウンロードが完了しない(motor_restartが失敗する)




3.原因・対処方法

それぞれのトラブルに対する原因の考察、その対処方法を以下に示す。

モーターコントロールボード
  • (問題)ロータリーエンコーダの値が取れない
    (原因)複数の原因が考えられる。 ロータリーエンコーダの値を読み込む回路が断線している。 ロータリーエンコーダ自体が故障している。
    (解決)回路に問題がある場合はMCB回路を見て出力先から順にテスターやオシロスコープを用いて正しい信号が出ているか確認していき、問題個所を特定し修復する。また正常に動作するロータリーエンコーダを問題の回路に接続することにより問題が回路にあるのかエンコーダにあるのかを分離した。回路が切れている箇所があったので修復した。

  • (問題) ロータリーエンコーダの値がどちらに回しても正(又は負)の方向にみ加算される。
    (原因)MCB上のトランジスタが故障している。
    回路が断線又はショートしている。 エンコーダのA層又はB層が片方故障している。
    (解決) 前述した「ロータリーエンコーダの値が取れない」と同様にして原因を探し、欠損箇所を修復した。

  • (問題)モータが回らない
    (原因)ICが故障している(特にフォトカプラ、モータドライバ)。電源が供給されていない。回路に断線又はショートしている。
    (解決)前述した「ロータリーエンコーダの値が取れない」と同様にして原因を探し、欠損箇所を修復した。

  • (問題)モータの出力が常に最大になる
    (原因)フォトカプラが故障している。ロータリーエンコーダの値が読み込めていない。PICにintegration.hexが書き込まれているときMCBは目標値に対してロータリーエンコーダの値を用いて速度制御をするためロータリーエンコーダの値が読めないと、モータの速度が常に最大となる。
    (解決)前述した「ロータリーエンコーダの値が取れない」と同様にして原因を探し、欠損箇所を修復した。

  • (問題)モータがかくかくと動作する
    (原因)モータ自体のトルクが他のモータに比べて非常に小さかったためモータが途中で止まってしまった。担当教員によるとこれはモータの個体差であるようだ。ボードを入れ替えて動作をさせても正しく動作しないモータは入れ替わらなかった上、回路やICには問題ないことは確認できていたので、モータ自体の不調であることが確認できた。
    (解決)モータを取り換えた。


    ※どの場合においても、解決のためのデバッグの優先順位は
    「回路の不良確認」→「ICの故障確認」→「モータ、ロータリエンコーダの故障確認」
    とする。

超音波センサボード

  • (問題)マイコンが超音波センサモジュールのパルスを測定出来ない
    (原因)マイコンから超音波センサモジュールへPinを接続するときに二つのPinを用いて接続していた。
    (解決)入出力Pinはプログラム内で入出力設定を切り替えて使用すること。出力ピンに信号が入ってはいけない

  • (問題)複数のUSSの値が返ってこない
    (原因)送信データのパルスが立下りきっていなかった
    (解決)今回、UARTの送信Pinを並列に繋いだためこのようなことが起きたと思われる。プログラム内でマイコンはデータを送信するときだけ送信許可(詳細設計内のプログラムを参照)することで解決した。

    ここまでは試作段階で起きた問題であるので、本番で使用した基盤では発生しない。

  • (問題)AVRが書き込み不能となった
    (原因)useビット書き込み時に電源が切れ書き込み不能となった
    (解決)書き込み途中に電源を切らないようにする

  • (問題)複数のUSSの値がしっかりと取れない
    (原因)MIRSからの信号について、ASCIIコードで送信終了である0x04がデータの終わりに付き、1byteの送信であるはずが2byteの送信となり4番に設定したUSSが毎回値を返していたためデータが破損していた。
    (解決)MIRSの送信コードは1byteであることをしっかりと確認する。そこで標準プログラム(serial_func.c)の中の関数" put_serial_char"で送っている型をChar型をInt型変更した。詳細は以下に示す。
    -変更前-
    int put_serial_char(int fd, char c){
    if(write(fd,&c,1) != 1)
    return -1;
    return 0;
    }

    -変更後-
    int put_serial_string(int fd, int *s){
    int ad;
    ad=s[0]; //int型,1byteの配列を定義
    printf("%d",ad);
    if(write(fd,&s[0],1) != 1)
    return -1;
    return 0;
    }

  • (問題)2byte読み込まれる
    (原因)USSからの受信タイミングが同期されていないので、二つのUSSの値が混ざり1byte(255まで)の値でなく2byte(最大65535)の値として取得していた。
    (解決)USSへの測定命令の間隔をしっかりと取る。本番ではなるべく短い間隔で値を取りたいので、データが破損するギリギリよりも少し多い値を実験しながら求めた(50ms)

  • (問題)測定値が返ってこないことが続く
    (原因)openしたデバイスをcloseせずにプログラムを終了させると問題が生じる。
    (解決)プログラムを変更。プログラム終了時に必ずデバイス(fd0)をcloseさせる命令を追加。また端末からプログラム強制終了のコマンドを使わない。




ドーターボード
CPU 全体



沼津工業高等専門学校 電子制御工学科