2021年12月28日火曜日

ホワイトノイズ発生回路の実験

NPNトランジスタのベース・エミッタ間に逆電圧を加えノイズを生成する回路を2つ実験しました。電源の+12VはERK01(商用電源→スイッチング電源→3端子レギュレーター)からとりました。

その1



回路図

左側のNPNトランジスタのベースを接地し、エミッタに正電圧をかけてベース・エミッタ間に逆電圧を掛け、右側の自己バイアスを掛けたNPNトランジスタで電圧増幅する回路です。増幅用のトランジスタはhfeが大きいほうが(2SC1815ならBランクやGRランク)大きな振幅が出力できます。

ブレッドボード配線


出力波形

約1.8Vppのホワイトノイズ波形が得られました。0~400kHzのFFTでは高域が5dB程度減衰するようです。

スペクトラム 0~20kHz

0~20kHzレンジではほぼ一定の周波数特性が得られました。

スペクトラム 0~1kHz

0~1kHzレンジでも商用電源を使っていますが60Hz付近のハムノイズも見られません。

その2


回路図

左側のNPNトランジスタのエミッタ側に正電圧を掛け、ベースに現れた電位を右側のNPNトランジスタのベースに入力してエミッタ接地で増幅する回路です。

ブレッドボード配線


出力波形

約1.1Vppのホワイトノイズが得られました。0~400kHzのFFTでは高域が5dB程度減衰するようです。

スペクトラム 0~20kHz

0~20kHzレンジではほぼ一定の周波数特性が得られました。

スペクトラム 0~1kHz

こちらもハムノイズは見られません。

メモ


その2の回路はブレッドボードでの配線では出力振幅が変わるなど不安定なようです。

どちらも1Vpp以上は出力できているので、10Vppの振幅を得るには後段のアンプは10倍以下の増幅で済みそうです。

2021年12月22日水曜日

ERK01-EX ユーロラック増設

自作のユーロラック ERK01が一杯になってしまったので増設しました。ERK01初号機とほぼ同じ作りですが、電源部がないため初号機より高さが低くなっています。電源は初号機から引きます。


材料


FFR型フロントレール 431.8mm【FFR-43N】2本 \1562@マルツ
BN型レール用バーナット【BN43-M3】2本 \649@マルツ
MDF 300mm×400mm×5.5mm 1枚 300円程度

フロントレールを側板に取り付けるビスはフロントレールに付属しています。

仕上がり寸法


板加工


切りしろ(3mm)を入れると縦方向の余りが1mmになってしまうため、加工が難しいです。ホームセンターで切ってもらいましたが、137mm指定のところが仕上がりは136mmになってしまいました。同じ板寸を使うなら奥行きを150mm程度にしたほうが良さそうです。

仮組み


レールの両端にパネルを取り付けておくと組み立てが楽です。私はレファレンスとしてDoepferのブランクパネルを利用しています。


底板の接着


底板は木工ボンドのみで接着しました。圧着にはハタガネを利用しました。540mmで1本1500円以上しますがあると便利です。

電源基板の取り付け



自作の電源基板のERK01_PSU_EXTの穴径はM3用の3.2mmφです。中空のスペーサーを入れてタッピングビスで固定しました。

タッピングビス なべタッピング 3×10 4本
中空スペーサー M3×5mm 4個

2021年12月5日日曜日

ArEG Arduinoを使ったEnvelope Generatorの構想

以前もArduinoを利用してEnvelope Generatorを製作しました。 今回はその改良版を製作します。

ステート制御にGPIOを3ステートで利用


コンデンサへの充放電の制御にダイオードを使って電流の逆流を防止していましたが、AVRのGPIOはWriteモードの時H/L出力できるのに加えて、Readモードの時Hi-Zとなる3ステートバッファとなっています。Hi-Zを使えばダイオードを入れなくても電流が流れなくなります。

利点としては、555タイマーやロジックICを使った場合に比べ部品数を少なくできること、またダイオードを入れないのでダイオードの順方向電圧のため波形の底が0Vまで落ちない(0.6V程度になってしまう)問題が解消されます。

