かみやんの技術者ブログ

主にプログラムの話です

ノイズ対策4

タイトル、ノイズ対策にしているが、なんか原因がノイズじゃなくなってきているような。
昨日のエントリで、電源ONしてOFFしたあとに、モータドライバに電荷がたまっているんじゃないか?と書いたが対策をしてみた。

Aibiの全体回路は上図のような感じ。で、

上図の赤い線のようにスイッチOFFのときにモータドライバの7.2VとGNDをショートすれば溜まった電荷はぬけるだろうと。

で実装してみたところ、電源ON/OFFを繰り返しても暴走はしなくなったのですが、電源ON後、PCのAibiUIからH8マイコンへシリアルポート経由で自分のマイコン用のプログラム(Toppers/JSP+自分のコード)を転送するのだが、転送の後半(60kbyte中40kbyteごろ)にロボットが暴走することがある。自分のプログラムが起動すると暴走は止まる。

うーむ。電荷をショートで逃がすのは対策としてたぶんよかったとして、新たな問題だ。

自分のプログラムが起動後暴走が止まるのは、自分のプログラムの初期化コードでPWM信号のポートの初期化をしているためだろう。プログラムロード中は、H8は動いているがプログラムは走っていない状態(プログラムローダは動いているが)。
プログラムローダは、H8簡易モニタを使っている。

対策は、

  1. Toppers/JSP+自分のプログラムをRAMにシリアルで転送ではなくROMに置く。
  2. H8簡易モニタのソースを修正して、H8簡易モニタが起動した時点で、モータドライバへのPWM信号の初期化をしてしまう
  3. モータドライバSabertoothで今PWM信号による制御をしているが、シリアル通信モードを使う。パケットにはCRC等もついているので正しいデータを送らない限り暴走しないはず
  4. もう一つスイッチをつけて、プログラムロード中はモータドライバおよびモータの電源を切っておく
  5. プログラムロード中はロボットを持ち上げて暴走を見過ごす

1)はROMに書き込むのは面倒なのと、ROM書きこみ制限数がH8/3069Fは少ないのでやりたくない。
2)は修正少ないかも。
3)は自分のプログラムのモータドライバ用のドライバ部を全面作り直し。シリアル通信の初期化とか、リングバッファとか1から作ると面倒。シリアル通信のピンが余っているかも心配。
4)は、起動手順が増えてかっこ悪い
5)は、もっとかっこ悪い

ということでまず2)をやってみようかな。

ちなみに普段は、ちゃんと回路を描くときはEagleを使っているが、上の図は、EScad( http://www.vector.co.jp/soft/win95/business/se127636.html )を使ってみた。Eagleは、ちゃんと結線されているか確認したり、回路図からパターン図をおこしたりできるが、ない部品はどんどんパーツエディタでパーツをつくらないといけないのでお気軽ではない。EScadはドローソフトで結線情報とかなくてPower Pointみたいに気楽に書ける。