あぐちゃんさんの物置き場

オタク、ブレボを溶かしがち

JLCPCBさんにスポンサーになっていただいた

おまえがき

おひさしぶりです。あぐちゃんさん❆です。高専を卒業してもロボコンから成仏できず、学ロボに参加する団体であるRobopro長岡の回路屋さんをしています。

せっかく一丁前に4層基板なんて作るようになったのに、弊団体はお金がないのであんまり高い基板をほいほいと買えるようなもんじゃないです。あるあるですね。たぶん。

そんなとき、JLCPCBがスポンサーさんがスポンサーについてくれたらなんと『無料』で基板を刷ってくれるという話を聞きつけて、うちの代表にお願いして話を進めてもらいました。

最近届いたやつ 詳しい仕様はヒミツ(はーと)

スポンサーについてもらう前から全然発注しまくってました。まだまだ作らないといけない基板はあります。

JCLPCBのつかいかた

前準備

まずお好みのCADで基板をつくります。100mm x 100mm以内のサイズだと安上がりになったと思います。

スポンサーについてもらったあなたは、基板のどっかにこんな感じでJLCのロゴをのせましょう。

できましたか?できましたね、じゃあ次に.gbr形式で基板の製造用データをお好みのCADから出力します。 ファイル群は1つのフォルダにぜんぶまとめて、.zip形式で圧縮します。

うp

jlcpcb.com

ここにアクセスして、今すぐお見積りボタンをとにかく押します。

Add gerber fileのところにさっきつくった.zipをポイーします。

いろいろ設定

普通の人が気にするのは、

  • PCB Qtyで枚数を選ぶ
  • Layersで層数を選ぶ
  • PCB Colorで色を選ぶ
  • Remove Oder Numberで製造番号を消す有料オプションを使うか、場所を指定するかを選ぶ

ぐらいです。1項目ごとに詳しく解説してるサイトがどっかにあったので、詳しいことはよそで調べてください。けっこういろいろ指定できます。 時期によっては、色ごとに値段が大きく変わったりするので注意です。

ちなみに、リフロー用のステンシルをつけたり、部品実装までしてもらうオプションもあります。気になったら調べてみてください。

設定が確定したら、SAVE TO CARTをポチーしてカートに放り込みます。ほかにも基板を発注するなら同じようにしてってください。

発注

発送先を記入して、配送方法と支払方法を選びます。

Pay Directlyを選んで決済方法を選べば発注完了です。

うちにもJLCにスポンサーについてもらおうと考えている団体代表者さんへ

先にクーポンをもらっておきましょう。

弊団体で一度起きた事故事例として、スポンサーについてもらったしもういけるやろと発注したら料金が発生したとのこと。

事務係の人から話を聞くと、クーポンをもらった状態で決済画面に進む必要があるらしいです。

感想

感想も何も、いつも使ってた製造業者が無料で基板を刷ってくれるのでマジでありがたいです。神。

twitterのDMからスポンサーのお願いができるらしいので、気になったら所属団体の代表に聞いてみるといいと思います。

ちなみに普通にクーポンなしでも安く作れます。趣味で基板作るにもおすすめできます。

高専卒業しました

お久しぶりでございます

いつ振りの更新でしょうか。あぐちゃんさんです。部内wikiができてたのでそっちにはいろいろ書いてました。非公開なのであしからず。

ついに自分の番が回ってきてしまった感です。毎年先輩方を送り出す側だったのにね。 長いようであっという間の5年間でした。

音ゲーマーは留年するというのはどうやらマジらしく、同級生の音ゲーマーはほぼ全員留年したり辞めたりして同時に卒業できませんでした。かなしい。ぼくは留年休学も無く何事もなく進級して進路も決まりの卒業です。あーけあは無事2星になったし、ウニはようやく虹レになったし、ボルテは後光或帝滅斗に、舞はヘタクソモブ金レです。なんでや。多分一番クレ数突っ込んだのが舞なのに。

ロボコン部には特にお世話になりましたね..... 1年生のころから出場ロボットの主要なプログラムを担当しその後も毎年デスマの日々開発してました。オフシーズンもずっと部室に籠って基礎研究や趣味に没頭してました。

5年次は流石に見守る側になってましたが。

なんとなく高専生活を思い出してみる

1年生

ロボコン

オンシーズン中の写真は出せるのがありませんでした。 超音波測距センサ読み取り基板を作ったのと、本番出場機の移動以外の動作の制御を担当したような? 人が足りない上PICが扱える1年生だったので動員されたようです。同期もそんな感じで同チームの別マシンの制御をやってました。

ミニロボ大会の様子
オフシーズン開催のミニロボの様子

1年生のオフシーズンは上級生が部内での小規模なロボコン、通称「ミニロボ」を企画し、福岡市科学館で実施した展示会での一幕の様子です。 このころにしてもうすでにPICとLazuriteがある程度扱えていたのはミニロボがあったおかげでしょう。やっぱり必要に迫られるのが何でも覚えるんですね。i2cが上手くいかなくて必死になって調べた記憶があります。 回路を早々に完成させて、設計担当の進捗を煽りまくってました。果てにはサボる設計者から図面を奪ってって自分で加工も多少やってました。この時の1年生はまず全員加工をやらされていたので、全員一通りの心得がありました。

それ以外

このころちょうどAC音ゲーにハマりはじめてmaimaiとChunithmに手を出したようです。スマホは一回データぶっ飛ばしてるので古い写真はもう一切全くどこにも残ってません。諸行無常だね

