アーカイブ: ブログ

アンリツ PULSE GENERATOR MG418Aを入手しました。

アンリツ PULSE GENERATOR MG418A

 

アナログ式の古~いパルスジェネレータで、ジャンク扱いで入手したものですが、しっかり動作します。

以前に苦労したRISE Timeも当たり前に5nS以下で、急峻なわりに綺麗な波形を発生できます。

若干、自励発振周波数はスペックに達しない感じですが、しっかりした波形を出してくれますので、オシロスコープの校正などにも使えます。ただ、残念ながらアナログ式で正確な発振周波数を設定するのは難しく、どうしても若干の揺らぎがあります。

そこで、外部トリガーモードで動作させて、デジタル生成したベースクロックを入力するようにしました。

Si5351Aを利用して、パルスジェネレータを作成

目標は、1kHz~220MHzのパルスジェネレータでしたが、最終的に1.5k~200MHzのパルスジェネレータとなりました。

まぁ、これでもメーカ保障スペックを大幅に拡張できたので、良しとします。

内心は、どこかのサイト(ストロベリーリナックスでした)で1kHzで発振した記事があり、方法がわかれば、1kHzは実現したいと思いはあります。

Si5351Aクロックジェネレータで、パルスジェネレータの作成

 

Si5351Aクロックジェネレータで、シールドボード使いパルスジェネレータの作成

ハードウェア編

主なパーツは以下となります。

HiLetgo 1602 LCD キーパッド シールド ボード ブルー バックライトを付き Arduinoに対応 Duemilanoveロボット [並行輸入品]

新品価格
¥680から
(2018/10/23 20:48時点)

WINGONEER Arduino UNO R3シールドボードDIY用プロトタイプPCB

新品価格
¥599から
(2018/10/23 20:44時点)

HiLetgo Si5351Aクロックジェネレータブレークアウトボード8KHz~160MHz I2Cコントローラクロックジェネレータ

新品価格
¥1,000から
(2018/10/23 20:46時点)

keyestudio UNO R3 開発ボード USBケーブル UNO R3 Arduino互換

新品価格
¥1,100から
(2018/10/23 20:50時点)

Superbat SMAメスコネクタ SMAジャック PCB実装型 基板部品 信号増幅器・LNAボードモジュール・アンプ対応 自作 5個入

新品価格
¥880から
(2018/10/23 20:51時点)

カモン SMA(オス)←→BNC(メス)変換アダプタ【BNC-SMA】

新品価格
¥210から
(2018/10/23 20:52時点)

はじめて、まとも?に作成したArduino利用のToolとなります。

ソフトウェア編

プログラム作成は、Arduino 1.8.5で作成しました。便利すぎて癖になりそう。

さて、

今一つ、温度で水晶発振器の周波数が変動する為、期待したほど精度が得られず、簡単なHeaterの設置を考えましたが、Arduinoからの電源駆動を考えるとあまり消費電力を増やしたくないので、以下の機能をプログラムで実現することで凡そ目的を果たすものに仕上げました。

  • 水晶発振器の元々の誤差を補正できる機能
  • 水晶発振器の温度を測定(温度センサーLM61CIZを追加)して、発振周波数を補正する機能
  • こまかい周波数設定ができる機能

プログラムの中身は、私はプログラマーでないのでかなり拙い力ずくとなっています。

/**************************************************************************/
//v.0.1 10.10.2018 Frequency generator 1.5k...200MHz . JrDrg
//v.0.1c 10.14.2018 + OSC calibration
//v.0.2c 10.15.2018 PLL clock Improvement + new Algorithm
//v.0.3 10.16.2018 ch2 10MHz fix
/**************************************************************************/

 


#include <Wire.h>
#include <Adafruit_SI5351.h>
#include <LiquidCrystal.h>

 

Adafruit_SI5351 clockgen = Adafruit_SI5351();

 

/* Key setup */
int lcd_key = 0;
int adc_key_in = 0;
int adc_key_in2 = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5

 

int read_LCD_buttons()
{
// take measures to chattering
adc_key_in = analogRead(0);
delay(40);
adc_key_in2 = analogRead(0);
if (abs(adc_key_in - adc_key_in2) > 2) return btnNONE;
// For V1.1 us this threshold
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
// For V1.1 us this threshold
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 350) return btnDOWN;
if (adc_key_in < 550) return btnLEFT;
if (adc_key_in < 850) return btnSELECT;
return btnNONE;
}

 

//◆ Siral Debug 0:off 1:on 1<:manual check
byte debug = 0;

 

//◆ Normal: oscT=0
float oscT = 1524.1 ; //Tweak base OSC frequency e.f.1479.7,1475.8 1484.3
int oscT_temp = 29.12; // ↑temperature
int32_t osc = 25000000; //base OSC frequency
float C_by_T =-10.5; // ΔOSC/temperature

 

//◆Ref Volt
float Vref = 4.88;   //Power Voltage 5.0V/AC Adapter

 

//◆ Initial Output Clock Freq
volatile int32_t outF = 25000000 ;// initial frequency in Hz
float outF2 = 10000000-0.0 ;//ch2: Fix frequency in Hz
uint32_t stpx = 10; //initi step size 10Hz

 

float oscf;
int SI5351_m;
int SI5351_Fm;
uint32_t SI5351_n;
uint32_t SI5351_d;
uint32_t SI5351_div;
uint32_t SI5351_mn;
uint32_t SI5351_md;
uint32_t SI5351_R_DIV; // 1,2,4,8,16,31,64,128
boolean changed_f = 1;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

 

int SI5351_m2;
uint32_t SI5351_n2;
uint32_t SI5351_d2;
uint32_t SI5351_div2;
uint32_t SI5351_mn2;
uint32_t SI5351_md2;

 

// Temp Cal init
int anlg1;
float temp;
float temp_cal;
float temp_cal_bk;
float oscf_bk;

 

