ハーフブリッジ回路のプリント化
改良しますた
前回作った試作品ハーフブリッジをベースにして作ったのがこれ。とりあえず100V目標。
具体的な変更点はたぶんこのくらい
・ブートストラップのコンデンサを高分子のいいやつにした
・ゲートのクランプダイオードの最寄りにパスコン置いてみた
・出力部分に放電阻止型のRCDスナバを置いてみた
負電圧でのターンオフは回路が複雑になるんでやめました。電源も正負いるしね。
ダイオードはマジで速いやつじゃないとたぶんだめ。RとCは割とてきとう。どのくらいRが発熱するかわかんないからとりあえず電力型にしといた。
ちゃんとした配線の取り回し方わかんないけどとりあえずそれっぽく配置して、
うんうんいい感じいい感じ!(ほんまか)
ゲトドラうごくかな
長い長いテスト期間の間に中国で基板が作られて、ちょうどテスト明けにやってきましたこちら。
ヒューマノイド型カメラスタンドが映り込んでしもた。
テスト基板はやっぱ緑でしょ。電位差がデカくなるところはパターンの間広めにとってみたけどどのくらいやっときゃいいんすかね。L成分めっちゃ増えてそう
レポートラッシュを捌ききって一週間後にてきとーにはんだ付けしてこう。
とりあえずこの日はゲトドラが動くかどうかだけ確かめたかったんで、本チャンで使う250V30Aのやつじゃなくてその辺にあった謎FETで動作確認。
ゲート電圧がアホみたいに発振してるけどクランプもしてないしゲート抵抗じゃなくてフェライトビーズだからそらこうなるわな。しかもPWMの信号のローとハイ逆だし。ローにするとハイサイドがターンオンしてまう。PWMはとりあえずシンクで駆動します。
100Vスイッチングするぞするぞするぞ
数日後には本命のK30J25Dを実装してまずはRCDスナバなしで無負荷~軽負荷で実験。
ドレイン端子に履かせてるのはアモビーズっていうなんかdi/dtによるノイズをアホみたいになくしてくれるやべーやつ(秋月で80¥/個)
スピリチュアルみをすげー感じるけど実際すごいらしい。
主電源なしのゲートドライバだけ動作させたときのゲートの立ち上がりはこんなもん。とりあえずデッドタイムはでかめに1usくらいにしといた。
めっちゃきれい
だがしかし。20Vくらいでスイッチングさせてみたらこんなんになった。黄色がハイサイドゲートで青が出力電圧。
見事に発振してんね~~はいクソ~~ 負荷つなごうがつながまいがこんな感じ。
てなわけでRCDスナバ実装ですん。
パワみありそうな回路っぽくなってきた テンション上がってきた
実験風景。負荷は100Wの白熱電球を貸してもらった。
あついあついまぶしいまぶしい
こいつはひでえや
本日のガバ(コンセントの先は電球) pic.twitter.com/vxoOOSSbbk
— あぐちゃんさん❄️ (@Agchan_Luice) 2021年12月16日
負荷時の電圧波形はこんな感じになた。無負荷時はとり忘れた。てへぺろ
めちゃめちゃ落ち着いたけどにしたって振れすぎなんよ、なんでやねん!ってなったけど、まさかと思って電源電圧(青線)を見てみると
お前か~~~い!!!てことで安定化電源が負けてたみたいっす。それ考えたらまあだいぶ波形は落ち着いてんなって感じ。
ある程度の振動はあるにしてもまあ300nsくらいで収束してるしええんちゃいますん。しかもこれ電源電圧の揺れもだいぶあるしね。
ハイサイドのソースードレイン間電圧も見てみたけどいい感じだった(とり忘れ)
どのくらいスナバがノイズ吸ってるのか気になったので、コンデンサのVCCじゃない側とGNDじゃない側の電位を見てみるとすごかった。
最初に電圧下がってるのは電源が負けてるときです。めちゃめちゃノイズ吸ってんね。でも抵抗全然熱くないし値小さくしてよさそう。あと電力容量も2Wもいらなさそう。あとダイオードはUF2010使ったけど、もうちと早いのがいいかもしれない。
放電阻止型ってノイズの分だけ発熱するって理解で正しいんだよね.....?
CをでかくしといてRを小さくすればノイズはいっぱい吸えるしエネルギーの放出も早い!でもCがRと比べてデカすぎると放電間に合わんしダイオードはマジではやいやつにしてねって感じか???
このスナバの定数決め方結局よくわからん。
まあええんちゃう
立ち上がり時のオーバーシュートを見るに250V素子じゃ200Vのスイッチングは無理そうなんでとりあえずMosFETでの実験はここまでです。次はアモビーズなしでIGBTを駆動してみようとおもいます。もしかしたら駆動周波数下げないといけないかも?
1Aくらい延々吐かせてもぜんぜん発熱しなかったんで、ゲートドライブはうまくいってそうです。
[追記 2022/01/12] 部品や機材は学校主催のPrototyping Laboという講習会に参加することで買ってもらったり借りたりしています。作りたいものを言えば内容によって予算をつけてもらえ、機材を出してくれるというものです。学校の金でインバータ作れるねやったね!
ハーフブリッジ(試作)
ドライバ回路の簡略化
以前にも実はハーフブリッジ回路を作ったことがありまして。まあ無事失敗したわけですが。
前作ったこれ、動かん原因さっぱりわからなかったけどやっと解明できたわ pic.twitter.com/h0yPG69g2Z
— あぐちゃんさん❄️ (@Agchan_Luice) 2021年10月23日
急いで作ったからか、パターン上に明らかにおかしい配線を見つけることができた。
これ作ったときよりも知恵がついたので、大幅に簡略化する方法を思いついたので、とりあえずブレボ上で作ってみることに。
上手いこと動いたので、これを3つ用意して、部室から借りてきたマイコン使ってちっこいBLDCをドライブ。
ブラシレスDC回してみた pic.twitter.com/cObaPUOTao
— あぐちゃんさん❄️ (@Agchan_Luice) 2021年10月30日
定格7Vに12V突っ込んでるからか、常に1Aくらい流れてた。熱い。自作降圧電源もあったかい。
試作
ともあれいい感じに動いたので、部室に転がってた使わないであろう両面スルーに実装してみる。
これもいい感じに動いた。回路図はこんな感じ。ミスって、入力をローにすると出力がハイになるようになってるから、PWMの入力はシンクでやらないといけない。あと、TLP152のシンボルがなかったから、ピン配置同じフォトカプラで代用してる。
ブートストラップから生えてるピンは外部からフローティング電源をつないで100%駆動をするためのやつ。デッドタイムの生成はいつも通り2903DとRCとダイオードの充放電。充電だけ鈍らせて、放電は素早く。使うダイオードは適当に1N4007。もう片方の信号は信号用MosFETの2N7000でいい感じに充放電。
電源平滑用コンデンサの耐圧が低いから電圧をむやみに上げられないけど、コンデンサさえ変えれば耐圧はスイッチング素子が行けるところまでいける。これをベースにしてインバータを作ろうと思う。
今後やること
インバータまでやるとなると、ゲートドライブをもっと素早くやる必要があるのかな。次作るやつはローレベルを負電圧にしたり、出力にRCDスナバをつけたりしようと思う。
絶縁型DCDCコンバーターを作った話
経緯ってなんですか
三相インバーターの作成を目標としていろいろ試す中、やはりフルNchで組みたいというのがあるので、ハイサイドのゲートドライブの電圧を何とかする必要があります。ブートストラップで最初やるつもりでいたのですが、やはり何かと不安要素が多いので、フローティング電源として出力が三系統ある絶縁DCDCコンバーターを作ってしまえばいいや、という結論に至りました。
前に書いた絶縁DCDCの記事今見ると意味わかんないですね。なにしてんのこいつ。
回路
これ
ブレボ上であーだこーだやってうまくいったやつです。ブレボ上でやったときは負荷30Ωで最大2.8Wの出力が得られました。トランスのサイズの割にはしょぼいね。トランジスタのベース抵抗とかも適当に1kぶち込んだり電流減らしたいところは100kとスピコン突っ込んでみたりとだいぶ適当な構成となっております。真ん中下あたりでいっぱいピンあるのはトランスにつながってる部分です。
タイマICを買い忘れてたので無安定マルチとコンパレータで適当にデッドタイムの調整をしてます。ハイサイドへの信号伝達はその辺に落ちてたTLP250でやってしまいました。
駆動するMosFETがk4017なのでオーバースペックですがまともに使えるのがこれしか手持ちにありませんでした。速いフォトカプラなんかいいやつないんですかね。
はんだづけしたった
手持ちのユニバ1枚に入らなかったのでフルブリッジ部分とトランス&整流で基板分けました。
絶対入らん pic.twitter.com/Gj2GdODW3x
— あぐちゃんさん❄️ (@Agchan_Luice) 2021年9月3日
FETのそばにある10kΩは回路図上で忘れてたプルダウンが居ますが他は変更ないはずですたぶん。 フルブリッジはちゃんと動作したので、あとは整流用のブリッジに使う1s4が秋月から届けば完成する予定です。
トランスなんもわからん
回路に使ったトランス(ほんまか?)は適当なコアを買ってきてエナメル線を巻いた自家製です。以前の記事で作ったやつは巻き数も少ないわ結合もゴミだわで使い物になりませんでした。あやつは巻きなおしてチョークコイル行きです。
もう巻きたくない。巻いた pic.twitter.com/X05CpiTn5x
— あぐちゃんさん❄️ (@Agchan_Luice) 2021年9月1日
まともなトランスボビンを買って巻くのが一番いいはずなんですが、どこから買えばいいのやら。
Minecraft.1.12.2 Forge IntelliJ IDEA mcmod.infoやassetsの中が読み込めない
注意
Mod制作初心者が書いた記事です。ここの情報を鵜呑みにして問題が起きても知りません。それでもいいよっていう同志初心者の皆々様は続きをお読みください。
具体的な問題の内容
IntelliJでMinecraftの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')
原因と解決策
解はここにありました。
どうやら、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のトランスで降圧します。
わざわざフルブリッジでやるのは、出力からのフィードバックができないため、トランスの巻き数比で出力電圧を調整できるからです。

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