スマホ音ゲーにものめり込んでました。

昔はちゃんとヘタクソだった
CYTUSはもうやらなくなっちゃった
DEEMOは昔からやってた。この年で3.0になってストーリー完結したんだったかな。え?もう4年経つの?は?え????

イクラに中一の時からドはまりしたまま抜け出せず、建築以外の要素は大体遊んでました。中三の時にはデカい加算器とかも作ってました。古いスクショはないなってしもた

ピストンドア職人をしてた時

あとごちうさきんモザにドはまりしていた様子。スクショが大量に出てきた。これと少女終末旅行で早くも百合性癖獲得したかもしれないぽい。

2年生

ロボコン

当然ながら1台分の制御を任されるわけです。設計はミニロボで組んだのと同じ人でした。ミニロボ上がりで進捗煽りをかましまくり、例年までよりも比較的余裕のある開発だったと言われたと記憶しています。しかしまあハード的不具合で大会での成績は奮いませんでしたが。やってみなわからんのです。

2年生オンシーズン

LEDドライバの回路図
このころはまだkicadを覚えていなかったので手書きの回路図です。駆動電源だけが入ったら赤色だけが点滅する仕様で、無安定マルチを使って発振させてました。回路電源が入ると点滅が止まって、マイコンからの制御に切り替わります。この回路を作ったのがアナログ回路やディスクリート志向にハマるきっかけだったと思います。

この年のオンシーズンで移動制御をあらかた身に着けて、当時先輩が挑んでいた「三軸制御」を会得するべく、オフシーズンはひたすら足回りの制御のための行列演算のプログラムと移動制御を頑張ってました。

時刻で値が定まる関数をそれぞれx座標用、y座標用、回転角用で用意してその通りの軌跡と姿勢を取るような制御です。これのために線形代数を授業より先の内容を勉強してました。惑星の公転と自転を組み合わせたような動きとかもやりました。手動機だと動画のように直進しながら回転するような動作が可能になります。ライブラリとして整備しましたが、コロカスのせいで活用の機会はありませんでした..... あと、PID制御を適当に実装したことから制御工学に興味を持ち始めて、ラプラス変換を扱えるようになるために微分方程式の勉強とかも先取りしてやってたっけ。春休みに本格的に制御工学の勉強したんだっけ?

それ以外

Vtuberにハマる。テスト勉強中に横で流し始めたのがすべてのきっかけ。おわりのはじまり。

www.youtube.com

最初に見たのが月ノ美兎ヨーロッパ企画のゲーム実況だったかな?料理をしていたはずがいきなりかまいたちの夜になって「すっぺらぴっちょん!」するせいで大爆笑した記憶が。 確かちょうどそのころだいさんじのラジオが始まってて、パーソナリティをやってたから追ってた。で、ゲストで出てきたリゼ・ヘルエスタを知る→さんばかにハマる→沼入り、って流れだったはず。青系銀髪癖はここから始まったのかもしれない。選んでるわけじゃないのに気が付いたらそうなってた。あと鈴原るるにめちゃくちゃハマる。

あと電検の勉強をするも飽きる。多少の予習にはなったかな?ぐらい。 あとボルテをちょっとだけはじめる。maimaiもだいぶできるようになる。

今も似たようなスコアしか出ないかもしれない

ArcaeaはGrievous LadyがEX寸止めを踏むくらいにはできるようになってた。

かわいそう

あとoverrapidをやり始める。

3年生

ロボコン

コロカスのせいで活動制限がかなりキツかったです。その上例年にはないオンライン大会用ルール。急ピッチでの準備の中でも、先輩の手伝いもあってろびぃちゃん(5ねんせい)とお絵描きタコでなんとか出場しました。予選で負けましたが、九州の並み居る強豪とはじめてまともに戦うことができました。

ろびぃちゃん

それ以外

学校が使えないので家でいる時間が長かったのがVtuberハマりを加速させました。オフシーズン冬が確か部室が使えなかったので、家でLTSpiceいじったり制御の勉強をしてたりマイクラでCPU作ったりしました。

この現代制御がめっちゃたのしいんですねこれが。何よりかっこいいのが良い

CPUは4bitのを作ってみて勝手がわかったからすぐ8bitの2代目を作ってた。

あとこのブログ作ったのもこのぐらいだっけ?家にいろいろ作業環境整えたりしてました。確か春休みは部室が使えて、モタドラの研究とかしてました。電源自作もこの時期かな? あとインバータ制作の目途を立てたのもこのころかも。コロナで何もできなかったと思いきやいろいろやってたみたいです。

ボルテにだいぶハマってきたので、家でもできるようにコントローラを自作。

買うと高いからね。無いものは作る。ちなみに2023年3月現在も修理を重ねつつ現役。

ラズパイデビュー。いきなりUbuntuをブチ込む。この時はまだ何もわからなかったので先輩の手助けを借りながらOSを焼いてました。 で、あぐちゃんツールができるわけです。

twitter.com

このころにはもうすでに多くのVtuberを追っかけていたので、画像収集の手間を省くべく、また目立ちすぎないように作ってました。RTした画像はすべてローカルに保存してます。 2023年3月末のAPI有料化をもってサービス終了予定です。

あと、分解能高めのステッピングモーターの限界速度を調べるとかいうアホな試みも。

これのために部室にあったロジックICというICをかき集めて同期カウンタとドライバをわざわざブレボ上に作ってた。機械科の同期に治具をわざわざ作ってもらってた。何してんのマジで。

