2024年4月17日水曜日

小ネタ



 20ftコンテナフォームファクタの折りたたみ太陽光発電システム。広げると120mくらいの長さになる。傾斜なしで平面に設置だから発電効率は若干ペナルティがありそう。長期間設置するなら手間をかけてでも既存のシステムで作ったほうが良いだろうな。駆動系統とかでコストも掛かるだろうし、展開したらレールとかも下に残るから、一緒に設置する他のコンテナに流用するみたいなこともできないだろうし。スポット的な需要には良さそうだけど、とはいえそのスポット的な需要の期間に綺麗な晴天を期待できるかというとまた別の話だし。20ftコンテナフォームファクタの蓄電システムと組み合わせて、需要の数日前に搬入して蓄電しつつ、当日の需要は蓄電したものを使って、みたいな感じになるか。


 AZKiと石神のぞみのドライブvlog概念。ツッコミ不在のギャグ大連発激オモロ動画。地理とか地図とかドライブとかが好きそうな人たちなので面白そう。


 リコリスのワッペン、サードのやつ出してくれないかなー。FDEとかタンとかマルチカムみたいなベースに合いそう。


 DJIのドローンとか、特に小型なやつで、そろそろボールとかフリスビーみたいに投げたらそのまま浮かぶ機能が欲しいよね。いちいち地面から離陸させなきゃいけないのが古くせー感じがする。バックパックから送信機を取り出して電源をON、続けてドローンを取り出して電源を入れて、ペアリングでき次第スナップを効かせて投げたら、そこで浮かんでてくれる。近未来の世界観のドローンってこういうイメージなんだけど、未だに何十年も昔のラジコンヘリみたいな離陸の仕方しかできない。フェイルセーフとかセンサのキャリブレーションとかいろいろ理由はあるんだろうけど。


 家に設置してあるストーブが操作しづらいとのことで、ためしに分解。めっちゃ分解しやすいな。順番にネジを外していくだけ。価格/質量と修理性レートは大部分で反比例しそう。密度が高いとネジを使わず接着したり、密度が低ければ組み立てのときの余裕も大きいし。

 操作部のPCBを取り外して観察。問題のスイッチは2本足のタクタイルスイッチだった。4本足しか持ってないや。ということで、別の操作(時計とかタイマーの設定用、全く使ってない機能)のスイッチと交換。とりあえず必要な操作は正常に戻ったかな。今シーズンはもう使わないだろうし、気が向いたら合いそうなスイッチを買って在庫しておこう。

 2本足のタクタイルスイッチは秋月でも売ってるけど、秋月のは高さが5mm、PCBに乗ってたやつは4.3mmくらいだった。ちょっと高さが違う。高い分には削ればいいし、低い分にはテープか何か貼ればいいんだろうけども。

 '12年製なので10年くらい使っていて、1年の1/3で稼働していたとして、1日に10回操作したとして、1万回くらい押されているスイッチ。1日に10回も押さんだろとか稼働時期の端は少なくなるだろと考えると、もう少し少ないかな、といったところか。家のあたりは温泉地というわけでもないし、秋月で売っているやつが10万サイクルくらいのオーダーであることを考えると、もう少し長持ちしてほしいところ。/* メーカー曰く設計寿命は8年とのことだから、製品本体の設計寿命は十分に超えている */


 NTTだかプロバイダだかを名乗るところから電話があった。

 曰く料金プランが変更になるので手続きを行うと安くなる、大きな手続きは必要ない、なるべく早く手続きをやってくれ(そのほうが早く安くなるから)、という感じ。手続の内容を軽く聞いてみたら、電話相手が3,4回たらい回しにされるから先々で従ってくれ、あと現在契約中のプロバイダの解約(or契約変更)手続きを行ってくれ、とのこと。おい。

「今は時間がないから後で手続きをしたいのだが、手が空いたときに電話したい」旨を伝えると「こちらの電話番号を教えることはできない」だそう。まともな会社なら問い合わせ窓口くらいあるだろうよ。。。

 うーん、詐欺っぽ、と思って通話終了。大事な手続きならまたあとで電話来るだろ…… そういう心理をついて詐欺業者が繰り返し電話してきてもまた困るんだけど。


