Tech Notes

>>|
1/9

Zephyrとラズパイpicoで独自USBデバイスを作る

最近、Zephyrというものを勉強してみている。RTOSと言われるものの1つで、様々なマイコン上で高度な処理を統一的に実装できる。対応チップは結構あるようだ。(参考)

出来ることは広いのだが、その中でUSB機能に注目したい。適当な32bitマイコンを買ってきて独自デバイス化できるのであれば、考えられるアプリケーションはかなり多い。

その一方で公式のサンプルには、マウスとかキーボードとかMIDIとかメモリとか既定のUSBデバイスクラスのものしかない。ベンダ独自デバイスを定義する方法のちゃんとした解説がどこにもない。というわけでこの記事を書いた。

実験にはRaspberry Pi picoを使用したが、Zephyrが対応するUSBマイコンであればどれでも使えるはずだ。

ソースコードの全体はこちら(リンク,zip形式)。

続きを読む

MOSFETの熱雑音の式導出

MOSFETの熱雑音を表す式としてよく教科書に載っているのが以下の式だ。

$$\overline{i_n^2}=4kTg_m\gamma\Delta f$$

曰く、この電流がドレインソース間に重畳されるという。

$4kT\Delta f$の部分は抵抗の熱雑音と同じなのでなんとなく納得できるが、相互コンダクタンス$g_m$が出てくるのが分からない。$\gamma$という係数の値が理論値としては$2/3$になるという情報も割と見当たるが、その根拠というのはネット上だと全く見つからなかった。仕方ないのでちゃんと調べてみたのがこの記事だ。

記事の内容は書籍 Noise: Sources, Characterization, Masurement(Van Der Ziel, 1970) に基づく。

続きを読む

CMakeユーザーはcmake -Eを活用せよ

CMakeでちょっと複雑なソフトを作っていると、ビルド時に単にソースをコンパイルするだけでなく、ちょっとしたコマンド実行やファイル操作をしたくなる場合がある。何らかのスクリプトで設定ファイルからソースコードを生成したり、あるファイルを必要な場所にコピーしたりなど。

そういう場合にはadd_custom_commandadd_custom_targetを使えば任意のシェルコマンドを実行することができる。もちろんLinuxならcprm、Windowsであればcopydelが実行できるのだが、こうしたプラットフォーム依存な処理をするのはCMakeの意義に照らしてあまり良いことではない。

そこで出てくるのがcmake -Eだ。これを使うとif(WIN32)みたいな不格好な場合分けをせずに済む。

続きを読む

スイッチ操作不要のTWE-Lite書き込み機を自作する

TWE-Liteという無線マイコンモジュールがある。みんな大好きESP32より値は張るが、μAオーダーの超低消費電力が持ち味で、乾電池で年単位の稼働が見込める。こうした芸当はESP32やRaspberry Pi Pico Wなどには出来ない。競合としてはnRFマイコンなどが挙げられるだろう。

(画像は秋月電子より)

TWE-Liteにファームウェアを書き込む場合には専用ライタを使うのが確実だが、ライタの中身はFTDI社のUSBシリアル変換ICなので、少し知識のある人であれば簡単に自作できる。配線例が公式にもあるので恐らく公式も認めたものだ。(リンク)

一方でこの配線による非公式ライタの場合、書き込む前にリセット端子とPRG端子を手動でポチポチする必要がある。公式のライタならば要らない操作だ。

一体どうすれば公式のライタ同様に、挿して書き込んで抜くだけという開発体験を手に入れられるのだろうか?この疑問を解くため調査隊はジャングルの奥地に向かった。

続きを読む

複素数の対数領域計算

ComplexPlotというグラフ表示アプリを作った。この手のアプリはDesmosやGeoGebraで良いだろと思うかもしれないが、複素数のプロットがあまり便利でないので、それに特化した表示器を作った次第だ。(リンク)

これを開発するにあたって、問題になったのが計算可能なレンジだ。元々電子回路の周波数vs利得とかの計算を便利にしたくて作ったやつなので、両対数表示とかをしたくなる。しかし対数スケールでズームアウトしていくと、まあまあ簡単に値が計算可能な幅を超えてしまう。

JavaScriptの数値型は倍精度浮動小数で、最大で10^308くらいである。まあ大抵のユースケースで収まることは収まるかもしれないが、5秒くらいズームアウトし続けたらすぐに「端」が見えてしまうのは心許ないといえば心許ない。

巨大な数を安定的に扱う手法といったら対数領域計算である。英語では Logarithmic Number System(LNS) などとも呼ぶらしい。今回初めて実装してみたので、その知見を書き留めておく。

続きを読む

水晶発振回路の動作原理について

恥ずかしながら今まで真面目に勉強してこなかったので、水晶発振回路の動作原理を真面目に調べてみた。

よく使われるのはインバータを用いたこういうやつである。

これの動作を説明できるようになりたい。

続きを読む

AVRマイコンでADCを自動実行する

最近久しぶりに電子工作をやっている。AVRマイコンを触っているのだが、AD変換器に自動実行機能があるのを今更にして知ったのでそれについてまとめる。

1つ大きな注意点も見つけたのでそれも含めてメモ。

続きを読む
>>|
1/9