STM32+Clionで開発(在宅勤務の話も)

在宅引きこもりでマウスの意欲をロストして、3ヶ月間一切何もしなかった。 ここまで何もしない期間ができたのは、マウスを初めて以来初である。

今日は久々にモチベがあったので、ブログまで書ききった

技術的なネタの前に、在宅7ヶ月目が終わりに近づいて、在宅勤務も感想をちょっとだけ。

  • 通勤は害悪。1日2h近く移動に使っても、1円も認められないのは損でしかない。2時間睡眠を増やせばパフォーマンスは上がる。(平均5h未満が8hになることのバフ効果はヤバイ)
  • 在宅でコミュニケーションの問題が起きているのは言い訳。直接会えてても問題があったか、欠如していたかのどちらか。(私見
  • 通勤定期バグ(在宅で電車乗ってないのに、定期代が支払われるバグ)の修正が遅い。
  • 仕事中の何気ない雑談は少なくなったが、ネット会議の枠を使ってやれば十分足りる。
  • 場所に縛られない働き方によって、オフィスの価値が変わり、住む場所の選び方も変わった。仕事の選び方も変わるのだろうか?

さて、本題だ。 naophis.hatenablog.com

この記事の続きのつもり。

構成

  • Ubuntu 20.03
  • clion 2020.2
  • stm32h743(nucleo743zi) 
  • openocd(自力ビルド!!!!)

CubeMXの設定

Project Manager

  • Project・・・toolchainでSTM32CubeIDEを選択
  • Code Generator・・・Generate peripheral initialization as a pair of '.c/.h' files per peripheralにチェックを入れることを推奨。

HAL or LL?

LLを選択。HALは遅い。
HALを使うと格闘ゲームプレイヤーなら違和感が出るレベルで遅い。
ただし、基本動作の確認にHALを使うことは、ネットにサンプルコードがたくさんあることから推奨。テストコードはOK、本番コードはNGな印象。

printf

main.cに以下の関数を挿入しておく。

// LLでUSART3を使用。
void USART_TransmitByte(uint8_t ch){
    LL_USART_TransmitData8(USART3,ch);
    while(LL_USART_IsActiveFlag_TXE(USART3)==0);
}
void __io_putchar(uint8_t ch){
    USART_TransmitByte(ch);
}

OpenOCD

sudo apt install openocdで入るopenocdではnucleo-h7系がない。
githubの最新のcfgファイルを抜き出して入れても、参照先の解決ができない。

面倒くさいから自力でビルドする!!

以下を参考に前提になるパッケージを入れて、ビルドするだけ!!(他力本願)
hackaday.io

Clionで使えるようにする

clionの設定でOpenOCD SupportOpenOCD Homeにインストール先(openocdコマンドがあるディレクトリ)を選択する。

Clionのデバッグ構成

board/st_nucleo_h743zi.cfgを指定。後は▶で書き込むだけ。

やり残したこと

C++でやりたい。自動生成されるmain.cmain.cppに変更するだけでGPIOやTIMは動きはするが、printfが動かない。(LL_USART_TransmitData8を使って1文字ずつの送信はできるのに。printfはできない。タスケテ)

eagleでRS-274X形式のガーバーデータを出す方法

基板発注する際、毎回忘れてしまうため備忘録として残す。

使用するもの

発注先と出力形式

  • JETPCB・・・ここ数年、基板はここに発注してる。残念な思いをしたことがない。
  • RS-274X形式・・・eagleで出力したものをzip化し、発注画面でアップロードすればよい。

出力方法

  1. eagleのトップメニューから、使用するCAMプロセッサーをダブルクリック
  2. File>Open>Boardから出力したい基板の.brdファイルを選択。
  3. Process Jobを実行

    このままだとドリルファイルがないため、以下を続けて実行。

  4. eagleのトップメニューから、excellon.cam
  5. File>Open>Boardから出力したい基板の.brdファイルを選択。
  6. Process Jobを実行

以下の拡張子が付いたファイルが生成されればOK。

*.cmp
*.drd
*.dri
*.gpi
*.out
*.plc
*.sol
*.stc
*.sts

念のため、ガーバービューワーなどで、意図した出力がされているか確認しましょう。

CAMプロセッサーをカスタムして長穴を作りたい

悪い人は思うのです。余計なことをしたい(少し弄りたい)と。
今回、メッキ付きの長孔を作成したかったため、46. Millingを使い、長穴を作成。参考

ガーバデータに、46. Millingを出力に含めるため、CAMプロセッサーを改造。

gerb274[2L].camOutlineにて、すでにある20. Dimensionに加え、46. Millingを追加してからProcess Jobを実行する。

これで行けるはず。(まだ物が届かない)

Clion+CubeMXでSTM32マイコンの開発環境紹介(CMake)

当記事は後で書き直します。画像の用意が面倒。

開発環境の紹介

  • Clion 2019.3
  • CubeMX(デフォルトでClionに内包)
  • CMake

なぜこの構成

  • ビルド環境をOS依存にさせたくない。(プラットフォーム対応しているIDEなどを使う)
  • マイコンのドライバソフトに力を入れない。(CubeMXによる、HAL or LL出力)
  • Gitを経由して複数のOS、環境にて再度開発環境を再構築したい。

最新のClionではCubeMX、OpenOCDが標準に組み込まれており、Windows, Mac, その他Linux環境での構築が可能である。

exlipseベースの他のIDEでは、C++の環境を標準で作成してくれない上、 いちいちオプションを見たりと、C++プロジェクトにするのに手間がかかる。そこでCMakeを率先して使いたい。

他に組み込みたいこと

内部にMatlabなどのシミュレーション環境も内包させ、Matlab/Simulink coderを使用し、シミュレーション、コード生成といった流れを作りたい。

C++GUIアプリを作ろうとすると、環境依存が大きいので、やめることにした。(Win環境しかできないとか、まるで求めてない。)

今年のアップデート点

このブログはMice Advent Calendar 201914日目の記事です。

強調に意味などありません。14日目の記事です。良いですね?

さて。タイトルの通り、今年試したネタ(ボツネタ含む)を紹介していこう

ExiaAlter(黒)

APEC大会向けに定格無視していた部分をすべて直したつもりの機体。

使用したICが悪かったせいか、不安定の極み。シーズン後半ではExiaAlter(白)を使う羽目に。

ExiaAlter(白) 修正版

昨年の有償機体

  • エンコーダからの出力(5V)を直にマイコン(3.3V定格ピン)に流していたが、分圧していれるように修正。
  • 足回りはアクリルからMJFに変更し、強度を向上
  • 吸引ファンはダクトを渦巻きポンプを意識し作ることで、圧損を軽減、低騒音と効率上昇を実現

Exia-Jr.

新作ハーフの予定だったもの。ExiaAlterのフォルムをそのまま小さくした機体。強そうな印象がないためお蔵入り。

  • ギアの噛み合いが何故か悪かった
  • 重い
  • RX71Mを思ったより余裕で載せられたので、つまらなくなった。

これまでも、お蔵入りの機体>リリースされた機体 なので、仕方がない。

一回限りの根気で作れるものなんてたかが知れてます。1度良いものを作れるわけないのは仕事でも同様。(これを知らず、すぐに心折れる人を何人も見てきた)

調整システム

全データアップデート機能を実装。これでパラメータが合計1300個だったことを知る。 使ってないデータはいくらかあるのだが。これは酷い。

バッテリー

いつものHyperionを3個直列。半年程度で膨れ始めるからいい加減やめたい

ソースコード

テストプログラムを修正しただけ、実はここ3年ほどほとんどアルゴリズムの開発を行ってない。 パラメータチューニングだけで済ませている。来年は大型アップデートするので、作り直しかな

次回作の構想

この記事はMicro Mouse Advent Calendar 2019の7日目の記事です。

なお、2019/12/06 23:47から書き始めています。RTAです。

まずは

2019年全日本大会お疲れ様でした。

昨年優勝したものの、あっさり3位に陥落しました。 これで、勝ち逃げと言われず、ハーフに行けるというものです。

次回作の構想

ハードウェア周り

今回のマイクロマウスにて、W特別賞の彼が利用しているマイコン「ESP32」をメインにした構成にしようと構想中

電波法の改正があったので、無線回りも工夫したいですね。

ソフトウェア周り

従来のヘンテコC言語による実装をほぼすべて廃棄したい。

せっかくある高級MATLABを使ったモデルベース開発を主軸にしていこうかなと

起動生成について

今までの軟化子を使ったターンを廃止。 基準軌道をベースに追従軌道と数msec後先まで計算するモデル予測制御を採用したい。

最後に3つほど

上記どれもが完成するまで大会に出ませんとかそういうのは多分しません。 所詮構想です。完成して動いたら勝ちです。出れないのが最悪の敗北です。

それと、大会結果はあの場にいれば知ってるので、もっと未来の話とか、裏話とか聞きたいな!!!

明日はアライさんの「社会人マウサーを続けるコツ?みたいなもの」です。 注文した品は来ないが、今シーズン台風を呼び寄せ続けた方がきっとためになる話をしてくれます!!

APEC2019に行ってきた話

3行まとめ

  • APEC大敗
  • ネット環境はt-mobileのSIMで充分。
  • ぼっちディズニー

何位だったの?と聞かれますが、4位以下はノーカンです。

旅行日程

移動について

  • 旅行代理店ではなく、全部JALでカスタム。(Webサイト重い)
  • NRT-LAXで往復ともにJAL(エコノミー)を利用。
    • 隣の席の人とAPEC会場で再会。
    • 10時間程度(復路は11時間程度)
    • 全て通路側を選択。(トイレ難民回避)
  • 空港からの移動はシャトルバスを予約
  • 復路はUberを利用しようと思ったが、他のAPEC出場者がシャトルバスを手配してくれていて、便乗。

荷物について

  • 工具は全部預入れ
  • 機体は手荷物(バッテリーは預入NGです。)
    • アルミフレーム多めの機体でOKだったので、板マウスならOKなのでしょう。

現地のネットワークについて

  • ホテル、APEC会場ともにWIFI完備。
  • Amazonで海外SIMを用意しておいた。
    • Amazon CAPTCHA
    • 事前にアクティベーションが必要
    • 速度は十分すぎる。
    • 電話もできる。
    • iPhoneの場合、ピンを挿してSIMの入れ替えをしますが、そのピンも同梱。(ピンは尖ってないため、機内持ち込みできました)
  • イモトのWifiも持って行ったが出番がなかった(保険でレンタル)

食事について

  • 24h開いてるスーパーとコンビニなどがあったため、特に困らない。
  • 近くのスタバやピザ屋など便利。
    • スタバのドリンクメニューは日本と共通です。
    • 「抹茶フラペチーノ」通じます。

ディズニー

  • 到着直後にぼっちディズニーを敢行。(特にSAN値に変動はない)
  • アドベンチャーとランドと日本で言うランドとシーのように別々の施設がある。
  • 入るまでに時間を掛けたくなければ、通りのチケット店で購入を推奨。
    • ホテルで割引チケットがあったり、割引クーポンをくれたりするので要確認。
  • 園内はアメリカ補正を入れてしまうと、思ったよりも狭い印象。
    • 待機列とかのスペースは日本に比べ圧倒的に広い

お土産

  • イミグレーション後のエリアで買い物をと思ってたが、日本のほうがモノは良かった。(ように見える。見せている。)
    • 日本のほうが商品の見せ方が良い。(陳列方法や照明の工夫など)
    • 男性向けのお土産は少なめ。
  • お酒を買おうにも税関引っかかるサイズが多い。720ml*3まで免税だが、720ml以上のヤツが多くて、これ1本でNGなの??とかわかりずらかった。

英語について

  • 訛りがないおかげか聞きやすい
  • 適当英語で意思疎通できた

最後に

  • アメリカ2回目だけど、水回り(特にトイレ、風呂)に関しては日本はスゴイ!!

ノウハウの一部を書いていく(主に部品や工具類)

きっかけ

なんかこういう情報まとまってるところないよなーと

一覧

保有するノウハウと思しきものの一覧、今回はソフトは書かない

  • ハードウェア
    • 足回りの部品
    • 燃費効率
    • 部品集め
    • 吸引機構周り
    • 工具
    • 接着剤
  • ソフト
    • 調整システム(既出)

足回り部品

  • ピニオンギアはkkpmo(真鍮orPOM)
    • 厚さ2mm
  • ギアはミスミ加工の平歯車を採用。
    • ミスミは個人の購入はできないため、伝手をつかうか、代行サービスを行っている会社で取り寄せる。
    • 材質はPOMのみ、厚さは3mm

取り寄せについて

  • 今年早速試したが、10日ほどで届いた。(途中、私のメールレスポンスが遅くなったため、もっと早くなる?)
  • 手数料が1割ほど上乗せされる

燃費効率

LiPo2Cell、3Cellから、5V、3.3Vを三端子レギュレータで得ようとすると、ドロップ電圧(≒熱損失)が大きくなり、使われないエネルギーを垂れ流す羽目になる。
吸引探索をするようになって、燃費はパフォーマンスに直結しかねないため、以下の構成にした。

LiPo(3cell)12.6V
┗DCDC(5.2V)
 ┣LDO(4.85V)・・・エンコーダ、センサーLED用
 ┣LDO(3.3V)・・・マイコン周り、センサー
 ┗LDO(3.3V)・・・ジャイロ向け

4.85Vという一見見慣れない電圧だが、DCDCのほうの最大出力値とLDOの最小ドロップ電圧の関係でこのような半端な値になった。 エンコーダの定格の範囲のギリギリを攻めた形だ。

DCDCで効率よく使いたい電圧帯域に近づけ、そこからLDOで正確な値を得るのは常套手段らしい。

部品集め

  • 電子部品はdigikeyRSコンポーネンツ
  • 3Dプリンタ部品はDMM3Dプリンタサービスでアクリルとextream(red)
  • ベアリングは電導機.com
  • フォトトランジスタはRTのST-1KL3A
  • 秋月電子(高分子コンデンサ
  • 日米通商(チップ抵抗、チップコンデンサ)・・・精度が必要としない部分むけ
  • タイヤ・・・スーパーラジコン(チャンプなんでなくなったんだ・・・・。めっちゃ通ってたのに・・・)
  • バッテリー
    • Hyoerion系・・・AirCraftで購入
    • nano-techなど以前はhobbykingで購入していたもの・・・amazonで購入
  • 吸引スカート
    • 隙間防止テープ(販売終了)URL
    • シリコンシートURL
  • ナット・・・シリコンナット3M、2M
  • ビス・・・ 3M*15mm
  • 低頭ネジ・・・ウィルコ
  • シャフト・・・モノタロウ平行ピンB種h7

吸引機構周り

  • モーターDCX10S(3V)
  • ファン・・・DMM3Dプリンタ(アクリルExtream Red)
    • 形状は3Dプリンタを活かし、斜めにする。評価は音で行った。(OpenFORMなどで評価すべきなのだろうが、専門外なので誰か頼む)
  • モーターマウント・・・日本プレート精工
    • 約2weekで届いた。
    • 三面図のDXFファイルで対応可能
    • 材質も指定。5052で十分(7000番は硬すぎる)
    • アルマイト加工もOK
    • 加工精度は要相談。(こういう使い方をするから、精度がほしいなど伝えた)

工具

  • ニッパー・・・HOZAN N-31
  • ワイヤーストリッパー・・・HOZAN P-963
  • ラジオペンチ・・・goot YP-10
  • ピンセット
    • ESD対策ピンセット【L606115】
  • はんだごて・・・goot PX338
  • ヒートガン・・・WEP 858D(金沢草の根大会景品)
  • はんだ・・・日本アルミット 高性能ヤニ入りハンダ(LiPoのはんだ付けはこれでないとうまくいかない)
  • はんだ吸い取り線・・・goot 吸取線 幅3.0mm CP-30B
  • フラックスクリーナー・・・sunhayatoのスプレータイプ
  • 作業台
    • はんだごて作業用・・・iMagitek 断熱ワーキングマット
    • カッター・・・オルファ 2つ折りカッターマット A3 223BSBR ブラウン
  • 充電器・・・iSDT Q6 Plus Smart Charger(300W/14A)

接着剤

  • メタルロック・・・セメダイン AY-123
  • テフロンテープ・・・中興化成工業 ASF-110FR
  • カプトンテープ・・・ 日東電工アメリカ P221X1/2
  • エポキシ・・・セメダイン A-121

その他

  • コロコロ
    • 軽く取りたい場合・・・ニトムズ オフィスコロコロ多用途フロア用テープ *ちゃんと取りたい場合・・・ニトムズ コロコロ フロアクリン