Hブリッジの制御はゲートドライバ組むのめんどくさかったのでPIC16F1823でやっています。ゲートドライバICは高いからね。5V電源はめんどくさかったので5.1Vのツェナーで済ませました。上流は100Ω(定格オーバー)だし小食だからこれでたぶん足りるでしょう。で。
これ、危なくね?
今は電源が電源装置だから良いんですけど、バッテリーをつないだ時の挙動があまりにも不安です。なにせ、いつ飽和するかもわからないコアをギリギリで使っているからです。電源短絡を恐れながら使う回路なんて、FETがいくつ焼けるかわかりません。なので、なんとかして電流を制限する必要がありそうです。現在(4/29)、コロナの影響で部活動が原則禁止で、部室の機材を好き放題使う借りることができない状況です。家でバカスカ電流を流すような回路を扱うのは嫌なので、シミュレータ上でいろいろ試すことにしました。みんなだいすきLTSpiceです。
いろんな昇圧回路を調べたのですが、解決のヒントはあるブログで見つけた400W級昇圧チョッパから得ました。それがこちら。実際に作る回路とは多少異なりますが仕組みは同じです。
やばくなったら止める。以上。
X1とX2はハーフブリッジで、互い違いに動かしてフルブリッジを作ってます。シャント抵抗がやや大きいのは、小さいのを使おうとしてノイズのせいで痛い目見たことがあるからです。SRラッチとコンパレータはPICのペリフェラルに入ってるのでそれで処理します。入力にローパス入れる必要が出てくるかもしれません。
シミュレータ上の回路はこちら。
トランスのインダクタンスは適当です。2:1だったらでかすぎなきゃいいです。2次側でいちいちダイオードブリッジを組んでいるのは、2次側にセンタータップがないからです。線材細くすればよかったのに。
参考元の回路は非絶縁のチョッパで、最大電流と最小電流を監視していたのですが、こちらは最大電流のみを監視します。これで電流流しすぎは防げるはず。もっとも、設定した最大電流を流す前にコアが飽和する可能性があるんですけどね。
青:1次コイル電流
緑:出力電圧
出力にはとりあえず36Ωがつないであります。
とりあえず1次側の電流を2Aに制限することは出来たのですが、2次側の電圧を見てみると5Vギリギリって感じです。まあこれは結合もインダクタンスもよくわかっていないので実際に試さないと何とも言えません。
100kHzで発振してますが、500mA流した時で25kHzくらいだったのでその時より周波数は下がるはずです。おそらくスイッチングも間に合うでしょう。
ただ、この回路はフルブリッジを組むのがすごくめんどくさいです。マイコンも使ってていろいろめんどくさそうなので、ほかの方法も考えてみることにします。
沼った
絶縁DCDCには複数の方法があり、別の方法を試してみたものの、そっちはそちらで沼に嵌ることになりました。趣旨とだいぶずれていきそうなので、また別に書くことにします。つづく。
ニキシー管用の電源回路
高電圧、作るだけなら容易い
昇圧回路を作るべく試行錯誤していたところで、お土産にとたまたまニキシー管をもらいました。ニキシー管は高電圧が必要ですが電流量は皆無に等しいので、適当にチョッパを組むだけで作れます。要領はこの前の降圧回路と変わりません。
キレイダナー
回路図
昇圧電源のみの回路図です。スイッチングはFETじゃないの?と思われるかもしれませんが、その辺にあった200V近い耐圧のあるスイッチング素子は唯一2SK5200だけでした。出力電圧を分圧してフィードバックしています。120kΩを4パラしているのがブレボの画像を見てもわかりますが、こうして30kΩを作らないと、単体でやると定格オーバーどころか焦げ始めます。まあ4パラしてもぎりぎり定格オーバーなんですけどね。
ニキシー管はアノードコモンなので、一か所に40kΩくらいを通して180Vを供給してやればあとはほかのピンをGNDに落とすだけで光ります。なので、ブレボ上にあるDIPスイッチで、手で切り替えていました。
大容量の昇圧電源、どうやって作るんだろうなあ.....
スイッチング降圧電源回路
買えないものは作ります
普段何気なく部室で使っている電源装置、あれって実は結構なお値段がするんですよね。でも家で電子工作をするには電源装置は必須です。なので、作ることにしました。友人が日本橋に行ったときにAC100Vを18VDCにする電源(300円)を買ってきてもらっていたので、ここからさらに18V~0Vに変換する降圧回路をつくりました。電流の消費が少なければ、12VくらいのDCジャックからの給電で動くと思われます。なんならDCジャックじゃなくても、AC100Vをトランスで12Vくらいまで落としてからブリッジで整流、コンデンサで平滑すればたぶん動きます。あんまりやりたくないけど。
そんなに電流たくさん消費するような工作を家ではしたくないので、2Wも出れば十分です。

