使用音效卡測量總諧波失真

 

使用音效卡總諧波失真(<0.00002%

by Borgmann

如今,配備音訊卡的電腦已經擁有基本的測量設備和軟體,可以分析信號的諧波。

然而,由於總諧波失真 (THD) 很少能達到優於 -100 分貝的水準,因此效果通常不能令人滿意。

對於真正的高端設備來說,這遠遠不能令人滿意。我將向大家展示一種以最小的代價改進此類系統的方法,從而使系統的總諧波失真(THD)達到 -136dB 0.000015%。 


參考測量的測量裝置示例。

在這裡,LowDistGen 只為 -80dB 通道提供參考信號。濾波器安裝在自製的電路板上。

讓我們從頭開始,進行一次參考測量,將音效卡的輸出設置為 1Vrms,然後通過一個(內置)衰減器迴圈到音效卡的輸入。

振幅設置得越高越好,但不應出現因過驅動而導致的額外失真。

在我的例子中,我使用 Focusrite 的外置 USB 音效卡和 ARTA 作為分析軟體。



圖:音效卡的參考測量:直接輸出到輸入

 

1kHz 的頻率下,您可以看到基頻被音效卡的輸入衰減器從 0dB 衰減到 -20dB。與之相對的 K2 約為 -100dBK3 約為 -108dB

因此,總諧波失真(THD)約為 0.00125%

我們(希望)在高品質高端元件的測量方面,仍然缺少至少一個十次方的品質。

作為改進的第一步,我們可以在接收器前插入一個基波帶阻。這樣可以減少接收器的失真。基波不必完全被抑制。

衰減 20 分貝(最好是 40 分貝)就會產生明顯的效果。當然,必須確保諧波盡可能不失真地通過阻斷濾波器。



圖:基本波衰減濾波器電路圖(尺寸為 1kHz



我使用 SVF 作為基本的阻波濾波器。這些濾波器特別適用於需要調整的濾波器,因為它們可以通過改變單個元件的數值輕鬆滿足要求。

濾波器的品質可用 R2 調節,頻率可用一個 10 圈微調器 RV1 調節。不過,為此必須測量 C1 C2,並將電阻 R8+R9 R6+R4+RV1 調整為電容值。

由於音效卡的輸出頻率非常穩定,而且我們的工作溫度範圍非常有限,因此可以長期穩定地工作。

根據我的公差要求,此處所示的尺寸可實現約 40 分貝的基波衰減和小於 0.5 分貝的一次諧波衰減。

 



圖:在接收器前帶有基波衰減濾波器的音效卡的參考測量值

 

結果令人鼓舞。在 1kHz 時,您可以看到衰減了 40dB 的基音,K2 相對於 0dB -115dBK3 -108dB。因此,總諧波失真約為 0.00045%。情況有所改善,但離目標還很遠。

特別是 K3 似乎是波型發生器造成的效應。因此,這就是我們的下一個起點。

最佳化的下一步是在音效卡的信號輸出端後面直接連接一個帶通濾波器BPF,允許基波通過,但衰減諧波。

這樣,波形產生器的諧波失真就會明顯減弱。當然,濾波器的固有失真起著決定性作用。



圖:用於衰減波形產生器諧波的帶通濾波器電路圖(尺寸為 1 kHz

 

這種濾波器也是基於 SVF 的。

品質通過 R2 設置為 100。必須再次測量 C7 C8,並分別調整相應的頻率決定電阻 RV1+R4+R6 R8+R8

有了 R1,在出現偏差的情況下,基波的放大率可以修正為 0dB。一次諧波的諧波衰減大於 40 分貝。

為此,可通過 J2 再次輸入-80dB 的參考信號,從而大大提高評估的可靠性。

 



參考測量音效卡,在信號發生器後面裝有帶通濾波器,在接收器前面裝有基波衰減濾波器

 

1kHz 時,基音被抑制 40dB,在 14kHz 時,參考音為-80dB。相對於基音,K2 -136dBK3 -138dB,本底雜訊為 -138dB。總諧波失真小於 0.00003%。這樣的性能就足夠進行後續的精密量測了。

以上的這些數值可說達到了專業測量儀器的水準。

不過目前只有一種頻率(1KHz)可用,雖然這是最常用的測試頻率,但如果能相容其他頻率就更好了。

事實上,要實現 50/100/200/500/1k/2k/5k/10k Hz 的量測,無論從工作量還是成本來說,也都是非常容易做到的。

 

 

測量時鐘抖動Jitter的可靠方法


時鐘抖動(Jitter)是指時鐘信號頻率或週期的變化。這兩種測量都包含相同的資訊,但週期測量是一種簡單的時間間隔測量,使用即時示波器即可輕鬆完成。 

要測量作為週期變化的時鐘抖動,我們需要測量多個週期內同一交叉閾值的每個連續上升沿之間的時間間隔。如圖 1 所示,測量絕對時鐘信號週期後,我們繪製週期與週期之間的軌跡和長條圖,以便對變化進行統計分析。 

在測量過程中,我們會進行一系列示波器採樣時鐘測試和時基調整,以檢查一致性。雖然測量抖動與其說是測量週期與週期之間時間間隔的絕對精度,不如說是測量時間間隔的相對精度,但其中最基本的部分是確保示波器時基的絕對精度。 

如果我們有了測量時鐘抖動的可靠方法,就有了測量時鐘信號對環境中可能影響週期的其他特徵的敏感性的基礎。電源軌上的電壓雜訊只是影響時鐘抖動的一種外力,我們將在應用說明 "測量時鐘抖動對電源軌雜訊的靈敏度 "中向您展示如何測量。



測試設備

本應用說明以分步教程的形式編寫,您可以在實驗室中使用自己的時鐘信號源進行操作。

除了時鐘信號源,您還需要:

- 即時示波器,能夠根據信號上升時間採樣至少 5 倍的信號頻寬
(對於具有單極頻率回應的示波器,bandwidth = 5*(0.35/T_rise)) 。

我們使用 WavePro HD 12 位、4 通道、8 GHz、20 GS/s、5 Gpts 示波器(採樣時鐘抖動為 60 fs)測量 10 至 66 MHz 的方波信號。
我們建議至少使用具有軌跡和長條圖功能的 2 通道、2 GHz、20 GS/s 示波器。

- 合成函數發生器或其他已知頻率信號源,頻率精度為百萬分之一 (PPM),頻率至少為 50 MHz。

我們使用絕對精度為 1 PPM 的合成函數發生器生成 30 MHz、5 V 的信號,並將其應用於 C1 上的示波器。

- 兩根 50 Ω 同軸電纜,用於輸入來自時鐘和函數發生器的信號,或用於時鐘線路的等效單端探頭。

我們示例中使用的時鐘源是基於 74AC14 六進制反相器的 5 級環形振盪器(5-stage ring oscillator),由 5 V 電壓軌供電。
該振盪器嵌入 PCB 中。
第 5 級輸出的邏輯態與最初的第 1 級輸入相反,從而產生振盪,振盪週期等於每級HEX反相器傳播延遲(propagation delay)的 10 倍。

5 V 的額定傳播延遲為 1.5 ns 至 10 ns,因此時鐘週期為 15 ns 至 100 ns,頻率為 66 MHz 至 10 MHz。

這種極端的變動就是我們需要對每種時鐘、抖動進行測試的重要原因。




The clock signal acquired at 20 µs/div (200 µs record length) overlaid by a zoom of the waveform at 5 ns/div.

跟蹤時鐘信號週期測量並繪製長條圖

12.創建週期測量的跟蹤函數。只需按一下測量表中的週期儲存格即可打開測量設置對話方塊 (Pn),然後按一下對話方塊中的跟蹤按鈕。
























PSpice Models Archive

//PSpice Models Collection

----------------------------------------

.subckt 12ax7i 1 2 3 ; placca griglia catodo

+ params: mu=100 ex=1.4 kg1=1060 kp=600 kvb=300 rgi=200

+ ccg=2.3p cgp=2.4p ccp=.9p

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

g1 1 3 value= {(pwr(v(7),ex)+pwrs(v(7),ex))/kg1}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends

**********************

.subckt 6sn7i 1 2 3 ; placca griglia catodo

+ params: mu=21 ex=1.36 kg1=1460 kp=150 kvb=400 rgi=300

+ ccg=2.4p cgp=4p ccp=.7p

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

g1 1 3 value= {(pwr(v(7),ex)+pwrs(v(7),ex))/kg1}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends

*********************

.subckt 6sn7ii 1 2 3 ; placca griglia catodo

+ params: mu=22.004 ex=1.2128 kg1=1213.7 kp=203.06 kvb=355 rgi=2k

+ ccg=2.4p cgp=4p ccp=.7p

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

g1 1 3 value= {(pwr(v(7),ex)+pwrs(v(7),ex))/kg1}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends



********************

.subckt 6dj8i 1 2 3 ; placca griglia catodo

+ params: mu=28 ex=1.3 kg1=330 kp=320 kvb=300 rgi=2k

+ ccg=2.3p cgp=2.1p ccp=.7p

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

g1 1 3 value= {(pwr(v(7),ex)+pwrs(v(7),ex))/kg1}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends

********************

.subckt 6dj8ii 1 2 3 ; placca griglia catodo

+ params: mu=35.7 ex=1.35 kg1= kp=305 kvb=310 rgi=2k

+ ccg=3.1p cgp=1.4p ccp=.45p

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

g1 1 3 value= {(pwr(v(7),ex)+pwrs(v(7),ex))/kg1}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends



*******************

.subckt 2a3-X 1 2 3 ; placca griglia catodo ***F.I.V.R.E.***

+ params: mu=4.4 ex=1.27 kg1=1106 kp=39.6 kvb=10 rgi=2k

+ ccg=2.3p cgp=2.1p ccp=.7p

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

g1 1 3 value= {(pwr(v(7),ex)+pwrs(v(7),ex))/kg1}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends

*****************

.subckt 2a3-Y 1 2 3 ; placca griglia catodo ***F.I.V.R.E.***

+ params: mu=4.4 ex=1.25 kg1=1106 kp=39.6 kvb=10 rgi=2k

+ a=-2.889e-7 b=-1.222e-5 c=1.321

+ ccg=7.5p cgp=16.5p ccp=5.5p

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

e2 8 0 value = {a*v(1,3)*v(1,3)+b*v(1,3)+c}

re2 8 0 1meg

g1 1 3 value= {(pwr(v(7),v(8))+pwrs(v(7),v(8)))/kg1}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends 2a3-y ; modello con andamento parabolico esponente EX

*******************

.subckt 300B 1 2 3 ; placca griglia catodo *** Western Electric ***

+ params: mu=3.85 ex=1.264 kg1=1240 kp=89 kvb=10 rgi=2k

+ a=1.119e-6 b=-7.983e-4 c=1.398

+ ccg=9p cgp=15p ccp=4.3p

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

e2 8 0 value = {a*v(1,3)*v(1,3)+b*v(1,3)+c}

re2 8 0 1g

g1 1 3 value= {(pwr(v(7),v(8))+pwrs(v(7),v(8)))/kg1}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends

******************

.subckt 6cw4 1 2 3 ; placca griglia catodo NUVISTOR R.C.A.

+ params: mu=68.75 ex=1.35 kg1=160 kp=250 kvb=300 rgi=200

+ ccg=4.1p cgp=.92p ccp=.18p

+ a=2.133e-7 b=-9.40e-5 c=.0139666 d=.64

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

e2 8 0 value=

+{a*v(1,3)*v(1,3)*v(1,3)+b*v(1,3)*v(1,3)+c*v(1,3)+d}

re2 8 0 1g

g1 1 3 value= {(pwr(v(7),v(8))+pwrs(v(7),v(8)))/kg1}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends 6cw4

*************

.subckt ef86t 1 2 3 4 ;placca, griglia controllo, catodo, griglia schermo

+ params: mu=37.5 ex=1.2 kg1=1500 kg2=2500 kp=260 kvb=4

+ ccg=14p cpg1=.85p ccp=12p rgi=1k

*************************

*only for triode mode*

*************************

re1 7 0 1meg

e1 7 0 value =

+{v(4,3)/kp*log(1+exp((1/mu+v(2,3)/v(4,3))*kp))}

g1 1 3 value =

+{(pwr(v(7),ex)+pwrs(v(7),ex))/kg1*atan(v(1,3)/kvb)}

g2 4 3 value=

+{(exp(ex*(log((v(4,3)/mu)+v(2,3)))))/kg2}

rcp 1 3 1g ;convergence resistor

c1 2 3 {ccg}

c2 1 2 {cpg1}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends ef86t ;triode mode

***********************



**************************

.subckt 811a-i 1 2 3 ; placca griglia catodo Documentazione R.C.A.

+ params: mu=160 ex=1.317 kg1=1350 kp=100 kvb=1400 rgi=1000

+ ccg=2.3p cgp=2.4p ccp=.9p

+ a=1.6667e-10 b=-.0000002875 c=0.0001758333 d=1.275

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

e2 8 0 value=

+{a*v(1,3)*v(1,3)*v(1,3)+b*v(1,3)*v(1,3)+c*v(1,3)+d}

re2 8 0 1g

e3 9 0 table {v(2,3)} =

+ (-1 1.1e-16)

+ (0, .6e-4) (20, 5.38e-4)

+ (40, 6.25e-4) (60, 7.41e-4)

re3 9 0 1g

g1 1 3 value= {(pwr(v(7),v(8))+pwrs(v(7),v(8)))*v(9)}

rcp 1 3 100k

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends 811a-i

**********************

.subckt 845i 1 2 3 ; placca griglia catodo R.C.A.

+ params: mu=5.27 ex=1.25 kg1=2560 kp=100 kvb=180 rgi=8000

+ ccg=6p cgp=13.5p ccp=6.5p

+ a=-5.150e-14 b=8.536e-11 c=-1.469e-7 d=4.635e-4

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

e2 8 0 value=

+{a*v(1,3)*v(1,3)*v(1,3)+b*v(1,3)*v(1,3)+c*v(1,3)+d}

re2 8 0 1g

g1 1 3 value= {(pwr(v(7),ex)+pwrs(v(7),ex))*v(8)}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends 845i

*******************

.subckt ecc86 1 2 3 ; placca griglia catodo

********************************************

;modello valido nell'intorno vp=0..10volt

********************************************

+ params: mu=14 ex=1.71 kg1=295 kp=220 kvb=100 rgi=2k

+ ccg=3p cgp=1.3p ccp=1.8p

+ a2=0.0083 a1=-0.022 a0=1.1033

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

e2 8 0 value=

+{a2*v(1,3)*v(1,3)+a1*v(1,3)+a0}

re2 8 0 1g

g1 1 3 value= {(pwr(v(7),v(8))+pwrs(v(7),v(8)))/kg1}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends



.subckt e182cc-sq 1 2 3 ; placca griglia catodo

+ params: mu=24 ex=1.7 kg1=75 kp=320 kvb=300 rgi=2k

+ ccg=2.3p cgp=2.4p ccp=.9p

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

g1 1 3 value= {(pwr(v(7),ex)+pwrs(v(7),ex))/kg1}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends

***********************

.subckt cv5112 1 3 4 ; TRIODO SEGNALE

g1 2 4 value = {(exp(1.5*(log((v(2,4)/30)+v(3,4)))))/32.51}

c1 3 4 11p

c2 3 1 4p

c3 1 4 2.46p

r1 3 5 20k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends cv5112 ; eq. 3a/167m

***********************

.model l_var ind(L=1 dev=5%)

***********************

.subckt 5842 1 2 3 ; placca griglia catodo

+ params: mu=42.4 ex=2.21 kg1=393 kp=629 kvb=446 rgi=2000

+ ccg=9p cgp=1.8p ccp=.48p

e1 7 0 value=

+{v(1,3)/kp*log(1+exp(kp*(1/mu+v(2,3)/sqrt(kvb+v(1,3)*v(1,3)))))}

re1 7 0 1g

g1 1 3 value= {(pwr(v(7),ex)+pwrs(v(7),ex))/kg1}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends

********************

.subckt 437a 1 2 3 ; placca griglia catodo

+ params: a=-0.90242 b=520 c=-12.98 d=-36.421

+ ccg=9p cgp=1.8p ccp=.48p ex=2.2 rgi=2k

e1 7 0 value=

+{a*((v(1,3)+b)/(v(2,3)+c))+d}

re1 7 0 1

g1 1 3 value= {pwr(v(7),ex)+pwrs(v(7),ex)}

rcp 1 3 1g

c1 2 3 {ccg}

c2 1 2 {cgp}

c3 1 3 {ccp}

r1 2 5 {rgi}

d3 5 3 dx

.model dx d(is=1n rs=1 cjo=10pf tt=1n)

.ends

********************************************

Duncan's Models

************************************************************************

.SUBCKT TRIODENH A G K

+PARAMS: LIP=1 LIF=3.7E-3 RAF=18E-3 RAS=1 CDO=0 RAP=4E-3

+ ERP=1.5 ERI=0

+ MU0=17.3 MUR=19E-3 EMC=9.6E-6 GCO=0 GCF=213E-6

+ CGA=3.9p CGK=2.4p CAK=0.7p

************************************************************************

*

* Anode/grid model

*

* Models reduction in mu at large negative grid voltages

* Models change in Ra with negative grid voltages

* Models limit in Ia with high +Vg and low Va

*

* PARAMETERS

*

* LIP Conduction limit exponent

* LIF Conduction limit factor

* CDO Conduction offset

* RAF Anode resistance factor for neg grid voltages

* RAP Anode resistance factor for positive grid voltages

* ERP Emission power

* ERI Emission power increase

* MU0 Mu between grid and anode at Vg=0

* MUR Mu reduction factor for large negative grid voltages

* EMC Emission coefficient

* GCO Grid current offset in volts

* GCF Grid current scale factor

*

************************************************************************

Elim LI 0 VALUE {PWR(LIMIT{V(A,K),0,1E6},{LIP})*{LIF}}

Egg GG 0 VALUE {V(G,K)-{CDO}}

Erpf RP 0 VALUE {1-PWR(LIMIT{-V(GG)*{RAF},0,0.999},{RAS})+LIMIT{V(GG),0,1E6}*{RAP}}

Egr GR 0 VALUE {LIMIT{V(GG),0,1E6}+LIMIT{(V(GG))*(1+V(GG)*{MUR}),0,-1E6}}

Eem EM 0 VALUE {LIMIT{V(A,K)+V(GR)*{MU0},0,1E6}}

Eep EP 0 VALUE {PWR(V(EM),ERP-LIMIT{V(G,K),0,-1E6}*ERI)*{EMC}*V(RP)}

Eel EL 0 VALUE {LIMIT{V(EP),0,V(LI)}}

Eld LD 0 VALUE {LIMIT{V(EP)-V(LI),0,1E6}}

Ga A K VALUE {V(EL)}

************************************************************************

*

* Grid current model

*

* Models grid current, along with rise in grid current at low Va

*

************************************************************************

Egf GF 0 VALUE {PWR(LIMIT{V(GG),0,1E6},1.5)*{GCF}}

Gg G K VALUE {(V(GF)+V(LD))}

*

* Capacitances and anti-float resistors

*

CM1 G K {CGK}

CM2 A G {CGA}

CM3 A K {CAK}

RF1 A 0 1000MEG

RF2 G 0 1000MEG

RF3 K 0 1000MEG

.ENDS

**********************************************************************

* GENERIC: 2A3

* MODEL: NH2A3

* NOTES: No heater model (virtual cathode)

**********************************************************************

.SUBCKT NH2A3 A G K

XV1 A G K TRIODENH

+PARAMS: LIP= 1.5 LIF= 0.003 RAF= 0.0045 RAS= 1 CDO= 0

+ RAP= 0.005 ERP= 1.6247 ERI=-0.000019

+ MU0= 3.7731 MUR= 0.004685 EMC= 0.0000615

+ GCO= 0 GCF= 0.0001

+ CGA=1.65E-11 CGK=7.50E-12 CAK=5.50E-12

.ENDS

**********************************************************************

* GENERIC: 3CX300

* MODEL: NH3CX300

* NOTES: No heater model

**********************************************************************

.SUBCKT NH3CX300 A G K

XV1 A G K TRIODENH

+PARAMS: LIP= 1.5 LIF= 10 RAF= 0.00473 RAS= 1 CDO= 0

+ RAP= 0.005 ERP= 1.25 ERI=-0.00053

+ MU0= 8.321 MUR= 0.0012 EMC= 0.000533

+ GCO= 0 GCF= 0.0001

+ CGA=1.00E-11 CGK=2.50E-11 CAK=1.00E-12

.ENDS

**********************************************************************

* GENERIC: SV6AS7

* MODEL: NHSV6AS7

* NOTES: No heater model

**********************************************************************

.SUBCKT NHSV6AS7 A G K

XV1 A G K TRIODENH

+PARAMS: LIP= 1 LIF= 0.01 RAF= 0.0058 RAS= 0.7 CDO= 0

+ RAP= 0.035 ERP= 1.5 ERI= 0

+ MU0= 2.05 MUR= 0.0017 EMC= 0.0005

+ GCO= 0 GCF= 0

+ CGA=1.10E-11 CGK=8.00E-12 CAK=3.00E-12

.ENDS

**********************************************************************

* GENERIC: 6SN7GTB

* MODEL: NH6SN7GTB

* NOTES: No heater model

**********************************************************************

.SUBCKT NH6SN7GTB A G K

XV1 A G K TRIODENH

+PARAMS: LIP= 1 LIF= 0.0037 RAF= 0.03 RAS= 2 CDO= 0

+ RAP= 0.002 ERP= 1.4 ERI= 0.007

+ MU0= 19.2642 MUR= 0.007677 EMC= 0.0000189

+ GCO= 0 GCF= 0.000213

+ CGA=3.90E-12 CGK=2.40E-12 CAK=7.00E-13

.ENDS

**********************************************************************

Maillet's Models



************ p g c **********(copyright vivaAnalog)******

.subckt RCA12ax7 1 2 3

*************************

eGIogVpc 20 0 value={log(v(1,3))}

rGlogVpc 20 0 1

eG0 10 0 poly(1) <2,3> -3.7694e+00 1.9947e+00 5.9432e-02

eG1 11 0 poly(1) <2,3> -3.2024e-02 -4.1443e-02 -4.8236e-03

eG2 12 0 poly(1) <2,3> 1.9127e-02 -1.2189e-02 -1.5526e-03

eG3 13 0 poly(1) <2,3> -1.1354e-02 4.9339e-03 6.1016e-04

rG0 10 0 1

rG1 11 0 1

rG2 12 0 1

rG3 13 0 1

gG 2 3 value={(exp(v(10)+v(20)*(v(11)+v(20)*(v(12)+v(20)*v(13)))))/170}

*

eP0 110 0 poly(1) <2,3> -9.9158e+0 1.9145e+0 -2.8135e+0 1.8661e+0

+ 1.5643e+0 4.7240e-1 6.4276e-2 3.3101e-3

eP1 111 0 poly(1) <2,3> 9.5428e-1 3.2558e-2 -8.3349e-1 -4.8578e-2

+ 2.6213e-1 1.0492e-1 1.8921e-2 1.3632e-3

eP2 112 0 poly(1) <2,3> 9.5766e-2 2.5192e-2 2.2391e-1 -1.7040e-1

+ -2.4952e-1 -1.0960e-1 -2.0981e-2 -1.4882e-3

eP3 113 0 poly(1) <2,3> -6.6107e-2 -3.9657e-2 7.5560e-2 3.1025e-2

+ 2.4265e-2 1.7002e-2 4.2512e-3 3.4761e-4

eP4 114 0 poly(1) <2,3> 8.4148e-3 4.7989e-3 -1.3258e-2 -1.9288e-3

+ 5.2888e-4 -5.6853e-4 -2.4727e-4 -2.4359e-5

rP0 110 0 1

rP1 111 0 1

rP2 112 0 1

rP3 113 0 1

rP4 114 0 1

gP 1 3 value={(exp(v(110)+v(20)*(v(111)+v(20)*(v(112)+v(20)*(v(113)+v(20)*v(114))))))}

Cgc 2 3 1.8p

Cgp 2 1 1.7p

Cpc 1 3 1.9p

.ends

************************* p g c

.subckt triode_GE12at7wc 1 2 3

**************************

ePIog1 20 0 value={log(v(1,3))}

rPlog1 20 0 1

eGp0 10 0 poly(1) <2,3> -2.7764e+00 2.2296e+00 7.5589e-02

eGp1 11 0 poly(1) <2,3> -4.1300e-02 -1.1676e-02 -1.4968e-03

eGp2 12 0 poly(1) <2,3> -2.3014e-02 -1.2650e-02 -2.1541e-03

eGp3 13 0 poly(1) <2,3> 1.0328e-03 1.9344e-03 3.6700e-04

rGp0 10 0 1

rGp1 11 0 1

rGp2 12 0 1

rGp3 13 0 1

gG 3 2 value={(exp(v(10)+v(20)*(v(11)+v(20)*(v(12)+v(20)*v(13)))))/3581}

ePp0 110 0 poly(1) <2,3> -3.6500e+00 7.6923e+00 -3.7894e+00 -7.2613e-01

+ -3.4056e-02

ePp1 111 0 poly(1) <2,3> 1.1200e+00 -1.6148e+00 8.2466e-01 1.7359e-01

+ 8.4978e-03

ePp2 112 0 poly(1) <2,3> 3.7117e-03 -5.1629e-02 3.1072e-02 6.1221e-03

+ 2.6104e-04

ePp3 113 0 poly(1) <2,3> 5.5502e-03 1.8236e-02 -1.0661e-02 -2.4714e-03

+ -1.2170e-04

rPp0 110 0 1

rPp1 111 0 1

rPp2 112 0 1

rPp3 113 0 1

gP 1 3 value={(exp(v(110)+v(20)*(v(111)+v(20)*(v(112)+v(20)*v(113)))))/1000}

.ends



************************* p g c

.subckt triode_GE12ax7wa1 1 2 3

**************************

eGIog1 20 0 value={log(v(1,3))}

rGlog1 20 0 1

eG0 10 0 poly(1) <2,3> -3.7694e+00 1.9947e+00 5.9432e-02

eG1 11 0 poly(1) <2,3> -3.2024e-02 -4.1443e-02 -4.8236e-03

eG2 12 0 poly(1) <2,3> 1.9127e-02 -1.2189e-02 -1.5526e-03

eG3 13 0 poly(1) <2,3> -1.1354e-02 4.9339e-03 6.1016e-04

rG0 10 0 1

rG1 11 0 1

rG2 12 0 1

rG3 13 0 1

gG 3 2 value={(exp(v(10)+v(20)*(v(11)+v(20)*(v(12)+v(20)*v(13)))))/170}

eP0 110 0 poly(1) <2,3> -1.6702e+00 3.9084e+00 -1.5799e+00 -1.3727e-01

+ -1.0348e-03

eP1 111 0 poly(1) <2,3> 1.1947e-01 -3.2355e-01 2.4620e-01 6.2866e-02

+ 3.9416e-03

eP2 112 0 poly(1) <2,3> 6.9903e-02 -7.3976e-02 -4.3982e-02 -6.3812e-03

+ -2.9682e-04

eP3 113 0 poly(1) <2,3> 4.2712e-03 3.4864e-03 8.3734e-03 4.4558e-04

+ -8.4579e-06

rP0 110 0 1

rP1 111 0 1

rP2 112 0 1

rP3 113 0 1

gP 1 3 value={(exp(v(110)+v(20)*(v(111)+v(20)*(v(112)+v(20)*v(113)))))/1000}

.ends

***************************************************

.subckt triode_GE12ax7wa1b 1 2 3

***************************

eGIoga 20 0 value={log(v(1,3))}

rGloga 20 0 1

eGIogb 21 0 value={log(v(2,3)+7)}

rGlogb 21 0 1

eG0 10 0

value={(exp(-1524.2+v(21)*(2083.2+v(21)*(-951.29+v(21)*(145.16)))))/0.049}

rG0 10 0 1

gG 2 3 value={bnd(v(10)*(exp(-1.2838+v(20)*(-9.2220e-2+v(20)*(-9.4734e-4+

+ v(20)*(-5.0132e-3)))))/1085)}

eP0 110 0 poly(1) <2,3> -1.6702e+00 3.9084e+00 -1.5799e+00 -1.3727e-01

+ -1.0348e-03

eP1 111 0 poly(1) <2,3> 1.1947e-01 -3.2355e-01 2.4620e-01 6.2866e-02

+ 3.9416e-03

eP2 112 0 poly(1) <2,3> 6.9903e-02 -7.3976e-02 -4.3982e-02 -6.3812e-03

+ -2.9682e-04

eP3 113 0 poly(1) <2,3> 4.2712e-03 3.4864e-03 8.3734e-03 4.4558e-04

+ -8.4579e-06

rP0 110 0 1

rP1 111 0 1

rP2 112 0 1

rP3 113 0 1

gP 1 3 value={(exp(v(110)+v(20)*(v(111)+v(20)*(v(112)+v(20)*v(113))))/1000)}

Cgc 2 3 1.8p

Cgp 2 1 1.7p

Cpc 1 3 1.9p

.ends

************************* p g c

.subckt triode_GE12ax7wa2 1 2 3

**************************

eGIog1 20 0 value={log(v(1,3))}

rGlog1 20 0 1

eG0 10 0 poly(1) <2,3> -3.7694e+00 1.9947e+00 5.9432e-02

eG1 11 0 poly(1) <2,3> -3.2024e-02 -4.1443e-02 -4.8236e-03

eG2 12 0 poly(1) <2,3> 1.9127e-02 -1.2189e-02 -1.5526e-03

eG3 13 0 poly(1) <2,3> -1.1354e-02 4.9339e-03 6.1016e-04

rG0 10 0 1

rG1 11 0 1

rG2 12 0 1

rG3 13 0 1

gG 3 2 value={(exp(v(10)+v(20)*(v(11)+v(20)*(v(12)+v(20)*v(13)))))/170}

eP0 110 0 poly(1) <2,3> -2.2416e+00 3.8456e+00 -1.0299e+00

+ 2.3909e-02 1.0561e-02

eP1 111 0 poly(1) <2,3> 2.9920e-01 -3.7081e-01 1.3630e-01

+ 3.5417e-02 2.0746e-03

eP2 112 0 poly(1) <2,3> 6.7037e-02 -8.1618e-02 -5.2735e-02

+ -8.6960e-03 -4.7085e-04

eP3 113 0 poly(1) <2,3> 2.2006e-03 6.6606e-03 1.0641e-02

+ 9.4134e-04 2.7545e-05

rP0 110 0 1

rP1 111 0 1

rP2 112 0 1

rP3 113 0 1

gP 1 3 value={(exp(v(110)+v(20)*(v(111)+v(20)*(v(112)+v(20)*v(113)))))/1000}

.ends

************************* p g c

.subckt triode_GE5751 1 2 3

**************************

eGIog1 20 0 value={log(v(1,3))}

rGlog1 20 0 1

eG0 10 0 poly(1) <2,3> -3.2813e+00 1.7569e+00 2.9338e-02

eG1 11 0 poly(1) <2,3> -9.0720e-02 -2.7519e-02 -3.0229e-03

eG2 12 0 poly(1) <2,3> -1.8084e-02 4.2859e-03 1.7988e-04

eG3 13 0 poly(1) <2,3> 1.1015e-03 4.2800e-04 1.0427e-04

rG0 10 0 1

rG1 11 0 1

rG2 12 0 1

rG3 13 0 1

gG 3 2 value={(exp(v(10)+v(20)*(v(11)+v(20)*(v(12)+v(20)*v(13)))))/189}

eP0 110 0 poly(1) <2,3>

+ -4.9584e-1 4.2097e+0 -2.7252e+0 -2.0530e-1 1.3162e-2 1.3347e-3

eP1 111 0 poly(1) <2,3>

+ 2.6000e-2 -3.4437e-1 1.3060e-1 -8.7594e-2 -1.5166e-2 -6.5829e-4

eP2 112 0 poly(1) <2,3>

+ -3.5787e-2 -2.2883e-1 2.4121e-1 1.0443e-1 1.4721e-2 6.5731e-4

eP3 113 0 poly(1) <2,3>

+ 2.0259e-2 2.8834e-2 -3.1118e-2 -1.3945e-2 -2.0977e-3 -9.8313e-5

rP0 110 0 1

rP1 111 0 1

rP2 112 0 1

rP3 113 0 1

gP 1 3 value={(exp(v(110)+v(20)*(v(111)+v(20)*(v(112)+v(20)*v(113)))))/1000}

.ends



**************************** p g c

.subckt triode_PHLPS12at7wc 1 2 3

****************************

ePIog1 20 0 value={log(v(1,3))}

rPlog1 20 0 1

eGp0 10 0 poly(1) <2,3> -3.4856e+00 1.9216e+00 6.7355e-02

eGp1 11 0 poly(1) <2,3> -2.7396e-02 -4.0726e-02 -5.5367e-03

eGp2 12 0 poly(1) <2,3> -2.5889e-02 -1.0947e-03 -1.2516e-04

eGp3 13 0 poly(1) <2,3> -5.3691e-04 1.5773e-03 2.5402e-04

rGp0 10 0 1

rGp1 11 0 1

rGp2 12 0 1

rGp3 13 0 1

gG 3 2 value={(exp(v(10)+v(20)*(v(11)+v(20)*(v(12)+v(20)*v(13)))))/3581}

ePp0 110 0 poly(1) <2,3> -2.7098e+00 7.6798e+00 -3.8264e+00 -7.3346e-01

+ -3.4417e-02

ePp1 111 0 poly(1) <2,3> 9.6711e-01 -1.6271e+00 8.1943e-01 1.7330e-01

+ 8.4990e-03

ePp2 112 0 poly(1) <2,3> 1.2914e-02 -5.2319e-02 3.8963e-02 7.9005e-03

+ 3.5277e-04

ePp3 113 0 poly(1) <2,3> 1.8966e-03 1.8966e-02 -1.1283e-02 -2.6729e-03

+ -1.3326e-04

rPp0 110 0 1

rPp1 111 0 1

rPp2 112 0 1

rPp3 113 0 1

gP 1 3 value={(exp(v(110)+v(20)*(v(111)+v(20)*(v(112)+v(20)*v(113)))))/1000}

.ends



Marshall's and Reynold's Models + Variations

***********************

.subckt 12ax7 1 3 4 ; TRIODO SEGNALE

g1 2 4 value = {(exp(1.5*(log((v(2,4)/85)+v(3,4)))))/580}

c1 3 4 1.6p

c2 3 1 1.7p

c3 1 4 .46p

r1 3 5 50k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends 12ax7 ; eq. ecc83

************************

.subckt 6sn7 1 3 4 ; TRIODO SEGNALE

g1 2 4 value = {(exp(1.5*(log((v(2,4)/22)+v(3,4)))))/1086}

*+ (0, 0) (20u, 20u)

*+ (30u, 30u) (.35m, .806m)

*+ (1m, 1.77m) (1.5m, 2.322m)

*+ (2m, 2.85m) (3m, 4.015m)

*+ (4m, 4.87m) (5m, 5.8m)

*+ (8m, 8.77m) (10m, 10.33m)

*+ (15m, 14.65m) (20m, 19.405m)

c1 3 4 2.6p

c2 3 1 4p

c3 1 4 .7p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends 6sn7

************************

.subckt 12au7 1 3 4 ; TRIODO SEGNALE

g1 2 4 value = {(exp(1.5*(log((v(2,4)/18)+v(3,4)))))/1151}

c1 3 4 1.6p

c2 3 1 1.5p

c3 1 4 .5p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends 12au7 ; eq. ecc82

***********************



*************************

.subckt VT4C 1 3 4 ; TRIODO DI POTENZA D.H.T. ( G.E.)

g1 2 4 value = {(exp(1.5*(log((v(2,4)/12)+v(3,4)))))/3010}

c1 3 4 6p

c2 3 1 14.5p

c3 1 4 5.5p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends VT4C ; eq. 211A

***********************

.subckt 2A3 1 3 4 ; TRIODO DI POTENZA D.H.T. ( F.I.V.R.E.)

g1 2 4 value = {(exp(1.5*(log((v(2,4)/4.2)+v(3,4)))))/970}

c1 3 4 7.5p

c2 3 1 16.5p

c3 1 4 5.5p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends 2A3

***********************

.subckt ECC88 1 3 4 ; TRIODO DI SEGNALE ( F.I.V.R.E.)

g1 2 4 value = {(exp(1.5*(log((v(2,4)/33)+v(3,4)))))/104}

c1 3 4 3.3p

c2 3 1 1.4p

c3 1 4 2.8p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends ECC88 ; eq. 6dj8, 7dj8, e88cc, 6922

***********************

.subckt 300B 1 3 4 ; TRIODO DI POTENZA D.H.T. (WESTERN ELECTRIC)

g1 2 4 value = {(exp(1.46*(log((v(2,4)/3.5)+v(3,4)))))/2000}

c1 3 4 9p

c2 3 1 15p

c3 1 4 4.3p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends 300B ;

***********************



.subckt 6FQ7 1 3 4 ; TRIODO DI SEGNALE ALTA CORRENTE

g1 2 4 value = {(exp(1.5*(log((v(2,4)/20)+v(3,4)))))/1049}

c1 3 4 2.4p

c2 3 1 3.6p

c3 1 4 .34p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends 6FQ7 ;

***********************

.subckt 6CG7 1 3 4 ; TRIODO DI SEGNALE ALTA CORRENTE

g1 2 4 value = {(exp(1.5*(log((v(2,4)/20)+v(3,4)))))/990}

c1 3 4 2.3p

c2 3 1 4p

c3 1 4 2.2p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends 6CG7 ;

***********************



.subckt E88CC 1 3 4 ; TRIODO DI SEGNALE (SQ PHILIPS) *modello sperimentale*

g1 2 4 value = {(exp(1.5*(log((v(2,4)/(-0.1369*v(3,4)*v(3,4)-1.0232*v(3,4)+31.5035))+v(3,4)))))/120}

c1 3 4 3.3p

c2 3 1 1.4p

c3 1 4 2.8p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends E88CC ; eq. 6dj8, 7dj8, 6922

***********************

.subckt 6C33C-B 1 3 4 ; POWER TRIODE (SOVTEK) *modello sperimentale*

g1 2 4 value = {(exp(1.5*(log((v(2,4)/(-0.0002*v(3,4)*v(3,4)-0.0231*v(3,4)+1.6840))+v(3,4)))))/517}

c1 3 4 26p

c2 3 1 30p

c3 1 4 10p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends 6C33C-B

************************

.subckt 12AT7 1 3 4 ; TRIODO DI SEGNALE *modello sperimentale*

g1 2 4 value = {(exp(1.5*(log((v(2,4)/(-.3512*v(3,4)*v(3,4)-2.6040*v(3,4)+62.7825))+v(3,4)))))/147}

c1 3 4 2.2p

c2 3 1 1.5p

c3 1 4 .5p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends 12AT7 ;eq. ECC81

***********************

.subckt 5842 1 3 4 ; TRIODO DI SEGNALE ( General Electric)

g1 2 4 value = {(exp(1.5*(log((v(2,4)/43)+v(3,4)))))/98.54}

c1 3 4 3.3p

c2 3 1 1.4p

c3 1 4 2.8p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends 5842 ; 417A

***********************

.subckt SV811-10 1 3 4 ; Power Triode ( Svetlana )

g1 2 4 value = {(exp(1.5*(log((v(2,4)/11)+v(3,4)))))/1668}

c1 3 4 7p

c2 3 1 8p

c3 1 4 8p

r1 3 5 10k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends SV811-10,

***********************

.subckt cv5112 1 3 4 ; TRIODO SEGNALE

g1 2 4 value = {(exp(1.5*(log((v(2,4)/47)+v(3,4)))))/32.51}

c1 3 4 11p

c2 3 1 4p

c3 1 4 2.46p

r1 3 5 20k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends cv5112 ; eq. 3a/167m

***********************

.subckt 6080 1 3 4 ; TRIODO SEGNALE

g1 2 4 value = {(exp(1.5*(log((v(2,4)/2)+v(3,4)))))/732}

c1 3 4 1.6p

c2 3 1 1.7p

c3 1 4 .46p

r1 3 5 50k

d1 1 2 dx

d2 4 2 dx2

d3 5 4 dx

.model dx d(is=1p rs=1)

.model dx2 d(is=1n rs=1)

.ends 6080 ;

************************

.subckt 12ax7i p g k

e1 2 0 value = {v(p,k) + 83.5*v(g,k)}

r1 2 0 1k

gp p k value = {1.73e-6*(pwr(v(2),1.5)+pwrs(v(2),1.5))/2}

rgk g 1 100k

d1 1 k dm

cgp g p 1.6p

cgk g k 1.7p

cpk p k .4p

.model dm d

.ends ;modello "Marshall"

*************************

.subckt 811a p g k

e1 2 0 value = {v(p,k) + 140*v(g,k)}

r1 2 0 1k

gp p k value = {3.73e-7*(pwr(v(2),1.5)+pwrs(v(2),1.5))/2}

rgk g 1 2k

d1 1 k dm

cgp g p 1.6p

cgk g k 1.7p

cpk p k .4p

.model dm d

.ends ;modello "Marshall"

*************************

.subckt 845 p g k

e1 2 0 value = {v(p,k) +5.27*v(g,k)}

r1 2 0 1k

e2 3 0 table {v(p,k)} =

+ (20, 0) (100, 1)

r2 3 0 1k

gp p k value = {(2.484e-5*(pwr(v(2),1.5)+pwrs(v(2),1.5))/2)*v(3)}

rgk g 1 8k

d1 1 k dm

cgp g p 13.5p

cgk g k 6p

cpk p k 6.5p

.model dm d

.ends 845 ; modello "Marshall"

************************

.subckt 6sn7-gt p g k

e1 2 0 value = {v(p,k) +20*v(g,k)}

*e2 3 0 table {v(p,k)} =

*+ (175, 0) ;(175, 2.857)

*+ (200, 0.997) (225, 1)

*+ (250, 1) (275, .978)

*+ (300, .945) (325, .917)

*+ (350, .906)

r1 2 0 1k

*r2 3 0 1k

gp p k value ={1.054e-5*(pwr(v(2),1.5)+pwrs(v(2),1.5))/2}

rgk g 1 10k

d1 1 k dm

cgp g p 3.8p

cgk g k 2.6p

cpk p k .7p

.model dm d

.ends 6sn7-gt ; Modello "Marshall"

************************

Rydel's Models

*******************************

.subckt e182cc p g k ;Rydel's Models Triode Mode

+params: gp=0.00035349 b=36443491.15

+ c=8.843336963 d=81.53628791

+ cgk=11p cgp=5p

+ cpk=1.8p mu=24

e1 1 0 value= {1+(v(g,k)/b)}

re1 1 0 100meg

e2 2 0 value= {v(p,k)/(v(p,k)+c)}

re2 2 0 100meg

e3 3 0 value= {v(g,k)+((v(p,k)+d)/mu)}

re3 3 0 100meg

g1 p k value= {gp*v(1)*v(2)*((1/2)*(pwr(v(3),1.5)+pwrs(v(3),1.5)))}

rpk p k 100meg

c1 g k {cgk}

c2 g p {cgp}

c3 p k {cpk}

.ends

********************************

.subckt e55l p g k ;Rydel's Models Triode Mode

+params: gp=0.004735979219 b=3734.604234

+ c=0.3266713215 d=79.54627249

+ cgk=11p cgp=5p

+ cpk=1.8p mu=30

e1 1 0 value= {1+(v(g,k)/b)}

re1 1 0 100meg

e2 2 0 value= {v(p,k)/(v(p,k)+c)}

re2 2 0 100meg

e3 3 0 value= {v(g,k)+((v(p,k)+d)/mu)}

re3 3 0 100meg

g1 p k value= {gp*v(1)*v(2)*(pwr(v(3),1.5)+pwrs(v(3),1.5))}

rpk p k 100meg

c1 g k {cgk}

c2 g p {cgp}

c3 p k {cpk}

.ends

********************************

.subckt 6c33c p g k ;Rydel's Models

+params: g=2.957e-3 B=16.976 mu=1.984

+ k=0.941 Vc=-0.578

+ cgk=11p cgp=5p

+ cpk=1.8p

e1 1 0 value= {1+(v(g,k)/(B-(V(g,k)/k)))}

re1 1 0 100meg

e2 2 0 value= {v(g,k)+((v(p,k)+Vc)/mu)}

re2 2 0 100meg

g1 p k value= {g*v(1)*(pwr(v(2),1.5)+pwrs(v(2),1.5))}

rpk p k 100meg

c1 g k {cgk}

c2 g p {cgp}

c3 p k {cpk}

.ends





*************************

.subckt 6c33c_m p g k ;Rydel's Models

+params: g=2.957e-3 B=16.976 mu=2.2

+ k=0.941 Vc=-0.578

+ cgk=11p cgp=5p

+ cpk=1.8p

v_eddy 10 0 2.984

R_eddy1 10 11 0.504k

R-break 11 0 {m}

e1 1 0 value= {1+(v(g,k)/(B-(V(g,k)/k)))}

re1 1 0 100meg

e2 2 0 value= {v(g,k)+((v(p,k)+Vc)/v(11))}

re2 2 0 100meg

g1 p k value= {g*v(1)*(pwr(v(2),1.5)+pwrs(v(2),1.5))}

rpk p k 100meg

c1 g k {cgk}

c2 g p {cgp}

c3 p k {cpk}

.ends 6c33c_m
********************************

ESS DAC Code?

/******************* Code Customization Section *********************/
/* First: Choose the clock frequency you have and comment the other */

#define USE80MHZ  
//#define USE100MHZ

/* Second: Choose stereo or mono

   | CONFIGURATION       | #define DUALMONO | #define STEREO   |
   |---------------------|------------------|------------------|
   | Dual mono           | un-comment       | comment          |
   | Stereo              | comment          | un-comment       | 
   |---------------------|------------------|------------------|    */
   
#define STEREO
//#define DUALMONO

/* Third, optionally choose the number of inputs. 6 is the max without 
   modifying the code. You could lower the number of input choices
   here. for example if you only want to see 2 choices, modify the
   code like this: #define ICHO 2                                   */

#define ICHO 6

/* Fourth, optionally change the name of the inputs. Keep 6 characters
   Use blanks if necessary. If you use less number of inputs, only the
   top ones matter.
   */

char no0[] = "INPT-A";
char no1[] = "INPT-B";
char no2[] = "INPT-C";
char no3[] = "INPT-D";
char no4[] = "INPT-E";
char no5[] = "INPT-F";

/* These inputs choices can be virtual or real. In the ES9018 there
   were 8 data lines. One could simultanously connect one I2S/DSD input
   plus 3 additional SPDIF input (thus 4 physical inputs). 
   In the ES9018K2M there are two additional input lines for SPDIF so 
   one can potentially connect one I2S/DSD input plus 2 additional SPDIF
   inputs.In addition one could choose different parameters -such as the
   DPLL bandwidh or filter selection- 
                                                                    */
   
/* Fifth, adjust the interrupt routine to match your rotary encoder by
   adjusting the mode parameter in the following routine
   (search for it in the code):
   
   "attachInterrupt(0, rotEncoder, LOW);"
    
   The mode parameter defines when the interrupt should be triggered:
       LOW to trigger the interrupt whenever the pin is low,
       CHANGE to trigger the interrupt whenever the pin changes value
       RISING to trigger when the pin goes from low to high,
       FALLING for when the pin goes from high to low. 
   
   You can also read the following link:
   https://hifiduino.wordpress.com/2011/09/12/problems-with-rotary-encoders/
                                                                    */

/***************** End Code Customization Section *******************/



/******************* Code Customization Section *********************/

/* First: Choose the clock frequency you have and comment the other */

#define USE80MHZ  
//#define USE100MHZ

/* Second: Choose stereo or mono

   | CONFIGURATION       | #define DUALMONO | #define STEREO   |
   |---------------------|------------------|------------------|
   | Dual mono           | un-comment       | comment          |
   | Stereo              | comment          | un-comment       | 
   |---------------------|------------------|------------------|    */
   
#define STEREO
//#define DUALMONO

/* Third, optionally choose the number of inputs. 6 is the max without 
   modifying the code. You could lower the number of input choices
   here. for example if you only want to see 2 choices, modify the
   code like this: #define ICHO 2                                   */

#define ICHO 6

/* Fourth, optionally change the name of the inputs. Keep 6 characters
   Use blanks if necessary. If you use less number of inputs, only the
   top ones matter.
   */

char no0[] = "INPT-A";
char no1[] = "INPT-B";
char no2[] = "INPT-C";
char no3[] = "INPT-D";
char no4[] = "INPT-E";
char no5[] = "INPT-F";

/* These inputs choices can be virtual or real. In the ES9018 there
   were 8 data lines. One could simultanously connect one I2S/DSD input
   plus 3 additional SPDIF input (thus 4 physical inputs). 
   In the ES9018K2M there are two additional input lines for SPDIF so 
   one can potentially connect one I2S/DSD input plus 2 additional SPDIF
   inputs.In addition one could choose different parameters -such as the
   DPLL bandwidh or filter selection- 
                                                                    */
   
/* Fifth, adjust the interrupt routine to match your rotary encoder by
   adjusting the mode parameter in the following routine
   (search for it in the code):
   
   "attachInterrupt(0, rotEncoder, LOW);"
    
   The mode parameter defines when the interrupt should be triggered:
       LOW to trigger the interrupt whenever the pin is low,
       CHANGE to trigger the interrupt whenever the pin changes value
       RISING to trigger when the pin goes from low to high,
       FALLING for when the pin goes from high to low. 
   
   You can also read the following link:
   https://hifiduino.wordpress.com/2011/09/12/problems-with-rotary-encoders/
                                                                    */
 

/***************** End Code Customization Section *******************/ 

Smart Digital Amplifier Monitoring Controller

Realtime-Programmable Digital Amplifier Control-Monitor System

  • Isolation, Realtime, PC-UI Programmable, FreqResponse Adjust, Harman Curve
  • Digital Filter/Parameter Selection
  • LDR volume control/detection
  • LED Status?
  • OLED Status?
  • Encoder Adjustment?
  • Electronic Volume
  • Buffer OP Selection
  • PC-local-bluetooth GUI adjustment
  • Wireless
  • I2C/SPI Device integrated like BME280
  • Temp-Volt-Current-VS-Time PC Logging



Monitor:

  • Bias
  • DC offset
  • Temp
  • Current/Voltage Supply
  • THD
  • Gain

Controlling:

  • Vbe Bias
  • Idle Current
  • Negative FB
  • Protection Sensitivity
  • Input Source
  • Gain
  • Relay---R/L/C Selection
  • Soft-start, DC protection
  • Impedence Control
  • Feedback point select
  • Servo on/off
  • PSU Voltage, Kind
  • Grounding Point Selection, Ground Lift on/off
  • Programmable Temp, or constant temp!


#include <math.h>
#include "LiquidCrystal.h"
#define RELAY 8   
LiquidCrystal lcd(6,7,5,4,3,2);
float A = 1.009249522e-03, B = 2.378405444e-04, C = 2.019202697e-07;
float T,logRt,Tf,Tc;
float Thermistor(int Vo) {

 logRt = log(10000.0*((1024.0/Vo-1))); 

 T = (1.0 / (A + B*logRt + C*logRt*logRt*logRt));  // We get the temperature value in Kelvin from this Stein-Hart equation

 Tc = T - 273.15;                 // Convert Kelvin to Celcius

 Tf = (T * 1.8) + 32.0;           // Convert Kelvin to Fahrenheit

 return T;

}


void setup() {

 lcd.begin(16,2);

 lcd.clear();

pinMode(RELAY, OUTPUT); 

}


void loop() {

  lcd.setCursor(0,0);

  lcd.print("Temperature:");

  lcd.print(int(Thermistor(analogRead(0))));

  lcd.print("C ");

  delay(500);  // wait 0.5 seconds before sampling temperature again

if (Tc > 28) digitalWrite(RELAY, HIGH),lcd.setCursor(0,1),lcd.print("Light status:ON "),delay(500);

else if (Tc < 28) digitalWrite(RELAY, LOW),lcd.setCursor(0,1),lcd.print("Light status:OFF"),delay(500); }



Improved vacuum tube models for SPICE simulations

  Improved vacuum tube models for SPICE simulations from: https://www.i-t.com/blog/updating-norman-korens-tube-amplifier-design/improved-vac...