2024年11月16日土曜日

灯台管のカソード・グリッド部

 

灯台管のカソード・グリッド部




昔、ジャンク部品としてまとめて購入したものの中に謎のオクタルソケット真空管?が入っていました正体がわからず放置していました。
ようやく正体が分かったので、メモします。



ベース部分の金属は全体的にくすんでしまっています。下部には6D15と刻印されています。




上部はグリッドがあり、白い円形部分と金属リング間には若干の隙間があります。
ガラス管内には空気が充満しています。

形状的には2極管のUSN-CG-2B22に似ていますが、頭の部分の形が異なります。




正体は灯台管(ライトハウス管)と呼ばれている真空管のプレート部が離脱したものでした。
本来、上部にはもうひとつガラスの筒があるはずなのですが、残念ながら完全に取れてしまっています。



かわりにグリッドとカソードを直接みることができます。
この真空管はGHz帯の電力増幅をする3極管のようです。
構造的には真空管の回路図記号そのまんまです。
この形状の代表的な灯台管として、GEの2C40, 2C42, 2C43, 2C44, 2C46などがあるようです。


カソード、グリッド、プレート間の距離がかなり狭いです。謎の製造技術です。
先の上部画像では、グリッド(直径約6.5mm)とカソードが見えていました。

白い円形部分がカソードです。直径約6mmの金属筒の上部のみ金属酸化物が塗布されている構造をしています。
ヒーターは金属筒の中に完全に隠れているため、確認できません。
ヒーター点火時はこの金属筒がほんのり光るのでしょうか?











・参考文献



23 - Triodes UHF -
2極・3極の灯台管


Lamps & Tubes
RCA 2C40 Lighthouse UHF Planar Triode
Triode UHF à disques scellés
Hochfrequenz-Triode
灯台管の詳しい構造の図が乗っています。







2024年11月2日土曜日

三菱電機 メルック コントローラ メルック8の分解

 
三菱電機 メルック コントローラ メルック8の分解

注意:この記事の内容を鵜呑みにし、事故や損失を招いた場合でも当方は一切の責任は負いかねます。自己責任でお願いします。


電子機器分解シリーズです。

本機は複数の防犯カメラの映像を1つのモニタで監視するための時分割映像切り替え装置です。
本体の上に専用モニタ(M-0913E)を載せることができます。

この装置には型番らしきものが印字されていません。
基板上パターンには"MELOOK8"とあるので、おそらくメルック8が正式名称でしょう。



ICの生産年は1984年台が多いです。

マイコン等は入っておらず、4000シリーズのロジックICで制御しているようです。



「TC4049BP」 東芝 TC4049BP 4000シリーズCMOSロジックIC 6回路入りインバータ
「M54519P」 三菱 M54519P 7回路入りNPNトランジスタアレイ
「SM6430C」 NPC SM6430C 水平・垂直同期信号生成IC
「MC14015B」 モトローラ MC14015B 4000シリーズCMOSロジックIC 2回路入り 4bitシリアル入力パラレル出力シフトレジスタ
「MC14072B」 モトローラ MC14072B 4000シリーズCMOSロジックIC 2回路入り 4入力ORゲート


「51841」 三菱 M51841P タイマーIC 
555のコンパチ品です。他メーカはみんな"555"の文字が入っていますが三菱のみ例外のようです。
「MC14081B」 モトローラ MC14081B 4000シリーズCMOSロジックIC 4回路入り2入力ANDゲート

基板上に「MOS取扱注意」とあります。この時代のCMOS ICは入力保護が入っていなかったのでしょうか?



「MC14071B」 モトローラ MC14071B 4000シリーズCMOSロジックIC 4回路入り 2入力ORゲート
「MC14072B」 モトローラ MC14072B 4000シリーズCMOSロジックIC 2回路入り 4入力ORゲート
「MC14081B」 モトローラ MC14081B 4000シリーズCMOSロジックIC 4回路入り2入力ANDゲート
「MC14175B」 モトローラ MC14175B 4000シリーズCMOSロジックIC 4入力D-FF
74175の4000シリーズ版です。
「MC14093B」 モトローラ MC14081B 4000シリーズCMOSロジックIC 4回路入り2入力NANDゲート シュミットトリガ入力



