エレクトロニクス・フィーバー

プログラミングと電子工作で共有しようと思ったことを載せていきます

「暗雲が立ち込める」は誤用

暗雲は垂れ込むもの、または漂うもの。

「暗雲が垂れ込める(漂う)」は、空を厚い雲が覆って雨が降り出しそうな様子。また転じて、悪いことが起こりそうな気配。 「天気予報の通り、午後から暗雲が垂れ込んできた」「会社の経営に暗雲が漂う」など。

「立ち込める」は、その場所を霧や煙が覆うこと。「山道に霧が立ち込める」「煙草の煙が部屋に立ち込める」など。 雲は空にあるので、立ち込めるとは言わない。

コンビニ・営業所受取できるECサイトの俺得リスト

個人的な俺得まとめです。網羅的なものではありません。

略記号
LAWSON L
FamilyMart F
サークルK K
サンクス S
ミニストップ MS
セブンイレブン 7
ヤマト運輸営業所 黒猫

LAWSON と FamilyMart が多いのは、私の最寄りのコンビニだからです。他のコンビニが貧弱だとは限りません。

サイト L F K S MS 7 黒猫
amazon.co.jp
楽天市場(店舗による)
楽天Books
UNIQLO
DMM.com 通販
サンワダイレクト(複数商品は不可)

参考

電子工作でよく使う電線の太さ

ヘッドホンアンプ自作などの電子工作でよく使う電線の太さをまとめてみました。

AWG 直径[mm] 断面積[mm2] 所感
30 0.25 0.051 ジャンパー線に稀に使う。ブレッドボードに挿してもほとんど接触しない
28 0.32 0.081 ジャンパー線に稀に使う。ブレッドボードに挿してもほとんど接触しない。一般的なUSBケーブルのデータ線に使われている
26 0.41 0.13 端子間の結線に使う。ぎりぎりブレッドボードに使える
24 0.51 0.20 端子間の結線に使う。ブレッドボードに使いやすい。一般的なUSBケーブルの電力線やLANケーブルに使われている
22 0.64 0.33 端子間の結線に使う。ブレッドボードに使えるが、半田上げすると挿しにくくなってくる
20 0.81 0.52 ACアダプタのDC側の線に使われている。
18 1.0 0.82 スピーカーコード並みの太さ。わざわざ買ったことはない

LTspice で精密な歪率解析(過渡解析)をする設定

結論

  • maximum timestep を1波長の 1/1000 以下にする
  • .options plotwinsize=0 を付ける
  • .options numdgt=7 を付ける

まとめると、こうなります。 ちなみにさらっと使っていますが、信号周波数を .param コマンドで定義すると便利なのでおすすめです。 f:id:mtyk1:20170820105915p:plain

効果

これを FFT すると、こうなります。 f:id:mtyk1:20170820110113p:plain THD の結果は以下の通りです。

Harmonic Frequency    Fourier    Normalized   Phase      Normalized
 Number       [Hz]      Component    Component  [degree]    Phase [deg]
    1       1.000e+03   2.000e-01   1.000e+00      -0.00°      0.00°
    2       2.000e+03   6.775e-11   3.388e-10      -2.79°     -2.79°
    3       3.000e+03   1.016e-10   5.078e-10      -1.74°     -1.74°
    4       4.000e+03   1.354e-10   6.768e-10      -1.19°     -1.19°
    5       5.000e+03   1.692e-10   8.459e-10      -0.83°     -0.83°
    6       6.000e+03   2.030e-10   1.015e-09      -0.57°     -0.57°
    7       7.000e+03   2.368e-10   1.184e-09      -0.36°     -0.36°
    8       8.000e+03   2.706e-10   1.353e-09      -0.19°     -0.19°
    9       9.000e+03   3.044e-10   1.522e-09      -0.04°     -0.04°
Total Harmonic Distortion: 0.000000%(0.000000%)

何も指定しないときはこうなります。すごい差です。 f:id:mtyk1:20170820110235p:plain

Harmonic Frequency    Fourier    Normalized   Phase      Normalized
 Number       [Hz]      Component    Component  [degree]    Phase [deg]
    1       1.000e+03   1.996e-01   1.000e+00      -0.00°      0.00°
    2       2.000e+03   3.465e-07   1.736e-06     -86.63°    -86.63°
    3       3.000e+03   3.736e-07   1.872e-06     -78.71°    -78.71°
    4       4.000e+03   3.402e-07   1.705e-06     -84.19°    -84.19°
    5       5.000e+03   3.758e-07   1.883e-06     -71.66°    -71.66°
    6       6.000e+03   3.316e-07   1.662e-06     -80.87°    -80.87°
    7       7.000e+03   3.827e-07   1.917e-06     -64.47°    -64.47°
    8       8.000e+03   3.216e-07   1.611e-06     -77.70°    -77.70°
    9       9.000e+03   3.905e-07   1.957e-06     -57.41°    -57.41°
Total Harmonic Distortion: 0.000508%(0.056047%)

各コマンドの説明

