保管用のICレールの止め具を作る

いまどきの製品で DIP IC を使うことは少ないでしょうが、
DIP IC はレール(あるいはマガジンと呼ばれる)に入ってメーカから出荷されていました。

IC レール

レールの両端はプラスチック製の止め具(エンドピンと呼ばれる)や、上の写真のような塩化ビニルやシリコンゴム製の止め具(エンドプラグと呼ばれる)で固定されます。
東芝とか沖電気は黄色、三菱やTI はグレーと、メーカによって色はさまざまでした。

IC レールのいろいろな止め具

私はレールのまま IC をたくさん保管していますが、
日本の高温多湿の環境では、レールを長期保管するとエンドプラグの劣化が問題になります。

劣化したストッパの例

製造から 10年、20年経過すると、エンドプラグは硬い樹脂と液体に分解してしまいます。
液体は油分なので、水分のように金属をさびさせることはありませんが、
もちろん蒸発することもなく、IC は油でべたべたになってしまい、
止め具としての機能もなくなってしまいます。

そこで、軟質のエンドプラグをプラスチックのエンドピンに置き換えるべく、
3D プリンタで止め具を作ることにしました。
φ3.2 の穴にはまるような形状で止め具を作成します。

止め具を3Dプリンタで作る

たくさんプリントアウト

作成した止め具に変えたICレール

IC レールにドリルで穴を開け、もとの止め具の代わりに作成した止め具を差し込みます。
PLA が何年持つかわかりませんが、20年もののエンドプラグよりは安心して保管できますね。
通常の止め具と違い、薄いので裏から差し込むこともできます。

モデルデータ

 

静音マウスを普通のマウスにする

Logicool の M650L というマウスを買ったのですが・・・
静音マウスなのはいいとして、
・左右クリックの作動力が小さすぎて、ちょっとマウスが何かにぶつかっただけで誤クリックする
・中央クリックと左右クリックの作動力がアンバランスで操作しづらい
という点が不満です。

それでも、以前に買った他社マウスよりは作りが良いので
スイッチを取り替えてしまいましょう。

ねじ止めされています。分解は星型ドライバが必要です。

タクトスイッチは一般的な 5.08mm 2P タイプなので、
適当なものに付け替えます。
もちろん普通のタクトスイッチだと耐久性が足りないので、
マウス用の Panasonic EVQ-P0E07K を使いました。

実装しなおして、静音ではなくなりましたが、これで快適になりました。

STM32G071のADC Calibration

最近は STM32G071 をいじっていて、USB-PD デバイスを作っています。

STM32 は 12bit ADC を搭載しているのですが、
変換値が実際の値からかなりずれてしまい、しばらく困りました。

ADC の初期化後、変換前に ADC のオフセットの Calibration が必要です。
STM32G071 の ADC モジュールは ハードウェアによるキャリブレーションが実装されていて、完了後に ADC_CALFACT レジスタに値が書き込まれます。
次回変換から、CALFACT で補正された変換値が ADC_DR レジスタによって取得されます。

HAL では HAL_ADCEx_Calibration_Start という関数を呼べば、キャリブレーションを実行してくれます。
STM32CubeMX のコードでは以下のように書けばよいですね。

MX_ADC1_Init();
// 中略
// call before ADC conversion has started
HAL_ADCEx_Calibration_Start(&hadc1);
// HAL_ADC_Start(); を呼び出し可能

注意点は、ADC 初期化した後、ADC 変換停止状態で Calibration_Start 関数を呼ばなければいけないということで、作成したコードではタイマ割り込みから ADC_Start() していたので、タイミングによってはその制約が守られていませんでした。
Calibration に失敗すると、CALFACT は更新されず、0 のままになります。

HAL_ADCEx_Calibration_Start のコードにもその注意が書いてあるので、まあちゃんとコメントを読めばこんなところで引っかからないはずですね。