ADSR波形のステートについては「アナログ・エンベロープ・ジェネレーターをプログラムでシミュレートする」で少し書きました。

回路図

実験に使った回路のアナログ部分です。回路図のSWは実際にはAVRのGPIOです。

閾値の判定にコンパレーターを使う


Attackステートは出力波形がある電位(今回は3.3V)に達した時終了し、Decayステートに移行します。ADコンバーターを使って電位を測定することもできますが、処理に時間がかかるためAttackの立ち上がりが急峻な場合行き過ぎてしまいます。

コンパレーターを使って閾値を越えたかどうか判定し(閾値の前後でH/Lが切り替わる)コンパレーターの出力でAVRの割り込みを発生させる方法を取りました。

また、ヒステリシス付きコンパレーターでないとSustainレベルが高い場合に出力がバタついてしまいます。プログラムで回避する方法もあるのですが、ノイズ源になりそうなのでコンパレーターはヒステリシス付きにしました。

コンパレーター出力のバタ付く例

C1:ADSR出力 C2:Threshold

ヒステリシス付き反転入力コンパレーター部分のシミュレーション

定数はVh=3.3V Vl=3.0Vを目標に決めています。

実験したブレッドボード配線図

Arduinoのスケッチ
/*
 * ADSR Switch Test
 * 
 * スレッショルド割り込み: 負論理
 *
 * 2021.11.27
 *
 */

const int ThresholdPin = 2; // INT0

const int AttackPin = 5;
const int DecayPin = 6;
const int ReleasePin = 7;

volatile bool th = false; 

void threshold()
{
  th = true;
}

void setup()
{
  pinMode(AttackPin, INPUT);  // Hi-Z
  pinMode(DecayPin, INPUT);   // Hi-Z
  pinMode(ReleasePin, INPUT); // Hi-Z

  // 負論理
  attachInterrupt(digitalPinToInterrupt(ThresholdPin), threshold, FALLING);
  // 正論理
  //attachInterrupt(digitalPinToInterrupt(ThresholdPin), threshold, RISING);
    
  Serial.begin(9600);
}

void loop()
{
  th = false;
  
  // Attack
  pinMode(DecayPin, INPUT);   // Hi-Z
  pinMode(ReleasePin, INPUT); // Hi-Z
  pinMode(AttackPin, OUTPUT);
  digitalWrite(AttackPin, HIGH);

  while (th == false) // スレッショルド割り込みを待つ
    ;
  
  // Decay
  pinMode(AttackPin, INPUT); // Hi-Z
  pinMode(DecayPin, OUTPUT);
  digitalWrite(DecayPin, LOW);
  delay(80);
  
  // Release
  pinMode(ReleasePin, OUTPUT);
  digitalWrite(ReleasePin, LOW);
  delay(100);
}

検証のため、Gate信号入力はなくプログラムでDecay→Releaseを切り替えています。実用的には、delay()関数で制御している部分をGate信号の割り込み処理に置き換えます。

出力波形

C1:ADSR出力 C2:Threshold

反転入力 or 非反転入力のコンパレーター


ヒステリシス付きコンパレーターは反転入力、非反転入力がありますが入力が閾値を上回った場合、出力がHになるかLになるかの違いがあります。プログラム次第でどちらでも使えそうですが、非反転入力の場合は問題があります。

非反転入力のヒステリシス付きコンパレーターを使った回路

右下の「Threshold」出力の回路が異なります。

ヒステリシス付き非反転入力コンパレーター部分のシミュレーション

こちらも定数はVh=3.3V Vl=3.0Vを目標に決めています。(少しずれてしまっていますが本題とはあまり関係ない)

ブレッドボード配線図

この場合コンパレーターの出力が入力に影響を与えてしまいます。


C1:ADSR出力 C2:Threshold

ThresholdがHの場合とLの場合でDecayの波形が異なってしまい段差が出ています。

次図のように入力インピーダンスが高い反転入力の場合は同じパラメータでも影響が出ません。


ヒステリシス付きコンパレーターは正帰還を掛けるので、負帰還を掛ける増幅回路とは逆に、非反転入力の方が入力インピーダンスが低く、反転入力の方が入力インピーダンスが高くなります。