2017年7月23日日曜日

可変電流源 でけた&リードベンダでジャンパ線の加工


回路図

基板図

前回ブレッドボードで組んだ回路で測定したのとほぼおなじ条件で測定

OPAMP: OPA2134

10kΩ (出力電圧 = 入力電圧×10)

ch1:入力電圧 ch2:出力電圧

リードベンダでジャンパ線の加工


サンハヤトのリードベンダでジャンパ線の加工をしてみた。


リードベンダで所望のピッチでスズメッキ線を曲げる。


熱収縮チューブをスズメッキ線に通して、基板の表側になる部分を絶縁する。


φ2mmの熱収縮チューブなので収縮させてもガバガバです。もう少し径が細い方がいいかも。

熱収縮チューブで絶縁しなくても使えますが、基板の表になる部分を絶縁しておくと、何かの拍子にジャンパ線がショートしてしまう可能性を減らせます。

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

2017年7月22日土曜日

可変電流源 基板設計

可変電流源のバリエーション OPAMP+PNP Tr


以前作ったSPI VCAで使っている電圧→電流変換回路も可変電流源として使えるし、部品数も少なくて済む。

回路図

負荷抵抗RLを1kΩ~10kΩで1kΩ刻みでシミュレーションしてみた。電流源なので負荷抵抗の値が変わっても、負荷抵抗に流れる電流は変わらない。

DC解析

上のV(out)は負荷抵抗の「OUT」の点の電位で、コンプライアンス電圧というらしい。V(out)の上限が-1V前後で制限される。負荷抵抗の抵抗値が上がるとコンプライアンス電圧で制限されて、取り出せる電流が頭打ちになる。

この回路は部品数が少なくて済むが、両電源が必要となり出力の基準点がVEEとなるのがデメリット。

可変電流源のバリエーション OPAMP+NPN Tr


似たような仕組みでNPN Trでも電圧→電流変換回路を作れる。

回路図

DC解析


こちらはコンプライアンス電圧が+1V程度になる。両電源は必ずしも必要ではないが負荷抵抗をVCC側に入れなくてはならずGNDから浮いてしまう。

今回使う回路


回路図

DC解析


この回路は部品数が増えるが、単電源で使えて負荷抵抗の一端がGNDに接地される。コンプライアンス電圧も実用的な範囲だと思う。

基板設計


回路図

基板図

R4は電圧→電流の変換率を決める抵抗で、ピンソケットを使って実装し差し替えられるようにする。

部品並べ

2017年7月17日月曜日

可変電流源の構想

前から作ろうと思っていましたが、なかなか手を付けられないでいました。電圧制御電流源です。

以前、電圧→電流変換回路をいろいろ実験したが、今回はEDNの「電圧制御のプログラマブル定電流源、デジタルコントロ-ルも容易 (1/2)」を参考にする。

LTSpiceでシミュレーション


シミュレーション回路図


Trの電流増幅率を上げるために、普通のTrとダーリントンTrを使用した場合と比較してみた。

普通のTrを使用

ダーリントンTrを使用

DC解析


普通のTrを使用

ダーリントンTrを使用

DC解析を見比べると、I(Rl)(出力電流)は、2.0V vs 2.0mAあたりを見ると、ダーリントンの方がマス目にあっている。

V(VCC,N003)は、R3の両端の電圧で、この電圧に比例した電流が出力される。

理想Trと理想OPAMPで5V電源だと2mA程度出力するのが上限。

ブレッドボード図


ダーリントンTrは持っていないので、2SA1015と2SC1815をそれぞれダーリントン接続して使った。電流増幅率が大きい方が良いのでともにGRランクを使った。

AVRトランジスタテスターで測定

Tr hFE Vf(mV)
2SC1815(1) 380 682
2SC1815(2) 322 683
2SC1015(1) 304 650
2SC1015(2) 299 650

OPAMPを変えて測定


レール電圧の正側付近を使うので、フルスイングOPAMPを中心に測定してみた。

自作のファンクションジェネレータで2Vp-pの正弦波を出力し、820Ωと3.3kΩのRで電源電圧を分圧し、GNDを+1Vシフトして、正側で振れる正弦波を入力した。

