Difference between revisions of "Minimig Video d/a resistor ladder"

From OpenCircuits
Jump to navigation Jump to search
(simulation results)
(fixup)
Line 10: Line 10:
 
::Total resistance = 1/(1/4000+1/2000+1/1000+1/560)+75 = 357.8282.. Ω
 
::Total resistance = 1/(1/4000+1/2000+1/1000+1/560)+75 = 357.8282.. Ω
 
::Common current through resistor ladder plus vga impedance (75Ω) = 3.3V / 357.8282.. = 0.009222 A
 
::Common current through resistor ladder plus vga impedance (75Ω) = 3.3V / 357.8282.. = 0.009222 A
::Current * [[Video Graphics Array|VGA]] impedance = 0.6917V (specification says 0.7 p-p)
+
::Current * [[Video Graphics Array|VGA]] impedance = 0.6917 V (specification says max 0.7V p-p)
::Output voltage = 75 * (3.3/(1/(1/4000+1/2000+1/1000+1/560)+75)) = 0.6917V
+
::Output voltage = 75 * (3.3/(1/(1/4000+1/2000+1/1000+1/560)+75)) = 0.6917 V
  
 
:Simplification:
 
:Simplification:
Line 17: Line 17:
  
 
:Base resistor value = (1/8+1/4+1/2+1/1)/(1/((R_vga*U_vcc)/U_vga-R_vga)) = 522.3214Ω
 
:Base resistor value = (1/8+1/4+1/2+1/1)/(1/((R_vga*U_vcc)/U_vga-R_vga)) = 522.3214Ω
 
+
 
:Deviation summary:
 
:Deviation summary:
 
::0523/523 = 1.0000
 
::0523/523 = 1.0000
Line 32: Line 32:
 