あとはリゼるるlistenがはじまる。はい。全部が良い。アーカイブを見よう。

Arcaeaは5月ごろに星ポテ入りしてました。あとボルテは剛力羅合格してました。このころはまだVivid Waveだったのがなつかしい

友人曰くBOF回が初合格なのはおかしいらしい

overrapidをやりまくっていたので、指押しはすぐ慣れました。

ウニにもちょっとハマりました。maimaiは13+でSSSが出るくらいにはできるようになりました。

あと、ボルテを始めたことで棗いつきを知りました。

www.youtube.com

ほんとにプラネタジャーニーの人????ってなった記憶。

めちゃくちゃ声が良い。イケメンボイス。でもかわいい。何故。

Endorfinで知ってた藍月なくるといちゃついてた。またやってほしい。そのままの流れでLa prièreにハマる。

ほんの少しだけお絵描きをするようになる。

え、てかこれほんとに1年間の出来事?なんでもやりすぎじゃね???

4年生

ロボコン

さらに活動制限が厳しくなってました。よってより暇に。長期休みもほとんど使えなかったような

倒立振子ロボットを作ることになり、現代制御理論を投入。というか、誰かが倒立振子を言い出した時に現代制御を勉強したぼくができそうじゃね?みたいな適当言ったら採用されたような。 活動制限が厳しく時期になる前に試験機が作られて、そこで制御の実装を試してました。本番機は大会一週間前に本体が完成。 なんと当時のぼくは回路の実装含め3日でもう立たせていたらしい。回路を事前に作り上げていたとはいえまあとんでもないデスマをしたもんだ。かなりヘロヘロになった気がする。

足をのばすはずでしたが、計測などの時間が間に合うはずもなく。バランスの安定する分だけ足を延ばした状態で固定してパフォーマンスをしました。消化不良ですが制御に手間のかかるマシンだった上、その後の活動制限も厳しかったのでより高度なことはなにもできませんでした。

それ以外

ついにインバータ作成に本格着手します。4年生の時点では前に記事にしたところまでしかやってないかな?制作自体は以前からやっていましたが、PrototypingLabにプロジェクトを移行して、予算を出してもらって回路を作ってました。必要な電源もわざわざ用意してもらいました。

ハーフブリッジにDC100V突っ込んで明るさの制御をしている様子

ようやく自作PCを構築。CPUはRyzen9、メモリは16GB、GPUはGT1030というクソ歪構成。LTSpiceの解析をぶん回しまくるためにCPUをつよつよに組んでます。部品選定は詳しいオタクに問い合わせました。

せっかくなのでマイクラ鯖を立てて、マイクラ仲間とFTB Infinity Evolved環境で遊んでました。でもドラエボ時代突入のタイミングでみんな飽きた。 あと、またAnniにもハマってMaster-IIIになる。

そして「限 界 開 発 鯖」 加入

限界入りの様子
プログラミングが本職の人ばっかりの中に何故か回路/制御屋が混じることに。プログラミングなんもわからん。

限界の人につられて、Satisfactoryもめちゃめちゃやってました。高難度MODPackをやるような奴がハマらないわけがない。

金のナッツどころか像の全コンプもしました。チケットにして1700枚分くらいだったかな?今は違うかも

冬休みには、パワエレの研究が盛んな長岡技科大に見学に行きました。当然ながら最中の写真はありません。

そのあとは、ゲームもほぼほどにやりつつ、長岡技科大を受験するべく勉強をしてました。

春休みには限界のメンバー数人でマイクラのInterractionsというMODPackを開始。その前にもバニラでなんかしてた気がする。

他の人のスクショ。目の前にいるのがぼくのアバター

ほどほどとは???なペースで攻略してたような。流石に勉強が本格化してからはやってませんでしたが。

そしてるるちゃんロス。これがなかなかキツい。未だに引きずってる。つらい。初期から追って卒業した人はこれが初めてでした。 いつも楽しそうにゲームをしている様子を見ながら作業をしていたけど、当たり前にあったものがなくなるのはそれはもう結構つらくて、当時はかなりしょげてました。

ラストの24時間配信は最初から最後までずっとリアタイしてました。

音ゲーはというと、ボルテは或帝になって、maimaiは14でSSSがちらほら出るようになりました。Arcaeaは2星になりました。

あるち合格

あとバンドリにはまる。めっちゃ曲聴くようになる。RoseliaとMorfonicaとRASが良く刺さりやすい。

5年生

ロボコン

オンシーズンはなんもしてません、マジで。ただ見守るのみでした。

オフシーズンはミニロボを企画/実行して、自分は単独チームで設計加工回路制御全部やりました。 コースを走ってペットボトルを取りに行って、戻ってきてコースと逆側に撃ち出すというルールでした。

ペットボトルの回収と装填がなかなかうまくいかず、ギリギリ時間内で発射に至らなかったのが残念でなりません。が、機体の詰めが甘いので仕方がないです。 後輩たちのチームもちゃんと無線で操縦するロボットが多くて一安心です。でもスタート位置へ回収してくるロボットは自分のロボット以外に居ませんでした。ぎりぎりの時間の開発では上手くいかないという教訓になっていればと思います。

それ以外

https://twitter.com/Agchan_Luice/status/1493983054855282689?s=20 まさかの再びSatisfactory。今度は砂漠マップで開始。あろうことか最後の起動エレベーターまで終わらせたうえで受験前にpt生産のための増強。でもちゃんと勉強は毎日学校で朝から晩までしてたんです.....