さて、実際に Calibration させてみると、CALFACT = 69 という値が読めます。
VREF = 3.3V, 12bit なのでオフセット電圧は 69×3.3/4096 = 55mV という計算になります。ちょっと大きいですね。CALFACT は 7bit なので、最上位 bit まで使っています。
(QFP32 パッケージだと VREF = VDD)
STM32G071 のデータシートによるとオフセット誤差 EO = 4.5LSB (max) ですが、これはキャリブレーション実行後の測定値と書かれています。

実際エラッタシートを見ると、VREF が 3V 以下のとき、個体によってはオフセット誤差がキャリブレーションの CALFACT (0-127) を上回ってしまうようです。VREF = 1.65 – 3V のとき、ワーストケースの EO = 50LSB となっています。ちょっとだめですね。

何にしても、Calibration は必須であり、ADC 停止中に行う必要があり、また、Calibration_Start は手動でコードを挿入する必要があるということに注意すればよいでしょう。

AVR-DA の内蔵プルアップ特性

AVR-DA シリーズのデータシートには、IO ポート内蔵のプルアップ抵抗の電気的特性はあまり詳しい記述がありません。代表特性として VDD=3V, VIN = 0V のとき 150uA(typ) 200uA (max) を保証しています。

また、VDD と Weak Pull-Up 電流のグラフ (Fig 38-82) が掲載されています。電流は VDD 電圧に依存するように書かれていますが、測定条件が明確ではありません。


– ここまで図表は AVR64DA28-32-48-64 DS Rev.B より引用

マイコンの内部回路によりますが、
1. PU 抵抗の形成に MOSFET を使っている場合
2. PU 抵抗のイネーブルを FET SW で切り替えている場合
などの条件では、抵抗値が非線形となることが考えられます。たとえば AT90S シリーズはかなり非線形な特性でした。

内蔵プルアップを積極的に使う応用を作るうえでこのあたりが気になったので、実測してみました。

VDD=2.5, 3.3, 5V で、プルアップに設定した PE2 ピンに対して VIN を0-5V, ±0.6mA 制限でスイープして、グラフにプロットした入力電流 Iin を青線で示しています。0<VIN<VDD の範囲でほぼ線形とみなすことができます。R=20kΩ の破線とよく一致します。
なお、VIN>VDD では寄生ダイオードが導通するので大きな逆電流が流れます。数十mA を超えると IC によってはラッチアップしてしまいます。

一応、ポートを変えて PD5, PF0 ピンでも同様に確認してみましたが、ほとんど同一の特性でした。常温では プルアップ抵抗 R_PU=20kΩとみなして問題なさそうです。

VIN = 0V の電流値は先ほど示した FIg.28-82 のグラフと一致します。しかし、FIg.28-82 から、パッシブな抵抗に比べて相当大きい温度係数 (~2000ppm/K = 0.2%/K) をもつことに注意が必要です。

シフトレジスタによるノイズジェネレータのフィードバックと周期

デジタル回路の簡単なノイズジェネレータとして、シフトレジスタを使ったいわゆる Shift Register Generator Counter が使われます。シフトレジスタの出力を XOR を通して入力にフィードバックすることで、長い周期のカウンタが得られます。カウンタ周期 N が大きいとき、シフトレジスタの出力は (入力周波数 / N) より高い周波数成分をもつホワイトノイズに近づくので、サウンドジェネレータのノイズ音発生器によく使われます。

2入力の XORを使ったフィードバック回路では、SREG 出力が 0x00 のとき入力も 0 になってしまうため、この状態を避ける必要があります。一般的にはリセット後の初期値を適当な値に設定します。

74164 などの SIPO シフトレジスタは、出力 0x00 にするリセット入力しかありません。出力が 0x00 を有効なステートとするためには、上図のように XNOR を使えば OK です。これは、出力 0xFF から XOR によるフィードバックで動作させたときと等価になります。

2入力 XNOR の入力元 bit の接続先を M,N として、得られるカウンタの周期を下表に示します。N bit のシフトレジスタのとりうる状態は 2^N で、全 bit が 1 のときは無効な状態なので、周期 2^N-1 が N bit SREG の最大周期となります。この最大周期となるカウンタを Maximum Length Counter と呼びます。Maximum Length Counter となるフィードバック接続は、表中で太字で示しています。