:[http://www.digikey.com/scripts/DkSearch/dksus.dll?Cat=65538;keywords=resistor Digikey: Resistors]
 
:[http://www.digikey.com/scripts/DkSearch/dksus.dll?Cat=65538;keywords=resistor Digikey: Resistors]
  
[[Image:Minimig_v1.0_video_dac_resistor_ladder_simulation_original.png|thumb| right |250px|Value vs output signal originaly]]<br>
+
<hr>
The original 4000Ω 2000Ω 1000Ω 560Ω resistors, Gives this curve for desired vs actual signal:<br>
+
[[Image:Minimig_v1.0_video_dac_resistor_ladder_simulation_original.png|thumb| right |250px|Value vs output amplitude originaly]]<br>
 +
The original 4000Ω 2000Ω 1000Ω 560Ω resistors, Gives this curve for the desired vs actual amplitude:<br>
 
Note the dent in the middle of the curve!<br>
 
Note the dent in the middle of the curve!<br>
<pre>
+
{| class="wikitable"
0 0.000002
+
|-
1 0.060736
+
! Value !! Amplitude [V]
2 0.119277
+
|-
3 0.175740
+
| 0 || 0.000002
4 0.230233
+
|-
5 0.282857
+
| 1 || 0.060736
6 0.333708
+
|-
7 0.382873
+
| 2 || 0.119277
8 0.389764
+
|-
9 0.437103
+
| 3 || 0.175740
10 0.482927
+
|-
11 0.527307
+
| 4 || 0.230233
12 0.570310
+
|-
13 0.612000
+
| 5 || 0.282857
14 0.652436
+
|-
15 0.691673
+
| 6 || 0.333708
</pre>
+
|-
 +
| 7 || 0.382873
 +
|-
 +
| 8 || 0.389764
 +
|-
 +
| 9 || 0.437103
 +
|-
 +
| 10 || 0.482927
 +
|-
 +
| 11 || 0.527307
 +
|-
 +
| 12 || 0.570310
 +
|-
 +
| 13 || 0.612000
 +
|-
 +
| 14 || 0.652436
 +
|-
 +
| 15 || 0.691673
 +
|}
  
[[Image:Minimig_v1.0_video_dac_resistor_ladder_simulation_modified.png|thumb| right |250px|Value vs output signal modified]]<br>
+
<hr>
The modification with 4220Ω 2100Ω 1050Ω 523Ω resistors, Gives this curve for desired vs actual signal:<br>
+
[[Image:Minimig_v1.0_video_dac_resistor_ladder_simulation_modified.png|thumb| right |250px|Value vs output amplitude modified]]<br>
<pre>
+
The modification with 4220Ω 2100Ω 1050Ω 523Ω resistors, Gives this curve for the desired vs actual amplitude:<br>
0 0.000002
+
{| class="wikitable"
1 0.057625
+
|-
2 0.113793
+
! Value !! Amplitude [V]
3 0.167545
+
|-
4 0.220000
+
| 0 || 0.000002
5 0.270256
+
|-
6 0.319355
+
| 1 || 0.057625
7 0.366446
+
|-
8 0.413880
+
| 2 || 0.113793
9 0.458053
+
|-
10 0.501297
+
| 3 || 0.167545
11 0.542855
+
|-
12 0.583575
+
| 4 || 0.220000
13 0.622742
+
|-
14 0.661153
+
| 5 || 0.270256
15 0.698131
+
|-
</pre>
+
| 6 || 0.319355
 +
|-
 +
| 7 || 0.366446
 +
|-
 +
| 8 || 0.413880
 +
|-
 +
| 9 || 0.458053
 +
|-
 +
| 10 || 0.501297
 +
|-
 +
| 11 || 0.542855
 +
|-
 +
| 12 || 0.583575
 +
|-
 +
| 13 || 0.622742
 +
|-
 +
| 14 || 0.661153
 +
|-
 +
| 15 || 0.698131
 +
|}
 +
<hr>
 +
Gnuplot command:
 +
:<pre>gnuplot> plot "dac_sim.txt"  using ($1):($2) smooth csplines</pre>
  
 +
<br>
 
Simulation program (perl):<br>
 
Simulation program (perl):<br>
 
<pre>
 
<pre>
Line 121: Line 163:
 
#-----------------------------------------------------------------------------
 
#-----------------------------------------------------------------------------
 
</pre>
 
</pre>
 
Gnuplot command: gnuplot> plot "dac_sim.txt"  using ($1):($2) smooth csplines
 

Revision as of 22:19, 22 August 2007

Model:

D/A resistor ladder electrical model


Equations:

Defining constants:
U_vga = 0.7 V
R_vga = 75 Ω
U_vcc = 3.3 V
Total resistance = 1/(1/4000+1/2000+1/1000+1/560)+75 = 357.8282.. Ω
Common current through resistor ladder plus vga impedance (75Ω) = 3.3V / 357.8282.. = 0.009222 A
Current * VGA impedance = 0.6917 V (specification says max 0.7V p-p)
Output voltage = 75 * (3.3/(1/(1/4000+1/2000+1/1000+1/560)+75)) = 0.6917 V
Simplification:
U = (75*3.3)/(1/(1/4000+1/2000+1/1000+1/560)+75) = 0.6917V
Base resistor value = (1/8+1/4+1/2+1/1)/(1/((R_vga*U_vcc)/U_vga-R_vga)) = 522.3214Ω
Deviation summary:
0523/523 = 1.0000
1050/523 = 2.0076
2100/523 = 4.0153
4220/523 = 8.0688
As can be seen no more than 1% is useful with digikey resistors. Resistor combinations will add tolerances and use valuable pcb space.
Maximum output voltage if VGA impedance is 75Ω is: (75*3.3)/(1/(1/4220+1/2100+1/1050+1/523)+75) = 0.6981 V

Useful links:

Wikipedia: Resistor
Wikipedia: Preferred number
Digikey: Resistors

Value vs output amplitude originaly


The original 4000Ω 2000Ω 1000Ω 560Ω resistors, Gives this curve for the desired vs actual amplitude:
Note the dent in the middle of the curve!

Value Amplitude [V]
0 0.000002
1 0.060736
2 0.119277
3 0.175740
4 0.230233
5 0.282857
6 0.333708
7 0.382873
8 0.389764
9 0.437103
10 0.482927
11 0.527307
12 0.570310
13 0.612000
14 0.652436
15 0.691673

Value vs output amplitude modified


The modification with 4220Ω 2100Ω 1050Ω 523Ω resistors, Gives this curve for the desired vs actual amplitude:

Value Amplitude [V]
0 0.000002
1 0.057625
2 0.113793
3 0.167545
4 0.220000
5 0.270256
6 0.319355
7 0.366446
8 0.413880
9 0.458053
10 0.501297
11 0.542855
12 0.583575
13 0.622742
14 0.661153
15 0.698131

Gnuplot command:

gnuplot> plot "dac_sim.txt"  using ($1):($2) smooth csplines


Simulation program (perl):

#!/usr/bin/perl
#
# Created:  2007-08-23 05:25.32
# Purpose:  Minimig Video D/A resistor ladder simulation
#-----------------------------------------------------------------------------
$map[$n++]=0;
$map[$n++]=8;
$map[$n++]=4;
$map[$n++]=12;
$map[$n++]=2;
$map[$n++]=10;
$map[$n++]=6;
$map[$n++]=14;
$map[$n++]=1;
$map[$n++]=9;
$map[$n++]=5;
$map[$n++]=13;
$map[$n++]=3;
$map[$n++]=11;
$map[$n++]=7;
$map[$n++]=15;

for($v=0; $v<=15; $v++) {
  $d=$map[$v];

  $d3 = ($d & 8)?1:0;
  $d2 = ($d & 4)?1:0;
  $d1 = ($d & 2)?1:0;
  $d0 = ($d & 1)?1:0;

  if(  !($d3==0 && $d2==0 && $d1==0 && $d0==0)   ) {
    $r_dac=1/( 
#      ${d3}/4000+ ${d2}/2000+ ${d1}/1000+ ${d0}/560
      ${d3}/4220+ ${d2}/2100+ ${d1}/1050+ ${d0}/523
      );
    } else { $r_dac=100*1000*1000; }

  $u = (75*3.3)/($r_dac+75);

  printf("%d %f\n",$v,$u);
  }

#-----------------------------------------------------------------------------