ロボットが動かないRCAP2021_9日前!!!
✍🏻

ロボットが動かないRCAP2021_9日前!!!

Tags
RoboCup
雑記
LEGEND
Published
November 16, 2021

ロボットが動かないRCAP2021 9日前!!!

おはようございます.とみっくすです
RocoCup Asia pasificまであと9日となりました.1桁台!!!
嘘でしょ…
早すぎます。
9日前ということでここ最近の私が何をしたのかをまとめてみようと思います。

ロボットが動かない!!どうして!!!

6週間前くらい??前まで動いていたロボットが動きませんでした。なぜなのか。よくわからないままなんとかしないとと思いながらもずっと何もできていませんでした。
理由はもちろん半導体不足です。
マイコンボードが壊れているのだと推察し、とりあえずマイコンボードを直して動かさなければという発想になったのですが修理する部品がない。マイコンがない!!!どうしよう!!!!まさか世間で騒がれている半導体不足という噂はこんな身近にあるとは思っていませんでした
notion image
こちらはDigikeyのスクリーンショットです。 STM32F446REをメインマイコンに採用していた私のロボットですがマイコンが手に入りません。まさかの納期が50年後とでたりして、ほとんど手に入らない状況です。
どうしようと悩んでいた矢先、家で3つのSTM32を見つけました。
これでなんとかロボットが作れそうだと思いとりあえず基板設計を開始することに、なんとか希望が見えてきた瞬間でした。
notion image
こちらが設計した基板です。Elecrowで発注して無事届きました。
家にあったマイコンを半田付けして無事!!!成功!!!とはいきませんでした。
どうやらコンパイラが壊れています。というよりはバージョンがアップデートされて今までの環境と互換性がなくなっていました。
PlatformIOというIDEで動かしていたのですが、なんかバージョンごとの環境を落としこれるAPIがあるのをコミュニティで発見したのでAPIを叩いてJSONを読み解いて、いい感じに取得したらいけました。
すっごくつらかった。これを解明するのに1ヶ月くらい費やしました。
せっかくなのでまとめておきました。LGTMください。
とりあえず、なんとかなってよかったです。過去に書いていたプログラムのリファクタリングを開始!!!
でなんだかんだすぎていき、無事移植完了
notion image
いい感じに実装できました。
notion image
いい実装ができたと思います。メンテナンスのしやすさも確保されていて自己評価で100点笑
横からXHコネクタを引き出せる設計にしたのがよかったですね。
あとはI2Cの波形を見ながらプルアップ抵抗の選定をしました。
notion image
波形を見れるように基板をデザインしたのもポイント高いのでは
この記事がとても有用なのでI2Cでミスをしたくない方は見るのをお勧めします。あと公式NXPの出しているI2Cのドキュメントを見るのおお勧めします。
I2Cのノイズ対策 その6(オシロスコープを用いた静電容量推定) - 隠居エンジニアのものづくり
はじめに 界隈では オシロスコープ で波形観測できる環境が整っている様なので、静電容量を推定して、Rpを決定する方法について解説します。 これにより、より正確なRp選定ができます。 その5にて"I2Cバスに繋げる配線のトータルの長さを測り、配線長300mm当たり100pFと想定してバスの負荷容量を計算する。"と値はオーバー目の"見なし"となっていますので オシロスコープ を使える方は、この記事を参考にして下さい。 ファースト・モード:ビット・レート400kbit/s( 最大 ) にて設計計算を行います。 I2Cの波形は矩形波にはなりません I2Cバスの静電容量を5Vに充電するのはRp、0Vに放電するのは マイコン やセンサ内のFETオン抵抗ですので、桁違いです。 当然立ち上がりと立下りの波形は全く異なりますので、矩形にはなりません。どちらかと言えば"のこぎり"に近い波形です。 以下の様に仕様書でも立ち上がりが遅い事は明示されています。 矩形波 に近づける事に執着してプルアップ側を強化すると、"Low Level"のマージンが無くなって通信障害を起こします。 静電容量推定方法 Rpの値が既知であることが前提になっています。 ここではRp=1kΩにします。 300mmの配線にセンサを付けて、 オシロスコープ にて立ち上がり波形を観測します。 時定数を測定しますので、トリガ電圧は3.16V( 1τ )に設定しました(Lowレベルのオフセットの影響は少ないので無視していますが、気になる方はオフセット分足したトリガ電圧を設定して下さい)。 立ち上がり-トリガの時間を測定します。 測定結果は73.40nsとなりました。 以下の式で静電容量が算出できます。 時定数 ÷ Rp = 静電容量 73.4×10^-9(秒) ÷ 1×10^3(Ω) = 73.4×10^-12(F) 静電容量は73.4pFです。 この マイコン ボードを測定に使ってます。I2Cセンサを5個接続可能ですので、写真の300mmの配線を追加で接続します。 300mmの配線追加で静電容量は95pF( 時定数95.00nsより )になりました。
I2Cのノイズ対策 その6(オシロスコープを用いた静電容量推定) - 隠居エンジニアのものづくり
ちなみにこのテストの仕方ですが、プローブのインピーダンスについて考慮されていないのは良くないですね。ちゃんとそこまで考えてカッチリしたかったです。
notion image
まあ、まあぎりぎり。良いとは言えませんが、これは測定方法に問題がありそうです。ちゃんと波形を見ているのは成長だと思います。放射ノイズに影響が出ませんようにお願いします神様仏様
notion image
基板内でなるべく配線は太くしました。これインピーダンス的にどうなんでしょうか。太くしたらC(容量)が増えてインピーダンス増えそうですよね。R(抵抗)は単純に基板内なので減らせていると思います。ビアはどうなんでしょうか。抵抗値が高そう(憶測)
とはいえ、時定数をまずは測りましょうって話なのですが。