長岡技科大と熊大を受験しました。どっちも受かってて、長岡の方に行くことに決めています。なぜならパワエレつよつよ大学だからです。聞くところによると全国のパワエレ狂いが集まるとかなんとか?

2日目に時間がめちゃくちゃ余ったのでついでに旅行してきました。

C57180もたぶん先はそう長くないので、乗っててよかったです。

あと限界の人とエンカもしました。 https://twitter.com/Agchan_Luice/status/1540895499473264640?s=20

授業の課題でLinuxAPIを使ってなんかしろというやつで、3~4日の突貫工事でシェルを作りました。動画で解説せよとのことだったので、ゆっくりに解説してもらいました。

www.nicovideo.jp

この後の夏休みはずっと車校に通ってました。運動の機会がほかにないので、毎日往復8kmくらい自転車をこいで通ってました。1か月くらいで免許取ったと思います。あとは卒業研究のための勉強と先行研究の検証をやったりしてました。

年度後半は前年度より続いて、ついにインバータを作りました。

いろいろ対策をしつつ電圧を上げていって、電源電圧280Vまでいけました。これ以上上げるとノイズがどえらいことになって燃えました。

ハーフブリッジ回路とそのドライバの組を3つ作って3相インバータとしてたので、枚数を減らせば単相にもなります。 同じ基板を1枚だけ使って、同期整流昇圧チョッパも組んで動かしました。

これをシンポジウムで発表するための準備と、同時並行で卒業研究を進めていました。卒研ネタバラシはやっていのかわかんないのでまだ伏せときます。

そしてCPUまさかの3代目。また機能増えて速くなった。

でもpushとpop実装して動作させて満足してからもう動かしてない......

ボルテはついに後光或帝になり暴龍天受験資格を得ました、が、無理。20の壁がデカすぎる。 maimaiは14のSSSがちらほら出るようになって、ウニはGengaozo鳥寸を踏みまくりました。

Arcaeaはというと、いよいよポテンシャルが伸びにくくなってていよいよ大変。これが一番最近の最高値更新のリザ。 最近は10の難化がすごい。Crimson Thormeむずすぎ。

らぷりのブランケット。めちゃくちゃかわいい。

今と今後

今はオーディオアンプをフルディスクリートで組もうと四苦八苦中です。とりあえず一旦できるだけゲインの平坦な差動増幅回路を作ってみることにしています。

それとは別に、今後は連続時間での制御だけではなく、ディジタル制御にも手を出そうと思っています。カルマンわかるマンになりたい。

まとめおわってしまった

結構いろいろやってんだねこの人。

生き急いでるといわれても仕方ないですねこれは。ええ。 常に何かしらしていたわけでして。

ほんとうにあっという間の5年間でしたがその中身は胃もたれするほどに濃いものでした。 いろいろ無茶苦茶をするにあたって様々手を貸していただいた電気科の某技術職員には感謝してもしきれません。

来年からは長岡技科大に行ってとりあえずロボコンをやるつもりでいます。もしかしたらロボマスに傾倒してるかもしれないけど。

ここまでいろいろできたのはやっぱり先輩から学んだ見積もり力が大きいと思います。自分の実力、目標の難易度、資源からやることを絞るということを無意識にやっていたように思います。 概ね目標通りのことが毎回できていたと思いました。 最後の最後まで好き放題させてもらったおかげで、もう未練はないです。

なんかまじめなこと書いてしまった。うんちうんちうんち!!!!うんち!!!ぶり!!!!! よし。

ここはまあまた気が向いたら更新すると思うので。それじゃあまた~

ハーフブリッジ回路のプリント化

改良しますた

前回作った試作品ハーフブリッジをベースにして作ったのがこれ。とりあえず100V目標。
具体的な変更点はたぶんこのくらい
・ブートストラップのコンデンサを高分子のいいやつにした
・ゲートのクランプダイオードの最寄りにパスコン置いてみた
・出力部分に放電阻止型のRCDスナバを置いてみた
負電圧でのターンオフは回路が複雑になるんでやめました。電源も正負いるしね。

f:id:Agchan_Luice:20211216235931p:plain f:id:Agchan_Luice:20211216235939p:plain ダイオードはマジで速いやつじゃないとたぶんだめ。RとCは割とてきとう。どのくらいRが発熱するかわかんないからとりあえず電力型にしといた。

ちゃんとした配線の取り回し方わかんないけどとりあえずそれっぽく配置して、 f:id:Agchan_Luice:20211217000616p:plain f:id:Agchan_Luice:20211217000840p:plain うんうんいい感じいい感じ!(ほんまか)

ゲトドラうごくかな

長い長いテスト期間の間に中国で基板が作られて、ちょうどテスト明けにやってきましたこちら。
f:id:Agchan_Luice:20211217001204j:plain f:id:Agchan_Luice:20211217001212j:plain ヒューマノイド型カメラスタンドが映り込んでしもた。
テスト基板はやっぱ緑でしょ。電位差がデカくなるところはパターンの間広めにとってみたけどどのくらいやっときゃいいんすかね。L成分めっちゃ増えてそう
レポートラッシュを捌ききって一週間後にてきとーにはんだ付けしてこう。 f:id:Agchan_Luice:20211217001637j:plain

