隠居エンジニアのものづくり

自転車 電子工作 ラジコン ロボカップジュニア CAD レーザー加工機

BLDCの使い方

部品の性能を引き出すには、仕組み・構造・材料を知ることが早道です。

この辺の理解があれば、部品選定の段階で目的に合っているのか?、欠点を承知で採用する場合は使い方の工夫を予め用意する事ができます。

BLDCの一般的な仕組みや利点・欠点についてはモータメーカーの技術資料が幾つかあるので、検索して見て下さい。

ここでは、ロボカップジュニアで搭載可能なサイズのBLDC特有の問題について解説します。

モータにはセンサ付きとセンサ無しがありますが、足回りに使えるサイズを想定するとセンサ無しになると思います。

モータメーカーでBLDCの仕組みは理解頂いている前提で説明しますが、モータの逆起電力によってローター位置を検出するセンサ無しモータの場合は低速回転の安定性がありません。

これは回転数が低いと逆起電力も小さいのでローターの位置検出の精度が得られない為です。

部品の入手性を考慮すると、1/16スケール以下の電動ラジコンカーのBLDCオプションパーツや小型のドローン用BLDCの流用になると思いますが、これらのESCは概ね停止-40% - 100%の制御になっており、ブラシ付きのDCモータの様に10%付近の低速回転の制御は望めません。

ライントレースや迷路探索で比例制御を行う場合は、低速域の回転制御が空白になる事でゲイン調整は苦戦を強いられます。

サッカーチャレンジのオムニホイール全方位走行システムでは下図のように

f:id:Blackbox_crusher:20210418005008p:plain

各モータの低速回転域を含むパワー制御の直線性が必要ですので、美しく円弧を描く回り込みはできません。

”だから使うな!”というわけではありません。

ブラシ付きモータをブラシレスに換装したロボットで”今まで出来てた事が同じように出来るはずだ”と言う思い込みでの時間のロスを無くしてほしいと思っています。

私の記憶が正しければ、2015年大会のサッカーチャレンジには足回りがサスペンション付きBLDCの4軸オムニロボットがありました。

そのロボットは、他のオムニロボットとは異なった独特の動きをしていました。

動きを観察すると”なるほど低速回転をさせない前提なら合理的!”と感心した覚えがあります。

欠点を克服する工夫を準備する

低速回転域の制御ができない前提でどうするか?

前出の表を見ていただければ40%以下のパワーが必要な角度は限られています。

簡単な方法としては、この角度領域を制限すれば、美しい円弧は描けませんが、”多角形”の回り込みなら不具合なく制御できます。

ひねりの利いた欠点克服方法については、皆さんで編み出してください。

 

技術公開とミスリード (勢いもここまで? その4)

パワーポイントには、まだまだネタが残っているのですが、ミスリードによって構築されたと思しき戦術に対する必勝法的なものは、オープン大会で対戦なり、観戦なりして頂けば一目瞭然ですので、そちらを楽しみにして頂く事として、”アウトオブバウンズ”対策について解説して一旦、ミスリードシリーズは締めたいと思います。

 

ポーリング

プログラムが一巡する途中でセンサ状態を確認する方法です。

ざっくりとしたフローチャートですが、こんな感じです。

f:id:Blackbox_crusher:20210415204246p:plain

ロボットは、この図の"ボールを追いかける"処理の間はセンサを見ていない事になります。

f:id:Blackbox_crusher:20210415204901j:plain

ラインセンサをみるタイミング(場所と範囲)をオレンジ色で示した図です。
この図はラインを確認できた場合です。

f:id:Blackbox_crusher:20210415205237j:plain

この図は閾値が正しければラインを確認できた場合です。

f:id:Blackbox_crusher:20210415205356j:plain

この図が、ラインを確認できなかった場合です。

この例の通り、ラインを確認できずに外にでて行ったり、きちんとアウトオブバウンズ処理ができたりする、”時々症状”になるので初心者には原因特定しにくいトラブルの代表です。

対処法は下図の様にセンサの間隔を詰めることです。

f:id:Blackbox_crusher:20210415212406p:plain

センサの間隔を詰める方法は?

①速度を落とす

②センサの数を増やして2段構え、3段構えの構造にして読み落としを防ぐ

③タイマ割込みを使って割込み処理でセンサを確認する

 

スピード命の皆さんには速度を落とすと言う選択肢は無いでしょうからについて説明します。

スピードを上げれば、制動距離は長くなります。

アウトオブバウンズにならない為には、制動距離がロボットの大きさを超えることはできません。