「MC14013B」 モトローラ MC14081B 4000シリーズCMOSロジックIC 2回路入りD-FF



「S5KD20」 新電元 S5KD20 ファストリカバリダイオード ダブラタイプ


「D359」 メーカー不明 2SD359 NPNトランジスタ






「B631K E」 三洋 2SB631K Eランク PNPトランジスタ


「C3244」 イサハヤ電子 2SC3244 NPNトランジスタ


「A1284」 イサハヤ電子 2SA1284 PNPトランジスタ



「603」 三菱 2SC2603 NPNトランジスタ






・基板裏面


外観の一部















2024年10月26日土曜日

Dream Ware DPASS 緊急地震速報発報システム MODEL SH200-Jの分解


Dream Ware DPASS 緊急地震速報発報システム MODEL SH200-Jの分解

注意:この記事の内容を鵜呑みにし、事故や損失を招いた場合でも当方は一切の責任は負いかねます。自己責任でお願いします。


電子機器分解シリーズです。

本機は緊急地震速報の情報をネットワークを用いて受信するための装置です。

本体裏面にあるシリアルIDをサービス提供会社に知らせることで、緊急地震速報の情報を取得できます。(有料、月額約10000円?)

地震が来るまでの秒数を含めた警報を表示できます。主に法人向けの装置です。


本体には"3SOFT"と印字された上から"DPASS"シールが貼られています。
同様に"Digital Catfish"と印字された上から"Dream Ware"シールが貼られています。
3SOFTの「デジタルなまず」のOEM版ということでしょうか?




専用ACアダプタ : DEP-1208A 12V 800mA


ICの生産年は2006年台が多いです。

MCUは沖電気のML674000 ML67Q4003-INNN (ARM7/TDMI)が入っていました。



「OKI L67Q4003-INNN」  沖電気 ML67Q4003-INNN ML674000シリーズ ARM7/TDMI 32bitマイクロコントローラ BootROM:4KB, Flash:512KB, SRAM:32KB

沖電気のマイコンが使われているのは珍しいですね。
JTAGだけでなく、UART書き込みにも対応しています。
開発環境さえ手に入れば再利用できそうです。


「OKI L2216-016」 沖電気 ML2216 ADPCM2 Algorithm-Based Speech Synthesis LSI
 MaskROM品 ROM番号016
音声再生LSIです。
内部にサンプリングデータが入った8MbitのROMがあり、フレーズ番号を指定することで音声が再生されます。(最大256フレーズ)

音声データの書き換えはできないもものの、地震に関する音声(震度や秒数、効果音)が入っているので、何かしら再利用できそうですね。

フレーズ番号ごとの音声データとArduinoサンプルプログラムは、このページ一番下に示します。


「S353 90A」 ABLIC S35390A リアルタイムクロック


「Atmel ATmega168V 10AU」 Atmel ATmega168V10AU 8bit AVRマイクロコントローラ Flash:16KB, SRAM:1KB
フラッシュのAVRマイコンです。再利用できそうです。

「SAMSUNG K4S641632H-UC75」 SAMSUNG K4S641632H-UC75 4M*16bit 64Mbit SDRAM


「PROCHILD VER 1.3 CS449XJPAA」 詳細不明 無線モジュール 
周波数 : 449.7125~449.8750MHz
変調方式 : FSK


「ATMEL614 93C46」 ATEMEL AT93C46 1Kbit EEPROM
「RTL8019AS」 REALTEK RTL8019AS 10BASE-T イーサネットコントローラ


「SIPEX SP3243ECA」 SIPEX SP3243ECA RS-232トランシーバ



・基板裏面


デバッグ用にUART端子(ミニジャック3P)が用意されています。

このUART端子はAVRマイコンへ接続されています。
シルクRXDが出力(ジャック中端SH200-J→ホスト)、TXDが入力(ジャック先端SH200-J←ホスト)、ボーレートは38400bpsです。
通電中はRSSI(電波強度?)の状態の情報を吐き出します。
おそらくこの端子は無線モジュールまわりのデバッグようでしょう。


・LCD





「SK0621」 バックライトパネル印字
「221-3059-0657 S0 060521-0016」 LCD本体シール印字
「11-NE084 0619」 LCDフレキ印字

詳細不明の26pin LCDです。

