リレーをつかった減衰器(電子ボリューム?)を検討する!の巻き。 2021.6.5
すこし前の自分の投稿です。以前にリレーをつかった電子ボリュームを検討していたのを思い出しました。
自分の投稿ですが、こんなものを検討していたのを思い出しました。
内容的には、リレーと抵抗を組み合わせた減衰器です。ONさせるリレーの組み合わせで0.5dB以下の分解能で制御することができます。
なぜ実現しなかったかといえば、これを検討していたのは2006年で、いまからちょうど15年程前なのですが、当時はPICをほとんど使っていませんでした。
マイコンボードで構成するのには大袈裟なので、頭の中だけでの検討でした。
でも、今ははPICはだいぶ使えるようになってきたので、再度検討しなおしてもいいかもしれません。
電子ボリュームの検討初期にこんなものを考えていました。
ちょうと小さいリレーもあります
この減衰器を検討するときに、小さいリレーの確保が必要ですが、秋月電子からはちょうどいいリードリレーもでています。
小さいだけでなく、5V10mAで動作するのでPICのI/Oにダイレクトに接続してつかうことができます。
ステレオなので2個並列で動作必要です20mA必要ですが、PICの1つのI./Oの最大電流は25mAなので余裕があります。
このリレーを使えば小型に組めそうです。いまなら1個70円で30個でも2100円です。
値上げ後は2700円かあ〜。
ただし、必要なリレーはおよそ30個になります。すべてが動作することを考えると最低でも300mAは必要なのですが、
ちょっときびしそうです。PICの場合、ロジックHで駆動すると最大でも200mAしか流せません。ロジックLで駆動すれば
もうすこし電流を流すことはできますが、それでも最大値は300mAです。オーバスペックを期待する手もありますが、
リレーだけでなくほかにも電流は必要になってくるでしょうから、PICのI/Oにダイレクトに接続するのはやめておいたほうがいいようです。
ちょっと部品点数が増えますが、トランジスタで駆動することにしましょう。
PICから流れ出しで使う場合の最大電流は200mA、引き込みの場合でも最大で300mAです。ちょっと30個のリレーを駆動するには厳しいなあ〜。
基板パターンを描いてみましょう
つかう部品は比較的大きいものばかりなので、パターンの引き回しは余裕があります。
部品面パターン
半田面パターン
積極的に表面実装部品もつかえるようにしましょう。トランジスタにはNPNをつかいますが、2SC1815だけでなく
チップトランジスタも使えるパターンにしておきます。部品箱に結構な数のチップトランジスタがあるので数減らしです。
NPNトランジスタは部品面ならTO-92、半田面ならSOT-23の部品が実装できるようにしておきました。
これでチップトランジスタの在庫もへらしましょう(焼石に水ですが・・・)
リレーも逆電防止用のダイオード内蔵無しの場合でも、外付けできるようにしておきました。
でも、チップダイオードって意外と高いので、最初からダイオード内蔵のリレー買ったほうがいいでしょう。
懸案事項は・・・・・
以前にR-2R型の電子ボリュームを検討したときにはアナログスイッチのチャージインジェクションでのチリチリノイズの抑制が課題でした。
リレーでの切替なのでそのようなノイズは発生しませんが、切替時の減衰量は単純に減少、あるいは増加できるわけではありません。
これは、-10、-20〜-60dBと10dB単位に切り替えるリレーが切り替わるときに、ショートモードで動作させても、最大で10dBの変化が生じます。
例えば、-9.5dB から -10.0dBに切り替わるときは
-9.5dB → -19.5dB → -10.0dB
というように切替わざるをえません。これは、音量の調整レンジが大きくかわる境界になっているためです。
とうぜん、同じ音量レンジの中であれば変化量は小さくなりますが、最悪時を考えなければなりません。
この変化が音量調整時(ボリュームを回したときに)に気になるレベルなのか、わからないレベルなのかがいまのところ経験がありません。
ただし、音量が急にかわる時間はかなり短い時間です。
使おうとしているリレーの動作時間は下表のようにON時が0.5ms、OFF時が0.2msです。
うまくリレーの動作を制御できれば、急減時間(過渡応答時間)は100usに抑えられるでしょう。
これが、聴感上どうなるかです。
このリレーの動作速度は比較的早いです。
どうしよう?
懸案がありますが実験にて確かめようか、それともとりあえず作ってみてから試そうか・・・悩んでしまいます。
実験するなら、なんでもいいでのボリューム付のDACとかつかって音量変更のときに、わざと-10dBの音量低下を0.1ms〜0.2msほどつければ
いいのですが、ソフトの変更がかなり面倒だなあ〜。
とりあえず基板パターンだけ描いておいて、ペンディングです。
とりあえず 2021.6.8
回路図を書いておきました。こうすれば、しばらく経って基板をみても思い出せるでしょう。
しかし、減衰器のところより制御の方が大部分を締めています。
個別に書いたほうがよかったかな〜。
全体の回路図ですが、減衰器のところは一部です。
減衰器のところだけ拡大です。
抵抗値は?
抵抗値は一度は検討しましたが、もっとよい組み合わせがあるはずです。
・調整範囲が広い (最低でも−80dB〜0dB)
・調整ステップが細かい(最低でも0.5dB)
・調整時の音量変化が小さい
これらを同時に満たす組み合わせを考える必要があります。エクセルをつかっての計算だと大変です。
リレーが14個あるので、組み合わせとしては約16000通りあります。
こりゅ、一度プログラムで抵抗値を探索できるようにしたほうがよさそうです。
なんかプログラムも面白そうですが、いつのまにか手段と目的が逆になっているな〜(笑。
基板製作中 2021.6.16
6/26には納品されそうです。
試作(?)基板が納品されました. 2021.6.25
いつになったら手をつけられるだろう?
ムラムラっと・・・ 2021.6.29
血中アルコール濃度が高くなると半田コテを握りたくなるようで、思わす部品をとりつけてしまいました。
ただし、抵抗器については値がまだ決まっていないこともあり、それ以外になります。
最初にリレーをとりつけてしまうと、抵抗器の半田付けがしにくくなりますが、後先考えずの行動です(笑。
抵抗以外の部品を取り付けてみました。
リレー駆動にはチップトランジスタを使い、半田面に実装しています。
リレー動作の事前確認
この基板ではリレーの動作タイミングが重要なポイントです。前述していますが、リレーのONとOFFの動作時間がことなります。
CPU側で同時にON.OFFすると複数のリレーがすべてOFFの状態(ノンショート)が0.3msほど発生することになります。
リレーはすべてOFFになると、減衰量が0dBになるので最大音量です。すなわち、小音量で操作時に大きなレベルの音が
短い時間ですが入る可能性があります。おそらく、プチという音がでるのかもしれません。
それに対して、OFFにするリレーのタイミングをすこし(約0.4ms)遅らせることで、リレーがショート状態で遷移することができます。
この場合は、音量が低下(最大で10dB程度か)する方向で変化しますが、こちらの方が害は小さいでしょう。
問題はリレーの動作速度の実態がどうなっているかということです。カタログでは最大値しか保証していませんが、
実力値を把握しておかないといけません。
リレー動作をノンショートで遷移させると、プチノイズがでる可能性があります。
そこで、実際に使用する回路を用いてリレーの動作速度の確認です。
実測してみると、ON時間が約200us、OFF時間が80usとカタログ値よりかなり高速です.
ノンショートで切り替えるとすれば、RY2をONしてから200us以降にRY1をOFFするような感じで
いいでしょう.
実際のリレー駆動回路で、動作時間を計測してみましょう.
実際のリレーの実力はもっと早いようです.
抵抗値を決めよう!
抵抗値を仮設定すれば、リレーの設定パラメータと減衰量を自動で算出するプログラムは簡単に出来ましたが、
そこから抵抗値自体を自動で設定するプログラムを考えようとしたら、あまりの多さの組み合わせに無理そうなことが
わかりました.なんせ、14本の抵抗を決めるわけですが、単純増加という前提をおいても組み合わせは相当です.
ということで、手動で何通りか計算してよさそうな組み合わせを導出しました.
(中略)
設定した抵抗値とリレーの設定データです.長くなるので途中は省略です.R13(14)は5とありますが、正しくは4.7Ωです.
この抵抗値の場合ではゲインエラーは0.08dB程度でした.
これならば、ボリュームをあげていったときに不自然な音量変化はないでしょう.
というか、もっとエラーがあっても大丈夫なような気がします.
ゲインエラーは0.08dB程度です.
抵抗を実装しよう!
普段使わない低い抵抗値のものがあるので、ちょっと捜索に時間がかかりました.
とりあえず抵抗を実装して基板本体は完成です.
あとは、ソフトの作成です.
基板本体は完成です.さて、ソフトが結構大変かな〜.
通電テスト! 2021.7.8
まずは簡単なプログラムを組んで通電テストです。
通電テストしてチップトランジスタの半田不良箇所があったり、回路図が間違っていたり、色々と発見です。
それらをちょいちょいと修正して、リレーの切替時のノイズを確認です。
単純に何も考えずにリレーを切り替えてノンショートモードで切り替えた場合から、タイミングを変更してショートモードで
切替えたときのレベル変化を調べてみます。入力は単純に5Vの直流を入れて、出力電圧を測定します。
-80〜0dBのレンジで計るには時間がかかるので、簡易的に-10dB〜0dBの変化(約20ステップ)で測定です。
単純にリレーを切替えした場合、ノンショートモードになるので全てのリレーがOFFになるタイミングが発生して
ゲインが0dBとなってしまいます。それがスパイク状のノイズのようになってしまいます。
リレーとON/OFFの時間差を300usに設定してショーティング状態で遷移させます。今度は反対に
負側のパルスとなってでてきますが、レベル変化は小さいです。もうちょっと時間差を短くできそうです。
時間差を200usに設定です。負側のパルス幅が少し狭くなったような気がします。
時間差を150usに設定です。今度は短すぎるためか正側のパルスがでてしまいました。
時間的には200us前後に最適な値がありそうですが、リレーの個体差もあるから少し長めに
することになるでしょう。
負側のパルスが聴感上どのように聞こえるかは、もうすこしソフトを組んでからのテストになりそうです。
もうすこし範囲を広げて測定
-30〜0dBの範囲で測定です。もうすこし動作するリレーの数を増やしてみましたが、リレーの個体があるようで、
時間差300usにしないと正のパルスがでてしまうようです。
時間差200usではリレーの個体差のためか、正側のパルスがでるようです。
時間差300usにすれば、正側のパルスはなくなりました。
試聴用にプログラムを書いてみましょう! 2021.7.9
試聴用といいながら、ロータリーエンコーダをつかったほぼ実機用のプログラムです。ちょうどPA72323のプログラムが流用できそうだったので、
その音量変更サブルーチンを入れ替えた程度で済ました。
プログラム作成のために、色々とI/Oを取り付けています。
いざ試聴!
このリレー式減衰器のインピーダンスはあまり低くない、といってもそれほど高いわけではありませんが、できるだけアンプが近い方が
いいだろうということで、最初の試聴ではヘッドホンアンプを直近に接続して試聴です。
電源はかなりいい加減です。DACはACアダプタです。ヘッドホンアンプは実験用電源でトランスのドロップ式です。
リレー式アッテネータは、なんでもいいだろうということで、実験用電源のDCDCです。
まずはこんな感じで試聴です。
試聴時の機器構成です。
ダイレクトな感じがいい!
一番気になったのは音量変化時のノイズですが、音楽がなっているときはほとんどわからないです。
無音時に変化させると、わずかちプチプチいう程度で、気になるほどではありません。無音時でノイズが聞こえるのは
DCオフセットを数mVでものっていると、それが変化するため音として聞こえてしまいます。DCオフセットがほぼゼロなら
このノイズも聞こえないでしょう。
それにしても試聴した印象は、ものすごく音がクリアーです。なにも邪魔なものがない感じ。
そりゃ、単なる抵抗のアッテネータですからね。よく、抵抗式のアッテネータだけでボリュームを構成されている方がおられますが、
その気持ちがよくわかります。このリレー式のアッテネータだと、さらに音量調整が細かくできるので、ある意味とても使い勝手もいいかも。
ただ、作るのはちょっと面倒ですが・・・・
これいい!
今回の試聴ではこれを主に聞きました。色々とネットで音楽を聞いていましたが、この曲がなぜか私の琴線に触れました。
YouTubeだと音質もあまりよくないので、おもわずこの曲が入っているCDアルバムを買ってしまいました。
fripSide - whitebird (Audio) - YouTube
この曲が琴線に触れました。思わずCDを買ってしまいました。
改善できるか?あれ???ハムが・・・・
リレー式アッテネータ基板の電源はDCDCをつかっていましたが、折角なのでこの部分をトランス式のドロップ電源に変えてみました。
これで、さらなる音質の改善が計れるかな?とおもいきや・・・・・・すこしハムが聞こえます。
なぜ?
基本的にはリレー式アッテネータではCPU部分の電源と減衰器の部分のGNDは分離しています。
それでもハムが発生しているということは、なにかしらの電磁誘導でしょう。色々と調べてみると、
設定する音量、すなわち動作するリレーの状態にとよってもハムの発生が変わるので、おそらくリレーのコイル
あたりに飛びついているのかもしれません。
そこで、対策としてはCPUの電源GNDとアンプの電源GNDを共有にしたところ、ピタリとハムが納まりました。
共有といっても、直結でなくても0.1uF程度のコンデンサで接続するだけで改善しました。どうやら、GNDレベルが
大きく異なっていたので、ノイズがのりやすい状態だったのでしょう。
PICの電源をトランスのドロップ電源に変えたらすこしハムが発生しました。そこで、アンプの電源GNDと共有するとハムはとまりました。
まだ疑問が残る・・・
PICの制御回路電源のGNDとアンプ電源のGNDを共有化することでノイズは消えましたが、なぜ最初にPICの制御電源をDCDCに
していたときはノイズが出なかったのだろう?理由としては、
@DCDC電源なので高周波数での駆動なので可聴域を超えている、
Aすでに電源のGNDが共有になっていた
のどちらかです。おそらく@だと思いますが、Aのケースも捨てきれません。
ということで、もう少し実験です。
今度は、リレー式アッテネータへの入出力のケーブルはかなり長めです。たぶんケーブルが長くてもノイズはでなさそうです。
今度は入出力のケーブルを長めにしてテストです。
構成はすこし変えて下図のようになります。ソースのDACとアンプはそれぞれ、AC100Vで動いていて、PIC制御回路は
高周波数のACアダプタで動かしています。
結果としてはこの構成ではノイズは聞こえませんでした。やはり、PIC制御回路に使う電源が原因かもしれません。
この構成ではハムノイズはでませんでした。やはり、ハムノイズの原因はPIC制御回路への誘導ノイズの飛びつきだったようです。
確認のために、上記のPIC制御回路の電源をトランスをつかったドロップ電源に変えました。するとハムノイズが発生しました。
そこで、先の対応と同様に、PIC制御電源のGNDをアンプのGNDを共有化すると、ぴたりとハムが消えました。
この構成ではPIC制御回路電源とアンプ電源のGNDを共有(コンデンサ等で結合)するとノイズは消えました。
GNDの配線ってやはり重要ですね。これ一つでハムノイズが大きく変わります。
GNDの引き回しは奥が深いな〜。
さて、ソフトを完成させましょう!
完成!? 2021.7.13
VRでも使用モードも追加して完成です。使うならVRモードよりはエンコーダモードでしょうか。
というのも、VRモードにするとリモコンでの音量制御ができません。MUTE-ON、MUTEーOFFはつかえますが、
そのためだけにリモコンを使うのも勿体ない感じです。
ついでに
リレーの遅延時間の遅延量も設定できるようにしました。
基板上のSWを長押しすると、リレー切替時の遅延量を100us〜450usで50us毎で変更できます。
この量を変えると、わずかですがボリューム変更時のクリックノイズが変わります。
リレーのロットでの個体差があるかもしれないので、これでもっとも小さいクリック音になるように調整すればいいでしょう。
デフォルトは300usにしています。でも、あまり差はないかもです.
リレーの遅延制御を100〜450usで可変できるようにもしてみました。あまり変化はしませんが・・・。
あ!値上げになった
このページを立ちあげたときはリードリレーは1個70円でしたが、予告通り90円に値上げされていました.
まあ、このリレーが販売された2010年当時から比べるとだいぶ円安になったからなあ〜.
70円からの約30%値上げになりました.
リリースします 2021.7.18
製作マニュアル:RelayAttenuatorManual.pdf
リリースする表面処理はいつもの金フラッシュです.
頒布のコーナのアンプのカテゴリに掲載しています.
マルチ化を考えてみましょう! 2021.9.7
このRelay-Attenuatorは1枚でスタンドアロンでの動作を前提としていましたが、複数枚つかってマルチチャンネルにも応用できそうです。
そのためには、外部で全体の減衰量をコントロールユニットを用意して、Relay-Attenuatorはそこからの信号を受け取って、動作するような
プログラムにする必要があります。
そこで、通信プロトコルについて考えてみました。
簡単に調歩同期にしましょう。
インターフェイス方法としてはSPIやI2Cなどがあげられますが、本数も多くなるし、それにそこまで速度を要求するものではないので
ここは簡単に調歩同期にしましょう。これならRelay-Attenuatorは受信するだけなので配線は1本で済みます。
通信速度: 19200B
19200Bだと1ビット時間は52usですから、PICでも余裕で処理ができます。ちなみにSmall-LED4では約100kBですので5倍以上の速度で通信
していますが、これは他の処理が色々あるので、できるだけ短くしたかったので無理しました。それに19200B程度でしたら、結構配線長が長くても
安定して動くのではないかな〜と思います。
通信フォーマット:8ビット 1スタートビット 1ストップビット ノンパリティ
これはオーソドックスにしました。というか、RS232の多くはこのフォーマットじゃないかな〜と思っています。
受信データ表:
8ビットデータになりますので、まずはMUTE-ON/OFFと減衰量の-79.5dB〜0.0dBを対応させます。
それと、動作モードを2つ切り替えられるようにして1つは減衰量をデータとして与えるモードと、もう一つは直接リレーの動作パターンを
変更できるモードです。このモードであれば、抵抗値を任意に変更することができますし、さらにうまく設定すれば0.25dBピッチなどの
細かい設定も可能です。
既定値は
減衰量−0dB、MUTE-ON、MODE1、DELAY=400usといったところでしょう。
まずはMUTE解除信号(0xA1)を送れば音がでるという算段です。
マスターユニットは何をつかおうかな?
PICOを使うという手もあるな〜。
ソースをオープンにすれば自由にカスタマイズもできそうです。
とりあえずは、RelayAttenuatorのソフトの改造を行ってみましょう。
まずはRelayAttenuatorのPIC改造
単純にデータを受信して、そのコードに基づいてリレーをセットするだけなので、プログラムは極めて簡単です.
元々のプログラムをガシガシと削って作成していきますが、出来上がったらなんと1/10以下のサイズになっていました.
そりゃ、元のプログラムは赤外線リモコンやSmall-LED4やRELAY6のインターフェイスももっていましたからね.
容量も少ないので、PICもPIC18シリーズではなくて、.PIC16F1でもいいかもしれないな〜.
で、とりあえず完成したので動作確認しようとしましたが、それにはコントローラのプログラムを書かないとだめだな〜.
こっちの方が時間がかかりそうです.まあ、夜の夜長に進めましょう! 最近、夜風も涼しくなってきました.
ところで・・・
減衰量の分解能0.5dBは最適化か? 2021.9.8
Relay-Attenuatorの減衰量の分解能は現状のソフトでは0.5dBに設定しています。この理由はいくつかあります。
1)0.5dBの差で十分
人間の耳で0.5dBの差を聞き分けるのは至難です。単音が流れていれば、減衰量が変化した瞬間はわかるかもしれませんが
2つの音を聞かされて「どちらの音が大きいですか?」なんていう問にはまず答えられないでしょう。いや、答えることはできても
当たっても偶然でしょう。ということもあり0.5dBもあれば十分と考えています。
2)LED表示が4桁しかない
減衰量の表示に使うLEDが4桁しかありませんから、マイナス表示も含めて”−12.5”と小数点は1桁しか表示できません。
となるとキリのいい0.5刻みがいいかな〜。
3)エンコーダを回すのが大変
-79.5dBから0dBまでを変化させようとしたら24クリックのエンコーダを6回転以上まわすことになります。このくらいなら、
まだ大丈夫ですがさらに細かくすると、もっと回す必要がありやってられません。エンコーダの処理に加速制御(早く回せば
増加・減衰量が大きくなる)を組み入ればいいのですが、これってエンコーダに取り付けるつまみの大きさにすごく依存するので、
下手につけると操作感が合わない場合がでてきます(操作量を可変できるようにすればいいのですが・・・)。
ということで、エンコーダを回す回数からも0.5dBが限界かな〜.
まあ、下の理由になるほど本質からはずれてしまいますが、ソフトを作る側からすれば切実な問題です(笑
でも、Relay-Attenuatorの動作原理からすればもっと細かい減衰量のステップにすることができます。
ということで、もっと分解能を上げた場合の誤差について計算してみました。
分解能0.25dBの場合
現状の分解能の半分になります。このときの誤差は下図のようになりました。
分解能を0.25dBにした場合の減衰量誤差。-10dB以上で大きくなり最大で0.08dB程度発生しています。
-10dB以上のところで誤差が大きくなりますが、0.25dBに分解能に比べたら十分に小さい気もします。
それに常用域は-40〜-20dB程度でしょうから、その間では0.03dBに納まっているので問題ないでしょう。
ちなみに-40〜-20dBって狭いように感じますが、電圧差でいえば10倍、電力差でいえば100倍の違いですから
結構幅があります。
ただ、0.25dB分解能にすると表示をどうしようか悩んでしまいます。4桁LEDだと小数点1桁ですから”-12.25”という
表示ができません。かといえって”−”を省略すると変だしな〜。"-12.25"は"-12.3"に丸めちゃおうかな?
でも、そうするくらいなら分解能をキリのいい0.2dBステップにしたほうがよさそうです。
分解能0.2dBの場合
ということで、今度は分解能0.2dBとした場合の誤差を再度計算してみました。
分解能を0.2dBにした場合の減衰量誤差。-3dB以上で急に大きくなり最大で0.15dB程度発生しています。
今度は-3dB以上のところで、急激に誤差が大きくなりました、ただ-3dB以上のところなんてほぼMAX音量ですから
誤差があっても、それ何?って感じでしょうか。常用域(-40〜-20)であればこちらも問題のない範囲です。
0.2dB分解能でもいいかもしれません。
分解能を上げる問題は・・・・
分解能を上げると、色々と問題がでてきます。
1)エンコーダ制御 ・・・これは先に述べた通りです。
2)クリックノイズが多くなる
分解能が上がるということは、それだけリレーの動作が増えるということですからクリックノイズの発生頻度が増えてしまいます。
もちろん、音量一定のときは関係ありませんがボリュームを上げ下げするときに、どのくらい気になるのか、それとも気にならないのか、
これは結構重要な問題かもしれません。
3)データ長が大きくなる
いま検討中のマルチ化ではデータフォーマットが変わってしまいます。というのも0.5dB分解能であれば160分割なので
8ビットあれば問題ありませんが、0.2dB分解能になると400分割になりますから、9ビット必要になります。
9ビットみたいな中途半端にするのはいやなので 2バイト、すなわち16ビットにするのでしょう。 でも16ビットにするくらいなら、
いっそのことリレーの設定パターンをRelay-Attenuator(スレーブ側) に持たせるのではなく、制御側(マスター側)に持たせる
ほうがいいのかもしれません。そうしたほうが、あとあとの拡張が容易になります。
でも、とりあえず気になるのは 2)クリックノイズ だなあ〜。一度、現状のソフトを変更して試してみようかなあ〜?
ソフト改造を試みる?
0.2dBステップにするとなると、色々と変更点があります. LEDの表示方法もそうですが、一番きついのはAD変換のノイズ対策かも
しれません.PICのAD分解能は10ビット(1023)を400ステップの減衰量に割り当てるわけですが、ボリュームの操作感覚を
よくするために、減衰量の大きいところ(-80〜-40dB)は速やかに通過する必要があります.となると、その部分は
AD変換値と減衰量ステップが1:1になりますから、AD変換時のノイズは許されません.かといって現状のようにノイズ耐性
を上げたプログラムにすると、減衰量の変化が飛び飛びになってしまう可能性があります.ちょっと気を使うところです.
まあ、それはあとの課題にしておいて、まずはクリックノイズの確認をしてみましょう.
変わらない? 2021.9.10
0.2dBステップに改造完了です。で、さっそくVRでの操作モードにして試聴してみましたが・・・・
あまり変わらないな〜という印象です。
まずボリュームによる音量変化のなめらかさですが、全然違いがわかりません。
そりゃ、1dB音量が変わってもほとんど気づかないくらいですから、ステップが0.5dBであっても0.2dBであっても
違いはわからないということでしょう。
あと、クリックノイズについてもほとんど差はないような感じです。もともと、クリックノイズ自体が小さいことと、
音量変化はソフトに変わるようにしているためでしょう。ソフトに変わるというのは、VRを急激に回しても音量自体の
変化は1ステップづつ時間をかけて動くようにしています。時間といっても1ms弱程度ですが、0.5dBステップの場合は
全部で160ステップあるので、音量をMINからMAXまで一気に回しても音量変化には0.16秒かかります。そして0.2dB
にすると400ステップですから0.4秒かかります。VR操作だとよくわかりますが、一気に回しても音量はすこし遅れて
変化する感じになります。
このように徐々に変わるために、クリックノイズの出方もほとんど変わらない感じだったのでしょう。
0.2dBステップに改造完了しました。表示の分解能が上がっています。
どっちにするの?
結果としては0.5dBステップを0.2dBステップにしても、ほとんどかわらなそうという感じです。
じゃあ、どっちにしよう? かわらないのであれば0.5dBのままでもよさそうだし、変わらないなら折角なので
0.2dBにしたら?という気もします。
ただ、VR操作ならいいですがロータリーエンコーダだと、加速制御の操作感の調整が難しいからな〜
もうちょっと悩んでみましょう。
リレーを追加注文! ああ・・・ひどいな・・・
このRelay Attenuatorはシンプルで5V単一電源で動くこともあり、結構お気に入りの1つです。
ということで、もう1個作ろうということで、マルチ化もあるので新たにリレーを秋月で注文しました。28個必要ですが、
不良の発生も報告されているので余裕をもって30個注文です。
報告されているような不良にあたるか、それとも当たらないか・・・・
普通ならば、不良に当たるのは宝くじみたいな感じだと思っていましたが、蓋をあけたらひどいものでした。
リレーが30個とどきました。
動作チェックの環境整備
30個のチェックなので、簡単にOPアンプとPICをつかって、接触抵抗と動作時間が計れるような環境を整備しました。
回路はこんな形でつくりました。接触抵抗を計るために、通電を約50mA程度流して接点間の電圧を測定します。
測定ゲインは約500倍です。5V単一電源で動くレールtoレールのOPアンプで差動アンプを構成しています。
まずは接触抵抗・・・あちゃ〜
まずは動作することが大前提です。で、接触抵抗をみてみると下図のようになりました。
なんと30個中、4個も導通がありません。コイルが断線しているもの、コイルは動いているが接点が接触していないものなどです。
30個中4個の不良って、これってひょっとして大当たりだろうか。
なお、普通に動いているものの接触抵抗はおよそ60〜70mΩといったところでした。スペック上は150mΩになっています。
動作時間はどうかな? あ!亀がいる。
ON時間の計測は、接触が安定して、ADCが一定の電圧になるまでの時間を計測しているので、
本来のリレーの動作時間とはことなるかもしれませんが、実際にはこの時間が重要です。
測定してみるとON時間はだいたい400us程度とスペックを満たしていますが、1個だけ
500usを超えるものがありました。なお、これは初回通電時の値で2回目測定したら少しだけ
オーバで、3回目以降は480usでした。一応スペック内だけどぎりぎりです。でも、初回で
アウトだからこれも不良の一つになるでしょう。
ON時間はだいたいは400us程度ですが、中にはスペック(500us)を超えるものがありました。
OFF時間はスペック(200us)にくらべて十分早いようです。
ディジタル的な動作速度はどうだろう?
こんどは、ADを使った測定ではなく、単なるスイッチとしてみてみます。すなわちバウンシングは無視して
最初のコンタクトあるいはリリースでの時間を測定してみました。ADを使わないので、より細かい計測ができます。
ADをつかうと、時間分解能が20us程度になってしまいますが、単なるディジタルのON/OFFの計測なら
1us以下の分解能を得ることができます。
で、結果は下記の通りです。
ON時間についてはおよそ200us程度で、ADをつかった時間400usの約半分ですから、
およそ200us程度はバウンシングしていて安定していない状態なのかもしれません。
OFF時間については、ほぼADでの測定時間と同じです すなわち接点が離れるときにはバウンシングしないということでしょう。
まあ、それにしても結構値がばらつきますね。
リレー通電後のコンタクト時間です(バウンシングは無視)
なお400usのデータはADでの測定の亀だったリレーです。
リレーOFF後の開放時間です。
なるほど!
ここで、バラつきの原因を調べるためリレーのコンタクト時間とリリース時間の相関をプロットしてみました。
すると、かなり高い相関があることがわかります。すなわち
コンタクト時間が長いリレーは開放時間が短い
ということですね。
コンタクト時間と開放時間にはかなりつよい相関があるようです。
おそらく、これはリードリレーの構造(下図)にあるように、製造時の接点の間隔のバラつきが影響しているのでしょう。
ファインコム リレーの基礎知識5 (finecom.co.jp)
すなわち、接点の間隔が大きいと、コンタクトの時間がかかる(これは直観的にわかる)。
ただし、コンタクトした状態では間隔が大きいために電極のバネには大きな力がかかっており、
電流が小さくなるとすぐに離れてしまうということでしょう。
反対に接点の間隔が小さいと、コンタクトの時間が短い(これも直観的にわかる)。
しかし電極であるバネの変形量が小さいので、保磁力もあり電流が小さくなってもなかなか離れない。
最悪の場合は、強磁性体であるので保磁力だけで接触が維持されてしまうかもしれません。
といったところでしょうね。
結果としては・・・・
30個購入したリレーのうち、亀も含めると5個のリレーが不良品でした。率にすると17%です。
普通、部品の不良率なんてPPMやPPBのオーダなのにパーセントのオーダとはひどすぎます。
これは、製造メーカが完全に検品作業を省略していますね。
でもまあ、おかげで色々と調べることもできました。一応怪我の功名ということにしておきましょう。
あ、でも足りないリレーを補充しないと・・・・。そして、実際に実装する前にはもう一度
動作を確認しておきましょう。
ところで・・・(ところで、ばっかりだなあ〜) 2021.9.11
エンコーダの回転速度って?
音量のステップを0.2dBにするとエンコーダ(24回転)をつかうと最小から最大まで16回以上もつまみを回すことになります。
まあ、日頃の運動不足の解消につながるかもしれませんが、その前に手首を痛めてしまいそう。あるいは腱鞘炎かな?
そのため、つまみをはやく回せばそれに応じて増加量を加速させる加速制御が必要なわけですが、回転速度は人によっても
異なるし、つまみの大きさによっても変わります。そこで、自分の場合の回転数について調べてみました。
つまみは大小で2つ用意しました。
つまみ | 普通に回した場合 | 早く回した場合 |
比較的大きいつまみです。 直径30mm。 |
間隔の狭いところで33ms/パルスです。 回転数:1.26rps程度 |
間隔の狭いところで10ms/パルスです。 回転数:4.16rpsrps程度 |
小さいつまみです。直径12mm |
間隔の狭いところで35ms/パルスです。 回転数:1.19rps程度 |
間隔の狭いところで10ms/パルスです。 回転数:4.16rps程度 |
今回は2つのつまみを使いましたが、どちらも全体的に小さいこともあってか大きな違いはでませんでした。
普通に回す場合: 約1.2回転/秒
早く回す場合: 約4.2回転/秒
という感じになりました。加速制御としては1.5回転/秒を超えるあたりから加速制御を開始すればいいかもです。
そして、早く回せば1回転程度で最大値までにしたいところですから、最大16倍程度まで加速すればいいでしょう。
加速量は対数的に考えるのか、リニアなほうがいいかは操作感からの選択でしょう。
回転数 (rps) |
増加 ステップ 案1(対数) |
案1の パルス間隔 (ms) |
増加 ステップ 案2(リニア) |
1.5以下 | 1 | 28以下 | 1 |
1.5〜2 | 2 | 28〜21 | 28 - パルス間隔 最小:1 最大:16 |
2〜2.5 | 4 | 21〜17 | |
2.5〜3 | 7 | 17〜14 | |
3〜3.5 | 11 | 14〜12 | |
3.5以上 | 16 | 12以下 | 16 |
早すぎる〜 2021.9.12
上記の案1のステップで行いましたが、上昇・下降が早すぎます。
たしかに、シャッ、シャッと2回ほど回せば最大値まで増えますが、感覚的に急すぎます。
そのため、上昇率を約1/2〜1/3程度に押さえました(下表)。
結局のところ増加量は対数じゃなくてリニアになってしまいました。
でも、感覚的にこのくらいのほうが安心して操作できます。
回転数 (rps) |
増加 ステップ |
案1の パルス間隔 (ms) |
1.5以下 | 1 | 28以下 |
1.5〜2 | 2 | 28〜21 |
2〜2.5 | 3 | 21〜17 |
2.5〜3 | 4 | 17〜14 |
3〜3.5 | 5 | 14〜12 |
3.5以上 | 7 | 12以下 |
j実際に鳴らしてみて、ボリュームの操作感覚には違和感はなさそうです。
問題は赤外線リモコンか?
赤外線のリモコンはボタンを押しつづけるとコードがリピートされて送られますが、その間隔は
NECフォーマットや家電協フォーマットで約100ms、SONYフォーマットでも50ms程度です。
となると、コードを受け取って1つづつ動かすと400ステップなのでそれぞれで40秒、20秒かかってしまいます。
さすがにこれは長いです。押し続けて5秒程度で最小から最大まで動かないといらいらします。
となると、長押しモードを検知して1回の受信で8ステップ、4ステップ動かせばいいことになりますが、
リモコンの種類も見分けないといけないから面倒だなあ〜。
さて、どうしようか?
マルチ化にもどりましょう 2021.9.15
とりあえず0.2dBステップ化はペンディングにして、マルチ化にもどりましょう.
マルチ化の方法(当初案
マルチ化の方法としては、現在のRelayAttenuatorにスレーブ制御用のPICを搭載して、全体を制御するマスターPICの
下にぶら下げる方法を考えていました.ちょど下図のような感じです. マスタ用のPICにはエンコーダやLEDなどの
I/Oがとりつくことになりますが、反対にいえば取りつくのはそれだけになりますから簡単にユニバーサル基板にもで
組めばいいかな〜と思っていました.そして、シンプルに表示器もLEDだけにすれば配線も随分すくなくなります.
当初考えていたマルチ化のための配線案です.
でも、簡単だといってもユニバーサル基板に組むのも面倒だしな〜. それに基板サイズもあわないだろうから
ケースに入れるのも面倒になりそうだな〜.
と、色々考えて上記の案はもうちょっと考え直すことにしました.
マルチ化の方法(案2
そこで、下図のような案を考えてみました.CH.1の基板をマスターにして、スレーブとなるCH.2〜CH.4については
CH.1からデータを受け取る方法です.ちょうどRelayATTENUATORのMODE2設定の端子が未使用なので、
このポートをつかってマスターとスレーブ間で通信を行います. ただし、使えるポートはこのMODE2設定の1本だけなので
ここにスレーブがすべてぶら下がることになります.
このような構成にすると、ユニバーサル基板をつかって配線をするようなことは避けられます.
マルチ化としてはこの配線方法がスッキリしそうです.
このMODE2のジャンパーは現在つかっていないので、これをつかって通信しましょう.
課題としては1本の通信線で最大3個のスレーブへのデータを送信しなくてはいけなくなるので、
送信するデータにはチャンネルを表すアドレスと、減衰量のデータの両方が必要です.それも、
できるだけスレーブにすみやかに送信したいので、通信速度も上げたくなります.
通信方法を変更!
まず必要なデータはアドレス2ビットとデータはリレーの数で14ビットとして全体は16ビットとします.
8ビットデータとして2回にわけけてもいいですが、スタートビットとストップビットが冗長になってきます.
かといって、16ビットを一気に送るには調歩同期方式ではクロックの精度がシビアになってきます.
そこで、赤外線リモコンのフォーマットを参考にして、H,Lのビット長さで1,0を表すことにしました.
ちょうど、下図のようなフォーマットです
こんなフォーマットにすればどうだろう?
まず最初にスタートビットがありますが、この長さ2Tとします.そして16ビットなので8回分HとLを繰り返しますが、その長さが2Tを超えれば1、
そして2T以下であれば0として扱います. 送る方は余裕をもたせて1の場合の長さは3T、0の場合の長さはTとします.
この方法だと、送るデータによって通信速度は変化してしまいますが、それは気にする必要はありません. むしろスタートビットの長さを基準にするので
送り側のPICの速度を変更しても、受信側は気にする必要がありません. といっても、PICの速度を変更する必要はあまりないですが.
試しにこの方法で通信テストをおこなったところ、T=2usで十分に余裕をもって通信できることがわかりました.
ボーレイトに換算すると、約500kbps〜166kbpsといったところです. 当初予定の19200bpsの10倍以上になります.
こんな使い方も?
配線が一本だけになるので(正確にはGNDを含めて2本)、こんな形もありかもしれません.まあ、かなり変則的な使い方ではあります.
プルアップ抵抗を低めに設定しておけば、数mくらいの延長はできるでしょう.
有線での遠隔操作もできるかな?
通信フォーマット検討(備忘録) 2021.9.17
通信データはアドレス2ビット、データ14ビットの16ビットを考えていましたが、もうちょっと色々な機能が込められるように
すこし長くなりますが24ビット長で検討です。以下、備忘録みたいなものです。
Bit | 内容 | ||
23 | Relay Attenuator スレーブ チャンネル |
ADR3 | 0x0 〜 0xE : スレーブチャンネルCH.0〜CH.14 0xF 全スレーブチャンネル共通 |
22 | ADR2 | ||
21 | ADR1 | ||
20 | ADR0 | ||
19 | コマンド | COM3 | 0x0 RELAYデータ設定(動作遅延制御有り) 0x1 RELAYデータ設定(動作遅延制御無し) 0x2 RELAY-ON TIME (時間はパラメータで設定。x100us) 0x3 RELAY-OFF TIME (時間はパラメータで設定。x100us) 0x4 スレーブチェック 0x5 - 0xF 予約 |
18 | COM2 | ||
17 | COM1 | ||
16 | COM0 | ||
15 | リレー設定データ あるいは パラメータ |
RELAY MUTE | 1: MUTE RY-ACTIVE (MUTE OFF) 0: MUTE RY-INACTIVE (MUTE ON) |
14 | 予約 | ||
13 | Relay R1-5 | 1: RELAY-ON 0: RELAY-OFF |
|
12 | Relay R1-4 | ||
11 | Relay R1-3 | ||
10 | Relay R1-2 | ||
9 | Relay R1-1 | ||
8 | Relay R1-0 | ||
7 | Relay R0-7 | ||
6 | Relay R0-6 | ||
5 | Relay R0-5 | ||
4 | Relay R0-4 | ||
3 | Relay R0-3 | ||
2 | Relay R0-2 | ||
1 | Relay R0-1 | ||
0 | Relay R0-0 |
色々と考えて、RelayAttenuatorは最大15台まで接続できるようにしたいと思います。
まあ、それだけ使うことはないのですが、自分のシステムで考えても3WAYのマルチにサブウーハを加えると
それだけで4台必要です。さらにヘッドホンや普通のスピーカ用に2台必要です。合計6台です。
ここで最大で15台接続できるとして、SWだけでパラメータを選択するにはあまりにもSW操作が多くなります。
それに、多くは接続しても1〜2台でしょう。そのため、接続されているRelayAttenuatorを認識する機能を
組み入れて、接続されているチャンネルのみが選択されるようにしたいと思います。
ちょっと、脇道・・・ 2021.10.4
激安リードリレーを買ってみました
マルチ化を考えたときに、あとRelay Attenuatorは2〜3枚は追加で作っておきたいところです。この基板で一番コストがかかるのはリードリレーです。
1枚の基板あたり28個必要ですが秋月でダイオード内蔵を購入すると2520円です。3枚作ると7500円かあ〜。
もうちょっと安いリードリレーがないかな〜とALIを探してみると、色々とありました。形状はほぼ同じですが、それでも価格は1個あたり40〜50円します。
あまり秋月と変わらないな〜。それに不良品が混じっていても秋月だと対応もいいから安心です。どうしよう?
さらに探すと、かなり安いものが見つかりました。20個で464円です。送料が必要なので、ある程度数量は必要です。
3枚分には84個必要ですが、不良率を見込んで100個購入すれば送料込みでも1個あたり29.96円となり、かなり安くなりそうです。
ただ、メーカとかなんの情報もないので、すこし不安はあります。
でも、ここは怖いもの見たさで購入してみましょう!
これを100個購入してみました。送料込みで2996円でした。 |
到着!
しばらくすると荷物が到着していました。相変わらずの簡易包装です。
こんな形で送付されてきます。 簡易包装です。
20個入りの袋が5つはいっていました。
安さの要因はこれか!
袋を開封してリレーを取り出しました。そしで、安価な理由がすぐにわかりました。
再生品です。というか中古ですね。どこかの基板に取りついていたものを取り外したもののようです。
そのため、足が曲がっていたり、半田が多く残っていたりと、まあいろいろあります。
さらに、メーカも2種類あって、製造ロット番号もまちまちです。
資源を無駄にしないことから再生品でもいいかもしれませんが・・・・気にする人は気になるだろうな〜。
まあ、最初から気になる人はこんなものには手を出さないでしょうが・・・・。
でも、前向きに考えると再生品ということは、元基板は検品に合格したものだろうから
このリレーについても動作品だったはずです。ということは、案外不良品は少ないのかもしれません。
再生品でした。足がかなり曲がっているものが多いです。
半田残りが多いものもあります。事前に除去しないとブレッドボードに刺さりません。
まずは外観チェック!
全部で100個ありますが、まずは外観チェックです。そして、足曲がりのあるものは修正です。
1つだけ、最初から足が1本無いものがありました。蟹ですら足が1本なければ価値が大きく下がるのに、リレーで足が1本でもなければ
無価値だよな〜と変なことを思ってしまいました。さらに、足曲がりのひどいもの(ほぼ直角に曲がっている)ものを修正したら、2個のリレーで
足が折れてしまいました。結局のところ、外観チェックの時点で3個(3%)が脱落です。
最初に外観チェックです。ついでに足曲がりも修正です。もともと足が折れていたものや、修正時に足折れの発生などで3個が不良ではじかれました。
入っていたのはこのメーカのものです。ロット番号はバラバラです。
動作チェック!
外観チェックが済んだので、次は動作チェックです。PICにチェックプログラムを書き込んで1個ずつON時間とOFF時間を
調べます。ON時間はチャタリングを無視しているので、最初にコンタクトした時間を調べています。チャタリングを考えると
動作時間は下図のON時間+100us程度でしょう。OFF時はほとんどチャタリングはないでしょうから、下図の時間がそのまま
つかえるはずです。
調査した結果では、接点不良のものが1個みつかりましたが、その他は問題なく動作しました。1,2個ですが
ON時間あるいはOFF時間が大きいものがありますが、このリレーの仕様を調べると0.5msでしたので、仕様の範囲内のようです。
でも、ちょっとこれを使うのはやめておきましょう。
結局のところ、100個購入して外観不良品3個と動作不良品1個、そしてちょっと動作が遅いものが2個ということで、
使用可能なものは94個になりました。実質の不良率は6%です。そのため、単価は約32円といったところです。
でも、再生品ということを考えると、かなりいいほうかも。とくに、動作不良が分かったのは1個のみでした。
上:ON時間、下:OFF時間。1個だけ大きくOFF時間が大きいものがありましたが仕様(0.5ms)内のようです。
チェック(内訳) | 個数 | 備考 |
足折れ | 1 | |
曲がり修正時に足折れ | 2 | |
動作不良(接点不良) | 1 | |
ややOFF時間遅い |
1 | (但し仕様範囲) |
ややON時間遅い | 1 | (但し仕様範囲) |
正常動作 | 94 | 実質単価 31.9円 |
合計 | 100 | 送料込み2996円 |
ついでに、ON時間とOFF時間の相関を調べてみましたが、お互いに負の相関になるようですね。
これは、先に調べた結果と同傾向です。
リレーのON時間とOFF時間には負の相関があります。
ラッキー! 2021.10.5
激安リレーの動作チェック中に、向きを反対にとりつけたら動作しません。ひょっとしてダイオード内蔵かな?
と思い調べてみたらダイオード入っていました。これはラッキーです。でも、全部にダイオードが入っているかは
心配だなあ〜。ちょっと気になるから、念のため外付けしておいたほうがよさそうかも。
秋月で500本500円で買ったのがあるから、それをとりつけましょう。
激安リードリレーで基板を組み立てましょう
購入した勢いで基板も組み立てておきましょう。
ここで間を空けたら、大量のリードが部品箱の肥やしになりそうです。
追加で2枚作成です。抵抗を取り付ける前にリレーの動作チェックを行う予定です。
ダイオードはリード品を直接とりつけています。
これで4枚分のRelay Attenuatorが揃いました。
抵抗も実装完了! 2021.10.7
さらに基板を1枚製作です。リードリレーを余らしてもしかたないので、ついでにつくりました。
抵抗をとりつける前に、リレーの動作を確認したら3箇所動きませんでした。よくみたら、3箇所とも半田付け忘れでした。
都合5枚のRELAY ATTENUATOR基板が揃いました。1枚をマスターにして、残りをスレーブにしてソフト開発を進めましょう。
(つづく????)