2020年 01月 03日

電解コンデンサは常温放置でも劣化する

http://www.rubycon.co.jp/products/alumi/technote3.html#3-7
https://www.nichicon.co.jp/lib/aluminum.pdf

「放置特性」という形で言及されていることがある。放置していると、漏れ電流が増加していく。もともと経年劣化で必ず増加するが、電圧がかかっていれば自動修復されるものが、放置状態だとこれが行われないということのようだ。「電圧処理」をすれば修復されて元に戻る。

また経時劣化で内部圧力が高まり、液漏れすることがある。これも無負荷でも発生する。この場合、膨らんでいるコンデンサは「消費期限切れ」なので捨てるしかない。

pcb2gcode mirror-axis

https://github.com/pcb2gcode/pcb2gcode/wiki/Options:-Alignment-for-two-sided-PCB-and-offsets

mirror-axis まわりが追加された?ようで、デフォルトの挙動が変わってしまっていた。かなりハマった。しかもこれ、面倒なことにプロジェクトごと(ボードの大きさごと)に決められた値を入れないと今までと同じ挙動にならない。

mirror-axis には width の半分を入れる。一回変換してみて表示される数字を半分にわればいいが……

タカチ電機工業のサイトの検索結果を値段でソート

ケースのタカチの製品検索 ( https://www.takachi-el.co.jp/search/detail ) で結果をソートする方法がないので、JS でやる。

JS コンソールで以下を実行する。

p = $x('//*[@id="mCSB_1_container"]/table/tbody')[0];$x('tr[@class="child"]', p).sort( (a, b) => $x('number(./td[9])', b) < $x('number(./td[9])', a) ? 1 : -1 ).forEach( (e) => p.appendChild(e));

SPI TFT 液晶 (ST7735など) で色がおかしいときに試すこと

  • RGB BGR の設定は正しいか
  • 0xdddddd がグレーで表示されるか?
    • されない場合 GBRG / GRBG の可能性あり

ドライバが同じでも、載っている液晶のデータ形式が違うことがある。

備考 RGB888 (24bit) から RGB565 (16bit) へ変換

RGB

#define RGB565(rgb888)     ( ((( (rgb888)&0xf80000)>>8) | (((rgb888)&0xfc00)>>5) | (((rgb888)&0xf8)>>3)) )

GRBG

#define RGB565(rgb888)     (( (rgb888) & 0x1c00) << 3)|(( (rgb888) & 0xf8) << 5)|(( (rgb888) & 0xf80000) >> 16)|(((rgb888) & 0xe000) >> 13)
2019年 12月 29日

Mojave で clang が stdio.h などを見つけられない場合

stdio.h や math.h などが見つからないと言われる場合

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg 

で SDK header をインストールしなければならない。

2019年 12月 25日

GYSFFMANC(MT3333)が定期的に受信できなくなる

秋月で売っているGYSFFMANC(MT3333) GNSSモジュールがおかしい。

中央下のグラフを見るのがわかりやすいが、定期的に (衛星が見えているにも関わらず) 一切受信できなくなり、しばらくすると回復するという挙動をする。なので全く安定して受信できない。

  • 少しずつ SV Used が減少しはじめ、3D Fix を維持できなくなる。SV View はほぼ変化しない
  • リセットから3〜4時間経過すると一切受信できなくなる
  • そこからしばらくすると、再び受信できるようになる
  • 上記の挙動を繰替えす
  • 一切受信できなくなったタイミングで手動でリセット・ホットスタートすると即座に 3D Fix される。これよりアンテナの問題ではないと考えられる
  • ほぼ同じ位置に別のアンテナをつけ、別の受信機(ublox NEO M8N) をつかって測位しているが、そちらではこのような現象は起きない。衛星の見える環境の問題ではないと考えられる

その他の情報

  • バージョンは AXN_5.1.2_3333_17113000
  • GPSとGLONASS で測位。SBAS の有効・無効は関係なく再現する。
  • GLONASS は表示にはでるが測位に使われている形跡がないように思う。

考察

ゴミなのでは? とりあえず使用に耐えないので買って損してイライラするが、挙動について考えてみる。

  • 衛星のエフェメリス情報の有効期限が4時間なので、周期と似ていて怪しい
    • 3D Fix した状態だと捕捉している別の衛星の情報を一切処理しないとか?
  • 特定の環境でだけ再現する可能性がある?
    • 受信環境が悪い、かつ既に 3D Fix 状態だと他の衛星を無視するとか?
  • ファームのバグ (メモリリークみたいな?)
    • メモリリークとかでスタックするならリセット後にメッセージが出て、それが記録されると思うが、それは観測できない

よくわからんけど、とりあえずこのモジュールはおすすめできない。中国の怪しい GNSS モジュールのほうがはるかに安定している……

2019年 12月 24日

74HC04 の出力インピーダンス

データシートにまさにこれという値は載っていないので計算する必要がある。VCC などによって出力インピーダンスが変わってくる。

たとえば Toshiba の TC74HCU04 の場合、「出力電圧」は以下のようになっている。

または

で出力インピーダンス(最小)がわかる。H レベルのときは 4.5V のときだと (4.5 - 4.18) / 4e-3 = 80,、6.0V のときだと (6.0 - 5.68) / 5.2e-3 = 61。5V で中間ぐらいとすると 71Ω ぐらいか。

2019年 12月 23日

10MHz GPSDO (そのうち書く)

OCXO と GPS 1PPS その3 | tech - 氾濫原 というのを3年前に書いてからやる気をうしなって放置してましたが、STM32F103 bluepill と組合せて、10MHz GPSDO をつくってます。今度は完成させたい。前よりは進捗していて、現状では 1mHz 未満ぐらい (0.1ppb) に誤差を抑えることができています。

2019年 12月 18日

PWM や DAC の出力範囲を変える

  • PWM 信号は普通 0-5V などだが、1.5V-3.5V とかに変換したい
  • その際、電源ソースを変更したい。
    • PWMソースとは別の安定した電源から 1.5V-3.5V をとりだしたい

このようにMOSFETのレベルシフタと分圧抵抗でオフセットさせる。

出力を計算する

回路シミュレータ使って試行錯誤するのが一番簡単だが、一応自分で計算して、直接抵抗比を求められるようにしておく。

入力電圧 を図のような回路に入力したときの を求める。


テブナンの定理を使って計算していく。 で分圧されている部分を内部抵抗のある電圧源に置き換える。このため、 を外した状態での の値 と、その内部抵抗 を求める。 で分圧された値なので、 。内部抵抗を求める場合、既存の電圧源はショートして考えれば良いので、 の並列合成抵抗

これで下の図のような等価回路とみなせるようになる。

ここで によって分圧された出力なので、

以下の通り

出力電圧範囲と中心電圧から抵抗値を求める。

入出力関数 を以下のようにする

入力電圧の最小・最大がそれぞれ のとき、出力電圧範囲 と中心電圧 はそれぞれ以下のようになる。

連立方程式を適当に計算すると、 を決めたときのほかの抵抗の値は以下のようになる。

入力電圧の最小値 が0の場合は

JS

JS のコードにするとこういう感じ

const V_center = 2.5;
const V_range = 1;
const V_SS = -5;
const V_DD = 5;
const V_min = 0;
const V_max = 5;
const R_1 = 11e3;
const R_2 = ((2*R_1*V_SS-2*R_1*V_DD)*V_range)/((V_min+V_max-2*V_SS)*V_range+(2*V_center-2*V_SS)*V_min+(2*V_SS-2*V_center)*V_max);
const R_3 = -((2*R_1*V_SS-2*R_1*V_DD)*V_range)/((V_min+V_max-2*V_DD)*V_range+(2*V_center-2*V_DD)*V_min+(2*V_DD-2*V_center)*V_max);
// re-calculate R_23 V_23 for reference
const R_23 = (R_2 * R_3) / (R_2 + R_3);
const V_23 = (V_DD - V_SS) * (R_3 / (R_2 + R_3)) + V_SS;
console.log({R_1, R_2, R_3, R_23, V_23});
for (let V_in of [0, 2.5, 5]) {
	const V_out=(R_2*R_3*V_in+R_1*R_2*V_SS+R_1*R_3*V_DD)/(R_2*R_3+R_1*R_3+R_1*R_2);
	console.log({V_in, V_out});
}

lombok のシンボルが見つからないと言われ続ける場合

clean しても rebuild しても解決しない場合 inner class を利用していてかつ、inner class を import している可能性が考えられる。

この場合、inner class の import 文を削除し、完全修飾するようにすれば通るようになる。

エラーコードからは lombok が原因かはわからないし、それが innner class 絡みだということもわからない。lombok や inner class が原因か?ということに気付いたところでこの問題の9割は解決している。なのでこのエントリは実際には空虚で無意味な、躓いたということを知らせるだけのエントリである。