回路起こしをした結果、SLG12864PというLCDの仕様に近いことがわかりました。
SLG12864PのコントローラはNT7538というものが使われています。
SLG12864P自体は28pinのLCDですが、このLCDは27pinと28pinが省かれています。


このLCDは、秋月電子などでよく販売されている12864系のものとバス制御方式が違います。
80系のバス制御に近い/RD, /WE, /CS, A0コントロールとなっています。
LCDコマンドも微妙に異なっているため、よくある12864LCDをそのまま付け替えることはできないようです。


SH200-JのLCD駆動用チャージポンプ回路をみると、3倍電圧回路(3x step-up voltage circuit)となっています。
NT7538はチャージポンプ回路次第で2, 3, 4, 5倍の任意の倍電圧回路とすることができます。
電源電圧が3.3Vの場合は3倍電圧、3.0Vの場合は4倍電圧にすると良いでしょう。

SH200-JのLCD周りの回路




SLG12864Pのピンアサイン





・ML2216-016のサンプリングリスト


ROM番号016

サンプリング番号 : 音声の内容
0 : "ぜろ"
1 : "いち"
2 : "に"
3 : "さん"
4 : "よん"
5 : "ご"
6 : "ろく"
7 : "なな"
8 : "はち"
9 : "きゅう"
10 : "じゅう"
11 : "にじゅう"
12 : "さんじゅう"
13 : "よんじゅう"
14 : "ごじゅう"
15 : "じしん"
16 : "しんどいち"
17 : "しんどに"
18 : "しんどさん"
19 : "しんどよん"
20 : "しんどごじゃく"
21 : "しんどごきょう"
22 : "しんどろくじゃく"
23 : "しんどろくきょう"
24 : "しんどなな"
25 : "びょうご"
26 : "きんきゅうじしんそくほうをかいじょします   ぼうさいききはマニュアルにしたがいふっきゅうしてください"
27 : "はいしんテストです"
28 : "れいびょうご"
29 : "いちびょうご"
30 : "にびょうご"
31 : "さんびょうご"
32 : "よんびょうご"
33 : "ごびょうご"
34 : "ろくびょうご"
35 : "ななびょうご"
36 : "はちびょうご"
37 : "きゅうびょうご"
38 : "じゅうびょうご"
39 : "にじゅうびょうご"
40 : "さんじゅうびょうご"
41 : "よんじゅうびょうご"
42 : "ごじゅうびょうご"
43 : "ちいさなゆれが"
44 : "ものがたおれるぐらいのゆれが"
45 : "いのちにかかわるほどのゆれが"
46 : "もうまもなくきます"
47 : "まもなくきます"
48 : "すぐにきます"
49 : "つなみけいほうはつれい"
50 : "おおあめけいほうはつれい"
51 : "おおゆきけいほうはつれい"
52 : "ぼうふうはろうけいほうはつれい"
53 : 効果音 1 ピ
54 : 効果音 2
55 : 効果音 3
56 : 効果音 4
57 : 効果音 5
58 : 効果音 6
59 : 効果音 7
60 : 効果音 8
61 : 効果音 9
62 : 効果音 10
63 : 効果音 11
64 : 効果音 12
65 : 効果音 13
66 : 効果音 14
67 : 効果音 15 警告音
68 : 効果音 5
69 : 効果音 10
70 : 効果音 15 警告音
71 : 効果音 16
72~255 : なし


・ArduinoでML2216再生テストプログラム


//ML2216再生 テストプログラム
//https://oykenkyu.blogspot.com/2024/10/sh200-j.html
//©oy

#include <avr/pgmspace.h> //プログラムフラッシュから文字データを読み込むのに必要

#define SERIALSPEED 38400 //UARTのボーレート38400bps@16MHz

//ピン
#define GPIO_MOSI 11 //ML2216 : 29pin
#define GPIO_CLK 13 //ML2216 : 28pin
#define GPIO_CS 10 //ML2216 : 27pin
#define GPIO_RST 9 //ML2216 : 26pin
//ML2216の25番ピンDIPHは常にLにしておく

unsigned char input_num_buf[64];//数値入力バッファ