とりあえずこの日はゲトドラが動くかどうかだけ確かめたかったんで、本チャンで使う250V30Aのやつじゃなくてその辺にあった謎FETで動作確認。
f:id:Agchan_Luice:20211217001925j:plain

ゲート電圧がアホみたいに発振してるけどクランプもしてないしゲート抵抗じゃなくてフェライトビーズだからそらこうなるわな。しかもPWMの信号のローとハイ逆だし。ローにするとハイサイドがターンオンしてまう。PWMはとりあえずシンクで駆動します。

100Vスイッチングするぞするぞするぞ

数日後には本命のK30J25Dを実装してまずはRCDスナバなしで無負荷~軽負荷で実験。 f:id:Agchan_Luice:20211217002452j:plain ドレイン端子に履かせてるのはアモビーズっていうなんかdi/dtによるノイズをアホみたいになくしてくれるやべーやつ(秋月で80¥/個)
スピリチュアルみをすげー感じるけど実際すごいらしい。

主電源なしのゲートドライバだけ動作させたときのゲートの立ち上がりはこんなもん。とりあえずデッドタイムはでかめに1usくらいにしといた。 f:id:Agchan_Luice:20211217003034j:plain めっちゃきれい

だがしかし。20Vくらいでスイッチングさせてみたらこんなんになった。黄色がハイサイドゲートで青が出力電圧。 f:id:Agchan_Luice:20211217003219j:plain 見事に発振してんね~~はいクソ~~ 負荷つなごうがつながまいがこんな感じ。

てなわけでRCDスナバ実装ですん。
f:id:Agchan_Luice:20211217003508j:plain パワみありそうな回路っぽくなってきた テンション上がってきた

実験風景。負荷は100Wの白熱電球を貸してもらった。
f:id:Agchan_Luice:20211217004800j:plain

あついあついまぶしいまぶしい
f:id:Agchan_Luice:20211217004906j:plain

こいつはひでえや

負荷時の電圧波形はこんな感じになた。無負荷時はとり忘れた。てへぺろ
f:id:Agchan_Luice:20211217003711j:plain めちゃめちゃ落ち着いたけどにしたって振れすぎなんよ、なんでやねん!ってなったけど、まさかと思って電源電圧(青線)を見てみると f:id:Agchan_Luice:20211217003832j:plain お前か~~~い!!!てことで安定化電源が負けてたみたいっす。それ考えたらまあだいぶ波形は落ち着いてんなって感じ。

ある程度の振動はあるにしてもまあ300nsくらいで収束してるしええんちゃいますん。しかもこれ電源電圧の揺れもだいぶあるしね。
f:id:Agchan_Luice:20211217004528j:plain

ハイサイドのソースードレイン間電圧も見てみたけどいい感じだった(とり忘れ)

どのくらいスナバがノイズ吸ってるのか気になったので、コンデンサのVCCじゃない側とGNDじゃない側の電位を見てみるとすごかった。
f:id:Agchan_Luice:20211217005054j:plain 最初に電圧下がってるのは電源が負けてるときです。めちゃめちゃノイズ吸ってんね。でも抵抗全然熱くないし値小さくしてよさそう。あと電力容量も2Wもいらなさそう。あとダイオードはUF2010使ったけど、もうちと早いのがいいかもしれない。
放電阻止型ってノイズの分だけ発熱するって理解で正しいんだよね.....?
CをでかくしといてRを小さくすればノイズはいっぱい吸えるしエネルギーの放出も早い!でもCがRと比べてデカすぎると放電間に合わんしダイオードはマジではやいやつにしてねって感じか???
このスナバの定数決め方結局よくわからん。

まあええんちゃう

立ち上がり時のオーバーシュートを見るに250V素子じゃ200Vのスイッチングは無理そうなんでとりあえずMosFETでの実験はここまでです。次はアモビーズなしでIGBTを駆動してみようとおもいます。もしかしたら駆動周波数下げないといけないかも?
1Aくらい延々吐かせてもぜんぜん発熱しなかったんで、ゲートドライブはうまくいってそうです。

[追記 2022/01/12] 部品や機材は学校主催のPrototyping Laboという講習会に参加することで買ってもらったり借りたりしています。作りたいものを言えば内容によって予算をつけてもらえ、機材を出してくれるというものです。学校の金でインバータ作れるねやったね!

ハーフブリッジ(試作)

ドライバ回路の簡略化

以前にも実はハーフブリッジ回路を作ったことがありまして。まあ無事失敗したわけですが。

急いで作ったからか、パターン上に明らかにおかしい配線を見つけることができた。
これ作ったときよりも知恵がついたので、大幅に簡略化する方法を思いついたので、とりあえずブレボ上で作ってみることに。 f:id:Agchan_Luice:20211106130550p:plain

上手いこと動いたので、これを3つ用意して、部室から借りてきたマイコン使ってちっこいBLDCをドライブ。

定格7Vに12V突っ込んでるからか、常に1Aくらい流れてた。熱い。自作降圧電源もあったかい。

試作

ともあれいい感じに動いたので、部室に転がってた使わないであろう両面スルーに実装してみる。

f:id:Agchan_Luice:20211106130601p:plain

これもいい感じに動いた。回路図はこんな感じ。ミスって、入力をローにすると出力がハイになるようになってるから、PWMの入力はシンクでやらないといけない。あと、TLP152のシンボルがなかったから、ピン配置同じフォトカプラで代用してる。

f:id:Agchan_Luice:20211106142409p:plain

