こんにちはえいたです。
今回の記事では「暴走してまともには動かない原因」を言及します。
あなたのプログラム上ではエラー文は何もないのに
いざ迷路におくと暴走したり
途中まで上手くいってもまた暴走するなんてことありますよね(>_<)
そういった悩みに答えます
この記事では私の体験談を基にしています。
モータドライバにコンデンサがあるかないか
私も自作マウスをしてるんですが, 基板が届いて
半田付けも終えて
学生大会まで走行もそこそこだったんですが
学生大会をそのマウスで終えてから挙動がおかしくなりました
気付かなかったことがあります。
それがモータドライバ付近にコンデンサを入れてなかったことです。
これによりモータ側で逆起電力が発生したら
まともにモータドライバに電流が逆流して
モータドライバが壊れます。
学生大会ではまだそこまで逆起電力のパワーは少なかったのかもしれません。
私はこれに気付くのに3ヶ月を要しました(>_<)
おかげで下のように
わざわざモジュールごと外付けして
ジャンパーも外付けするということをしました(*’▽’)
これらはすべて同じ機体です!!!!!
初心マウサーの私の機体は
ネメシスのように
姿を変えて行きました(^-^) pic.twitter.com/vtEiXQjcZd— Eita えいた (@Eita32751796) February 25, 2021
DutyコードのTGR(16bit指定)
私が使用しているマイコンはRX631です。
ここにはPWMのDuty比の指定にTGR(これに数値を入れた分だけ電流が出力される)というコードがあります。
もし皆さんがこのTGRに入れてるbit数がintのものなら危険です。
ハードウェアマニュアルではTGRには16bitの数値を入れるよう指示されてます。(ex. floatなど)
float以外のものを入れると, それっぽい動作はしますが, 正確性は保証されません。
どういうこと!!!
TGRはfloat だったはず! pic.twitter.com/kNrpjFJDPx— Eita えいた (@Eita32751796) February 4, 2021
この動画では
TGRA=(何かしらの変数)(float);
というコードを書いてたのですが
int型のものを途中でfloatにするという意味です。
これでも暴走するときがあるので,
関わりがありそうな変数はすべて宣言の時点でfloatにすることをお勧めします。
まとめ
今回の記事では「暴走してまともには動かない原因」を言及しました。
あなたのプログラム上ではエラー文は何もないのに
いざ迷路におくと暴走したり
途中まで上手くいってもまたあばれるということがあれば
この記事が参考になれば嬉しいです。(>_<)
そういった悩みに答えしました。
今回の記事を書くきっかけになったマウスのテクニカルデータなどは
「全日本終わりの初心自作マウサーの教訓」で言及しています。