モータードライバも作り直しました。

やはりロボットデザインってビジュアルもそうですけれど、リペア性能も一つの評価軸だと思うんです。今回のロボットはリペア性能を意識しました。
こちらがモータードライバです。
notion image
ロボットの背面からネジで固定することで、もし壊れたとしてもロボットをひっくり返して取り出せるようにしました。あと配線量を減らせるようにも努力しています。
notion image
notion image
notion image
いい感じ!!!
ちなみに、オムニホイールのサイドホイールに使っているウレタンゴムですが、シートを買ってきて1個ずつ切って使っています。
左下の電源基板はYuseiがオシロスコープで波形を見ながらちゃんとエレクトロニクスしてくれて、ノイズのないいい電源ができました。こいつがなければ他の電源では代用できないいい設計になっています。

PWM分解能を上げました。

前までLAP駆動でモーターを制御していたのですがmbedフレームワーク上だとタイマーの設定上分解能が制限されていました。500KHzで駆動しようとすると0か100か見たいな感じになって全く制御と言える感じではありませんでした。
しかたなくモーターの制御ができる範囲でいい感じの周波数を探し、落ち着いていたのが20KHzです。コアレスモーターを駆動する上ではあり得ない数値だと思います。実際は時定数から周波数を決定しますが、maxonのコアレスモーターは電気的時定数が低いため電圧を加えてから電流が流れて応答するまでの時間が短いです。なので周波数は高くする必要があります。
maxonが出しているモーターコントローラーは60KHzほどで駆動しているそうです。
PWM周波数が低い状態でLAP駆動をすると単純に正転逆転の繰り返しを高速で行うのも応答性が良すぎる故に本当に正転逆転を繰り返しているような熱を持ちます。実際SM駆動よりも大きな電流が流れますし、低速回転時でさわれないレベルに熱上昇をしていたため対策しなくてはいけないとなっていました。(ロボカップ世界大会2019時点で)
今回はHALドライバでPWMの周波数や精度を決定しているタイマー操作することで対応しました。
20KHz駆動で10段階しか回転スピードを選べなかったのが無段階偏重ができるようになり、制御性能が爆上がりです。
こちらの動画をご覧ください
注目していただきたいのは低速回転です。無段階で滑らかに動いているのがわかると思います。
Video preview
これがいかにゲーム内で機能するのかはわかりませんが、しかしLAP駆動に高い周波数を用いることができるようになり、高い制御性能を得たと同時に省エネ化ができました。嬉しいですね。

ネタ枠

モーターってでかいブザーなんですよ。
前述した通り、LAP駆動では正転逆転を繰り返すことでモーターをコントロールしています。周波数を下げるとこのいわゆる振動のような現象を目視できるレベルになるわけでして、
それを利用してモーターを振動させてみました。1000Hzとかです.
Video preview
確かArduinoはデフォルトでPWMの周波数が500Hzくらいでしたね。何も考えずにArduinoでとりあえずコアレスモーターをLAP駆動で回す行為は避けたいですね。
あと9日です。私はかなり低レイヤーの部分でしか進捗を上げれていません。
ラックオブプログレス!!!!!
というわけで、皆さんいい大会にしましょう!!!あと9日ですが共に頑張りましょう!!
#ロボカップ
#ロボカップアジアパシフィック