f:id:Blackbox_crusher:20210415232257g:plain

この動画の様に、厳密な制動距離は”ラインセンサとロボットの端”の距離になります。 

(※デバッグ中の動画の為、デバッグ用LEDと電圧計が点灯しています。)

読み落としを防ぐと言うアプローチは悪くありまんが、結局のところ確実にラインを捉えられるn個目のセンサ取付位置とロボットの端までの距離が制動距離となるので、最大速度を出したいと言う要求仕様に対して矛盾を抱えている方法と言えます。

は前出のポーリング方式とは異なる割込み方式によるセンサ確認方法です。

タイマ割込み処理によってセンサの読み取り間隔を一定かつ、読み取りミスが起きない間隔に設定する事ができるのでアプローチとしては悪くありませんが、割込み関数内でアナログセンサを確認するにはA/D変換時間は最低メイン関数を止めていますのでタイマ割込みの間隔とメイン関数の処理能力はトレードオフの関係になります。

ですので”出るのが怖いから”と言ってタイマ割込みの能力の限界(最小時間)を攻めるのではなく、必要な割込み間隔を算出する必要があります。

自分のロボットの最高速度で”1秒間に何ミリ進むか”を測定すれば、白線の幅がルール規定にて幅20mmとなっているので、センサがライン上にある時間が計算できます。

単位時間移動距離 2000 mm
速度 7.2 km/h
2 m/s
白線幅 20 mm
時間 10 ms

f:id:Blackbox_crusher:20210415234728p:plain

このように図示すると分かりやすいのでお勧めです。

ラインセンサの判定閾値を超える時間内に必ず読み取れる様に割込み処理できればOKです。図の様に2回読み取りができれば、それ以上タイマ割込みの間隔を詰める必要はありません。

アウトオブバウンズ対策の最適解

Arduinoを使用しているなら、”アナログ比較器割込み”一択ですね。

f:id:Blackbox_crusher:20210416000044p:plain

f:id:Blackbox_crusher:20210416000638p:plain

この図はOYA-G 2021モデル仕様書の一部ですがArduino UNO 、NANOでは”6”にセンサ閾値電圧を与えて、”7”にラインセンサ出力を接続します。

この方法は外部割込み端子の利用とかハードウエア割込みとか言われる方法で、マイコンのコアとは別の”アナログ比較器”と言うハードウエアが独立してラインセンサの閾値越えを監視しますのでメイン関数の処理能力低下は一切ありません。

この方法では、コートとラインのセンサ出力をテスターなどで測定して閾値を決め、ボリュームで”6”ピンへの電圧を調整する必要がありますが、ラインセンサは端っこに1個つけるだけで絶対にラインを見落とさないので、制動距離も最大にできます。

ですので安心してトップスピードが出せるロボットに仕上がります。

アナログ比較器割込み非搭載のマイコンでも外部割込み端子はありますので、コンパレータやオペアンプと組み合わせることで同じことができます。

ちなみに前出の動画はアナログ比較器割込みで電磁ブレーキを作動させる動作確認をしているところです。

 

出典:Atmega328データシート

技術公開とミスリード (勢いで その3)

危険性のあるミスリードについて
”物理はみなさんが体験して感覚的に良く知っている事を数式で表しただけの学問です。国語や算数と違って学校に行く前の子供さんでも感覚的に理解している当たり前の事にすぎません。”(異論はあると思いますが・・・)
物理アレルギーはもったいないですよ!

と言うことで今回の主役はジャイロ効果です。
みなさん、一度は”コマ”を回したことがあると思います。
コマは立てても転びますが、回転を与えると転ばずに立ちます。
回転が弱くなると不安定になって最後は転びます。
コマで遊べば”当たり前に知っている物理現象”です。

この回転体が回転軸を維持し続けようとする振る舞いをジャイロ効果と言います。

ドリブラーで回転させているボールにもジャイロ効果が発生しています。

ジャイロ効果

この図は左右2個のロータを持つドリブラー機構についてロボットの旋回時に起こるジャイロ効果の作用についての説明です。

f:id:Blackbox_crusher:20210413101250p:plain

回転数を上げれば、ジャイロ効果も大きくなって蹴り出しも強くなるので、とても非効率なのが分かります。
ところが、回転数をあげると蹴り出した時に(ロータからボールが離れた時)バックスピンでボールがロボット側に戻る力が大きくなるので、回転数を上げるとボールの保持力自体は上がります。
しかしながらこの場合は非効率ゆえに、ロータに触れると火傷をしたり、巻き込まれると怪我をする程の回転が必要になります。
結果として”ドリブラーには強力なモータが必要”となってしまいます。
これが危険性があるミスリードです。


