2026年8月11日火曜日

プログラマブルシンクモジュール(2)



電源から決めた電流をひっぱるモジュールを作りたい。電源回路や電池の評価に使う。 世の中には電子負荷とか充放電試験装置とかあるにはあるんだけど、プログラム可能なステップ数やサンプリングレートが限られてたり、制御範囲が所望の範囲じゃなかったりってことで、こういう場合は自分で作ってしまおう。ちな、成功する保証はない。
目次
  1. シンク回路確認
  2. シンク回路ソフト
  3. シンク回路動作確認

  1. シンク回路確認    
  2. シンク回路が動くのかどうか確認していく
    • AVR128DB28のArduino化
    • まずこんな感じではんだブリッジを作る。
      Arduino IDEでこんな感じで設定して、最後に「ブートローダを書き込む」
      んで、はんだブリッジを変更する。
      んで、Arduino IDEからBlinkを書き込んでみる。
      と、ちゃんとLEDが点滅する。(めんどくさいので動画無し)

    • 基準電圧選択機能の確認
    • まずは基準電圧が狙い通りできているか。ボルテージフォロアの出力が4つの基準電圧なのでそれを測定してみる。
      測定点 電圧
      V1 2.049V
      V2 205.4mV
      V3 20.4mV
      V4 2.8mV
      ざっくりあってはいるんだけど、正直うちのテスターでは正確に測定できていないんじゃないかと思う。特に一番低い電圧。現時点ではこれで良しとしておく。デジタルマルチメーター欲しい🥺

    • MUX確認
    • Arduino化したAVR128DB28にコードを書いて動きを確認する。GPIOでMUX_A0, MUX_A1, MUX_ENを操作するだけ、、、まあそれだけじゃちとさみしいのでLEDも点滅させてみる。
      TMUX1104の真理値表はこんなん
      EN A1 A0 Selected Input Connected To Drain (D) Pin
      0 X X All channels are off
      1 0 0 S1
      1 0 1 S2
      1 1 0 S3
      1 1 1 S4
      (まあ、「"All channels are off"ってどういう状態?」とか、「論理の"1"が電圧レベルとして"H"なのか"L"なのかわからん」とか正直めっちゃ不親切なデータシートです。Geminiに調べさせたら確かに記述はないけど、一般的に"0"は"L"、"1"は"H"だからそう思っていいんじゃないかって。世界的な半導体メーカーなのに色々雑なんよねーこのメーカー。)
      TMUX1104 ノード
      S1 V_1
      S2 V_3
      S3 V_2
      S4 V_4
      回路とはこんな感じで接続されていて、S1->S3->S2->S4って選択していく感じのArduinoコードを書いていく。ちょっとカッコつけてタイマー割り込みで状態遷移していくスタイル。
      tmux1104ctrl.ino
      で、こんな感じになる(本当は高速に動かしてオシロでってのがスジなんだけど、うちのオシロのオフセットがひどいんでテスターのロギング機能使うことにした)
      横軸サンプリング(1S/s、、、あ、ってことは秒ってことか)、縦軸電圧(対数スケール)。
      まあ、ちゃんと選択できてるね。

    • DAC確認
    • こちらもArduino化したAVR128DB28にコードを書いて動きを確認する。MUXは2.048V出力設定で固定とする。そして、MCP4921を制御してみるって訳だ。
      Microchipのデータシートによると、
      ってことで、これをSPIで送るだけなんだけど、ここで、問題が、、、普通にやっても当初仕様の250kS/sはどうあがいても達成できない。くそう、Geminiと相談してAVR128DB28って決めたのに、実際に工夫無くやると全くダメ。んで、クリスタルを32MHzに付け替えて(オーバークロックだけど、このコアは32MHzは余裕でいけるらしい)、bootloaderも32MHz crystal (overclocked)にして再書き込みして、コードも絶妙に調整して、、、なんとか100kS/s。こういうことあるから余裕のある設計が必要よね( ˘ω˘ ; )
      mcp4921ctrl.ino
      んで、こうなる
      0, 1/2, 1=(2.048V ideal)の3相を30us周期で動いているから10us/S=100kS/s。
    (目次)

  1. シンク回路ソフト    
  2. シンク回路が動くのかどうか確認していく
    (目次)

0 件のコメント:

コメントを投稿