ブートストラップから生えてるピンは外部からフローティング電源をつないで100%駆動をするためのやつ。デッドタイムの生成はいつも通り2903DとRCとダイオードの充放電。充電だけ鈍らせて、放電は素早く。使うダイオードは適当に1N4007。もう片方の信号は信号用MosFETの2N7000でいい感じに充放電。
電源平滑用コンデンサの耐圧が低いから電圧をむやみに上げられないけど、コンデンサさえ変えれば耐圧はスイッチング素子が行けるところまでいける。これをベースにしてインバータを作ろうと思う。

今後やること

インバータまでやるとなると、ゲートドライブをもっと素早くやる必要があるのかな。次作るやつはローレベルを負電圧にしたり、出力にRCDスナバをつけたりしようと思う。

絶縁型DCDCコンバーターを作った話


経緯ってなんですか

三相インバーターの作成を目標としていろいろ試す中、やはりフルNchで組みたいというのがあるので、ハイサイドのゲートドライブの電圧を何とかする必要があります。ブートストラップで最初やるつもりでいたのですが、やはり何かと不安要素が多いので、フローティング電源として出力が三系統ある絶縁DCDCコンバーターを作ってしまえばいいや、という結論に至りました。

前に書いた絶縁DCDCの記事今見ると意味わかんないですね。なにしてんのこいつ。

回路

これ f:id:Agchan_Luice:20210905140006p:plain

ブレボ上であーだこーだやってうまくいったやつです。ブレボ上でやったときは負荷30Ωで最大2.8Wの出力が得られました。トランスのサイズの割にはしょぼいね。トランジスタのベース抵抗とかも適当に1kぶち込んだり電流減らしたいところは100kとスピコン突っ込んでみたりとだいぶ適当な構成となっております。真ん中下あたりでいっぱいピンあるのはトランスにつながってる部分です。

タイマICを買い忘れてたので無安定マルチとコンパレータで適当にデッドタイムの調整をしてます。ハイサイドへの信号伝達はその辺に落ちてたTLP250でやってしまいました。

駆動するMosFETがk4017なのでオーバースペックですがまともに使えるのがこれしか手持ちにありませんでした。速いフォトカプラなんかいいやつないんですかね。

はんだづけしたった

f:id:Agchan_Luice:20210905140650p:plain

手持ちのユニバ1枚に入らなかったのでフルブリッジ部分とトランス&整流で基板分けました。

FETのそばにある10kΩは回路図上で忘れてたプルダウンが居ますが他は変更ないはずですたぶん。 フルブリッジはちゃんと動作したので、あとは整流用のブリッジに使う1s4が秋月から届けば完成する予定です。

トランスなんもわからん

回路に使ったトランス(ほんまか?)は適当なコアを買ってきてエナメル線を巻いた自家製です。以前の記事で作ったやつは巻き数も少ないわ結合もゴミだわで使い物になりませんでした。あやつは巻きなおしてチョークコイル行きです。

もう巻きたくない。

まともなトランスボビンを買って巻くのが一番いいはずなんですが、どこから買えばいいのやら。

Minecraft.1.12.2 Forge IntelliJ IDEA mcmod.infoやassetsの中が読み込めない

注意

Mod制作初心者が書いた記事です。ここの情報を鵜呑みにして問題が起きても知りません。それでもいいよっていう同志初心者の皆々様は続きをお読みください。




具体的な問題の内容

IntelliJMinecraftのMODを作成するときに、Tasks/fg_runs/runClientから実行すると、resources中のファイル/フォルダにアクセスできない。故に、mcmod.infoやアイテム、ブロックのテクスチャを読み込むことができない。ファイルを配置したにもかかわらず、FileNotFoundExceptionエラーが出まくる。


環境

Windows 10
JDK 8u211
Minecraft 1.12.2
Minecraft Forge 1.12.2 (14.23.5.2838)
IntelliJ IDEA 2021.1.1




コード

build.gradle

buildscript {
    repositories {
        maven { url = 'https://maven.minecraftforge.net' }
            mavenCentral()
    }
    dependencies {
        classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true
        }
}

apply plugin: 'net.minecraftforge.gradle'

group = 'jp.agchan_san'
version = '1.0.0'
archivesBaseName = 'ninino_mod'


java.toolchain.languageVersion = JavaLanguageVersion.of(8) // Mojang ships Java 8 to end users, so your mod should target Java 8.

minecraft {
    // The mappings can be changed at any time, and must be in the following format.
    // Channel:   Version:
    // snapshot   YYYYMMDD   Snapshot are built nightly.
    // stable     #          Stables are built at the discretion of the MCP team.
    // official   MCVersion  Official field/method names from Mojang mapping files
    //
    // You must be aware of the Mojang license when using the 'official' mappings.
    // See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
    //
    // Use non-default mappings at your own risk. they may not always work.
    // Simply re-run your setup task after changing the mappings to update your workspace.
    mappings channel: 'stable', version: '39-1.12'
    // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.

    // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')

    // Default run configurations.
    // These can be tweaked, removed, or duplicated as needed.
    runs {
        client {
            workingDirectory project.file('run')

            // Recommended logging data for a userdev environment
            // The markers can be changed as needed.
            // "SCAN": For mods scan.
            // "REGISTRIES": For firing of registry events.
            // "REGISTRYDUMP": For getting the contents of all registries.
            property 'forge.logging.markers', 'REGISTRIES'

            // Recommended logging level for the console
            // You can set various levels here.
            // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
            property 'forge.logging.console.level', 'debug'

            mods {
                redenginemod {
                    source sourceSets.main
                }
            }
        }

        server {
            workingDirectory project.file('run')

            // Recommended logging data for a userdev environment
            // The markers can be changed as needed.
            // "SCAN": For mods scan.
            // "REGISTRIES": For firing of registry events.
            // "REGISTRYDUMP": For getting the contents of all registries.
            property 'forge.logging.markers', 'REGISTRIES'

            // Recommended logging level for the console
            // You can set various levels here.
            // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
            property 'forge.logging.console.level', 'debug'

            mods {
                redenginemod {
                    source sourceSets.main
                }
            }
        }
    }
}

// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }

dependencies {
    // Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed
    // that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied.
    // The userdev artifact is a special name and will get all sorts of transformations applied to it.
    minecraft 'net.minecraftforge:forge:1.12.2-14.23.5.2855'

    // You may put jars on which you depend on in ./libs or you may define them like so..
    // compile "some.group:artifact:version:classifier"
    // compile "some.group:artifact:version"

    // Real examples
    // compile 'com.mod-buildcraft:buildcraft:6.0.8:dev'  // adds buildcraft to the dev env
    // compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env

    // The 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
    // provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'

    // These dependencies get remapped to your current MCP mappings
    // deobf 'com.mod-buildcraft:buildcraft:6.0.8:dev'

    // For more info...
    // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
    // http://www.gradle.org/docs/current/userguide/dependency_management.html
}

// Example for how to get properties into the manifest for reading by the runtime..
jar {
    manifest {
        attributes([
                "Specification-Title": "NininoMod",
                            //"Specification-Vendor": "NininoMod authors",
                            "Specification-Version": "1", // We are version 1 of ourselves
                "Implementation-Title": project.name,
                "Implementation-Version": project.version,
                            //"Implementation-Vendor": "nininomod authors",
                                        "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
        ])
    }
}

jar.finalizedBy('reobfJar')

原因と解決策

解はここにありました。

qiita.com

どうやら、GradleとIntelliJがビルドする際の出力先がそれぞれ違うとのこと。なので、build.gradleの内容を少し書き換えます。プラグインを読み込んでいる部分と、archiveBaseNameの下に、出力先をそろえるためのコードを少し書き足します。


build.gradle

buildscript {
    repositories {
        maven { url = 'https://maven.minecraftforge.net' }
            mavenCentral()
    }
    dependencies {
        classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true
        }
}

apply plugin: 'net.minecraftforge.gradle'



//追加
apply plugin: 'idea'



group = 'jp.agchan_san'
version = '1.0.0'
archivesBaseName = 'ninino_mod'



//追加
//#####################################################
sourceSets {
    main {
            output.resourcesDir = java.outputDir
        }
}
idea.module.outputDir file("out/production/classes")
//#####################################################



java.toolchain.languageVersion = JavaLanguageVersion.of(8) // Mojang ships Java 8 to end users, so your mod should target Java 8.

minecraft {
    // The mappings can be changed at any time, and must be in the following format.
    // Channel:   Version:
    // snapshot   YYYYMMDD   Snapshot are built nightly.
    // stable     #          Stables are built at the discretion of the MCP team.
    // official   MCVersion  Official field/method names from Mojang mapping files
    //
    // You must be aware of the Mojang license when using the 'official' mappings.
    // See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
    //
    // Use non-default mappings at your own risk. they may not always work.
    // Simply re-run your setup task after changing the mappings to update your workspace.
    mappings channel: 'stable', version: '39-1.12'
    // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.

    // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')

    // Default run configurations.
    // These can be tweaked, removed, or duplicated as needed.
    runs {
        client {
            workingDirectory project.file('run')

            // Recommended logging data for a userdev environment
            // The markers can be changed as needed.
            // "SCAN": For mods scan.
            // "REGISTRIES": For firing of registry events.
            // "REGISTRYDUMP": For getting the contents of all registries.
            property 'forge.logging.markers', 'REGISTRIES'

            // Recommended logging level for the console
            // You can set various levels here.
            // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
            property 'forge.logging.console.level', 'debug'

            mods {
                redenginemod {
                    source sourceSets.main
                }
            }
        }

        server {
            workingDirectory project.file('run')

            // Recommended logging data for a userdev environment
            // The markers can be changed as needed.
            // "SCAN": For mods scan.
            // "REGISTRIES": For firing of registry events.
            // "REGISTRYDUMP": For getting the contents of all registries.
            property 'forge.logging.markers', 'REGISTRIES'

            // Recommended logging level for the console
            // You can set various levels here.
            // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
            property 'forge.logging.console.level', 'debug'

            mods {
                redenginemod {
                    source sourceSets.main
                }
            }
        }
    }
}

// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }

dependencies {
    // Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed
    // that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied.
    // The userdev artifact is a special name and will get all sorts of transformations applied to it.
    minecraft 'net.minecraftforge:forge:1.12.2-14.23.5.2855'

    // You may put jars on which you depend on in ./libs or you may define them like so..
    // compile "some.group:artifact:version:classifier"
    // compile "some.group:artifact:version"

    // Real examples
    // compile 'com.mod-buildcraft:buildcraft:6.0.8:dev'  // adds buildcraft to the dev env
    // compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env

    // The 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
    // provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'

    // These dependencies get remapped to your current MCP mappings
    // deobf 'com.mod-buildcraft:buildcraft:6.0.8:dev'

    // For more info...
    // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
    // http://www.gradle.org/docs/current/userguide/dependency_management.html
}

