製作モジュール一覧

ラベル 正弦波発振 の投稿を表示しています。 すべての投稿を表示
ラベル 正弦波発振 の投稿を表示しています。 すべての投稿を表示

2020年3月7日土曜日

Analog Discovery 2 2相正弦波発振器の測定

2相正弦波発振器は比較的低歪な正弦波が得られる発振器です。AnalogDiscovery2とPCのWaveSpectraを使って歪み率を測定しました。

回路は「回路の素101」を参考にしました。



回路図

OPAMPはLTSpiceの「opamp2」コンポーネントを使って特定の品種(NJM4580)を指定しています。「UniversalOpamp2」では発振のシミュレーションができないためです。

過渡解析

SIN波形は比較的きれいですが、COS波形見るからに歪んでいます。COS出力側はD1、D2によるリミッターが付いているためです。

ブレッドボード図

実験のようす

電源電圧: ±9V

AnalogDiscovery2による測定


Scope

C1:SIN出力 C2:COS出力

シミュレーションと同じようにCOS側は歪んでいます。

Spectrum

Mesurements機能を使ってTHDpを表示させました。

SIN出力: 0.6502%
COS出力: 1.729%

となっています。

周波数特性を見ると、45kHz付近にピークが見られますが、どうやらAnalogDiscovery2固有のもので無信号時にも現れます。

WaveSpectraによる測定


Audio Interface: TASCAM US-144MKII(24bit/96kHz)

SIN出力

THD: 0.50076%

COS出力

THD: 1.55705%

多少差はありますが、AD2とWaveSpectraで似通った結果となりました。

AD2のWaveforms2は機能が多くて使い方はまだよくわかってませんが、今回はこれぐらいで。

2019年10月21日月曜日

ウィーンブリッジ発振回路の2つの抵抗の誤差

ウィーンブリッジ発信回路の発振周波数を2連POTで制御するとき2つのチャンネル間の誤差がどれぐらい特性に影響を与えるか実験してみました。

シミュレーション回路図

R4とR5が2連POTです。実験のためR4=4.7kΩとし、R5は3.9kΩ+αΩのRを直列にして誤差を作ることにしました。
3.9kΩ+560Ω=4.46kΩ
3.9kΩ+680Ω=4.58kΩ
3.9kΩ+820Ω=4.72kΩ
3.9kΩ+1kΩ=4.9kΩ
3.9kΩ+1.2kΩ=5.1kΩ
過渡解析

R4とR5の誤差によって振幅が大きく変わります。OPAMPの正帰還に入っているバンド・パス・フィルターの選択度が誤差により変わるためでしょう。

バンド・パス・フィルター部分のみ取り出してシミュレーションしてみました。

シミュレーション回路図

過渡解析

バンド・パス・フィルター部の特性は誤差があってもそれほど大きく変わらないようですが、発振回路に入れると大きく影響するようです。

ブレッドボードで回路を組んで実験してみました。

ブレッドボード図


電源電圧: +9.05V / -9.03V
R1(5kΩ Trim)の抵抗値: 2.04kΩ

3.9kΩ+470Ω=4.37kΩ

3.9kΩ+560Ω=4.46kΩ

3.9kΩ+680Ω=4.58kΩ

3.9kΩ+820Ω=4.72kΩ

3.9kΩ+1kΩ=4.9kΩ

3.9kΩ+1.2kΩ=5.1kΩ

3.9kΩ+1.5kΩ=5.4kΩ

発振せず。

シミュレーションと似たような結果になりました。

出力振幅さえうまくカバーできれば2連POTのチャンネル間の誤差が多少大きくても発振してくれるようです。シミュレーション回路図のR4の値で増幅率を変えられるのである程度融通が利くと思います。

歪率は測定していませんが、波形を目で見た限りではそれほど歪んではいないようです。

オーソドックスなウィーンブリッジで低歪率を要求されることはそれほどないと思いますし。

【追記:2019.10.23】

比較抵抗値(Ω) 4700
ベース抵抗値(Ω) 3900

直列抵抗値(Ω) 合成抵抗値(Ω) 誤差
470 4370 -7.02%
560 4460 -5.11%
680 4580 -2.55%
820 4720 0.43%
1000 4900 4.26%
1200 5100 8.51%
1500 5400 14.89%

2017年9月16日土曜日

AD8402 Wien Bridge DCO はんだ付け完了

回路図

基板図

部品面

ハンダ面

消費電流 3mA
10kΩ負荷、100Hz出力時。

Github:
https://github.com/ryood/SPI_Wein_Bridge_Osc

メモ:


増幅率を決める5kΩのトリムPOTは調整がちょっとむずかしいので、多回転タイプの方が良かったかも。



2017年9月10日日曜日

AD8402 Wien Bridge DCO 基板設計

回路図

基板図

部品並べ

はんだ付けは2日ぐらいでしょうか。

発振周波数と振幅


前回かんたんにデータをとってみたがちょっと変なので、もう一度測定してみた。


抵抗設定値はAD8402に設定した値で0~255の8bit値。


多少ガチャガチャしているが、おおむね周波数が高くなると振幅が小さくなる。なんでそうなるのかはよくわからないです(^q^;

測定値

Vr 発振周波数(Hz) 振幅(Vp-p)
0 6677 1.14
1 3828 1.69
2 2703 1.88
3 2089 2.05
4 1698 2.16
5 1433 2.26
6 1238 2.38
7 1089 2.5
8 972.8 2.62
9 878.7 2.74
10 801.3 2.84
11 736.4 2.86
12 681.2 2.98
13 632.9 3.02
14 592.4 3.06
15 555.6 3.08
23 375.2 3.12
31 282.1 3.34
39 226.2 3.38
47 188.7 3.48
55 162.1 3.42
63 141.8 3.48
71 125.9 3.6
79 113.6 3.64
95 94.6 3.6
104 86.6 3.72
111 81.1 3.76
127 71 3.78
143 63 3.74
159 56.8 3.76
191 47.3 3.84
223 40.6 3.84
255 35.5 3.8

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^?