次の図は、ボールとロータの接点が一つになるシングルロータの説明です。

この場合は前述の問題は発生しません。

 f:id:Blackbox_crusher:20210413100840p:plain


論より証拠でシングルロータの”OYA-G 2018モデル”で遠心力シュート(マカオシュートと呼ばれるやつです)動作をさせた動画を御覧下さい。

f:id:Blackbox_crusher:20210413101528g:plain

ボールがロータを蹴り出さないのでボールが離れません。
ドリブラーモータのボール保持時の電流も1A以下で約7Wと省電力です。

 

球体の幾何学的性質

ロータをスプリング等でボールに押し当てる機構にした時、ロータ位置を何処に設定するか問題ですが、図にするとイメージし易いと思います。

f:id:Blackbox_crusher:20210413163426p:plain

一番左の位置はルール違反でNGですが、位置と力の加わり方を説明するのに分りやすいので描きました。

ボールと床との摩擦力があるからバックスピンによってボールがロボットに張り付く状態が作れます。

この摩擦力はボールの重量×摩擦係数で得られますが、左の図の様にロータで押し付けることで(ボールの重量+ロータの押し付け力)×摩擦係数となりボールの保持力を大きくすることができます。

右の様に配置すると、押し付ける力を失う上に外に押し出す力になってしまします。

このボールの実質摩擦力と押し出し力はボールとロータの接触する接線がなす角度で決まります。

三角関数を習っている方は接線角度の定義を左の図を"0°"、右の図を"90°"とすると中程の図の力を計算することができます。

ボールの実質摩擦力:(ボールの重量+ (ローターの押し付け力・COS(Θ)))×摩擦係数

押し出し力:ローターの押し付け力・SIN(Θ)

 

つまりロータの設置位置下限は

(ボールの重量+ (ローターの押し付け力・COS(Θ)))×摩擦係数 > ローターの押し付け力・SIN(Θ)

となります。

三角関数がまだの方は図の緑の垂直の線が水平の線より大きくなる所と考えて頂ければOKです。

あくまでロータをロックしてボールとロータは滑らないと定義した時にドリブラ機構のスプリングテンションによってボールを押し出してしまわないポジションを計算しているのと等価ですのでボールが回転してロボット側に移動する力が加わる場合とは異なるのですが、充分に安全な設計値としては良い指標だと思います。

ちなにみオープンのオレンジボールは摩擦力が大きいので多少設計が甘くてもドリブラーが成立しますが、ライトのパルスボールは摩擦力が小さいのでドリブラーの設計はとてもシビアになります。

f:id:Blackbox_crusher:20210413185257g:plain

この様にオレンジボールでは成立するポジションでもパルスボールでは成立しません。

摩擦係数の違いは設計難易度の決定的違いになります。

これが初心者講習をオープンで行う理由の一つでもあります。

もちろん前出の条件に基づいたポジションに設定できれば次の動画の様にパルスボール用のドリブラーは成立します。

f:id:Blackbox_crusher:20210413185849g:plain

動画はOYA-G2021モデルです。
オレンジボール用とパルスボール用の2ポジションを切り替えれる設計にすることでオープンにもライトウエイトにも競技参加できるように設計しています。

もちろん重量は車載カメラ搭載時でも1049g、駆動用モータ2個、7.2V Ni-MHバッテリーで日本リーグの車検に合格できる仕様になっています。

(エンジニアが競技参加するにあたっての自主ハンデです。日本リーグに出るつもりはありません念のため)

 

回転体の物理現象や球体の幾何学的性質を利用して効率の良い機構を考えれば、安全で相手ロボットとのボールの取り合いに負けない強力なドリブラーを作る事ができます。

この辺りの最適解を示す目的でOYA-G 2021モデルは設計しています。
コンセプトは”ロータに安心してさわれる(触れても火傷や怪我をしない)”ドリブラー機構です。
ロータ回転数が低くても保持力が上がる機構に仕上がっています。

みなさんのドリブラー機構は "ダイレクトドライブ~ギヤ比5:1" になっていると推測しているので ”嘘だぁ~” と聞こえてきそうですが、使用ギヤードモータのギヤ比は200:1です。(ロボットキットでお馴染みのプラスチックギアTTモータ換装品)

こちらもドリブラーモータのボール保持時の電流は1A以下で約7Wと省電力です。

