JavaScriptのfunction宣言をアロー関数に置き換える正規表現パターン

はじめに

VSCodeを想定しています。

やり方

検索:

function (.+)\((.*)\)
置換:
const $1 = ($2) => 

動作の様子

f:id:yuppi5:20190710213455p:plain
置換前
f:id:yuppi5:20190710213527p:plain
置換後

今後の展開

「function」と関数名の間の空白を半角スペース1個固定にしているので、ここは改良点になると思います。

3レベルVVVFインバーターを作りました

ちょくちょく構想をしていた3レベルインバーターがようやく完成しました。




完成までの道すじから今後の課題まで

試験回路の作成

とりあえずハーフブリッジの回路を作ってゲート信号を入力して無負荷で動かしてみました。直流280V入力で特に発熱等は確認されなかったので、基板の制作に移りました。

基板を設計

KiCADで配線をガーッって書いて発注しました。いままで使っていたインバーターに重ねたかったのでB基板の大きさに合わせて作りました。おかげで配置がギュウギュウになって、一部の配線をジャンパー線でまかなわないといけなくなりました。あと、Cスナバーをとりあえず取り付けたんですが意味を成しているかは不明です。

基板完成!しかし…

個人での作例がなかったんですがまあ行けるっしょ!って感じではんだ付けまでして動かしたら良い動きをしないんですよね。
電源のスイッチをオフにしてキャパシターに溜まっている電荷だけで動かしたんですが、マイコンを起動するとなぜか上のキャパシターの電圧が低くなっていってしまう。

f:id:yuppi5:20190430144817p:plain
不具合

壊れる素子

280Vを通電したところU相の素子(FET)が壊れました。原因を探ったところ、マイコンリセット時に48MHzのクロック?が出るピンがあり、それが悪さをしていたようです。
基板の部品の密度が高いせいで素子を交換するのに苦労しました…。

発煙

素子を取り替え、ピンを変更したあと無負荷で動作試験をしました。このときスライダックを入手したので、それを使って電圧を上げていきながら行いました。
直流電圧140Vくらいまではほぼ問題なかったんですが、200Vまで上げるとどこからか発煙したので中止しました。電源を落としキャパシターを放電したあと基板を触ると熱い部分があったので、多分何か問題が起きていますね。(ハーフブリッジで試験したときに無事だったのはなんだったんだろう…?)
ゲート信号を全く与えない状態(全て0)で280Vに上げても特に問題はなかったので、原因は素子ではなさそうです。

デッドタイムを長く

原因が結局よくわからないまま時間が進むのも良くなかったので、とりあえずデッドタイムを長くして対症療法的に対策をしました。そうすると発熱が多少改善されました。

問題点

  • 回路がガバ
  • 電源が弱い
  • 電源の入力電圧をスライダックで半分にしていて音量が小さい
  • なぜか発熱するFET

最初の2点はすぐ直せるとして、後ろの2点は今後の長期の課題ですね。素子壊したくないですし。
そういえば、回路の甘さと電源の弱さで一番最初の再現*1を思い出しました。当時はスライダックもオシロスコープもなかったですけどね。

今後の課題

280Vで動かせるようにすることと、SDカードでも3レベルの設定で鳴らせるようにすることですね。


その他

先駆者

素子が壊れて萎えていたところ、ぽんずさん*2に先を越されていました。


基板の部品の配置がかっこいい。東武30000系の音良いですよね。
オシロスコープがぽんずさんと同じだったので全く同じにするのもなあと思い、Twitterの動画ではオシロのチャンネルに3と4を使いました。

ノッチオフ時について

f:id:yuppi5:20190430151648j:plain
動画の最後のあたりのスクリーンショット
ノッチオフというか回転数0のときにスイッチングしているのは、ブートストラップでやっていた2レベル時代の名残です。

最後に

問題点・課題が多いですが、とりあえず完成してモーターを回せたのは良かったです。

f:id:yuppi5:20210220171846j:plain
マイコンボードの下に見える青い基板が今回作ったもの

*1:自作VVVFインバーター東武50000系を再現しました(2016/05/23) https://youtu.be/7dzAvt-umCw

*2:ぽんずさんによる記事:3レベルVVVFインバータを作った - ぽんず製造所 http://pons.blog.jp/archives/79636359.html

末尾長音の有無が混在する文章中で一気に末尾長音を付ける/取り除くときの正規表現(VSCodeでの置換)

末尾長音を付けるとき

例えば、「ドア」に末尾長音をつけて「ドアー」にしたいときは
 検索:(ドア)([^ー])
 置換:$1ー$2