/**************************************/
/* Calc Pram & Displays the frequency */
/**************************************/
void count_frequency()
{

 

if(debug) Serial.println("===== in ====== ");

 

uint32_t f;
uint32_t calF;

calF = outF;

 

SI5351_R_DIV = 1;
if ((outF < 1120000) && (9000 <= outF)){
if (outF <=35000){
SI5351_R_DIV = 128;
}else{
SI5351_R_DIV = 32;
}
calF=calF*SI5351_R_DIV;
}

 

f = calF;
SI5351_mn = 0;
SI5351_md = 1;

if (150000000 < calF) {
SI5351_d = 1048575;
SI5351_div = 6;
f=SI5351_div * f;
SI5351_m = f/oscf;
SI5351_n = (f % osc)/(oscf/SI5351_d);
}
if ((90000000 <= calF) && (calF<= 150000000)){
SI5351_d = 1048575;
SI5351_div = 6;
f=SI5351_div * f;
SI5351_m = f/oscf;
SI5351_n = (f % osc)/(oscf/SI5351_d);
}
if ((45000000 <= calF) && (calF< 90000000)){
SI5351_d = 1048575;
SI5351_div = 10;
f=SI5351_div * f;
SI5351_m = f/oscf;
SI5351_n = (f % osc)/(oscf/SI5351_d);
}
if ((36000001 < calF) && (calF< 45000000)){
SI5351_d = 1048575;
SI5351_div = 20;
f=SI5351_div * f;
SI5351_m = f/oscf;
SI5351_n = (f % osc)/(oscf/SI5351_d);
}
if ((18000000 <= calF) && (calF<= 36000001)){
if ((calF == 25000000) && (oscT == 0)){
SI5351_m = 32;
SI5351_n = 0;
SI5351_d = 1;
SI5351_div = 32;
SI5351_mn = 0;
SI5351_md = 1;
}else{
SI5351_d = 1000000;
SI5351_div = 25;
f=SI5351_div * f;
SI5351_m = f/oscf;
SI5351_n = (f % osc)/(oscf/SI5351_d);
}
}
if ((9000000 <= calF) && (calF< 18000000)){
SI5351_d = 500000;
SI5351_div = 50;
f=SI5351_div * f;
SI5351_m = f/oscf;
SI5351_n = (f % osc)/(oscf/SI5351_d);
}
if ((4500000 <= calF) && (calF< 9000000)){
SI5351_d = 250000;
SI5351_div = 100;
f=SI5351_div * f;
SI5351_m = f/oscf;
SI5351_n = (f % osc)/(oscf/SI5351_d);
}
if ((2250000 <= calF) && (calF< 4500000)){
SI5351_d = 125000;
SI5351_div = 200;
f=SI5351_div * f;
SI5351_m = f/oscf;
SI5351_n = (f % osc)/(oscf/SI5351_d);
}
if ((1120000 <= calF) && (calF< 2250000)){
SI5351_d = 62500;
SI5351_div = 400;
f=SI5351_div * f;
SI5351_m = f/oscf;
SI5351_n = (f % osc)/(oscf/SI5351_d);
}
if ((1500<=calF) && (calF < 9000)){
SI5351_R_DIV = 64;
if (calF < 3000) SI5351_R_DIV = 128;
f = calF*SI5351_R_DIV;
SI5351_mn = 1100;
SI5351_d = 1048575;
SI5351_div = 900;
f=(SI5351_div + SI5351_mn) * f;
SI5351_m = f/oscf;
SI5351_n = (f % osc)/(oscf/SI5351_d);
}
if (calF < 1500){
SI5351_R_DIV = 128;
f = calF*SI5351_R_DIV;
SI5351_mn = 1150;
SI5351_md = 1;
SI5351_d = 1048575;
SI5351_div = 900;
f=(SI5351_div + SI5351_mn) * f;
SI5351_m = f/oscf;
SI5351_n = (f % osc)/(oscf/SI5351_d);
}

 

// ch2 10MHz
SI5351_d2 = 500000;
SI5351_div2 = 50;
f=SI5351_div2 * outF2;
SI5351_m2 = f/oscf;
SI5351_n2 = (f % osc)/(oscf/SI5351_d2);
SI5351_mn2 = 0;
SI5351_md2 = 1;

 


if(debug){
Serial.println(" 10M fix :");
Serial.print("SI5351_m2: ");
Serial.println(SI5351_m2);
Serial.print("SI5351_n2: ");
Serial.println(SI5351_n2);
Serial.print(" f: ");
Serial.println(f);
Serial.println("");
}

 

/**************************************/
/* Displays the frequency */
/**************************************/
lcd.clear();
lcd.setCursor(2,0);

char msg[17];
char s[17];
sprintf(msg, "%s [Hz]", dtostrf(outF, 9, 0, s));
lcd.print(msg);

 

display_stpx();
}

 

/**************************************/
/* Display the frequency change step */
/**************************************/
void display_stpx()
{
lcd.setCursor(0, 1);
lcd.print("Stp:");
switch (stpx)
{
case 10:
lcd.print(" 10");
break;
case 100:
lcd.print(" 100");
break;
case 1000:
lcd.print(" 1k");
break;
case 10000:
lcd.print(" 10k");
break;
case 100000:
lcd.print("100k");
break;
case 1000000:
lcd.print(" 1M");
break;
case 10000000:
lcd.print(" 10M");
break;
}
lcd.print("Hz ");

}

void setup(void)
{
if(debug){
Serial.begin(115200);
Serial.println("******************");
Serial.println("* 1.5k-200MHz PG *");
Serial.print("* Debug mode :");
Serial.print(debug);
Serial.println(" *");
Serial.println("******************");
Serial.println("");
}

oscf = osc + oscT;
osc = oscf;

oscf_bk=oscf;

lcd.begin(16, 2);
Wire.begin();

// Startting Tittle
lcd.setCursor(0,0);
lcd.print(" 1.5k-200MHz PG");
lcd.setCursor(0,1);
lcd.print(" 10.2018 JrDrg");

/* Initialise the sensor */
if (clockgen.begin() != ERROR_NONE)
{
lcd.setCursor(0,1);
lcd.print(" clockgen error");

while(1);
}

/* Enable the clocks */
clockgen.enableOutputs(true);

// temp calibration
anlg1 = analogRead(1) ;
delay(3000); //3seconds
anlg1 = 0;
for (int i=1; i <=100;i++){
anlg1 =anlg1 + analogRead(1) ;
delay(5);
}
anlg1 = anlg1/100 ;
temp = ((Vref * anlg1)/1024)*100-60 ;
temp_cal = (temp-oscT_temp) * C_by_T ;
temp_cal_bk = temp_cal;
oscf = oscf_bk + temp_cal;
osc = oscf;
}

void loop(void)
{

/**************************************/
/* Change the frequency */
/* btnUP Increment */
/* btnDOWN Decrement */
/* btnRIGHT Increment Tweak */
/* btnLEFT Decrement Tweak */
/**************************************/

lcd_key = read_LCD_buttons(); // read the buttons

switch (lcd_key) // depending on which button was pushed, we perform an action
{
case btnUP:
{
outF += stpx;
changed_f = 1;
break;
}
case btnDOWN:
{
outF -= stpx;
changed_f = 1;
break;
}
case btnRIGHT:
{
if (abs(temp_cal-temp_cal_bk)<20) outF += 1; else{ delay(2000); }
changed_f = 1;
break;
}
case btnLEFT:
{
if (abs(temp_cal-temp_cal_bk)<20) outF -= 1; else{ delay(2000); }
changed_f = 1;
break;
}
}

// btnSELECT frequency step Renge

if (lcd_key == btnSELECT)
{
switch (stpx)
{
case 10:
stpx = 100;
break;
case 100:
stpx = 1000;
break;
case 1000:
stpx = 10000;
break;
case 10000:
stpx = 100000;
break;
case 100000:
stpx = 1000000;
break;
case 1000000:
stpx = 10000000;
break;
case 10000000:
stpx = 10;
break;
}
display_stpx();
}

if(changed_f && !(debug > 1))
{
// check over renge
if(outF > 205000000)
outF =1470;
if(outF < 1470)
outF = 205000000;
if (outF < 0)
outF = 205000000;

//◆ Calc SI5351 setup param
count_frequency();

//◆ Disable the clocks
clockgen.enableOutputs(false);

// ◆Set up the PLL with 'fractional mode'
// This sets PLL_A or PLL_B to be 25MHz * (m + n/d)
// m (the integer multipler) can range from 15 to 90
// n (the numerator) can range from 0 to 1,048,575
// d (the denominator) can range from 1 to 1,048,575
// clockgen.setupPLLInt(SI5351_PLL_A, SI5351_m);
clockgen.setupPLL(SI5351_PLL_A, SI5351_m, SI5351_n, SI5351_d);
clockgen.setupPLL(SI5351_PLL_B, SI5351_m2, SI5351_n2, SI5351_d2);


// ◆Set up the clock divider
// For the output use 0, 1 or 2
// For the PLL input, use either SI5351_PLL_A or SI5351_PLL_B
// The final frequency is equal to the PLL / (div + n/d)
// div can range from 4 to 900
// n can range from 0 to 1,048,575
// d can range from 1 to 1,048,575
// clockgen.setupMultisynthInt(0, SI5351_PLL_A, SI5351_MULTISYNTH_DIV_4);
clockgen.setupMultisynth(0, SI5351_PLL_A, SI5351_div, SI5351_mn, SI5351_md);
clockgen.setupMultisynth(2, SI5351_PLL_B, SI5351_div2, SI5351_mn2, SI5351_md2);


// ◆Additional R Divider
// output is the clock output #
// The R divider can be any of the following:
// SI5351_R_DIV_1
// SI5351_R_DIV_2
// SI5351_R_DIV_4
// SI5351_R_DIV_8
// SI5351_R_DIV_16
// SI5351_R_DIV_32
// SI5351_R_DIV_64
// SI5351_R_DIV_128

clockgen.setupRdiv(2, SI5351_R_DIV_1);

switch (SI5351_R_DIV)
{
case 1:
clockgen.setupRdiv(0, SI5351_R_DIV_1);
break;
case 2:
clockgen.setupRdiv(0, SI5351_R_DIV_2);
break;
case 4:
clockgen.setupRdiv(0, SI5351_R_DIV_4);
break;
case 8:
clockgen.setupRdiv(0, SI5351_R_DIV_8);
break;
case 16:
clockgen.setupRdiv(0, SI5351_R_DIV_16);
break;
case 32:
clockgen.setupRdiv(0, SI5351_R_DIV_32);
break;
case 64:
clockgen.setupRdiv(0, SI5351_R_DIV_64);
break;
case 128:
clockgen.setupRdiv(0, SI5351_R_DIV_128);
break;
}

//◆ Enable the clocks
clockgen.enableOutputs(true);

changed_f = 0;
temp_cal_bk = temp_cal;

if(debug){
Serial.print(" outF ");
Serial.println( outF);
Serial.print(" SI5351_m ");
Serial.println( SI5351_m);
Serial.print(" SI5351_n ");
Serial.println( SI5351_n);
Serial.print(" SI5351_d ");
Serial.println(SI5351_d);
Serial.print(" SI5351_div ");
Serial.println(SI5351_div);
Serial.print(" SI5351_mn ");
Serial.println(SI5351_mn);
Serial.print(" SI5351_md ");
Serial.println(SI5351_md);
Serial.print(" SI5351_R_DIV ");
Serial.println(SI5351_R_DIV);
Serial.println("================ ");
}

}
//loop delay 300mseconds
delay(250);

// display temp
anlg1 = analogRead(1) ;
anlg1= 0;
for (int i=1; i <=100;i++){
anlg1=anlg1 + analogRead(1) ;
delay(5);
}
anlg1 = anlg1/100;
temp = ((Vref * anlg1)/1024)*100-60 ;

if (abs(temp_cal-temp_cal_bk)>20){
lcd.setCursor(11, 1);
lcd.print(" ");
delay(80);
}
char msgT[4];
char sT[4];
sprintf(msgT, "%s0", dtostrf(temp, 2, 2, sT));
lcd.setCursor(11, 1);
lcd.print(msgT);

// Tweak base OSC frequency by temp.
temp_cal = (temp-oscT_temp) * C_by_T ;
oscf = oscf_bk + temp_cal;
osc = oscf;

if(debug){
Serial.print(temp);
Serial.print(" ℃ ");
Serial.println(oscf);
}

}