そもそも自分が触れるのが怖い程のローターがブンブン回っているロボットを審判に委ねる状況は改善したいと思っています。
ルールより前に(ルール上違反でなくても)ロボット設計は人や公共物を傷つけないが原則です。
相手ロボットと押し合いになってボールの回転が止まることは良く起こりますので、保持中のボールの回転を止めた時にローターがボールを削ることが無いかは、最低限確認してください!既に試合球が凸凹になる案件が発生しています。

キッカー制限はソレノイドやエアシリンダでボールを破壊するロボットが多発した結果、設けられた規定です。
ボールを削るロボットが多発して、ドリブラー規定なんかが策定されない様に安全なドリブラー設計を心掛けましょう!

技術公開とミスリード (勢いで その2)

ひょんなきっかけでミスリードについて書いたので、相手ロボットへの妨害と危険性のある事柄についても勢いで書いてしまいます。
と言うのも”ロボロボの会 サマーキャンプ2018"用にRCJ界隈のミスリードとエンジニア視点での最適解について解説したパワーポイントがあるので、手間の掛かる図解部分は作成済で記事を書くのが楽!というのもあったりしますが・・・

と言うことで今回は”相手ロボットへの妨害”です。
相手ロボットがカラーセンサやカメラを用いてボールやゴールを検知する場合のお話です。

RoboCupJunior Soccer Rules 2020の4.2 干渉には
”ロボットは平らな場所に置いた状態でほかのロボットの動作を妨害するような可視光を出してはいけません。また、相手のロボットのビジョンシステム(光学系センサ類)に干渉する可視光を生み出すどんなロボットの部品も隠さないといけません。”
と明記されましたが、この”干渉するような可視光”の解釈に問題があります。

青色、黄色、オレンジ色以外なら”干渉しない”と言う認識ではありませんか?
結論から言うと”いかなる色であっても干渉します”、つまり”一切可視光を出してはいけません”と言う事です。

次に”何故か?”について解説します。

①カメラのダイナミックレンジは狭い

f:id:Blackbox_crusher:20210412214241p:plain

この図は人間の目とカメラのダイナミックレンジの大小関係をイメージしていますが、実際の差は桁違いです。

このためカメラは画角内(カメラが見ている範囲)の画像に対して”白つぶれ”・”黒つぶれ”を起こした間のレンジに多くの情報が見えるように露出の自動調整を行います。

f:id:Blackbox_crusher:20210412215607p:plain

この絵は24bitカラー(RGB各色255諧調)にて、オレンジ色を作ってRGBの比率を変えずに倍率を変えた色見本です。

試合会場の照明の中でオレンジボールを覚えさせたカメラが、照明の反射光よりも明るい白色LEDで照らされて白くなっている床を見たと仮定します。

カメラはこの白つぶれした床を改善するため露出を絞る自動調整を行います。

0.7倍に露出を絞った場合はオレンジ色は茶色に見えますのでボールを見失います。

試合会場の照明の反射光に比べてLEDの光は非常に明るいので、LEDがカメラから見える状態は確実に妨害します。

カメラの露出調整点を変えてる事が問題ですのでLEDの色には関係なく妨害することになります。

色温度

聞きなれない言葉だと思いますが、人の目はとても優秀で”色温度”を意識することはありませんが、カメラにとっては重要な調整項目です。

f:id:Blackbox_crusher:20210412230233p:plain

f:id:Blackbox_crusher:20210412230449p:plain光源自体に色があると思っていただければイメージしやすいでしょうか。

電球(LED照明世代は既に見たことない?)は赤身がかった白色光ですし、蛍光灯は青みがかった白色光です。
カメラはこの光源色の傾向を色温度として取り扱い、色の分解能が良くなるように調整します。
試合会場の照明でホワイドバランス調整したカメラにLEDの光が混ざると上図の様にホワイトバランス調整不良に陥ります。

壁や床やゴールに目視で確認できる程度に、LEDが照らしていたら間違いなく妨害しています。

つまり

”可視光を生み出すどんなロボットの部品も隠さないといけません”

と言う事です。

 

対策方法

要点を押さえれば難しい事でも、重量加算が問題になる事でもありません。

OYA-G 2021モデルを例に対策方法を説明します。

まず汎用のマイコンボードもロボットの部品ですので例外ではありません。

Arduino NANOを使用していますが、RX用LED(ダウンロード時のみ点滅試合時は点灯しない)を除く全てのLEDを黒色テープで遮光します。

②電源ON表示用LEDは白色アクリル板をドーナツ型にレーザー加工して積層して光量を低減(目を凝らさないと見えないレベル)下の写真ば電源ON時です。右側トグルSWの手前にある白い筒が赤色LED点灯状態。カメラでは黒つぶれしてわかりませんが人の目には赤く見えます。