ディスクリートのロマン
既存の電源素子を買って指示通りに作るのもいいのですが、それではおもしろくないので、専用の素子を使わずにオペアンプとトランジスタとコンパレータを使って、降圧チョッパを制御してみました。マイコンももちろん使っていません。
設計ミスで基盤のサイズを間違えたので、上下に無理やり基盤を拡張しています。
全体の回路図と配置図
主にこれら4つの回路で構成されています。
・降圧チョッパ
・PWM制御回路
・のこぎり波発生回路
・負電圧発生回路
それぞれ説明していきます。
・降圧チョッパ
降圧チョッパのテンプレ型です。Q6がターンオンすると、コイルがエネルギーを貯めつつ2次側に電流を供給します。Q6をターンオフすると、コイルへのエネルギーの供給が止められ、コイルがエネルギーを放出し、これをC11で均します。スイッチングはNchMosFETなので、適当にチャージポンプを乗っけています。出力電圧がVGSより小さいので、ターンオフしたときの電位差のせいで定格(±20V)オーバーなんてことはきっとないはず。たぶん。
・PWM制御回路
ただスイッチングするだけでは負荷変動時に電圧が大きく変化するので、スイッチングするPWM信号のduty比を制御をする必要があります。duty比が高いと出力電圧は上がります。なので、オペアンプで出力電圧と目標電圧を差動増幅し、その出力とキャリア波をコンパレータに突っ込んでPWM信号を生成します。画像中のfbが出力で、3ピンコネクタには可変抵抗がつながっています。比例ゲインは適当です。5V出力時に無負荷~1Wでも、リプルは0.5V程度でした。
・のこぎり波発生回路
定電流でコンデンサを充電すると電圧が線形増加するので、これを利用しました。カレントミラー回路で定電流を作っています。オペアンプとコンパレータで作ったPWM信号をパルス回路に入力し、そのパルス信号でトランジスタを駆動してコンデンサを放電します。これによって、コンデンサの電圧がのこぎり波状になります。充電電圧を監視し、ヒステリシスコンパレータで放電でも良かったのですが、オペアンプも余っていたしこっちの方が周波数の調整が簡単なのでこの方法をとりました。
・負電圧発生回路
オペアンプとコンパレータの電源に負電圧が必要なので搭載しています。無安定マルチで適当に発振を起こして、チャージポンプ回路で-5Vを作っています。三端子レギュレータから5Vを作っているのですが、どうせ5Vはほしくなることが多いだろうということで、出力のコネクタも設けました。
回路剝き出しだと普通に危ないので、ガワをMDFか何かで作ろうかと思います。