f:id:yuppi5:20190428000631p:plain
とします。

f:id:yuppi5:20190428000653p:plain
そうして全て置換するとこうなります。

末尾長音を取り除くとき

例えば、「ドアー」の末尾長音を取り除いて「ドア」にしたいときは
 検索:(ドア)(ー)
 置換:$1
f:id:yuppi5:20190428000845p:plain
とします。

f:id:yuppi5:20190428000831p:plain
そうして全て置換するとこうなります。

自作VVVFインバーターをスマホから操作できるようにしました

作ったもの

元ネタの方

IoTインバーターすき

使ったもの

f:id:yuppi5:20181010232109j:plain

ESP-WROOM-02

ESP-WROOM-02(ESP8266)をアクセスポイントにしてiPod Touchから直接繋げています。ESP-WROOM-02にプログラムを書くのは初めてではないのですが、アクセスポイントモードを使ったのは初めてだったのでいろいろ調べながら作っていました。

iPodESP-WROOM-02から情報を受け取る際には XMLHttpRequest を使ってリアルタイムに受信しています。もしかしたら別の方法のほうが適しているかもしれませんが調べていません。

また、インバーターの情報をリモコンに送って表示ができたら面白そうだなあと思って方法を調べました。これにも XMLHttpRequest が使えるらしく、JavaScriptを少し改造するだけでデータ受信機能を追加できました。
用途からするとWebSocketのほうが向いていそうですが8年前の古いブラウザーなので対応しているかは不明です(試してはいません)。

iPod Touch

タイトルにあるスマホではないですが、モダンなブラウザーが使えてWi-Fiに接続できるものであれば何でも使えます。
iPod Touchは第2世代のものです。ブラウザーのバージョンは5.0.2だったので、もう8年前から更新されていないことになります。何しろ8年前なので当然letとconstは使えません。それでもたいていの機能は使えるのでそんなには大変ではありませんでした。ですがローカルで外観を確認できないので、一旦Webに上げてどんな感じに映るかを確認してたのでやっぱり大変でした。
「ここを外すと動かない」が発生しましたが、よくよく考えたら書き方を間違っていただけでした。すぐにブラウザーのせいにしてはいけない

VVVFインバーター

自作です。この前SDカードで設定を読み込ませるやつを作ったので、それに機能を追加する形で今回のリモコンを導入しました。

ブラウザーの画面について

f:id:yuppi5:20181010232910p:plain
パソコン側でのデザイン風景
指をスライドするとノッチが切り替わる動作は鉄道運転シミュレーターの「Train Drive ATS」を参考にしました。本物のワンハンドルマスコンにような感じで操作ができます。僕が書いたプログラムがタコなせいなのか、スライドすると操作が遅延するバグがあります。
上のスクリーンショットChromeデバッグコンソールのデバイス切り替え機能を使ったものです。スマホで見た場合の画面をエミュレート?してくれるので便利です。

追記

(2018/11/11)
タイトルを「自作VVVFインバーターWi-Fiリモコンを導入しました」から「自作VVVFインバータースマホから操作できるようにしました」に変更しました。

MS処理について

数式で一般的に表した場合のMS処理です。

定義

I_L…入力信号の左成分。
I_R…入力信号の右成分。
O_L…出力信号の左成分。
O_R…出力信号の右成分。
a…MS調整用パラメーター。0に近いほどMid寄り、1に近いほどSide寄りになります。
入力信号、出力信号ともに大きさは-1~1です。

V_MをMid成分、
V_SをSide成分と置くと
{ \displaystyle
V_M = I_L + I_R \\
V_S = I_L - I_R
}
となります。出力は
{ \displaystyle
O_L=(1-a)\times V_M+a\times V_S \\
O_R=(1-a)\times V_M-a\times V_S
}
となります。
aを調整することで、ステレオ感を出したり、モノラルにしたりできます。

素のSTM32F303K8にデバッガーを切り離していないNucleo経由でバイナリーを書き込む方法

この記事はstm32 Advent Calendar 2017の21日目の投稿です。

f:id:yuppi5:20171217233813j:plain
素のSTM32F303K8は、デバッガーを切り離していないNucleo経由でバイナリーを書き込むことができます。
バイナリーはmbedオンラインコンパイラーのもので動作を確認しています。
ボードの上下を切り離して別々にして書き込んでいる例があり、切り離さないとSTM32F303K8に書き込めないのかと思ってしまいますが、切り離さなくても書き込めます

続きを読む