// END

 

完成して動作確認中。

SI5351 Frequency generator 1.5k...200MHz

プログラムについて

ソースの最初の方に以下の設定箇所がありますので、使用個体に応じて設定が必要になります。

気長に丁寧に調整することで、±10×10-6以下の精度に設定できると思います。

oscT:水晶発振器の誤差(購入品は60ppm程度でした)

oscT_temp:上記の確認温度

osc:水晶発振器の規定周波数(通常は25000000)

C_by_T:温度勾配 周波数ずれ/℃(購入品は簡単な実測で-10.5Hz/℃、厳密には完全な線形でないはずですが、ここでは線形として処理)

Vref:リファレンス電圧。通常はArduinoの電圧※

 

その他、使用した「LCD キーパッド シールド ボード」スイッチがチャタリング誤動作がひどく複数回読みと電圧偏移で判断するように細工しています。

調整のコツは、

  1. まずは、基準となる周波数カウンター(できれば、0.1Hzまで計測できるもの)を用意して、25MHzの周波数が測れるようにする。
  2. [debug=1]にしてシリアル表示を有効にする。
  3. [oscT=0]にする。
  4. 起動して、シリアルコンソールに表示される温度が一定になるのを待つ。その温度を[oscT_temp]に設定して、再度起動。
  5. その時の周波数カウンターの値と25MHzとの差分を[oscT]に設定する。
  6. 再起動して、周波数を確認。目的の精度になるまで、[oscT]を微調整。なかなかぴったりとはならないので妥協が必要かも(-_-;)

注意:温度が変わると設定のやり直しなので、十分温度が安定してから作業する。

※内部の基準電源1.1Vを利用することで自動設定も可能と思いますが、現状は定数で設定しています。

操作方法と表示について

操作キーは、

Enter:周波数切替サイズ 10Hz/100Hz/1kHz/10kHz/100kHz/1MHz/10MHz

Right : 通常時+1、温度測定で20Hz以上周波数ずれが予想される場合は、補正周波数設定

Left : 通常時-1、同上

UP:周波数up

Down:周波数down

Si5351Aを利用したパルスジェネレータの表示

表示は、見ての通り、1行目は周波数、2行目は、周波数切替サイズとオシレータの温度

オシレータの温度表示は、周波数ずれが20Hz以上予想される場合は点滅

最後に

ICへの設定値が仕様を逸脱している部分が多々ありますが、現状は動作に支障はないようなので良しとしています。暇になったら厳密に仕様の範囲で動かせることも検討できればと思っています。

十分使えるものにできたと思いますが、連続的に周波数を変更できない(周波数変更の瞬間に乱れるので、一度発振を停止して設定後再発振するようにしています。)ので、折角温度補正機能を付けたのですが、リニアには適用できません。周波数を変更などすると補正された周波数が適用されます。

スイープ発振を実現された事例もあるようなので、そのようにSI5351を設定することで、温度補正をリニアに適用することも可能になるかもしれません。

補正データもプログラム上の定数になっているので、個体によってプログラムの変更になってしまいます。プログラムに初期設定機能を追加して、プログラム上から校正ができるとより汎用的になろうかと思います。折角AVRにはEEPROMなどが搭載されていますから….

その他、温度測定結果がばらついてしまいます。温度センサーの電源の取り回し、Arduino周りのノイズ対策(測定時はCPUをスリープさせるとか)などハード的プログラム的にも修正の余地はあると思います。現状は高速性を要求しないプログラムなので、多数回読込み平均でバラツキを平均化して真値に近い値を確認するようにしています。

IWATSU 岩通 ユニバーサルカウンタ SC-7203 を入手

1.3GHzまで測定できるアマチュアが使用するには十分な周波数カウンターです。

「悪い状態ではないが、正しく動作するものかどうか不明」という商品でしたが、出品写真から明らかに故障品でした。

デジタル表示が正常にされていません。

表示機能そのものの故障の可能性もありますが、おそらく、初期リセットが正常に走らない状態と推測した上で、入手しました。

IWATSU 岩通通信機 SC-7203 universal counterの開腹

電源を入れるたびに表示が変わり、岩通のカウンターの見慣れたLEDの表示(全点灯から数字が表示される)がされません。やはりリセットが走っていません。

リセット回路(電源電圧監視IC TL7700)はバックアップ電池(NiCd)の近くにあるので液漏れで悲惨な状態も想定して、開腹してみました。

IWATSU 岩通 ユニバーサルカウンタ SC-7203 中身 TL7700交換後

写真は、TL7700交換後ですが、部品面は綺麗で、TL7700の足が黒ずんでいる程度でしたが、基板裏側には、腐食跡とNiCd電池を交換した形跡がありました。

リセットIC(電源電圧監視IC) TL7700をM51957Bに交換

TL7700は現役のICなので入手も可能ですが、手元にM51957B 電圧検出システムリセットICがありましたので、これに乗せ換えることにしました。

検出電圧やPin配置が異なりますが、機能ピンは同じですし、SOPですのでDIP変換に変換基板を使用しますので、変換基板上でPin配置を変更しました。NCを利用して、パターンカットは1か所だけで、あとはすず線で取り付けピン兼用で配線しました。(詳細は写真を参考にしてください。)

TL7700を電圧検出システムリセットIC M51957BFPCFORに交換