***


 STM32F303K8で定電流回路

 外付けのNch MOSFET(とりあえず手持ちのIRLB3813PBF)をオペアンプでドライブして、ソースを1Ω5%の抵抗で電流計測。オペアンプでフィードバック制御して、電流指令値はDACを分圧して入力。電流センスは0.1Aで0.1Vになるので、12bitのADCで125binくらいにしかならない。本来であればPGAで増幅したいところだけど、303K8の唯一のOPAMPはフィードバック用に使用しているので使えない。

 安定化電源を接続しているので電圧は一定のはずだけど、ブレッドボードの接触抵抗でだいぶドロップしてる。

 とりあえず三角波の指令値を出していて、平均するとFETは0.56Wくらいの消費電力になる。この程度でも触るとほんのり温かいな。


 適当な定抵抗負荷(100Ω5%を2本並列+470ΩのLED)

 電流指令値に対して飽和している(電圧に対して抵抗が大きい)。

 電流(縦軸) 対 電圧(横軸)

 きれいな直線状。傾斜の傾きからして抵抗値は34Ωくらいか。実測値は49.8Ωくらいなのでかなり低く出ている。


 死んだNi-MH電池がたくさんあるので適当な電子負荷を作って特性を測ってみたいなとか思ったり。STM32F303K8はVINMが1本しかないのでCC/CVをハードウェアで組むことができないから、CC専用の負荷でCVはソフトウェアで実装みたいな感じになるのかな。電池の放電試験くらいならソフト実装の帯域幅(250Hz前後)でも十分じゃろ。あるいはシャントからPGA(x16)に通してADCで計測して、CC/CVどちらもソフトウェアで制御するみたいな方向性もあるか。

 ある程度の電流を引きたい場合、安い電池ボックスだと接点容量の心配がな。マルツ(DigiKey)でkeystoneのアルミ板金のいかにも大電力対応みたいな見た目のやつも売ってるけど、さすがのお値段。樹脂製の安価な電池ボックスの20倍くらいする。

 タミヤの電池ボックスって性能どんなものなんだろうか。細い針金でコイル作ってるわけじゃないからそこそこ抵抗低そうな気はするのだが。それを試すための電子負荷か……


***


 簡単なテストコードをCortex-M4で走らせてみた。

 こんな感じのコード

uint32_t start, end;
__asm__ volatile(
    R"(
      mov r12, #128
      ldr %[start], [%[CYCCNT]]
      .balign 8
      # ↓ NOPの数を調整
      nop
      nop
      nop
      nop
      nop
      nop
    label6:
      subs r12, #1
      bne label6
      ldr %[end], [%[CYCCNT]]
 )" : [start] "=r"(start),
      [end] "=r"(end)
    : [CYCCNT] "r"(&DWT->CYCCNT)
    : "r12");
printf("6 %lu\n", end - start);

 インラインアセンブリで単純なループをさせる。経過時間をDWT.CYCCNTで計測。ラベル前のNOPの数を変えて走らせる。ここで、NOPは16bit命令へ変換される(32bitのNOPが欲しい場合、nop.wを指定する)。PICマイコンとかだとNOPは1サイクル分の「何もしない」命令になるけど、Cortex-Mの場合、NOPはそのまま実行されることもあるし、実行されないこともあるらしい(実行されないというか、パイプラインに取り込まれずにスキップされる)。NOPは「何もしない」というよりは、「後続の命令の位置を動かすためのパディング」くらいの感じらしい。ということで、今回のNOPの使い方は本来(想定)の使い方ということになる。

 で、結果は、

 というような感じ。NOPの数が4でmod取って0と1が最小、2と3で処理時間が増える、という感じ。16bit命令4個で1サイクルなので、64bitが1周期となる。

 今回はカウンタをデクリメントするだけの一番小さなループだから効果が大きく出ているけど、命令のアライメントはそれなりに効きそう。gccのインラインアセンブリなら.balign nで次の命令のアライメントを指定できるから、パフォーマンスがほしいループなら.balign 8とか指定すると良さそう。ジャンプ先のアライメントはループ数に比例して増えるのに対して、balignで挿入されるNOPはループ数に反比例して影響が減るから、ループが小さく回数が多いほどbalignでアライメントするほうが有利になる。ただ、同じCortex-M4でもチップによって(F3とG4とか)フラッシュの帯域幅が違うらしいんで、ターゲットによってアライメントを調整したほうがいいかもしれないけど。

 処理時間はsubが1サイクル、bが最大4だから、計算上は最小384、最大512程度のはずなんだけど、明らかに遅い。命令に要するサイクルはあくまでもスムーズに流れたときに最短でこの程度、という感じなのかな。


0 件のコメント:

コメントを投稿