この回路定数では出力電流=入力電圧/1000となり、出力負荷は1kΩのRとしたので、入力電圧と負荷抵抗の電圧が等しくなる。

電源電圧: +5.07V

NJM4580

ch1:入力電圧 ch2:出力電圧

フルスイングではない、定番のNJM4580だと入力電圧が低い場合、出力が反転してしまう。

NJM2732

低電圧で動作するフルスイングOPAMP。0V~2V(0mA~2mA)がほぼ正常に出力される。

AD822

フルスイングOPAMP。450円@秋月とちょっと高い。入力が0Vから立ち上がる時に少しいびつになっている。下降時は正常。

AD8532

低電圧フルスイング。正常に出力される。

NJU7032

CMOSフルスイング。入力が低い時はおかしくなる。

OPA2134

フルスイングとは銘打っていないが、電源電圧4Vから動作し、経験上フルスイングに近い特性。この実験でも正常に出力された。

まとめると、低電圧フルスイングのNJM2732とAD8532、OPA2134が0V~2Vでほぼ正常。次点でAD822.

NJM2732とAD8532は電源電圧の上限が6Vで、電源の制約が少ないOPA2134をまずは使ってみることにする。

負荷抵抗を変えて実験


負荷抵抗の値を変えると、出力電圧も変わるので(E=RI)OPA2134で確認してみた。入力はファンクションジェネレータの出力を最大にして測定。

1kΩ (出力電圧 = 入力電圧)

ch1:入力電圧 ch2:出力電圧

10kΩ (出力電圧 = 入力電圧×10)

100Ω (出力電圧 = 入力電圧/10)

何故だか出力にノイズが乗ってしまった。←原因不明

あまり厳密ではないが、入力:0V~2V、出力:0mA~2mAの範囲で使えそうだ。

<追記:2017.07.21>

OPA2134で測定し直してみた。入力のサイン波の周波数を100Hzに変更した。

1kΩ (出力電圧 = 入力電圧)

ch1:入力電圧 ch2:出力電圧

10kΩ (出力電圧 = 入力電圧×10)

見やすくするために、入力をプラス側にシフトせず電圧も小さくしている。

入力が0V程度の時0V程度、400mA程度の時4V程度出力されている。

100Ω  (出力電圧 = 入力電圧/10)

</追記>

2017年7月15日土曜日

ウィーンブリッジ回路をAD8403で制御する。

ウィーンブリッジ正弦波発振器の発振周波数を決めるRの値を、デジタルポテンショメータのAD8403で変化させて周波数可変にしてみた。

ブレッドボード図
<追記:2017.07.17>ブレッドボード図を修正</追記>


下のブレッドボードでArduino UnoとAD8403/10kΩを使って2本の可変抵抗を作っている。抵抗値はArduinoにつないだPOTで設定。

AD8403のデータシートによると、レオスタット(可変抵抗)として使うよりもポテンショメータ(可変電圧分圧器)として使ったほうが精度が出るようだが、ウィーンブリッジ回路はレオスタットとして使う必要がある。

AD8403のデータシートの10kΩバージョンの仕様によると


となっていて誤差が大きい。

最小値と最大値を設定してテスタで測定すると、

channel 最小(Ω) 最大(Ω)
RDAC1 50.9 8750
RDAC3 51.9 8720

だった。

上左のブレッドボードは、TLE2426を使って5V単電源から±2.5Vの仮想GNDを作っている。

上中のブレッドボードはNJM2732を使ったウィーンブリッジ回路。

上右のブレッドボードはACカップリング回路。

注意点として、オシロやオーディオインターフェイスなど測定機器をつなぐ場合、仮想GNDに測定機器のGNDをつなぐとUSB経由でArduinoに過電流が流れ込む。このため出力をACカップリングして真のGNDから見たDC成分を除去している。(参考:「SVF DCF 出力のGNDを修正 仮想GNDの扱いには注意するべし」)

また、ノイズ対策に0.01uFのEMIフィル(DSS1NB32A103)を入れている。

EMIフィルあり

EMIフィルなし

気持ち効果があるようなないような。

Arduinoのスケッチ

<AD8403_WeinBridge.ino>

