Model of High Voltage power supply

Here is a verilog-AMS model. Results are very sensitive to reverse (leakage) current of diodes (15nA simulated here).

1470/5840V simulated (load: 20GOhm/cell)
1340/4800V simulated (load: 20G on treble, 500M on bass)

With one leaky cell bass (500MOhm), sensitivity changes: -0.8dB on treble, -1.7dB on bass.

With one very leaky cell bass (250MOhm): 1270/4100V (-1.3dB/-3dB).


`include "timescale.sv"

module testbench();

  interconnect VSUP;
  interconnect VSS;

  supplyAC #(.peak(610.0*1.414)) supply_VSUP  (VSUP,VSS); // 610.0 28.1

  interconnect vdiv;
  interconnect vint1, vint2, vint3, vint4;
  interconnect    vint8, vint7, vint6, vint5;
  interconnect vTreble, vBass;

  localparam real p_set_init = 1.0;

  resistor  #(.p_res(330e3)) res1 (VSUP ,vdiv );
  resistor  #(.p_res(2.2e6)) res2 (vdiv ,VSS  );

  capacitor #(.p_cap(10e-9), .init( -750*p_set_init)) capa1(vdiv ,vint1);
  capacitor #(.p_cap(10e-9), .init(-1500*p_set_init)) capa2(vint1,vint2);
  capacitor #(.p_cap(10e-9), .init(-1500*p_set_init)) capa3(vint2,vint3);
  capacitor #(.p_cap(10e-9), .init(-1500*p_set_init)) capa4(vint3,vint4);

  capacitor #(.p_cap(10e-9), .init(-1500*p_set_init)) capa5(vint6,vint5);
  capacitor #(.p_cap(10e-9), .init(-1500*p_set_init)) capa6(vint7,vint6);
  capacitor #(.p_cap(10e-9), .init(-1500*p_set_init)) capa7(vint8,vint7);
  capacitor #(.p_cap(10e-9), .init(-1500*p_set_init)) capa8(VSS  ,vint8);

  diode dio1(VSS  ,vint1);
  diode dio2(vint1,vint8);
  diode dio3(vint8,vint2);
  diode dio4(vint2,vint7);
  diode dio5(vint7,vint3);
  diode dio6(vint3,vint6);
  diode dio7(vint6,vint4);
  diode dio8(vint4,vint5);

  localparam real nBass=2;

  neon_kit #(.p_cap( 100e-9), .init(80.0*0.9*p_set_init)) neonT(vint8,vTreble);
  neon_kit #(.p_cap( 390e-9), .init(80.0*0.9*p_set_init)) neonB(vint5,vBass  ); // https://www.mouser.fr/Passive-Components/Capacitors/Film-Capacitors/_/N-9x371Z1yzvvqx?P=1z0z7l5Z1yzs9nvZ1y98vjeZ1yznbzrZ1z0vn48Z1z0wq34&FS=True

  generate
      capacitor #(.p_cap(1437e-12      ), .init(1500*p_set_init)) capaT(vTreble, VSS); // 1437pf 1200pF
    if (1) begin
      capacitor #(.p_cap( 770e-12*nBass), .init(6000*p_set_init)) capaB(vBass  , VSS); //  770pF 1600pF
    end
    else begin
      esl57_bass #(.nBass(nBass)) esl57_bass(vBass, VSS);
    end
  endgenerate

  /*

  Expectations for blink:
  measured 6s for 1 bass cell only, 23GOhm, with 100pF
  measured 0.4s for probe 1GOhm + 2 bass cells

  Note: diaphragm conductivity is: 2 x 10^9 to 1 x 10^12 ohms per unit square

  */


  localparam loadSelTreble = 3;
  //
  generate
    if (loadSelTreble==1) resistor  #(.p_res(100.0e9      )) resLeakTreble (vTreble ,VSS );
    if (loadSelTreble==2) resistor  #(.p_res(15.00e9      )) resLeakTreble (vTreble ,VSS ); // Standard treble cell
    if (loadSelTreble==3) resistor  #(.p_res( 5.00e9      )) resLeakTreble (vTreble ,VSS );
  endgenerate

  localparam loadSelBass   = 3;
  //
  generate
    if (loadSelBass  ==1) resistor  #(.p_res(100.0e9/nBass)) resLeakBass   (vBass ,VSS );
    if (loadSelBass  ==2) resistor  #(.p_res( 20.0e9/nBass)) resLeakBass   (vBass ,VSS ); // Standard bass cell x2
    if (loadSelBass  ==3) resistor  #(.p_res( 10.0e9/nBass)) resLeakBass   (vBass ,VSS ); //
    if (loadSelBass  ==4) resistor  #(.p_res( 1.00e9      )) resLeakBass   (vBass ,VSS ); // EHT probe
    if (loadSelBass  ==5) resistor  #(.p_res( 0.50e9      )) resLeakBass   (vBass ,VSS ); // Leaky bass cell
    if (loadSelBass  ==6) resistor  #(.p_res( 0.25e9      )) resLeakBass   (vBass ,VSS ); // Very leaky bass cell
    if (loadSelBass  ==7) resistor  #(.p_res( 0.01e9      )) resLeakBass   (vBass ,VSS ); // Multimeter
  endgenerate

endmodule

`include "timescale.sv"

