とつぜんPlatformIOでのビルドができなくなった

問題

PlatformIOで、以前ビルドできていたM5AtomS3のプロジェクトを開いてビルドしようとすると、Configuring project がいつまでたっても完了せず、「replacement-product-list-manager.h no such file or directory」のようなエラーメッセージが表示される。


まずはプロジェクトをクリーン

いったんVSCodeを閉じて、プロジェクトの .vscode フォルダと .pio フォルダを削除し、VSCodeを再起動。
→ 症状変わらず

他のマイコンのプロジェクトはどうか?

espressif32以外のplatformであるXIAO RP2040のPlatformIOブロジェクトを開いてビルドしてみる。
→ 正常にビルドできた

M5AtomS3のプロジェクトを新規作成

M5AtomS3のPlatformIOブロジェクトを新規作成してみる。
→ いつまでたっても完了しない

原因

以上の症状から、espressif32 のパッケージが破損していると思われる。

対策

espressif32 のパッケージをいったんアンインストールして、インストールしなおす。

方法

  • pioコマンドを用いてパッケージのアンインストール/インストールをおこなう。
  • pioコマンドにパスが通っていない場合は通しておく。
  • Windowsの場合、 %HOMEPATH%\.platformio\penv\Scripts を Path に追加する。
  • VScodeを再起動し、[Terminal]→[New Terminal] でターミナルを開く。
  • pio system info を実行し、pioコマンドが使えることを確認する。
  • pio platform uninstall espressif32 を実行し、espressif32パッケージをアンインストールする。
  • pio platform install espressif32 を実行し、espressif32パッケージをインストールする。

以上により、正常にビルドできるように復旧できた。

メモ:SPRESENSEのアナログ入力、内部プルアップ

アナログ入力

  • analogRead(pin) で指定できるピンは A0 ~ A5
  • A0 ~ A5はデジタルピンとしては使用不可
  • analogReadMap(pin, min, max)でAD値を任意の範囲にマップ化 (独自拡張)
  • デフォルトでは 0~1023
  • analogReference()はサポートされず。
  • 拡張ボードのアナログ入力基準電圧は5V固定
  • メインボードのアナログ入力基準電圧は0.7V固定
  • 参照:Spresense Arduino 開発ガイド

内部プルアップ

  • pinMode(pin, mode) は INPUT, OUTPUT, INPUT_PULLUP, INPUT_PULLDOWN をサポート
  • 拡張ボードのデジタルピンは拡張ボード上で強くプルアップされていることに注意
  • 参照:Spresense Arduino 開発ガイド

メモ: GoProジンバル用?BLDCモータ

以前アマゾンで買ったよく分からないBLDCモータ

品番の数字の意味

  • 2206-260KV : ステータ(固定子)の直径22mm, ステータの長さ6mm, KV値=260RPM/V
  • 外形は直径 28mm, 長さ 15mm (実測)
  • また160RPM/Vとの記載もあり不明

その他の仕様

  • モーター抵抗(Rm):5.6Ω
  • 無負荷電流:0.06A / 7.4V
  • 最大連続電流:1.3A
  • 最大電力:15W
  • ネジ穴:直径12mmの円周上に90°ごと / ネジ:M2×4本
  • ロータ(回転子):14極 / ステータ(固定子):12スロット

メモ:SPRESENSEのBtoBコネクタ

  • 拡張ボードの回路図によると、拡張ボード側のコネクタは DF40HC(3.0)-100DS-0.4V(55)
  • ヒロセ DF40シリーズ 0.4mmピッチBtoBコネクタ
  • HC=リテンションタブなし, 3.0=スタック高さ3.0mm(基板間間隙)
  • 100=100ピン, DS=2列, 0.4=0.4mmピッチ, V=垂直型・表面実装
  • 末尾の (55) は梱包の種別なので今は無視


メモ:M5StackのUnit BLDC Driverの内部を調査

Arduinoライブラリのサンプルスケッチ

  • pwm.ino : オープンループ制御、方向とPWMデューティ(0-2047)を指定
  • rpm.ino : クローズドループ制御、方向と回転数(RPM)を指定
  • i2c_addr_modify.ino : I2Cアドレス変更用

マイコンとモータドライバの接続 (マイコンからみたI/O)

  • PWM (O) : 回転速度指令 ( PWMパルス )
  • FR (O) : 回転方向指令 ( L=正転, H=反転 )
  • FS (O) : モータ設定 ( L = 低速, H = 高速 )
  • FG (I) : 回転数を示す※ (Duty=50%のパルス, オープンドレイン出力 )
  • RD (I) : ロック保護を示す ( L = 正常, H = ロック保護, オープンドレイン出力 )

