先日手持ちの部品を整理していたら写真のようなものが出てきました。
これはANRITSU製 ATT ユニットで、かなり以前に入手しそのままになっていたものです。大小小あり、どちらもTTLによるドライブ基板が付属しています。
これはANRITSU製 ATT ユニットで、かなり以前に入手しそのままになっていたものです。大小小あり、どちらもTTLによるドライブ基板が付属しています。
ATT(アッテネータ Attenuator )とは「可変抵抗減衰器」とも呼ばれ、信号を適切な信号レベルに減衰させる部品です。
この部品の素性を知ろうとネットでいろいろ調べてみたのですがわかりません。精密な部品なので分解したくは無かったのですが、せめてカバーだけと思って中を見てみたのが左写真です。
流石は創業120年を誇るアンリツ株式会社(ANRITSU CORPORATION)の製品で見事なできばえです。
早速テスターと+9V(定格は12V)電源を使ってざっと調べてみました。リレーの直流抵抗は約265Ωでユニットアッテネータは小さいほうが4段、大きいほうが5段あって右側のリレーが減衰なし、左側のリレーが減衰ありでした。(下図)
右図は私が理解するためにおこした回路図ですが真偽のほどは確かではありません。
右下に使用例として書いておいたように、このままでも+12Vの電源とトグルスイッチをつかって手動のATTを作ることができますが、トグルスイッチを1、2、4、8、10、20、30、30、40dBの9個ならべて必要な減衰量に設定するため数字を足しながらパチパチとやらねばなりません。
これもまた一興ですがせっかくコントロールボードがあるのですから電子的にロータリーエンコーダを使ってカシャ カシャ カシャ、、、とやりたいものです。
そこでドライブボードについても調べてみました。
一般的なロジックICが使ってありましたので解析も容易でした。
入力はクロック、データ、ストローブを使う典型的な3線式シリアル入力でした。
左上はデータラインのみ追ってみた図です。(保証無しです)
74HC14で波形整形されたシリアル信号は74HC4094のシリアル・イン、パラレル・アウトのシフトレジスターによってパラレル信号に変換され、その出力は(上の例ではQP0の1ビットのみ示した)74HC04で反転信号もあわせつくりTD62083のリレードライバーでリレーを作動させる、というものです。
反転信号をつくりだすことで必ずどちらかのリレーが通電されている状態になっています。なるほど測定器のような高信頼性が必要な場合はこのような簡単明澄で堅実な設計がされていたのかと感心しました。
ということでこのアッテネータをコントロールする回路を以前のブログを参考にしながら(AVRによるATTコントローラーの製作)作ってみました。こんな場合はいつものAVR(ATMega328)を使いソフトはarduinoIDE(AVR と Arduino (2))で開発します。
今回使用したライブラリについて述べておきます。
まず、表示には7セグメントのLED表示素子を使いますのでarduinoのホームページにある「 Sseg 」と言うライブラリを使いました。少し古いですがいろいろ設定できて便利です。
ロータリー・エンコーダで数値を決めるのですが、その際1の桁と10の桁をSTEPボタンで選択しますが、その表示にドット・ポイントを使うことにしました。表示素子を上下反転させれば右上図のようになりOKですが、本来のエレメントの順序がA,B,C,D,E,F,G,DpであるものがD,E,F,A,B,C,G,Dpとなります。
左写真はその結果で、-132dBを示していますが10の桁の3がロータリー・エンコーダで増減できることを示しています。
ここで問題となるのは ATMega328 で使用できるピンが不足することです。これを解決するためにXtalピン(右図の20、21番ピン)を入出力に使うことにしましたが方法はネットで容易に知ることができます。
そのため基本の発振は内部8MHzにしています。
右上に今回 ATMega328 で使用したピン・アサイメントを示します。
ロータリー・エンコーダ 2、3(割り込みの関係でこのピンを使用)
7セグメントLEDのエレメント表示 0、1、4、20、21、5、6、7
7セグメントLEDの桁表示(C4、C3、C2、C1) 8、9、10、11
STEPボタン 12
シリアル・データ出力1 A0、A1、A2
シリアル・データ出力2 A3、A4、A5
となりあまったピンは 13 番のみです。
まず、表示には7セグメントのLED表示素子を使いますのでarduinoのホームページにある「 Sseg 」と言うライブラリを使いました。少し古いですがいろいろ設定できて便利です。
ロータリー・エンコーダで数値を決めるのですが、その際1の桁と10の桁をSTEPボタンで選択しますが、その表示にドット・ポイントを使うことにしました。表示素子を上下反転させれば右上図のようになりOKですが、本来のエレメントの順序がA,B,C,D,E,F,G,DpであるものがD,E,F,A,B,C,G,Dpとなります。
左写真はその結果で、-132dBを示していますが10の桁の3がロータリー・エンコーダで増減できることを示しています。
ここで問題となるのは ATMega328 で使用できるピンが不足することです。これを解決するためにXtalピン(右図の20、21番ピン)を入出力に使うことにしましたが方法はネットで容易に知ることができます。
そのため基本の発振は内部8MHzにしています。
右上に今回 ATMega328 で使用したピン・アサイメントを示します。
ロータリー・エンコーダ 2、3(割り込みの関係でこのピンを使用)
7セグメントLEDのエレメント表示 0、1、4、20、21、5、6、7
7セグメントLEDの桁表示(C4、C3、C2、C1) 8、9、10、11
STEPボタン 12
シリアル・データ出力1 A0、A1、A2
シリアル・データ出力2 A3、A4、A5
となりあまったピンは 13 番のみです。
スケッチの詳細は省きますが、流れとしては
1. ロータリー・エンコーダで任意の減衰量を表示(今回のATTでは減衰量0から最大145まで可能)し
2. この数字を1の位と10の位以上に分割し、対応するユニットアッテネータを大ATTと小ATTからそれぞれ選択するようにシリアルデータを作成し、送り出してやります。たとえば85dBと言う値に対して1の位は1dB+4dB、10の位以上は10dB+30dB+40dBのユニットアッテネータが必要ですので大ATTからは1dB、10dB、40dBを選択し小ATTからは4dB、30dBをそれぞれ選択することになります。なぜかユニット・アッテネータが大ATTと小ATTにランダムに入っているので少しややこしいです。
3. シリアルデータの送り出しにはSPIを使うのがよいのでしょうが2チャンネルでの実験ではまってしまい、時間も無かったので恥ずかしながらシフト・アウト命令2チャンネルでお茶を濁しました。
4. arduino のスケッチはメインルーチンがループになるので、シリアルデータの送り出しは関数を作ってその都度呼び出すことにしました。
いろいろありましたがようやく念願のカシャ カシャ カシャ、、、ができるようになりました。
1. ロータリー・エンコーダで任意の減衰量を表示(今回のATTでは減衰量0から最大145まで可能)し
2. この数字を1の位と10の位以上に分割し、対応するユニットアッテネータを大ATTと小ATTからそれぞれ選択するようにシリアルデータを作成し、送り出してやります。たとえば85dBと言う値に対して1の位は1dB+4dB、10の位以上は10dB+30dB+40dBのユニットアッテネータが必要ですので大ATTからは1dB、10dB、40dBを選択し小ATTからは4dB、30dBをそれぞれ選択することになります。なぜかユニット・アッテネータが大ATTと小ATTにランダムに入っているので少しややこしいです。
3. シリアルデータの送り出しにはSPIを使うのがよいのでしょうが2チャンネルでの実験ではまってしまい、時間も無かったので恥ずかしながらシフト・アウト命令2チャンネルでお茶を濁しました。
4. arduino のスケッチはメインルーチンがループになるので、シリアルデータの送り出しは関数を作ってその都度呼び出すことにしました。
いろいろありましたがようやく念願のカシャ カシャ カシャ、、、ができるようになりました。
上のデータはシグナル・ジェネレータからの10MHz信号にこのATTを入れAPB-3のスペ・アナ機能でレベル測定をしているところです。
一番上の0dBから始めてあとはロータリー・エンコーダを回すだけで(ATTの場合は左回しで数値が大きくなるのでした)1dBずつカシャ カシャ と減衰量が変わっていきます、、、、当たり前ですがなぜだか達成感がありました。
ケース作りはしばらくお預けということでひとまず終わりとします。
一番上の0dBから始めてあとはロータリー・エンコーダを回すだけで(ATTの場合は左回しで数値が大きくなるのでした)1dBずつカシャ カシャ と減衰量が変わっていきます、、、、当たり前ですがなぜだか達成感がありました。
ケース作りはしばらくお預けということでひとまず終わりとします。
0 件のコメント:
コメントを投稿