M
N/M 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
N 0
1 3
2 7 7
3 15 6 15
4 21 31 31 21
5 63 14 9 14 63
6 127 93 127 127 93 127
7 63 30 217 12 217 30 63
8 73 465 21 511 511 21 465 73
9 889 42 1023 62 15 62 1023 42 889
10 1533 2047 1953 1533 595 595 1533 1953 2047 1533
11 3255 126 45 28 819 18 819 28 45 126 3255
12 7905 1785 8001 7161 6141 7665 7665 6141 7161 8001 1785 7905
13 11811 254 5115 186 5461 254 21 254 5461 186 5115 254 11811
14 32767 4599 63 32767 35 93 32767 32767 93 35 32767 63 4599 32767
15 255 126 57337 60 16383 434 63457 24 63457 434 16383 60 57337 126 255

 

ラインフィルタで絶縁電源を作るテスト

デジットのセールでラインフィルタが 100個¥500 と激安なのでつい買ってしまいました。

ラインフィルタは SU10VF-05050 という型番で、
AC 入力回路のコモンモードフィルタを想定したものですが
要はトランスなので絶縁電源に応用できそうです。
電力は取り出せなくても、1個¥100 以内の絶縁電源でマイコンを動かすことができれば
いろいろ応用ができます。

回路図(TC40H000P 使用)

回路図(NE555P 使用)

そういうわけで、あり合わせの部品で試作したのが写真左側の回路です。
(右側は一緒に買ったステッピングモータのテスト回路)
フライバックコンバータを構成していて、
シャントレギュレータとフォトカプラで電圧誤差を一次側にフィードバックすることで
安定化された +5V を出力します。

AC ライン用のラインフィルタは DC 電流を流すことを考えられていないので、
電力トランスとして使うとすぐに飽和してしまいます。
図の回路でおおむね 20-30mA くらいの電流を取ることができます。

SM1350 ブレイクアウト基板

NPC 社の SM1350 という IC があるのですが、パッケージが若干特殊なので
テスト用にブレイクアウト基板を作りました。

回路図 (PDF)

レイアウト(裏面) (表面)

生基板

実装例 (A級アンプモード)

実装例 (BTLモード; 下半分の C は実装不要)

BTL 出力と A級出力の 2 モードに対応しています。
(BTL/A級出力は IC のマスクオプションで決まっています。)
基板にプルアップ抵抗のパターンがないので、
マスクによっては抵抗の配線が必要になるかもしれません。

余りがあるため、ほしい方があれば部品頒布のページを確認のうえご連絡ください。
基板のみ¥100、IC 付き¥800 で頒布します。(送¥84)

追記

A級出力マスクの場合は、スピーカを駆動するために外部アンプが必要です。
LM358 のようなアンプと接続するか、下記のような簡単なアンプを使用して
スピーカに接続してください。

ロジック IC でつくる国鉄気動車チャイム音 (製作編)

前回の回路を作ったものが下記の写真です。
比較的小規模な回路なので、基板1枚に収まります。

国鉄チャイムなので、国鉄時代に製造された IC で統一しました。

ラッピングにするほどでもないので、信号線は基板裏側で配線しています。
この類の配線には銀めっきの単線が便利です。
普通に売っているラッピング用単線は錫めっきなので、長期在庫品は半田付けには向きません。
同じ錫めっきの単線でもメーカによって差があるようで、特にジュンフロン線は半田が乗らない傾向にあるように感じます。
トラブルの元なので、錫めっきのジュンフロン線は半田付け禁止にしています。

続きを読む

ロジック IC でつくる国鉄気動車チャイム音 (設計編)

国鉄時代の気動車の車内放送で使われていたメロディ(アルプスの牧場)を鳴らす回路を作りました。
マイコンを使ってはつまらないので、例によってロジック IC を組み合わせて作りますが、
せっかくなので国鉄時代(~1987)に製造された IC だけを使って組んでみました。

2 つの 8 ステップ波形生成器とエンベロープ生成器により、
ある程度オルゴールのような音が鳴るようになっています。
長くなってしまったので設計編、製作編で区切ります。

続きを読む