void setup()
{
  pinMode(GPIO_CLK, OUTPUT);//CLK
  pinMode(GPIO_MOSI, OUTPUT);//MOSI
  pinMode(GPIO_CS, OUTPUT);//CS
  pinMode(GPIO_RST, OUTPUT);//RST
 
  digitalWrite(GPIO_CLK, 0);//CLK
  digitalWrite(GPIO_CS, 0);//CS
  digitalWrite(GPIO_RST, 0);//RST
  delay(500);
 
  digitalWrite(GPIO_RST, 1);//RST

  Serial.begin(SERIALSPEED);
 
}
void loop()
{
 
  long input_num = 0;
 
  Serial.print(F("ML2216 PLAY TEST\r\n"));
  Serial.print(F("\r\n"));
 
  spi_out(0b00000000);//パワーオン
 
  //再生したい番号を入力してEnter
  while (1)
  {
    Serial.print(F("PLAY.NO 0~255?\r\n"));
    input_num = serial_get_dec();//数値を入力してEnter
    Serial.print(F("\r\n"));

    spi_out(0b01100000);//音声停止
    spi_out(0b10100000 | 14);//音量 値が小さいほど大きい音量となる
   
    spi_out(0b01000000);//再生
    spi_out(input_num);//再生するサンプリング番号

    spi_out(0b10000000);//ループ再生有効
   
  }

  //1秒ごとに再生するサンプリングIDを切り替えるやつ
  /*
  for (int i = 0; i < 256; i++)
  {
    spi_out(0b01100000);//音声停止

    spi_out(0b10100000 | 14);//音量
    spi_out(0b01000000);
    spi_out(i);
    delay(1000);
  }
  */

}

//SPI出力
void spi_out(unsigned char data)
{
  delayMicroseconds(100);
  digitalWrite(GPIO_CS, 0);
  delayMicroseconds(10);
  send_data_msbf(data, 8);
  delayMicroseconds(10);
  digitalWrite(GPIO_CS, 1);
  delayMicroseconds(20);

}


//UART10進数値入力待ち
long serial_get_dec()
{
  int i;
  unsigned char inByte = 0x30;
 
  unsigned char in_pos = 0;
  unsigned long ret_num = 0;
  while ((inByte != '\n') && (inByte != '\r') && (in_pos < 128))
  {
    if (Serial.available())
    {
      inByte = Serial.read();
      Serial.write(inByte);
      if((inByte != '\n') && (inByte != '\r'))
      {
        input_num_buf[in_pos] = inByte;
        in_pos++;
      }
    }
  }
  Serial.print(F("\r\n"));
  for(i=0;i<in_pos;i++)
  {
    if((input_num_buf[i]>='0') && (input_num_buf[i]<='9'))
    {
      ret_num = (ret_num*10) + (input_num_buf[i] - '0');
    }
    else{
      ret_num = -1;
      break;
    }
   
  }
  ret_num = (ret_num < 0) ? -1 : ret_num;

  //現在までに入力されたバッファを破棄
  while (Serial.available())
  {
    Serial.read();
  }
  return ret_num;

}

//任意のビット数送信(MSB側から送信、最大32bit)
void send_data_msbf(unsigned long data, char len)
{
  len--;
  for(int i=len;i>=0;i--)
  {
    digitalWrite(GPIO_MOSI, (data>>i) & 0x00000001);
    delayMicroseconds(4);
    digitalWrite(GPIO_CLK, 1);
    delayMicroseconds(4);
    digitalWrite(GPIO_CLK, 0);

  }

}











2024年10月22日火曜日

ビット反転(ビット逆順)をできるだけ速く行うアルゴリズム



ここでは、マイコンを用いたビット反転(ビット逆順, bit reverse)をできるだけ速く行うアルゴリズム(8bit)のちょっとしたメモを残しています。
雑なメモなので、ミスがあるかも。



ビット反転(ビット逆順)は計算コストが高い処理です。

多くのマイコンにはこのビット逆順命令が無いので何かしら計算する必要があります。
なるべく高速に演算したいときはテーブル使うのが良いですが、RAMまたはプログラムメモリを浪費してしまいます。
メモリ消費を削減したい場合は愚直にビット演算するしかありません。

マイコン(もっと言うとCPU)によって、使える命令や実行するのに必要なサイクル数が違うので、どの方法が一番速いかは簡単に比較できません。





input   = hgfedcba //入力する値(h~aはビット7~ビット0に対応)
output  = abcdefgh //出力したい値

