2017年9月3日日曜日

AD8402 Wien Bridge DCOの構想


以前「ウィーンブリッジ回路をAD8403で制御する。」でウィーンブリッジ正弦波発振器の実験をしたが、可変抵抗は2個でいいので2回路入りのAD8402/10kでやってみた。

回路図

AD8402も電源電圧は2.7V~5.5Vなので、発振回路のOPAMPには低電圧フルスイングのNJM2732を使い、5V単電源で、レールスプリッターのTLE2426を使ってVCC/2の仮想GNDを作っている。

出力はGNDに対する振幅にするためにACカップリングした。

発振周波数foscは、AD8402で生成する抵抗値をR、C=C1、C2とすると、

fosc = 1 / (2 * π * R * C)

で、AD8402の最小抵抗値は約50Ωなので、約33.9Hz~6776Hzになる。

ブレッドボードで実験


配線図

電源はUSB経由でArduinoの電源を使い、実測値+4.89V、仮想GNDは+2.44V。負荷には1kΩの抵抗を入れた。

R1の5kΩのトリムPOTを出力があまり歪まない程度にできるだけ大きくなるように調整した。

Arduinoのスケッチ
<AD8402_WeinBridge.ino>

/*
  Wein Bridge Control

  AD8402

  POTの出力電圧を読み取って
  Digi-Potのチャンネル1, 2の抵抗値を可変

  Pinの接続
  A0 POT1
  10 CS
  11 MOSI
  13 SCK
*/

// inslude the SPI library:
#include <SPI.h>

// set pin 10 as the slave select for the digital pot:
const int slaveSelectPin = 10;

byte v0;

void setup() {
  // set the slaveSelectPin as an output:
  pinMode (slaveSelectPin, OUTPUT);
  digitalWrite(slaveSelectPin, HIGH);
  // initialize SPI:
  SPI.begin();
  delay(1);

  Serial.begin(9600);  
  Serial.println("Wein Bridge Test.");
}

void loop() {
  int v = analogRead(0) / 4;
  if (v != v0) {
    v0 = v;
  
    Serial.print(v0);
    Serial.print("\n");
    
    digitalPotWrite(0, v0);
    digitalPotWrite(1, v0);
  }
}

void digitalPotWrite(int address, int value) {
  // take the SS pin low to select the chip:
  digitalWrite(slaveSelectPin, LOW);
  //  send in the address and value via SPI:
  SPI.transfer(address);
  SPI.transfer(value);
  // take the SS pin high to de-select the chip:
  digitalWrite(slaveSelectPin, HIGH);
}

AD8402の抵抗値を変化させて正弦波出力を見てみた。電源を入れた状態でAD8402のch1とch2の抵抗値も測定してみた。

v0=255

AD8402 Ch1: 9.30kΩ
AD8402 Ch2: 9.32kΩ

F:35.46Hz
Vp-p: 4.280V

v0=163

AD8402 Ch1: 5.97kΩ
AD8402 Ch2: 5.97kΩ

F:55.33Hz
Vp-p:3.80V

v0=89

AD8402 Ch1: 3.28kΩ
AD8402 Ch2: 3.28kΩ

F:100.6Hz
Vp-p: 3.720V

v0=20

AD8402 Ch1: 773Ω
AD8402 Ch2: 774Ω

F:426.7Hz
Vp-p:3.88V

v0=15

AD8402 Ch1: 594Ω
AD8402 Ch2: 596Ω

F:554.8Hz
Vp-p:3.84V

v0=10

AD8402 Ch1: 413Ω
AD8402 Ch2: 415Ω

F:798.7Hz
Vp-p: 3.520V

v0=5

AD8402 Ch1: 231Ω
AD8402 Ch2: 232Ω

F:1.427kHz
Vp-p: 2.640V

v0=2

AD8402 Ch1: 123.2Ω
AD8402 Ch2: 122.2Ω

F:2.692kHz
Vp-p: 2.080V

v0=1

AD8402 Ch1: 86.0Ω
AD8402 Ch2: 87.2Ω

F:3.799kHz
Vp-p:1.800V

v0=0

AD8402 Ch1: 49.5Ω
AD8402 Ch2: 49.3Ω

F:6.618kHz
Vp-p:1.270V


1kHz以下の出力振幅が何か変な感じだが、AD8402の抵抗値を測定するためにケーブルを抜き差ししたのが原因かもしれない?もう一度計り直したほうがいいかも。

また、AD8402に設定値v0が0と1のときは振幅が小さいだけでなく波形が歪んでいる。

ACカップリングのCの容量


低周波数も出力できるように出力のACカップリング用のコンデンサの容量は少し大きめの100uFにした。

最低周波数に設定して、10uFと100uFに差し替えて、負荷を1kΩにして比較してみた。

100uF(無負荷)

Vp-p:4.960V

10uF(無負荷)

Vp-p:4.920V

100uF(1kΩ負荷)

Vp-p:4.440V

10uF(1kΩ負荷)

Vp-p:4.040V

無負荷時はどちらも出力レベルが同等だが、1kΩ負荷時は10uFの方が出力レベルが下がっている。

周波数が50Hzのときインピーダンスは10uFで約318Ω、100uFで約31.8Ωになるので、10uFでカップリングすると出力先によっては音痩せするかもしれない。

FFT


55.1Hz出力

2.5kHz/div (全幅で25kHz)

500kHz/div (全幅で5MHz)

SPI通信由来のノイズが心配だったが、出力振幅が4Vp-p程度と大きいので目立ったノイズは乗っていない。

WaveSpectraで測定

高調波歪はまあまあ多い。特に奇数次の歪が出ている。奇数次が多いのは矩形波っぽい歪でしたっけ(^q^?