module neon_kit (n1,n2);
  inout n1,n2;
  interconnect n1,n2, n_12;
  parameter real p_cap = 100e-9;
  parameter real init  = 0.0;

  resistor  #(.p_res(10e6))               res(n1,n_12);

  neon                                    neon(n_12,n2); // n_12
  capacitor #(.p_cap(p_cap), .init(init)) capa(n_12,n2); // n_12
//resistor  #(.res(9e9))                  resl(n_12,n2); // Leak through capacitor

endmodule

`include "constants.vams"
`include "disciplines.vams"

module neon (n1,n2);
  electrical n1,n2;

  real vNeon;
  real iNeon;
  real aClamp;
  integer blink;
  analog begin
    aClamp=(abs(V(n1,n2))/80);
    if       (aClamp>=1)
      I(n1,n2) <+ V(n1,n2)/300e3;
    else if  (aClamp>=0.9)
      I(n1,n2) <+ V(n1,n2)/(300e3*((aClamp-0.9)/(1.0-0.9))+(1-(aClamp-0.9)/(1.0-0.9))*300e4); // smooth start
    else if ((aClamp>=0.72) && (abs(I(n1,n2))>0))
      I(n1,n2) <+ V(n1,n2)/300e4; // hysteresis
    else
      I(n1,n2) <+ 0;
    //
    vNeon = V(n1,n2);
    iNeon = I(n1,n2);
    if (abs(I(n1,n2))>0) blink=1; else blink=0;
  end

endmodule

`include "disciplines.vams"
`include "timescale.sv"

module diode(n1,n2);
  electrical n1,n2;

  parameter real irev = 0.015e-6; // A (https://www.mouser.fr/datasheet/2/427/gp0220-1768061.pdf)
  parameter real Vth  = 0.26;     // V

  analog begin
    I(n1,n2) <+ irev * (exp(V(n1,n2)/Vth) - 1.0);
  end

endmodule

`include "constants.vams"
`include "disciplines.vams"

`include "timescale.sv"

module capacitor (vio,vss);
  electrical vio,vss;
  parameter real p_cap=1p exclude 0;
  parameter real res=0.001;
  parameter real init=0;

  real vCapa;
  analog begin
    V(vio,vss) <+ idt(I(vio,vss))/p_cap+init + res*I(vio,vss); // neglectable resistor to break a loop
    //
    vCapa = V(vio,vss);
  end

endmodule

`include "constants.vams"
`include "disciplines.vams"

`include "timescale.sv"

module resistor (vio,vss);
  electrical vio,vss;
  parameter real p_res=1 exclude 0;

  analog begin
    V(vio,vss) <+ p_res*I(vio,vss);
  end

endmodule

`include "disciplines.vams"
`include "timescale.sv"

module supplyAC(n1,n2);
  electrical n1,n2;

  parameter real peak  = 1.0;
  parameter real res   = 0.001; // resistor
  parameter real freq  = 50.0;

  //
  real phase = `M_PI/2.0;
  real incr  = 2.0 * `M_PI * freq * 10e-6; // 10us
  always begin
    #1 phase = phase + incr;
  end
  //

  electrical gnd; ground gnd;

  analog begin
    V(n1,gnd) <+ peak * cos(phase) + res*I(n1,gnd);
    V(n2,gnd) <+ 0.0;
  end

endmodule

Loading