検出電圧が変わりましたので、抵抗値も変更します。(写真右したので亀の子 抵抗(^-^;)

無事起動するようになったところで、周波数表示の校正しましたが、規定時間の電源起動後1時間を過ぎても周波数表示が安定しません。

内部の基準クロック10MHzの温度補償がまともに働かなくなっているようです。

SC-7203をSC-7204相当にアップグレードする

SC-7203には高精度基準クロック搭載モデル SC-7204があります。

筐体は兼用ですし、基板自体も共用でパターンは存在しています。

パターン確認中に気が付いたのですが、TCXO(TC314A)への電源供給が、TC314Aの横にあるR196経由で供給されています。これカーボン抵抗でしょうから、温度によって値が変動します。ということは、「温度によってTCXOへ供給される電圧が変わる=周波数が変わる」となります。なぜかわざわざ電源パターンをカットしてまでこの接続に変更されています。確認はしていませんが、この引き回しを変更するだけで改善が期待できそうに思われます。

実際に

TCXO(TC314A)を簡易的に熱遮断

簡易的にTCXOを熱遮断してみましたが、周波数の変動傾向は変わりませんでしたので、変動要因は横のカーボン抵抗がかなり疑わしいと思います。

今回は、SC-7204相当まで性能を引き上げる為に手持ちのOCXO(OFC MC852X4-004W)を載せました。

TC314Aの上にあるコネクターパターンに接続します。R196経由でTCXOにつながる電源ラインがコネクターパターンにあるので、これをGNDに落とせば、TCXOは実装のままで行けるかと思いましたが、このラインはパワーオンスタンバイの機能があるようで、GNDに落とすと起動しません。なので、TCXOは仕方なく取り外しました。(何か使い道あるかなぁ?….一度単体で温度補償の確認をしてみようか….)

このコネクタへは、上の写真の左から、「AC・AC・NC(GND)・CLK・STB?(R196に接続)・GND」となっており、OCXOの電源はACを整流安定化(DC 12V程度)して使用することになります。OCXOは温度が安定するまで電流が流れますので電圧安定化回路(三端子電源)のヒートシンクが少々心もとないですが、とりあえず我慢してもらう事します。(実装スペースも厳しいし、適当なヒートシンクが手持ちにない為)

ちなみに

  • 筐体の内側はEMI対策で導電性塗料が吹き付けられていますので、ショートさせないように注意が必要。
  • 起動を遅らせたい場合はSTBをGNDレベルに落とすと起動しません。

さて、こまかい事はパスして….(^-^;

 

TCXO(TC314A)をOCXOに変更

こんな感じになりました。(線長に余裕がなく少々ぶちゃいく。ACラインはツイストにしてNC/GNDでしっかりシールドして、もう少し引き回しに余裕を持たす方が良いでしょう。長期を考えると配線にストレスは故障の要因になりますから)

SC-7204相当にアップグレードしたIWATSU SC-7203 UNIVERSAL COUNTER

しっかり、GPSで校正して、下1桁±2以下となりました。電源起動後約15分でほぼ安定状態に入りその後の変動は見られません。流石!!OCXO

修理したHP 54600A オシロスコープのセルフ校正

H5460xxにはセルフ校正機能があり、比較的簡単に校正できます。

但し、内蔵セルフ・テストの実行で、DACの出力レベルのチェックで問題がないことが、大前提となります。

もし、DACのセルフチェックで問題がある場合は、ほぼ修理は不可と思いますし、リアにあるDAC出力を使用するので自己校正はできません。

まぁ、気休めに各電圧をチェックして、5.1V電圧を調整してみるくらいですが、調整できる程度なら、ほぼDAC回路とは関係ないでしょう。

自己校正に必要な機材について

BNC同軸ケーブル 1本

BNC同軸ケーブル 2本

23cm程度で同じ長さの物が必要です。

実際には、特性が同じで長さは50cmとかでも大丈夫なようですので、最初の1本と共用できます。

BNC T型アダプタ m-f-f 3個

BNC 50Ω 終端

パルス発生器

100kHz,1Vp-p,Risetime<5nS

実際には、周波数や電圧は画面表示のようにシビアでないの通常の簡易的なパルスジェネレーターでも問題ないと思いますが、問題は立ち上がり時間が5nS以下という条件です。これは、結構高価な機器でも限られるスペックと思われます。(普通は、せいぜい15nS~)

HEWLETT PACKARD 54600A OSCILLOSCOPE  自己校正に必要な機材

H5460xx、自己校正の為のパルスジェネレータを作成

ということで、自己校正用の立ち上がりが5nS以下と急峻な矩形波発振器を作成します。

いろいろ実験した結果、以下の回路図になりました。

LM7171とLMC555を使ったRisetime<5nSの矩形波発生器LMC555の出力のプルアップ抵抗を小さくするほど、立ち上がり時間は短くなります。

また、LM7171の出力の可変容量コンデンサを調整することで、オーバーシュートを発生させて立ち上がり時間を短くできます。

この回路は検討段階の作成経過の影響でLMC555を負電圧で動作させていますが、VDD/VEEが5V以下で丁度良い出力電圧がえられるので、正負電源で動作させることで、カップリングコンデンサを排除して、LM7171の入力抵抗も削除することでより急峻な波形を得られる可能性があります。試していませんが(-_-;)

H5460xxには自己校正の為の自作パルスジェネレータ

H54601Aの自己校正用の自作パルスジェネレータの立ち上がり波形

電源電圧がVDD=5V、VEE=-5Vで目的の波形を得ることができました。

LMC555は、電源電圧により、周波数が変わってしまいますが、今回は周波数はシビアではないので問題ないでしょう。

但し、変動は良くないと思いますので、暖機運転後の使用となります。電源ON直後は、周波数の変動があります。

H54601Aの自己校正に使った自作パルスジェネレータ

最終的には、LMC555でクロック発生回路を内蔵しましたが、LM7171に外部クロックを通すことでも校正用の急峻な立ち上がり波形を得ることもできます。上記は、その時の写真です。

 

立ち上がり時間の短い波形を作れてより汎用的なものとして、Si5351Aを使ったクロックモジュールを使う方法もあります。

ArduinoなどI2Cを持ったマイコンボードと接続することで任意の周波数を得ることができます。

HiLetgo Si5351Aクロックジェネレータブレークアウトボード8KHz~160MHz I2Cコントローラクロックジェネレータ

新品価格
¥1,000から
(2018/10/5 09:55時点)

 

駆動電圧を変えれるようにすることで、1nSという急峻な波形をその特徴を生かしたままで、出力インピーダンス50Ω&必要な電圧レベルが得られます。(スペック的には….気が向いたら確認したいと思います。)

Superbat SMAメスコネクタ SMAジャック PCB実装型 基板部品 信号増幅器・LNAボードモジュール・アンプ対応 自作 5個入

新品価格
¥880から
(2018/10/5 10:14時点)

 

Superbat 2本入 SMAオス⇔BNCメス 変換ケーブル(RG316 15CM)SMAP-BNCJ ハンディ機用 無線機CB・アマチュア無線など用 トランシーバー用 低損失

新品価格
¥920から
(2018/10/5 10:17時点)

これらを使うことで、オシロスコープとの接続も容易に実現できます。

HiLetgo・ 3個セット Mini USB Nano V3.0 ATmega328P CH340G 5V 16M マイクロコントローラーボード Arduinoと互換

新品価格
¥1,350から
(2018/10/5 11:30時点)

Arduino上で簡単なUSB-I2C変換プログラムを用意して、設定はPC経由で行うことで、比較的容易に目的のパルスジェネレータができると思います。

さらには、ArduinoのPWM出力を使って、Si5351Aを使ったクロックモジュールに供給する電圧をコントロールすることで、出力電圧の可変化など、後々も遊べそうです。

無事、HEWLETT PACKARD 54600A  のセルフ校正 完了!

HP 54600A 自己校正マニュアル その1

HP 54600A 自己校正マニュアル その2

NvRAMの電池消耗で校正値を失ったHP54600Aですが、無事に自己校正が出来ました。

自己校正の肝となるDAC出力も正確な値でしたし、リードアウトの数値も周波数カウンター、デジタルマルチメーターなどの値と差異はないようなので、安心して我が家の主力測定器として使用できます。

バンザーイ!

HEWLETT PACKARD 54600A OSCILLOSCOPE  100MHz 2 CHANEL 故障品を入手

このオシロスコープは、サンプル周波数は低い(20MSa/s)ですが、れっきとしたデジタルオシロスコープです。

小型軽量で、繰り返し波形については従来のアナログオシロスコープとほぼ同じ取扱いができる扱いやすい秀逸の測定器です。

入手したのは、

54600A Setup memories failed checksum test - defaults loaded

「Setup memories failed checksum test – defaults loaded」を表示して動作しない物です。画面も明らかに上下潰れています。

nvRAMから読み込んだセットアップデータが不正となっているようです。

リアパネルのCALIBRATIONスイッチをUNPROTECTED(上側にする)とこのエラー状態でも起動して、自己校正が正常に完了できれば、動作する可能性がありますが、2003年頃の測定器なので、製造から15年程度経過しており、nvRAMに内蔵されているリチウム電池の寿命(10年)を超えており、nvRAMの交換が適切な対応となりそうです。

使用されているnvRAMは、DS1220ABで、現在も入手は可能ですが、デッドストック(電池の消耗も進んでいる可能性もあり)で価格も高いですから、選ぶなら、互換性があり、価格も安めのM48Z02-70PC1で、Digi-Keyなどで手配可能な模様です。

DS1220AB NvRAM修理

この測定器は、うまく修理できれば長く自分で使いたいですし、修理にお金はかけたくないので、ダメもとでNvRAMの内蔵電池を取り除いて、代わりに外付けでリチウムボタン電池を取り付ける方法を選択しました。

ミニルーターで、丁寧に内蔵電池を掘り出します。

電池自体に穴を開けないように、できるだけ余分に削らないように焦らず丁寧に掘り出します。

電極は、電池に圧着溶接されているので、注意が必要です。

特にマイナス側は、NvRAM側で切れてしまうと新しい電池の取り付けが難しくなると思われます。プラス側(奥側)はNvRAMがわ一面が電極となるのでちぎれても大丈夫です。

NvRAM DS1220AB電池取り出し

HP 54600A NvRAM 修理

これで、無事エラーなく起動するようになりました。

但し、校正データがなくなっているので、測定器としては、校正が必要となります。

画面が垂直方法に縮んでいるので、これを修理

エラー表示なく起動するようにはなりましたが、やっぱり画面が垂直方向に縮んでいます。

54600Aの回路図は公開されておらず、54601A(4ch)の回路図を参考に考えていましたが、画像表示部分は全く別の回路となっているようで、54600Aでは、uPC1379Cで垂直信号を作っていました。

HP 54600A CRT垂直同期信号 uPC1379C

2か所疑わしいコンデンサーがあります。

特にICの参考回路の1000uF/25Vのところに1000uF/16Vが使用されており、リップルの大きい場所に耐圧が低い電解コンデンサは極端に寿命が短くなる可能性が大なので疑わしいです。

高圧回路に注意して基板を取り外し、10uF/16V(参考回路図上は22uF/16V)と1000uF/16Vをそれぞれ、10uF/16V,1000uF/35Vに交換しました。(以下の写真の赤囲い)

取り外したコンデンサを確認したところ、簡易測定結果からは、10uF/16Vは異常なしでしたが、1000uFは20%以上の容量低下がみられ明らかに劣化していました。

HP 54600A 垂直同期回路修理

無事、正常に表示されるようになりました。

自己校正に失敗!1chが表示されない事象発生

なんとチャネル1の波形が表示されない事が頻繁に発生していることが判明

HP 54600A UB1202AM周り回路図

信号を追いかけた結果、

回路図上PA300と記載されているAT&T  UB1202AMの動作が不安定なようで、外部信号の動きに関係なく出力信号が出なくなる状態が観測されました。

ほぼ、UB1202AMの個体不良で確定。

HP 54600A UB1202AM周り

このICは、プログラムゲイン プリアンプで、一般に入手は困難で、同機種のジャンクからの付け替えしかありません。

同機種のジャンクといっても知る人は知る人気機種なので、余程のジャンクでないと価格的に手出しは難しいので、今回は、ダメ元の荒療治を試してみました。

昔、壊れたGAの復活策として電子レンジでチンがありましたが(本当に直るかどうかは、かなり?????)、

それに匹敵するくらい怪しい方法で、完全に破壊する可能性が高い技術者らしからぬ方法ですが、ヒートガンでIC内部の温度がハンダ融解温度あたりまで温めてみました。

方法は、電源を落とした状態で、温度の目安としてハンダをICの上に置き、このハンダが完全に溶けるまでヒートガンでICを温めます。

結果…..

ーーーー

一時的修復かもしれませんが、正常に表示されるようになりました。

電源ON/OFF試験、Auto-Store機能で波形を記録しながらの長時間観測でも異常は見つかっていません。とりあえずは修理できた模様です。

とはいえ、荒療治なので、いつ再発するかわからないので、格安のジャンク探索は継続と考えています。

修理完了 HP 54600A

 

NF DF-194A VARIABLE PHASE DIGITAL FUNCTION SYNTHESIZERを入手

もちろんジャンクで入手。

情報の少ない本器ですが、ざっくり以下の仕様です。

主仕様:

周波数範囲:0.1mHz-420kHz( 正弦波/方形波)、0.1mHz-21kHz(三角波/ランプ波)

出力電圧:30Vp-p/10Vrms

出力インピーダンス:50Ω/BNC

可変位相出力:-360.0~+360.0deg

その他:トリガ/ゲート/バースト、周波数掃引、6桁表示、GP-IB

ざっくり、機能を絞った(目的を限定した)ファンクションジェネレーターです。

一般的なファンクションジェネレーターとの違いは、変調機能がない、代わりにフェーズ(位相)をずらした信号が出せます。

NF DF-194A を修理

ジャンクの内容は、

通電いたしますが、ボタンを押しても数字の変化がありません。
ファンが回転しません。

左右の取っ手と下部の脚欠品、表示画面に汚れがあり、数字が読み取りにくい

でした。入手後の確認結果も同様でした。

観察してみると、FANには電気が供給されているが回らない。(FANが唸っている)

この手の機種は、最初に全点灯して、表示関係のデモンストレーション(表示チェック)をするので、どうも電源投入直後の全点灯の状態に見える。

早速ばらしてみると、FANはACファン(一度交換されたと思われる接続となっていました)で、軸ずれしていて加熱した跡が見られます(シールが熱で浮き上がり反っている)。簡単に割れてしまいました。

NF DF-194Aで使用されていたPXJ43B1 ACファン

壊れたACファンは、単純にACが接続されただけのようでしたので、とりあえず接続を外してみました。

見事に起動しました。

どうやら、壊れたACファンの影響で、AC電源が期待通りの供給をされておらず、DC側も異常になり動作していなかったようです。

手持ちにはACファンなんてあるわけもなく、PC用の8cm DCファンを取り付けることにしました。

NF DF-194A DCファン化

内部のデジタル側に供給されている+15V(端子)から、3端子レギュレータで12Vを作りました。高回転タイプのファンなので、そのままでは少々煩いので、22Ω程度の抵抗を直列に入れて10Vで動作させました。GNDをシャーシに落としていますが、元々多点接地の構造なので問題ないと思います。

NF DF-194A でDCファンを動かすために追加した12Vレギュレータ回路

NF DF-194A 最終調整

表示器の汚れは、アクリルパネルの内側が薬品?で変質しており、アクリルパネル表面の簡単な研磨では改善できそうにないので、諦めました。

いろいろ設定を変えながら触ってみましたが、表示が正面以外からは読み取りにくいこと以外に不具合はないようです。

1点ありました。バックアップ用密閉電池が蒸発して機能していないようです。電源を入れるたびに初期値設定となりますが今は別に困らないのでとりあえず放置元々設定を記憶するようにはできてなく、保存した設定の保持用でした。電池機能はかなり低下しているようですが、保存した設定は保持されるようなので、とりあえず問題なしでした。

出力レベルは、3桁以上デジタルマルチテスターの測定値と一致しているので、特に触らないことにしました。

(正しく校正する為のAC電圧標準器を持ち合わしていないですしね。)

オフセット電圧もほぼ表示通りで問題なし。

周波数もほぼ正しいのですが、こちらは校正済みの周波数カウンタがあるので、合せ込みにトライしてみました。

電源の裏側の温度が高くなる部分に裸の水晶発振子で構成されていました。電源の発熱でオーブン的な効果を期待しているのでしょうか、十分あったまった後は、安定した周波数となっていて、表示(6桁)精度には簡単に調整できました。(追記:温度補償されているようで、温度によって周波数変動は殆どないようです。)

 

NF DF-194A 周波数を合わせ込みました。

NF DF-194A(下)、上のIWATSU UC-8152はGPSを使って校正済み

最後に

アナログ回路基板の写真を撮り忘れましたが、流石に評価用計測器らしく金属箔抵抗など高精度の部品を惜しみなく使っています。

だから、20年経過してもこの精度・性能ってことなんでしょう。

最高周波数は、低めですが、波形が綺麗で、精度も高いファンクションジェネレーターを格安で用意できました。

WaveSpectraで見てみたところ、歪み率0.01%程度(PCノイズが大きいので実力はもっとあると思います)で不要な高調波も元々のPCノイズに埋もれている感じでオーディオ評価用としても十分に使えそうです。

 

どうも最近は、エラー表示・起動不可・電源入らずなど、そんなジャンクばかりを追っかけている……

頭を抱えるようなジャンクには遭遇していないです(本能が囁くんです、こいつはやばい奴だからやめておけってね)が、本能より物欲が勝って手を出してしまう事もあるので、そのうち痛い目も見るのでしょう

追記

元々ついていたACファンを調べたら、吸い込み(吸気)方向に取り付けられていました。

確かに電源を冷やしたいのなら、直接電源回路に外気を吹き付けるのが良いとは思いますが、この筐体は吸排気口が殆どなく、ファンを吸気方向に取り付けると電源は冷えそうに感じますが、吸い込んだ空気が出ていく口がほとんどないので、内部に熱が籠りやすくなり、全体的に温度が上がるようになります。

電源は十分に冷やして、筐体内部は均等に温まることを想定しているのでしょうか…..

私はラック搭載の予定はないですが、元々ラック搭載を想定されている装置は、フロント吸気(測定器の場合、ほとんどが側面吸気)、リア排気が一般的です。これが逆だと他の装置が吐き出した熱気を吸い込んで冷やすはずが温めるという結果になる最悪のケースもあります。ラックを煙突のように想定して上下で空気の流れを作って冷却するような比較的大きい規模のラック搭載なら大丈夫でしょうけど…..

ということで、今回の修理では、DCファンは排気方向に取り付けています。ファンから遠い側の側面のスリットから吸い込んで、内部回路⇒電源を通って排気となります。これで電源部分もそれなりに冷えているようで、長時間通電しても触れる範囲で動作にも異常は見られないので大丈夫と思われますが、さらに期待した流れとなるよう装置内部にスリットの追加なども様子見しながら検討できればと思います。

同型機の他のオークション出品写真を調べると、ダストフィルタがついており、吸気となっているようで、そういう設計という事なんでしょう(-_-;)

どうせラックには搭載しないので、リア吸気でも問題はないので、設計通りの吸気方向にも取り付けてみて冷却具合を確認してみたいと思います。

追伸 2 その後

バックアップ用のNiCd電池を暫定で、スーパーキャパシタに変えておいたのですが、容量不足と充電電流が微小なので、バックアップ電圧が中途半端に不足する状況が頻発して、Power-ONの診断開始に時間がかかる事態となったので、まじめにもともとついていたNiCd電池(3.6V 50mAh)相当のNiMH 3.6V 80mAhに交換しました。

後、冷却ファンですが、メーカの設計通りの吸気に変更しました。予想通り、電源周りの冷却はそこそこですが、装置全体の温度が上がっています。暖機後はこのほうが動作が安定するかもしれません。元々は吸気フィルターがあるようなので、埃っぽい我が家でもあり、以前に使用していた台所換気専用のフィルターをカットして取り付けました。

NF DF-194A VARIABLE PHASE DIGITAL FUNCTION SYNTHESIZER 吸気FANフィルター

GPSで調整した周波数カウンターでクロックを合わせ込んでいたつもりでしたが、GPS基準クロックの試験をしていて、出来心でオシロスコープを使ったGPS同期クロックとの位相比較をした結果、(手持ちの周波数カウンターの測定限界を超えた)微妙ですが周波数のずれが判明しました。見つけてしまった以上気になるので、近いうちに再調整したいと思います。(そもそもの内蔵クロックの安定度の問題もあるので、ぴったり合したところで、あまり意味はないですが…..精神衛生上良くないので)

COMPAQ PC CQ1140jp (QF212AA-AAAD)にXubuntuをインストールしてみた

暫く放置状態だったこのAMD Fusion APU E-450デュアルコア・プロセッサー 搭載のデスクトップパソコンを立ち上げてみました。

相当前にWindows10なら、どのくらい動くか確認で入れただけなので未認証。とりあえずはWindows Updateも勝手にして動いているようですが、未認証は未認証、以前にUbuntuで使用した時より随分動画再生が軽くスムーズ(綺麗)なのをざっくり確認後、いくつかの派生UbuntuのLiveDVDで動作確認した後、一番良い印象だったXubuntuをインストールしました。

Windows10で実用的な動画性能だったので、ハード的には動画再生能力に問題はないようですが、やっぱり比較的軽量なXubuntuでもギリギリで再生している感じで余裕がありません。

動画の再生は、Amazonプライム動画をFirefoxで再生して確認しています。

AMD Fusion APU E-450をオーバークロックする

Windows10がノーマル状態で余裕をもって動画再生できているわけだから、もっとまとうな手段で対策もできそうなものですが、すでにHWアクセラレータも使っているはずの状態なので、E-450をオーバークロックしてしまいました。

『AmdMsrTweaker』をインストールします。

johkra/amdmsrtweaker-lnxにある64 bit executableを取ってきて、展開します。

展開したファイルを、パスの通ったフォルダに「amdmsrt」にリネームして移します。

当然、実行属性を付けます。

# sudo chmod +x amdmsrt

cpuidをインストールします。

# sudo apt update

# sudo apt install cpuid

これで準備は整いました。

実行してみましょう。

# sudo modprobe msr
# sudo modprobe cpuid
# sudo amdmsrt

これで、現在のAPUの設定と設定可能な範囲が表示されます。

どうやら、機能としては3.3GHzまでオーバークロックできるようです。

実際にオーバークロックしてみます。core電圧も設定できますが、既に設定できる最大値ですので、電圧指定の「@1.35」は省略可能です。

# sudo amdmsrt P0=26.4@1.35

「26.4」は「27」でも設定できる値に丸められるのでざっくりで指定できます。max「33」

Windows10で動作させた時ほどの余裕はありませんが、少し安心して動画再生できる感じになりました。

ログイン時に自動的にオーバークロックさせる

ログインのたびに、コマンドをたたくのも面倒ですので、ログイン時に自動的にオーバークロックするようにしました。

適当な名前(ここでは、amd_overclock.shとします)で、オーバークロック シェルスクリプトを作成します。

#! /bin/sh
# modprobe msr
# modprobe cpuid
# amdmsrt P0=26.4

管理者権限で実行しないといけませんので、

「セッションと起動」で、「自動開始アプリケーション」に登録する際に

sudo /usr/local/bin/smd_overclock.sh

と登録しますが、このままでは、パスワード入力が発生して都合が良くありません。

そこで、「smd_overclock.sh」の時だけ、sudoをノーパスワードに設定します。

# sudo visudo

以下を追記します。<username>は自分のuser名

<username> ALL=(ALL) NOPASSWD: /usr/local/bin/smd_overclock.sh

これで、再起動しても初めからオーバークロック状態で起動します。

再起動後、コンソールターミナルで、

# sudo amdmsr

これで現状の設定が表示されれば、成功です。

追加....残念

この方法は、BIOSから得られるMaxクロック以下でないと、実際の動作には反映されていませんでした。

高速化できたと勘違いは、同時に様々な設定を並行して試していた為だったようです。

以下のCPUの簡易ベンチマークを行ってみましたが、設定値にかかわらず結果に変化はありませんでした。

# sysbench –test=cpu run

BIOS起源のcpufreqの持つ上限設定値を変更もしくは無視する方法がないといけないようです。

BIOSの制限を無視するように「ignore_ppc=1」を設定してみましたがダメでした。

.....

いろいろ試している結果で、目的の用途ではほぼ満足できる動作(Windows10で動かした時と同等かそれ以上?)となってきたので、無理やりのオーバークロックの必要性がなくなってきているので、ひとまずここまでとしよう....

 

終わり

YOKOGAWA 7541 DIGITAL MULTIMETERを入手

手持ちのテスターの挙動が不安になってきたので、ベンチトップタイプのマルチテスターを物色

送料込みを考えると格安(3,000円)でデジタルマルチメーターを入手しました。

電源が入るのと、電圧及び抵抗レンジでチェックしてみましたが
動作しているようです。
精度に関してはよくわかりません。
という事でした。
 

YOKOGAWA 7541 について

メーカサイトやネット上で情報を探しましたが、校正をされているサイトに若干校正後の保証スペックが記載されている程度で、ほとんど有用な情報は見つけられませんでした。
しかし、この機種の兄弟(OEM?)と思われる機種を見つけました。
Panasonic デジタルマルチメータ VP-2662A
山脇電子工業株式会社 様のページで仕様書(カタログ)が入手できます。
温度測定と周波数Bの測定、ピークホールド機能などが省略された機種のようですが、
24999カウントフルスケールですが、10μV・μAまで計測でき、ACに関してもTrue-RMS測定できるようです。
TechEyesOnline に本器のカタログもあるようですが、プレミアム会員登録が必要なので、今回は見送りました。
 

YOKOGAWA 7541 の動作確認結果

動作確認したところ、
  1. ショート状態でも抵抗値が異常に大きい。
  2. 電圧(V)レンジで0V(ショート)時のオフセットが若干大きい
  3. 電圧表示が若干低めに出ている。(スペック的には下1-1/2桁以外はそれなりを期待だが)
  4. 電流測定ができない。(入力オープンになっている)
1.については、大電流を流して入力ターミナルを焼いてしまっていました。入力ターミナル部分が若干溶けてはいましたが、機能的には問題ないようでしたので、ターミナルのネジを外して、コンタクトのクリーニングと真っ黒になったネジを手持ちのものに交換して、0Ω時に0.05Ωまで下げることが出来ました。
2.3.については、別途校正を検討
4.これはヒューズ切れでした。おそらく1.の発生時に切れたのでしょう。ヒューズ交換して測定できるようになりました。
 

YOKOGAWA 7541 DIGITAL MULTIMETER の校正

校正については、情報を入手できませんでしたので、自身で確認した方法となりますので、誤りも多分にあろうかと思います。
回路解析までしていませんし、手持ちの実機での確認だけなので、確証のない参考程度とお考え下さい。
中身は、ADCMTの高精度タイプなどに比べると大変シンプルです。(高精度器などは、標準器となる部分が厳重にシールドされていたり、特殊な実装が施されていたりします。)
YOKOGAWA 7541 DIGITAL MULTIMETER の内部
シールドを外して、調整部を少し拡大。基板裏側にマイコン、基準電源などが実装されているようです。
YOKOGAWA 7541 DIGITAL MULTIMETER の校正
 
AC、温度関係は、適当な標準器やプローブを持っていないので、今回は見送り
おそらく、
AC True-RMS関係は、 VR6、VR7、CV2,CV3
温度関係は、VR17、VR16(?)
と思われるが、確認はしていませんので、あくまでも推測です。
 
校正で調整したところは、(記載のない電圧電流表示はDC/直流レンジ)
VR6:電圧のオフセット調整(AC)。250mVレンジで入力をショートして0Vなるように調整
RT:基準電圧調整?250mVレンジの校正。240mVを入力、表示を合わせる。
VR3:2500mVレンジで2.4Vを入力調整。
VR2:25Vレンジで24Vを入力調整。
VR4:250Vレンジで240Vを入力だが、標準器がないので122.2Vで調整。
VR5:2500Vレンジで2400Vを入力だが、標準器がないので122.2Vで調整。
   多分これで、すべてのDC電圧は校正できると思いますが、だめなら、再度RT
直流電流については、多分この電圧校正で許容範囲に収まると思います。(外れた場合の調整は不明)
VR11:250Ωレンジ。100Ωを接続して確認。
VR12:2500Ωレンジ。1KΩを接続して確認。
VR13:25kΩレンジ。10kΩを接続して確認。
VR14:250kΩレンジ。100kΩを接続して確認。
VR15:導通ブザーの設定。使いやすい設定にすれば良いと思います。私は回路チェックが主なの凡そ10Ω以下なら鳴る様にしました。
 
※抵抗測定は、測定ケーブルの抵抗値も考慮にいれて、校正レンジであらかじめショートでの抵抗値を確認REL設定(相対値を記憶して差し引きしてくれます)したあと校正する。
※標準抵抗は、レンジ内の中間値あたりの値のわかっている抵抗で代用できる。
※校正は、電源投入から30分以上経過後実施する。
※できれば環境温度は25度にする。
ADVANTEST TR6150 HP 3468A YOKOGAWA 7541 01
 

気になる残問題

意味不明な調整部分も気にはなりますが、それより、読み取り値が安定するのが数回のサンプリング後となっていて、読み取り値の確認に注意が必要な感じになっている。下2桁だけなので、実用上は問題は少ないがオフセット調整などリアルな状態を読み取りながら調整する場合などは気を付ける必要がありそうです。

本来のこの機種がそういうものなのかもしれないですが、変換が遅い2重積分方式でも数回サンプリングが必要な状況はおかしい。積分回路/サンプリング回路で使用しているコンデンサの劣化が進行しているのかもしれません。ADコンバータ周りの回路もチェックが必要かもしれない。

その他にもレンジ切替直後、読み取り値が若干ずれる場合がある。レンジ切替のリレーのコンタクトが劣化しているか、最近の使用頻度が少なく目覚めが悪い状況になっているのかもしれない。しっかり使用しながら様子見が必要と思っています。

 

オークションで、ジャンク IWATSU SS-5711C SYNCHROSCOPE を入手

出品者もわかっている不具合を羅列されて出品されているジャンクなので、何らかの修理が必要と思っていましたが、入手後、簡単な動作確認では特に問題がないように見えて、喜んでいましたが、やっぱり不具合がありました。

というか、とんでもない故障持ちでした。

出品者が確認されたときはまだ中途半端に故障されていたのでしょう。私の確認した不具合は、1mS/div,2mS/div,5mS/divレンジで輝線のみで全く波形が表示されない。

しょうがない、SS-5711Cを修理しよう!

回路図を眺めていると、このレンジにだけ関係する部分が判明!

IWATSU SS-5711C 故障部分の回路図抜粋

コンデンサ C32の故障か、レンジ切替のセレクタ周りの接触不良と予想しました。

IWATSU SS-5711C SYNCHROSCOPE を分解

オシロスコープなど測定器は、(原理は簡単だけど)非常に複雑で、分解は躊躇してしまいますが、古い機種はある程度のメンテナンスができることを配慮して設計されているので、見た目よりは簡単に分解できます。

ただ、基板間をケーブルが飛び交っていますし、そのケーブルの配置自体に意味がある場合があるので、分解前の状態が再現できるよう写真を撮っておくと良いと思います。(簡単に分解できるからと言って、中身の構造がある程度推定できる方以外は、測定器によっては分解してはダメな部分もあるので、とりあえず分解してみるは止めた方が良いです。)

IWATSU SS-5711C 分解中

IWATSU SS-5711C 分解中

やっと問題の部分が姿を現しました。

IWATSU SS-5711C 分解中 故障ボード

故障場所は此処だ!

IWATSU SS-5711C 分解中 故障部分

なんと!

IWATSU SS-5711C 分解中 故障部分拡大

分かりますか?コンタクト部分がなくなっています(-_-;)

故障したプローブの一部を使って修理しました。ハンダが付かないと思ったらステンレス製?でしたので、板金用フラックス(強酸性なので取り扱い注意)で作ったコンタクト端子にハンダを付けてから、セレクタ部にもすず線で取り付け土台を作って、ハンダ付けしました。

※異種金属間は接触不良などの原因になりますので、本当はステンレスは良くありません。適当なパーツが出てきたら交換したいと思います。

# 換気が十分でなく多少吸い込んでしまったようで、ちょっと調子が悪い(-_-;)—–板金用フラックスの取扱いはほんと注意が必要です。

IWATSU SS-5711C 分解して修理しました

この写真だと軸に接触しているようです。このあと少し短くして取り付け直しました。

ジャンク IWATSU SS-5711C SYNCHROSCOPE 十分実用レベルに復活

接触抵抗が若干大きいのか、微妙に計測波形がぶれているような気もしないでもないですが、趣味の範囲での利用なら、十分実用レベルに復活しました。

(波形のブレを感じたのは、確認の為に使用したシグナルの安定度の問題と走査線速度の問題で、正常に動作していました。)

分解のついでにパネルも洗浄したので、リフレッシュして若返ったSS-5711Cです。周波数カウンタが付いていて基準クロックは普通の水晶発振子のようですが、値は結構正確なようです。GPSで調整したカウンターとほぼ同じ値を示します。(有効桁数は少ないですが、実用的レベルと思います。)

復活! 岩通シンクロスコープ SS-5711C

10MHz程度の波形を見る場合も、帯域 20MhzのSS-5704で見た場合、波形がなまってしまい波形の品質までは見えませんが、流石に帯域100MHz SS-5711Cだとそれらしい波形が観測できるようになります。

10MHzの波形を見る場合、10MHzの正弦波を見たいわけではないので、その十倍の帯域のSS-5711Cを入手して正解でした。

CXO-050CをOCXOにするオーブンを考えてみた

発熱体は、抵抗が簡単なので、抵抗を発熱元とする回路を考えてみました。

最近のはやりなら、PICやAVRマイコンを使用するのが一般的と思いますが、ここではディスクリート部品で如何に簡単に実現するかを考えてみました。

あと、手持ち部品で作れるものという条件で考えてみました。

いきなり、検討結果!

出来るだけシンプルにしたオーブンOven回路

右上が実際に実験で作ってみた回路(R11とR12に分けてるのは、手持ちRで作った為)

R1,R2は手持ちの関係で10Wもありますが、1W程度で十分と思います。本来は、電源電圧と抵抗値で最大消費電力を計算して決めます。

また、R1とR2は直列にしていますが、並列の方が発熱が大きくなりますので、並列の方が本来は良いかと思われます。(0.8W ⇒ 1,6W*2)

実際、直列の現状回路では、発熱量が不足で、温度維持には十分な断熱が必須となりますし温度上昇も遅いです。

但し、並列にした場合は、Q3(2SD2012)もそれなりに発熱するので、ヒータの一部としてオーブンの物理構造を考えると熱効率が少しでも良くなるかと思います。

試作回路は、保温材次第ですが、50℃~53℃程度にコントロールできているのを確認しました。

個体によるブレがあるので、同じ回路で作成してもまったく同じ温度にはなりませんが、絶対温度は重要ではなく、同じ温度を維持できることが重要なので十分実用的と思います。

左下は、設定温度をより指定しやすく、温度上昇による設定値のブレも少なくしたつもりの回路です(実際には確認してません ^-^;)

凡そ、Vbe=0.6V(温度上昇に伴い小さくなる)を考えないで済みます。

 

各値は、以下のように計算できます。(hFEは十分大きいと考えて、ベース電流の配慮は省略)

ちなみに使用したTrのそれぞれのhFEは、2SC1825:270程度、2SD2012:450程度 なので、最終段で1A流したとしても、Q2に流れるベース電流は8μA程度なので、Q1のコレクタ電流は0.1mAも流せば、無視できる程度になります。

 

Ts:設定温度

(0.01mV * Ts / R13) * (R11 + R12) =( 5V – 1.2V)

1)設定したい温度Tsを決まます。

最近の気温と部品の(寿命を考慮した)動作温度を考えると50℃~55℃が良いかと思います。

2)R13を入力インピーダンスを考えて決めます。