アルゴリズム例はメモ帳にコピーすると見やすくなります。



・ローテーション命令なし①

ネット上でよく見るアルゴリズムです。
8bit以外の多バイト値にも拡張しやすいです。


temp    = hgfedcba //入力 tempにinputを代入

temp1   = ____hgfe //tempを4ビット右にシフトした値をrev_iに代入
temp    = dcba____ //tempを4ビット左にシフトした値をtempに代入
temp    = dcbahgfe //tempとtemp1をビット論理和し、tempに代入

temp1   = __ba__fe //tempと0x33をビット論理積をした値をtemp1に代入
temp1   = ba__fe__ //temp1を2ビット左にシフトした値をtemp1に代入

temp2   = dc__hg__ //tempと0xCCをビット論理積をした値をtemp2に代入
temp2   = __dc__hg //temp2を2ビット右にシフトした値をtemp2に代入

temp    = badcfehg //temp1とtemp2をビット論理和したものをtempに代入

temp1   = _a_c_e_g //tempと0x55をビット論理積をした値をtemp1に代入
temp1   = a_c_e_g_ //temp1を1ビット左にシフトした値をtemp1に代入

temp2   = b_d_f_h_ //tempと0xAAをビット論理積をした値をtemp2に代入
temp2   = _b_d_f_h //temp2を1ビット右にシフトした値をtemp2に代入

output  = abcdefgh //temp1とtemp2をビット論理和したものをoutputに代入

結果      abcdefgh //outputの値

*計算コスト*
シフト回数(ローテーション命令なし) : 14
論理積の回数 : 4
論理和の回数 : 3
条件分岐の数 : 0
保持が必要なバイト数の合計 : 3


ローテーション命令(キャリーなし、8bit回転)が無いようなマイコンやC言語だけで記述する場合に良さそうです。



・ローテーション命令なし②

よくあるアルゴリズムです。

temp   = hgfedcba //inputをtempに代入

rev_i   = ____hgfe //tempを4ビット右にシフトした値をrev_iに代入
temp    = dcba____ //tempを4ビット左にシフトした値をtempに代入
rev_i   = dcbahgfe //tempとrev_iをビット論理和し、rev_iに代入

temp    = _dcbahgf //rev_iを1ビット右にシフトした値をtempに代入
output  = __c___g_ //tempと0x22をビット論理積し、outputに代入
temp    = ___dcbah //tempを2ビット右にシフトした値をtempに代入
output |= ___d___h //tempと0x11をビット論理積し、outputと論理和を行い、outputに代入
temp    = cbahgfe_ //rev_iを1ビット左にシフトした値をtempに代入
output |= _b___f__ //tempと0x44をビット論理積し、outputと論理和を行い、outputに代入
temp    = ahgfe___ //tempを2ビット左にシフトした値をtempに代入
output |= a___e___ //tempと0x88をビット論理積し、outputと論理和を行い、outputに代入

結果      abcdefgh //outputの値

*計算コスト*
シフト回数(ローテーション命令なし) : 14
論理積の回数 : 4
論理和の回数 : 4
条件分岐の数 : 0
保持が必要なバイト数の合計 : 3

①とほぼ同じです。
違いは7~4bitと3~0bitのスワップ以降の手順です。
論理和の演算回数が①より一回多いですが、トータルの計算速度で見るとどちらが速いかわかりません。

ローテーション命令(キャリーなし、8bit回転)が無いようなマイコンやC言語だけで記述する場合に良さそうです。


・ローテーション命令あり(キャリーなし、8bit回転)


temp   = hgfedcba //inputをtempに代入

temp    = gfedcbah //inputを1ビット左にローテーションした値をtempに代入
output  = ___d___h //tempと0x11をビット論理積をした値をoutputに代入
temp    = edcbahgf //tempを2ビット左にローテーションした値をtempに代入
output |= __c___g_ //tempと0x22をビット論理積し、outputと論理和を行い、outputに代入
temp    = ahgfedcb //inputを1ビット右にローテーションした値をtempに代入
output |= a___e___ //tempと0x88をビット論理積し、outputと論理和を行い、outputに代入
temp    = cbahgfed //tempを2ビット右にローテーションした値をtempに代入
output |= _b___f__ //tempと0x44をビット論理積し、outputと論理和を行い、outputに代入