f:id:Blackbox_crusher:20210412233113j:plain

③低電圧検知回路に任せれば試合中の電源電圧インジケータは不要です。バッテリー交換時など必要時のみ表示できる様に着脱式。下の写真は外した時の電源ON状態

f:id:Blackbox_crusher:20210412233019j:plain

④赤色LEDを選択

緑色のカーペットは赤色を吸収するので、赤色LEDで投光すれば床面の散乱反射が横漏れする事が無く、白線とのS/N比が良くなるので一石二鳥です。

ちなみに、2020ルールで ”ロボットは平らな場所に置いた状態でほかのロボットの動作を妨害するような可視光を出してはいけません” と明記されましたので、持ち上げた時に赤色LEDは誤動作するので云々の話はありませんので、安心して赤色LEDが使えます。

 

⑤光学系でなくても代替の付くものはメカニカル式に変更する。

ボールキャッチセンサはボールベアリング+マイクロSWのメカニカル式にしました。

 

⑥低反発ウレタンで光路を制限

下の写真がラインセンサ部です。

ラインセンサと底板の間に低反発ウレタンを挟んでます。

底板は320番のサンドペーパーで細かい溝を付けて鏡面反射を防いでます。

f:id:Blackbox_crusher:20210413003659j:plain

お気に入りの低反発ウレタンです。

多少の厚み方向の凸凹は吸収してくれるのと、きれいにレーザー加工できるので複雑な形状に設計してもOKです。

f:id:Blackbox_crusher:20210413003625j:plain

遮光スポンジをレーザー加工した例です。

f:id:Blackbox_crusher:20210418085135j:plain

ちなみにレーザー加工機Beamoのパラメータ(参考値)

f:id:Blackbox_crusher:20210418085619j:plain
3個のスポンジを接着して必要な高さを得ます。

f:id:Blackbox_crusher:20210418085328j:plain

基板取付側からのスポンジ取付例です。

f:id:Blackbox_crusher:20210418085819j:plain

黒色のスポンジは小さな穴が空いることで、不要反射(内部迷光)が少なく光路制限には理想的です。

これらの工夫をすると暗所でもわからないくらい完璧な遮光ができます。

下の動画は電源ON状態を暗所撮影したもので、真ん中当たりに小さく赤いのが前出の電源ON表示の赤色LEDです。

ロボットを持ち上げた時に、ラインセンサの赤色LEDが床に投光しているのが見えます。

f:id:Blackbox_crusher:20210413000812g:plain

以前から”相手のチームのロボットに自分のロボットが影響を受けているとクレームするチームはその証拠や証明出来るものをみせなければいけません。”と言うルールがありますが、”PixyMom”など標準でビジュアルにセンサの状態をプレゼンできるツールがある状態ですので干渉の証明はとても簡単になりました。

干渉が証明されたら、そのセンサは使えなくなります。

ラインセンサ無しやボールキャッチセンサ無しでは戦闘力低下は著しいと思います。

また相手チームに干渉の証明をさせるのも(干渉を指摘される状況を作くってしまうのも)気分の良いものではありませんのでしっかり対策しましょう。

 

LEDの色に関係なく妨害に至る説明の為にRGBを用いましたが、明度に影響されにくい(されないわけではありません念のため)色判定方法も幾つかありますので調べてみては如何でしょうか。

 

危険性のある事柄については次回と致します。

 

出典:PHOTOGRAFAM.COM

技術公開とミスリード

ロボカップジュニアの精神に自分の築き上げた技術を公開・共有すると言うのがあります。

競技である以上、努力(手間暇金?)して得たアドバンテージを公開することは非常に勇気がいる行為です。

自分のロボットのノウハウをブログなどで公開している方々には敬意を表します。

プロの視点から見て技術的に”最適解でない”事もあるのですが、指摘するのは控えています。

指摘を控えている主な理由は

●ディスカッションができるオープン大会とか、合宿などでは解説しますが、Web上ではニュアンスが伝わらないリスクがある。

●製品開発では軽薄短小・低コスト高性能の最適解を求める事が必須ですが、RCJでは”やってみたい”、”つかってみたい”は尊重されるべきと考ていますから、最適解でないよと指摘するのは野暮ったいと思うから。

 

スリードが危険な方向に進む物も含めて幾つかあるのですが、ロボカップジュニア日本大会2021オンライン 交流会で、”必要もないのに全方位センサを開発したりとか・・・”とのプレゼンがあり、技術公開した本人が最適解ではないと認識している事が確認できましたので、”全方位カメラ”について解説します。

 