あまり大きすぎても動作が計算通りに動かなくなるで、大きくても1kあたりが良いかと思います。

3)上の式から、R11+R12を計算します。

4)実際に入手できる近い値の抵抗値で改めて、Tsを計算して、問題ないか確認します。

 

まぁ、こんな感じ

 

1チップのサーモICなどもあるようですが、トランジスタと抵抗だけ(温度センサーは除く)で作った簡単オーブン回路でした。

 

追記:

実験中。保温材のないこの状態でもほぼ52.3℃を±0.1℃程度でキープしています。

Simple OvenによるOCXOの実験機

回路は結局R1とR2を並列接続した以下となりました。実験機の温度センサーLM61の電源は、CXOに供給の安定化3.3Vを使用しています。

OCXO用 52℃ Simple Ovenの回路図

実はこの回路には大きな欠陥があります。それは、設定温度と5V電圧に密接な関係があるので、ある程度正確な5Vが必要となることです。

その対策としては、1段目のQ1の電源をLM61と同じ内部安定化の3.3Vを供給します。もちろんこの時はR11+R12の値は見直しが必要です。

供給する電圧によって変わりますが、3.3Vの場合はR11+R12を4kにすれば丁度良さそうです。

ん?実測では46.2℃…..?

計算はあってそうなので、値を確認しないで使用した中華製金属皮膜抵抗の値が大きかったのかもしれない。