結果      abcdefgh //outputの値

*計算コスト*
ローテーション回数(キャリーなし、8bit回転) : 6
論理積の回数 : 4
論理和の回数 : 3
条件分岐の数 : 0
保持が必要なバイト数の合計 : 3

ローテーション命令(キャリーなし、8bit回転)がある場合(Z80など)に良さそうです。
使用するレジスタも少なくそれなりに高速です。
シフト命令のみの時より速そうですね。






2024年10月19日土曜日

OMRON UPS POWLI BX35XFV の分解

 
OMRON UPS POWLI BX35XFV の分解

注意:この記事の内容を鵜呑みにし、事故や損失を招いた場合でも当方は一切の責任は負いかねます。自己責任でお願いします。


電子機器分解シリーズです。

本機は停電時などの短期間の電源喪失を防ぐ装置です。
停電していない時は、本体内部にある鉛蓄電池に充電しておき、停電時には12Vを昇圧して出力します。
この機種は安価なモデルのため、停電時の出力波形は正弦波ではありません。
また、常時インバータ方式ではないため、停電時のバックアップ切り替え時には一瞬だけラグがあります。
PCなどの電源バックアップでは特に問題は起こらないでしょう。




少し気になったのが、基板上にコモンモードノイズフィルタが無いことでしょうか。
電源入力部分の配線がフェライトコアにコモンモードで4ターンほど巻かれているので、さほど問題ないのかもしれません。

電解コンデンサはすべてJAMICONが使われています。少し不安ですね。
OMRONといえば高信頼の製品を作っているイメージですが、このUPSはOEM品なのでしょうか。


興味深いのが、シリアルポートまわりの電源の取り方でしょうか。
本来ここはメイン側と絶縁すべき部分ですが、このUPSの場合絶縁されていません。
ただし、メイン側の電源をそのままシリアルポート周りの回路と直結というわけではなく、間にリレー使った何かしらの回路を挟んでいます。
不思議なことにリレーのコイルの一端がメイン側、もう一端がシリアルポート周りの回路へ接続されています。この間の配線パターンは絶縁を意識したギャップが設けられています。
このリレーの接点Cと接点Bはシリアルポート周りの回路へ接続、接点Aはメイン側へ接続されています。

また、シリアルポート周りの回路にはタイマーICの555が使われています。

詳しく調べていませんが、シリアルポートへ流れるコモン電流がある一定以上になると、シリアルポート周りとメイン側の電源を切り離す仕組みなのでしょうか。面白いことを考えますね。

メイン制御用マイコンは、NECのμPD78F9116A (78K/0S)が入っていました。



「SG5325A」 ST SG5325A PWMコントローラ
昇圧トランス駆動用のMOFFET用PWMコントローラです。

「UC3843B」 ST UC3843B PWMコントローラ
バッテリ充電用兼メインボード電源用のスイッチングコントローラです。


「76139P N3 18」 Fairchild HUF76139P ID:75A VDSS:30V RDS:0.0075Ω NchMOSFET
昇圧トランス駆動用のMOFFETです。

2つ使用してプッシュプル駆動しています。
トランスの偏磁をどのように防止しているか少し気になりますね。



昇圧用トランスです。



「IRF640N」 IR IRF640N ID:18A VDSS:200V RDS:0.15Ω NchMOSFET
4つ使用してフルブリッジにしています。
トランスで昇圧後、このMOSFETをフルブリッジ駆動させてバックアップ用電源の矩形波を作っています。





バッテリ充電用兼メインボード電源用トランス


「K2608」 東芝 2SK2608 ID:3A VDSS:900V RDS:3.73Ω NchMOSFET
バッテリ充電用兼メインボード電源用トランスを駆動するためのMOSFETです。


←シリアルポート側
メイン側→

「TLC555CP」 TI TLC555CP タイマーIC 


シリアルポート側とメイン側の間のリレーの裏





・基板裏面


「14081B」  ONsemi 4000シリーズCMOSロジック 4回路入りAND


「78F9116A」 NEC μPD78F9116A 78K/0Sシリーズマイクロコントローラ
Flash : 16KB , RAM : 256B
フラッシュタイプのマイコンです。再利用できそうです。