Pixy2(水平視野角60° 60FPS)を使用した場合を想定します。

①キックオフでは自由にロボットを配置できる

守備側ロボットのカメラがボールを見失うのに必要な攻撃側ロボットの速度は?

フレームレートと水平視野角から1/60秒以内に視野角の外にボールを出す必要があります。

”時間・距離・速度・加速度”で習った式で計算できます。

フレームレート 60 F/s
ボールまでの距離 300 mm
水平視野角 60 °
視野角外までの距離 173 mm
脱出可能時間 0.0167 s
16.7 ms
必要加速度 1247 m/s^2
脱出時速度 20.8 m/s
74.8 km/h

f:id:Blackbox_crusher:20210329005602p:plain

続いて物理で習った位置エネルギー(高さ22cnのボール)を運動エネルギー相当に換算します。

パルスボール

ボール重量 0.14 kg
登坂距離 0.22
登坂角度 20 °
高さ 0.075
位置エネルギー 0.103 J
速度 1.2 m/s
速度 4.4 km/s

 

オレンジボール

ボール重量 0.072 kg
登坂距離 0.22
登坂角度 20 °
高さ 0.075
位置エネルギー 0.053 J
速度 1.2 m/s
速度 4.4 km/s

と言うことでスタートと同時にキックされてもダッシュされても守備側がボールを見失うことはありません。

 

②画角とボール検出距離はトレードオフの関係

全方位カメラの画像は歪むので絵的に比較するのはイメージがしにくいです。

そこで一眼レフの画角と焦点距離の解説図をお借りして説明します。

焦点距離による画角の違い

水平画角で考えると60°の画角が360°になるわけですから焦点距離で6倍に相当します。

Pixy2ノーマルが135mmだと仮定すれば、全方位カメラは20mmに相当します。

135mmでは建物のディテールや噴水があることが分かりますが、20mmでは潰れて見えません。

Pixy2はオレンジボールをフィールドのどこにおいてもギリギリ検出できる能力がありますので検知距離を2mとします。

Pixy2ベースの全方位カメラでは検知距離0.33mになります。

全方位カメラを製作されて、ボールの検出距離が短くて驚いた方は少なく無いと思います。

 

③距離情報

垂直画角については、歪みによって角度・距離計算が非線形になります。

歪み補正計算を行えば距離を得ることが可能ですが距離分解能は低下します。

 

つまり、必要性の点からも検出距離・距離分解能を失うデメリットからも全方位カメラは最適解ではないと思うわけです。

あくまで仕様を決める際に設計計算を行うと結果の想定ができると言う"一例"ですので”やってみたい”、”つかってみたい”方は、とても面白い性質のカメラですので公開情報を基に全方位カメラを製作してみて下さい。

 

私の考える”最適解”については、おやじ参加のできるオープン大会にて、実機でプレゼンしたいと思っています。

けいはんなオープンはエントリーに行ったのですが一人参加できない様子なので、その次開催されるオープン大会かな?

 

最後に、ロボカップジュニア日本大会2021オンライン 交流会 関係者・参加者の皆様お疲れ様でした。

 

 

 

出典:パナソニック デジタルカメラ講座 焦点距離による画角の変化

https://av.jpn.support.panasonic.com/support/dsc/knowhow/knowhow12.html

レーザー加工機ねた 得意な加工

すっかりレーザー加工機にハマっています。

エンドミルに例えると刃径0.1mm以下での加工に相当するのですが、想像以上に加工適応範囲が広がります。

Fusion360のFM GEARSで平歯車を作る場合”Root Filet Radius”が0.2mmになるモジュール0.5も実用になります。

アクリル(キャスト)はプラスチックギヤの定番ポリアセタールと引張強さ、圧縮強さ、曲げ強さでは遜色ないので”ギヤ”としても安心して使えます。

ギヤを購入する機会が減りましたし、ギヤ比やレイアウト、軽量化など自由自在です。

f:id:Blackbox_crusher:20210325001435j:plain

2.54mmピッチ0.8mm角×15高さ3mmのスペーサと、プラスチックギヤTT用モジュール0.5のギヤを作ってみました。

f:id:Blackbox_crusher:20210325001757j:plain

ピンヘッダ15pと組み合わせてArduino NANOをベース基板からプラス3mm高くしてUSBコネクタへのアクセスを向上させる予定です。

何れも刃幅が無視できないサイズですのでCAMでパスを出す必要がありますので、別途解説する予定です。