ボケて4.7Kを使ってました。そもそも標準値で4Kなんてないですもんね(-_-;)。近いところで3.9kでしょうか

OCXO用 52℃ Simple Ovenの回路図 fix

改造元のCXO-050Cについて

CADツールのお試しで回路図を作成したので記載します。

格安だった? CXO-050C回路図

大変オーソドックスな回路構成となっていました。

VCXO化は、C1のコンデンサをバリギャップダイオード(今回は通常のダイオードを使用)に変更して、電圧を加える抵抗を追加して以下の様な回路となっています。

CXO-050C 改造VCXO

VCXO化 CXO-050C改の改良

現状の回路でもVCXOとして動作はしますが、少々周波数偏移が大きすぎる(実験機は±700Hz程度、加える電圧により周波数が変わる)

基準発振器として使用するには、少々扱いにくい(周波数をコントロールする電圧がシビアになる)ので、できれば±10Hz程度まで抑えたいと思います。

最終的にはオーブンに入れてほぼ同じ温度での動作させる前提なので....

 

さて、方法ですが、追加したダイオードの抵抗接続端とVC/水晶発振子の間に3~10pF程度のコンデンサを直列に入れてダイオードの接合容量の影響を小さくします。

CXO-050C改の改良 結果

温度補償型セラミックコンデンサ 3pを接続して、±30Hz程度になりました。