.options plotwinsize=0 *1 は出力波形の圧縮を無効にするコマンドです。 これを付けていないと、出力波形のポイントが勝手に減らされてしまいますので、大抵の過渡解析では必須のオプションです。波形ウィンドウの Mark Data Points を有効にするとわかります。 f:id:mtyk1:20170820111215p:plain .options plotwinsize=0 だけを付けるとこのようになります。付けない時の2倍位になりましたが、まだスカスカです。 f:id:mtyk1:20170820111954p:plain

maximum timestep はその名の通り、過渡解析の時間幅を指定します。何も指定しないときは相当荒く、10波長分も解析すると上記のようにスカスカになってしまいます。

.options plotwinsize=0 を付けた上で maximum timestep を 1/1000 波長にするとこうなります。あまり細かくしても解析時間がかかる割には効果が薄くなります。 f:id:mtyk1:20170820112302p:plain

.options numdgt=7 は内部演算を倍精度にするオプションです。デフォルトは 6 で、6 より大きくすると倍精度になります。

*1:日本のブログ等では “.option …” と誤って紹介されているところが多いですが、正しくは “.options …” です。LTspice はどちらでも許容するようですが

TCHAR はもう使うな

C/C++Windows プログラミングをしていると、 TCHAR という物が出てきます。 初心者の方はそこで “TCHAR” で検索します。使い方が出てきます。そして「これからは TCHAR を使おう」ということを知ります。これが良くない。 この記事は TCHAR は時代遅れであり、2017年の現在ではもう使うべきではないということを Windows プログラミングの初心者向けに書きます。

そもそも TCHAR は何のためにある(あった)のか

TCHAR という型は、 WindowsUnicode に対応するために過渡的に作られた仕組みです。

かつて、Unicode の無かった頃、 Windows では、文字を char で表していました。 しかし、 char で表せる文字は英語以外の言語では明らかに不足していたため、各国で別々の方法でそれぞれの言語の文字を表すための方式を作っていました。 そこで、それらを統一するために Unicode という仕組みが作られ、 Windows もそれに対応することにしました。 WindowsUnicode に最初に対応したのは 98 と NT 4.0 だそうです。

そこで問題になったのが、Unicode に対応するためには、OS とアプリケーションの両方が Unicode に対応していなければ Unicode 対応にならないということです。 具体的な課題としては2つ考えられます。1つ目は、Unicode に対応していないアプリケーションを Unicode に対応させるための方法を用意しなければならない。2つ目は、新しいアプリケーションを Unicode に対応した Windows と、Unicode に対応していない古いバージョンの Windows の両方で動かす方法を提供しなければならないことです。

そこで編み出した解決方法は、コンパイルオプションによって、一つのソースコードから Unicode に対応した実行ファイルと対応していない実行ファイルを別々に出力するという方法でした。これが TCHAR です。 TCHAR はコンパイルオプションによって文字型を char と Unicode 用の WCHAR に切り替えることができます。

今でも TCHAR を使うべきなのか

TCHAR は一つのソースコードから Unicode に対応した実行ファイルと対応していない実行ファイルを出力するための方法でした。 これは、Unicode に対応していない Windows がまだ使われていた時代には意味のある仕組みでした。 しかし、今となってはそんな古いバージョンはサポート期限も切れており、新しく入手するどころかインストールされたPCを見つけることすら困難です。 新しく開発するアプリケーションで、そんなに古いバージョンに対応して欲しいという要望が来ることはまずありません。 従って、新規開発では TCHAR を使わずに WCHAR を直接使えば十分なのです。

もう作ってしまったものを消せという意味ではない

誤解しないでいただきたいのは、 TCHAR を使って作ってしまった既存のアプリケーションを、 TCHAR を使わないように作り直せという意味ではありません。 新しく開発する案件では、採用する意味は無いということです。

信号の経路を考える

f:id:mtyk1:20170214214426p:plain

定電流源を負荷とした、2つの純A級エミッタフォロア回路があります。左側はNPNトランジスタ、右側はPNPトランジスタを使用しています。この点を除けば、2つは同じ動作をするでしょうか?

続きを読む

電流正帰還アンプの覚え書き

f:id:mtyk1:20170109233411p:plain

出力電圧の解析

K = R_f2 / R_f1, M = R_in2 / R_in1 とする。

  1. V_S = I_O R_S + V_out
  2. V_in2 = (R_f1 + R_f2) / R_f1 * I_O R_S + V_out = R_f2 / R_f1 * I_O R_S + V_S = K I_O R_S + V_S
  3. (R_in1 + R_in2) V_P = R_in1 V_in2 + R_in2 V_in1
  4. V_P = V_S ... virtual short

これを解く。

(2) に (3), (4) を代入する。

  • (R_in1 + R_in2) V_S = R_in1 (K I_O R_S + V_S) + R_in2 V_in1
  • R_in2 (V_S - V_in1) = R_in1 K I_O R_S
  • M (V_S - V_in1) = K I_O R_S

(1) を代入する。

  • M (I_O R_S + V_out - V_in1) = K I_O R_S

M = K の時、 V_out = V_in1 が成り立つ。