// Example for how to get properties into the manifest for reading by the runtime..
jar {
    manifest {
        attributes([
                "Specification-Title": "NininoMod",
                            //"Specification-Vendor": "NininoMod authors",
                            "Specification-Version": "1", // We are version 1 of ourselves
                "Implementation-Title": project.name,
                "Implementation-Version": project.version,
                            //"Implementation-Vendor": "nininomod authors",
                                        "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
        ])
    }
}

jar.finalizedBy('reobfJar')

自分の場合だとこれで、resourcesにアクセスできるようになりました。
くどいようですが、これで問題が起きても知りませんからね。

絶縁DCDCコンバーター とりあえずシミュレート編

制作に至った経緯

ハーフブリッジ回路を作ったのですが(これはまた後記事にします)、駆動するうえでフローティング電源があると非常に便利なんです。内部に電位が動きまくるところがあり、電流の供給が外部からあると動作が安定します(なくても動くけど制約が付きます)。最終的には3つのハーフブリッジを同時に駆動したいので、出力が3系統ある絶縁DCDCコンバーターを作ろうと思いました。欲しい電圧は5~8V程度で、電源は12Vを想定しているので、適当なフルブリッジと16:8:8:8のトランスで降圧します。

わざわざフルブリッジでやるのは、出力からのフィードバックができないため、トランスの巻き数比で出力電圧を調整できるからです。

f:id:Agchan_Luice:20210428113650j:plain
お手製トランス 結合?知らない子ですね.....

線材もっと細くすればよかった。


なんもわからん

意気込んだはいいもの、めちゃくちゃ難かしいななんだこれ。絶縁型なめてたわ。なんもわからん。
実際にトランスを巻いてフルブリッジを組んで適当な周波数の電流を流したのですが、案の定一瞬のうちに飽和して電源装置が電流制限をかけてました。飽和しないように周波数を上げて、なんとか1W程度の出力を得ました(あぶない)。インダクタンスはそれなりに確保できてるんでしょうけど、一体どんだけ結合小さいんだ。

f:id:Agchan_Luice:20210428114327j:plain
ブレボ上の様子
f:id:Agchan_Luice:20210428114354j:plain
1次側の電流の波形 だいたい±500mAくらい

Hブリッジの制御はゲートドライバ組むのめんどくさかったのでPIC16F1823でやっています。ゲートドライバICは高いからね。5V電源はめんどくさかったので5.1Vのツェナーで済ませました。上流は100Ω(定格オーバー)だし小食だからこれでたぶん足りるでしょう。で。



これ、危なくね?

今は電源が電源装置だから良いんですけど、バッテリーをつないだ時の挙動があまりにも不安です。なにせ、いつ飽和するかもわからないコアをギリギリで使っているからです。電源短絡を恐れながら使う回路なんて、FETがいくつ焼けるかわかりません。なので、なんとかして電流を制限する必要がありそうです。現在(4/29)、コロナの影響で部活動が原則禁止で、部室の機材を好き放題使う借りることができない状況です。家でバカスカ電流を流すような回路を扱うのは嫌なので、シミュレータ上でいろいろ試すことにしました。みんなだいすきLTSpiceです。
いろんな昇圧回路を調べたのですが、解決のヒントはあるブログで見つけた400W級昇圧チョッパから得ました。それがこちら。実際に作る回路とは多少異なりますが仕組みは同じです。



f:id:Agchan_Luice:20210429182653j:plain
やばくなったら止める。以上。
X1とX2はハーフブリッジで、互い違いに動かしてフルブリッジを作ってます。シャント抵抗がやや大きいのは、小さいのを使おうとしてノイズのせいで痛い目見たことがあるからです。SRラッチとコンパレータはPICのペリフェラルに入ってるのでそれで処理します。入力にローパス入れる必要が出てくるかもしれません。
シミュレータ上の回路はこちら。




f:id:Agchan_Luice:20210429183133p:plain
トランスのインダクタンスは適当です。2:1だったらでかすぎなきゃいいです。2次側でいちいちダイオードブリッジを組んでいるのは、2次側にセンタータップがないからです。線材細くすればよかったのに。
参考元の回路は非絶縁のチョッパで、最大電流と最小電流を監視していたのですが、こちらは最大電流のみを監視します。これで電流流しすぎは防げるはず。もっとも、設定した最大電流を流す前にコアが飽和する可能性があるんですけどね。




f:id:Agchan_Luice:20210429183606p:plain
青:1次コイル電流
緑:出力電圧

出力にはとりあえず36Ωがつないであります。
とりあえず1次側の電流を2Aに制限することは出来たのですが、2次側の電圧を見てみると5Vギリギリって感じです。まあこれは結合もインダクタンスもよくわかっていないので実際に試さないと何とも言えません。
100kHzで発振してますが、500mA流した時で25kHzくらいだったのでその時より周波数は下がるはずです。おそらくスイッチングも間に合うでしょう。
ただ、この回路はフルブリッジを組むのがすごくめんどくさいです。マイコンも使ってていろいろめんどくさそうなので、ほかの方法も考えてみることにします。



沼った

絶縁DCDCには複数の方法があり、別の方法を試してみたものの、そっちはそちらで沼に嵌ることになりました。趣旨とだいぶずれていきそうなので、また別に書くことにします。つづく。