Li-Feバッテリーの保護回路

プリント基板自作の次なので、エッチングで基板を自作している方向けです。

 

リチウムイオン二次電池はたった一度の過放電で電池としての性能を失ってしまいます。

この性質はLi-Feバッテリーでも同じです。

Li-Feバッテリーの過放電は失活するだけで、Li-Poバッテリーの様に発火・爆発の危険には繋がりませんが、大会当日にバッテリーが使えなくなる事態は避けたいですし、そもそも財布に優しくないです。

最低限、過放電保護回路はロボットに搭載したいですね。

と言うことで参考までに(実際にロボットに搭載している保護回路ですが、あくまで参考と言う扱いでお願い致します)Li-Feバッテリーの保護回路のご紹介。

ちなみに6セル7.2VNi-MHバッテリーにも使えます(終止電圧が近似できるので)。

 

 

界隈は”マイコン得意”、”アナログ不得意”と言う方が多いと勝手に思って、電圧監視にはPIC12F683(PICライターは出前授業させて頂いている学校さんには必ずあったのでメジャーなのでは・・・)を用いる事を軸に構成しました。

次に部品は秋月電子通商さんで一括調達できるように選定しました。

仕様

● Li-Fe 2セル6.6V専用

● 短絡保護 ヒューズ

●起動時電圧確認

● 低電圧検知による負荷回路切断 自動復帰なし

● LEDによる状態表示 電圧不足:0.5s間隔点滅 正常:暗い連続点灯 低電圧:0.1s点滅

 

回路

定格電流5Aとなる様にヒューズホルダー、トグルSW、負荷カット用FETを選定

トグルSWは5Aを2回路並列接続として安全率を稼いでいます。

電圧監視には

●過放電電圧より充分に低い電圧でのマイコン駆動の為のレギュレータ

●バッテリー電圧の分圧抵抗

が必要です。

この部品の公差を見込んだ電圧を設定する必要があります。

抵抗値許容差を小さくする工夫として4素子集合抵抗を用いて分圧比4:1を得ています。

集合抵抗内の誤差傾向が同じなので分圧比としての誤差は圧縮されます。

入手した秋月電子通商の10kΩ4素子の集合抵抗で分圧誤差0.4%でした。

(Eagle9.6.2をFusion360に更新したので貼り直しました。2023/12/5更新)

 

 

f:id:Blackbox_crusher:20210722231218p:plain

f:id:Blackbox_crusher:20210722231640p:plain

f:id:Blackbox_crusher:20210307232529j:plain

 

DXFファイル

 

プログラム

デバッグ不要なほどシンプルなプログラムにするのも重要です。

流れとしては

●POR直後に電圧を読んでバッテリが使用可能な電圧かを判断

●ひたすら電圧監視・モータ、ソレノイドなどの瞬間的負荷・ノイズで誤動作しない仕組みをカウンタ方式で実現

●カウンターがオーバーしたら負荷をカット

 

ソース  (突入電流など内部インピーダンスによる電圧降下を考慮した変更追加)

 

 

/**************************************
12F683 HI-TECH C
2セル6.6V Li-FeバッテリーBMS (6セル7.2V Ni-MH使用可)
低電圧検知 = 6.0V
分圧比4:1 = 1.5V
電圧監視 = GP0/AN0 1.5V = 466
シャットダウンFET制御 = GP1
LED = GP2
**************************************/

#include <htc.h>
__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON & BOREN_ON & MCLRE_OFF & CP_OFF & IESO_OFF & FCMEN_OFF);
#define _XTAL_FREQ 1000000 // クロック = 1MHz
#define P_ON 490 // 初期バッテリー電圧閾値 6.3V
#define SH_H 466 // 低電圧検知閾値 6.0V
#define SH_M 458 // 低電圧検知閾値 5.9V
#define SH_L 450 // 低電圧検知閾値 5.8V
#define shatdn_H 300 // シャットダウン カウント閾値
#define shatdn_M 100 // シャットダウン カウント閾値
#define shatdn_L 30 // シャットダウン カウント閾値

unsigned int adconv();
unsigned int tmp;
unsigned int count_H;
unsigned int count_M;
unsigned int count_L;