/*
  Wein Bridge Control

  AD8403

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

  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 cnt;
byte v0, v1;

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() {
  v0 = analogRead(0) / 4;
  
  Serial.print(v0);
  Serial.print("\n");
  
  digitalPotWrite(0, v0);
  digitalPotWrite(2, v0);
  delay(1);
}

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);
}

電源によるノイズの差


Arduinoの電源をPCのUSB経由でとった場合

Arduinoの電源を電池(単3×6)からとった場合

ノイズが相当違うので、以下電池電源にして測定した。

POTを右いっぱい(周波数最小)

周波数:39.22Hz
Vp-p: 1.1432V
Vrms: 490.1mV

約100Hz

周波数:100.0Hz
Vp-p: 1.1432V
Vrms:484.4mV

POTを左いっぱい(周波数最大)

周波数: 6680Hz(WaveSpectraで読み取り)
Vp-p: 112.0mV
Vrms: 24.3mV

出力レベルは小さくなるが、Rの値をAD8403の最小抵抗値(上述の通り約50Ω)にしても発振はする。

一つ上の値

周波数: 3.906kHz
Vp-p: 480.0mV
Vrms: 151.8mV

発振はするが、デジタルポテンショメータだと周波数が飛び飛びになるので端っこのほうは使わないほうが無難か?

WaveSpectraで測定


USB電源

THD: 0.16848%
THD+N: 0.98915%

電池電源

THD: 0.28599%
THD+N: 1.04803%

FFTのグラフは電池電源の方が良さそうだが、表示値はUSB電源のほうが良く出ている(@@?

メモ:


オシロの波形にヒゲが出ているが、おそらくSPI通信が行われている時のノイズだと思う。


ch1:波形出力 ch2:SPI_SCK

オシロのch2をSPI_SCKにつないでみると、ch1にもはっきりとノイズが乗る。ch2:SPI_SCKは1本の線状になっているが、1本の線がHの区間でSPI通信が行われている。

SPI通信を行うサンプリングレートは可聴帯域外に追い出したいところだ。

2017年7月12日水曜日

ウィーンブリッジ回路で正弦波発振器をつくる

5V単電源から仮想GNDを作る前提で実験してみた。OPAMPは低電圧で動作するフルスイングのNJM2732を使用した。

シミュレーション回路図

過渡解析

Cf=C1=C2、Rf=R4=R5とすると、発振周波数は

1 / (2 * π * Cf * Rf)

Rf = 1kΩのとき 1 / (2 * π * 0.47uF * 1k) ≒ 338.8Hz
Rf = 5kΩのとき 1 / (2 * π * 0.47uF * 5k) ≒ 67.76Hz
Rf = 10kΩのとき 1 / (2 * π * 0.47uF * 10k) ≒ 33.88Hz

ブレッドボード配線図


シミレーション回路図のRfには10kΩ/Aの二連可変抵抗を使った。

発振条件は利得が約3倍のときで、

1 + (R3 / R1) ≒ 3

となるように調整しやすくするために、R1は2.2kΩのRと5kΩのトリムPOTを直列にした。

発振周波数を決める10kΩの2連POTを回しながら測定してみた。

電源電圧: +2.50V / -2.50V
5kΩトリム: 2.68kΩ

2連POT左いっぱい

周波数:34.97Hz
Vp-p: 2.300V
Vrms: 811.8mV

100Hzに調整

周波数:100.3Hz
Vp-p: 1.920V
Vrms: 671.5mV

発振ギリギリ

右に回しすぎると発振しなくなるので、ギリギリ発振するあたり。

周波数:188.1Hz
Vp-p: 1.380V
Vrms: 474.6mV

WaveSpectraで歪率を見る。

THD: 0.41020%
THD+N: 1.12542%

歪率は1%以下で、かんたんな回路なのになかなか。

比較のため自作の「オーディオ用DACを使ったファンクションジェネレータ」の出力波形をWaveSpectraで測定。(4次バターワースLPFを通して出力)


THD: 0.02836%
THD+N: 0.03635%

メモ:


オシロのプローブを2本とも出力点に当てないと発振しない場合があった。

振幅制限をダイオード2本で行っているが、他にもバリエーションがある。AGC(Auto Gain Control)など。←ちゃんと調べていない。