RPM = (FG[Hz]×60) / 極対数

モータドライバICの仕様

  • 3相BLDCモータ 150度通電制御
  • 電源電圧 5V~16V
  • 出力電流 ~1.5A(連続), ~2.0A(ピーク)
  • 5V LDO出力あり (出力電流 ~20mA)
  • UVLO (低電圧誤動作防止機能)
  • PWM入力 7~100 kHz
  • PWMのVih = 2.7V, FRとFSのVih = 2.3V
  • FGとRDはオープンドレイン
  • 0.65mmピッチ 16ピン PowerPAD HTSSOPパッケージ
  • PowerPadはGNDに接続

ファームウェアの概要

  • code/MDK-ARM/ : ARM Keil MDKのプロジェクトファイル等
  • code/UnitBLDC.ioc : STM32CubeMXでのコード生成の設定ファイル
  • code/Core/Inc : ヘッダ類
  • code/Core/Src/main.c : メインのソースファイル
    • pid_ctrl_pos_t : PID制御用構造体
    • main() : メイン関数
      • init_pid() : PID制御の初期化 → PIDInit()
      • speed_pid() : 速度のPID制御 → PIDCompute()
    • i2c1_receive_callback() : I2C受信コールバック
  • code/Core/Src/pid_controller.c : PID制御のソースファイル
    • PIDInit() : PID制御の初期化
    • PIDCompute() : PID制御の計算
  • code/Core/Src/flash.c : データFLASHメモリアクセス処理のソースファイル
  • code/Core/Src/i2c_ex.c : I2C送信処理のソースファイル
  • code/Core/Src/その他 : 自動生成されたソースファイル

メモ:Excelの分類表でセル結合しない

問題

下図のような分類表ではセルの結合をしがちだが、データとして扱う(例えばフィルタ)場合に不都合


解決

  • 全ての行に分類名を入力する
  • それだけだと見にくいので、直前の行とダブっている分類名は非表示にする
  • 小分類でフィルタしたときも大分類の行が空欄にならないように工夫

方法

  • セル結合はしない (していたら解除する)
  • 表全体を罫線の設定で「格子」にする
  • 分類の列のすべてのセルに値を入れる
    • 分類の列の空白のセルを選択する。(範囲を選択して、Ctrl+G →「セル選択」→「空白セル」)
    • 選択中のセルに1行上の値が入るように数式を入力して Ctrl+Enter
      ( B4が選択中なら =B3 と入力 )
    • いったん範囲選択してコピーし、値を貼り付け
  • 表示中の分類名は最初の1行のみ表示し、2行目以降は上側に罫線を引かないようにする
    • 分類の列を範囲選択する
    • 「ホーム」→「条件付き書式」→「ルールの管理」→「新規のルール」
    • 「数式を使用して、書式設定するセルを決定」
    • 数式に「1行上のセルと値が同じで、かつ1行上のセルが表示されている」条件を設定
      ( A3が選択中なら =and( A3=A2, subtotal(3,A2)>0 ) と入力 )
    • 「書式」→「表示形式」→「ユーザー定義」で書式の種類に ;;; と入力
      ( 見かけ上は何も表示されない書式 )
    • 「書式」→「罫線」でセルの上側の罫線を消す

関連

  • 見出し行を固定表示にするには、例えば2行目が見出し行なら3行目を選択して、
    「表示」→「ウィンドウ枠の固定」→「ウィンドウ枠の固定」
  • 分類でフィルタリングするには、表全体(見出し行含む)を選択して、
    「データ」→「フィルター」で、見出し行にフィルターボタンが付く
  • Excelの書式は「正の数;負の数;ゼロ;文字列」で定義できる。「;;;」だと何も表示されない。
  • subtotal関数の第1引数は集計方法の指定で、3 は空白でないデータの個数。
    ただしフィルターで非表示になったセルは含まない。

参考

Officeの保存のときのまどろっこしいやつを出さない

問題

近年のExcelやWordは、ファイル保存時にいつもまどろっこしい画面が出る。

これを出さないようにしたい。

解決

[ファイル]→[オプション]→[保存]→[キーボードショートカットを使ってファイルを開いたり保存したりするときに Backstage を表示しない] にチェック

これで、Ctrl+Sでの保存の際には、最初からふつうの保存ダイアログが出る。