void main(void)
{
OSCCON = 0b1000000; // 内蔵OSC 1MHz
ANSEL = 0b00000001; // - ADCS2 ADCS1 ADCS0 ANS3 ANS2 ANS1 ANS0 GP0/AN0 ADC,GP1-5 D
CMCON0 = 0b00000111; // コンパレータ不使用
TRISIO = 0b00000001; // - - TRISIO5 TRISIO4 TRISIO3 TRISIO2 TRISIO1 TRISIO0 GP0/AN0 IN,GP1-5 OUT
PR2 = 255; // 16msec周期
TMR2 = 0; // TMR2プリスケーラ
CCP1CON= 0b101100; // PWMモード起動
CCPR1L = 12; // Duty 5%
T2CON = 0b110; // TMR2ON | プリスケーラ x16

count_H = 0;
count_M = 0;
count_L = 0;

GP1 = 0,GP2 = 0; // FET_OFF,LED_OFF

tmp = adconv(); // 電源投入時 起動判定
if(tmp < P_ON)
{
CCP1CON= 0b100000;
while (1)
{
GP2 = 1;
__delay_ms(10);

GP2 = 0;
__delay_ms(500);
}
}

GP1 = 1,GP2 = 1; // FET_ON,LED_ON

while (1) // 低電圧監視
{
tmp = adconv();
__delay_ms(10);
if(tmp < SH_H)
{
count_H = count_H + 1;
}
else
{
count_H = 0;
}

tmp = adconv();
__delay_ms(10);
if(tmp < SH_M)
{
count_M = count_M + 1;
}
else
{
count_M = 0;
}

tmp = adconv();
__delay_ms(10);
if(tmp < SH_L)
{
count_L = count_L + 1;
}
else
{
count_L = 0;
}


if(count_H > shatdn_H) // シャットダウン処理
{
GP1 = 0,GP2 = 0; // FET_OFF,LED_OFF
CCP1CON= 0b100000;
while (1)
{
GP2 = 1;
__delay_ms(10);

GP2 = 0;
__delay_ms(100);
}
}

if(count_M > shatdn_M) // シャットダウン処理
{
GP1 = 0,GP2 = 0; // FET_OFF,LED_OFF
CCP1CON= 0b100000;
while (1)
{
GP2 = 1;
__delay_ms(10);

GP2 = 0;
__delay_ms(100);
}
}

if(count_L > shatdn_L) // シャットダウン処理
{
GP1 = 0,GP2 = 0; // FET_OFF,LED_OFF
CCP1CON= 0b100000;
while (1)
{
GP2 = 1;
__delay_ms(10);

GP2 = 0;
__delay_ms(100);
}
}
}
}

unsigned int adconv() // A/D変換
{
ADCON0 = 0b10000001; // ADFM VCFG - - CHS1 CHS0 GO/DONE ADON Vref=VDD,GP0/AN0 ADC
__delay_us(25);
GO=1;
while(GO);
return (ADRESH<<8)+ADRESL;

}

 

 HI-TECH Cが現在のIDEにないとの事なので、HEXファイル置いておきます。

 

秋月電子通商さんの部品(購入単位の都合上余ります)

6Pトグルスイッチ 2回路2接点 [1MD1-T1-B1-M2-Q-N]

ヒューズホルダー 基板用 標準タイプ    ※左右2個対で使用するので1セット当たり2個発注
[FUC-04]

PchMOSFET μPA2815T1S
[ uPA2815T1S-E2-AT]

NchMOSFET IRLML6344TRPBFTR (10個入)
[IRLML6344TRPBFTR]

チップ積層セラミックコンデンサー 10μF35V X5R 1608 (10個入)

[GRM188R6YA106MA73]

 

チップ積層セラミックコンデンサー 0.1μF50V F 1608 (40個入)
[GRM188F11H104ZA01]

 

カーボン抵抗(炭素皮膜抵抗) 1/4W100Ω (100本入)
[CF25J100RB]


超精密級 金属皮膜チップ抵抗器 1608 1/10W100Ω±0.1% (5個入)
[RG1608N-101-B-T5]

 

超精密級 金属皮膜チップ抵抗器 1608 1/10W10kΩ0.1% (5個入)
[RG1608N-103-B-T5]


集合抵抗 4素子 10kΩ
[RKC4BD103J]

低損失レギュレーター 3.3V100mA NJW4183U3-33B
[NJW4183U3-33B]

PICマイコン PIC12F683-I/P
[PIC12F683-I/P]

丸ピンICソケット ( 8P)
[2227MC-08-03]

3mm赤色LED 625nm 70度 OSR5JA3Z74A
[OSR5JA3Z74A]

ガラス管ヒューズはロボットの仕様に合わせて選んで下さい。

 

5Aの電流容量とFETの放熱の為、サーマルOFFにしてあります。

80W以上の半田ゴテでないと実装は難しいので、御注意下さい。