Ok. Aquí vamos:
Tomé la ecuación para la corriente de diodo de Wikipedia, es:
$$ I_D = I_S * (e ^ {\ frac {U_D} {n * U_T}} - 1) $$
\ $ U_D \ $ es el voltaje del diodo, \ $ U_T \ $ es un voltaje de temperatura, que se calcula a partir de la temperatura y la constante de Boltzmann. O simplemente puede aproximarlo con 25 mV a temperatura ambiente. \ $ I_S \ $ es la saturación actual y en algún lugar del rango pico a nanoamp. \ $ n \ $ es el coeficiente de emisión y, según wikipedia, en algún lugar entre 1 y 2. Estas son variables que no son muy importantes para la forma general de la curva, por lo que solo usaré valores que parecen razonables .
.
simular este circuito : esquema creado usando CircuitLab
Mirando el circuito anterior, sabemos que la corriente a través de \ $ R_2 \ $ es la corriente combinada de \ $ R_1 \ $ y el diodo. Esto se puede escribir como:
$$ i_2 = \ frac {u_1} {R_1} + I_s (e ^ {\ frac {u_1} {n * U_T}} - 1) $$
De la Ley de Ohm, calculamos \ $ u_2 = R_2 * i_2 \ $. Obviamente, el resto de \ $ U_0 \ $ tiene que caer en más de \ $ R_1 \ $, por lo que:
$$ u_1 = U_0-u_2 = U_0-R_2 * i_2 = U_0 - R_2 (\ frac {u_1} {R_1} + I_s (e ^ {\ frac {u_1} {n * U_T}} - 1)) $$
que podemos reescribir para:
$$ u_1 = \ frac {U_0 - R_2 * I_s (e ^ {\ frac {u_1} {n * U_T}} - 1)} {1+ \ frac {R_2} {R_1}} $$
Como puede ver, esta ecuación tiene la parte divisoria de voltaje habitual (\ $ u_1 = \ frac {U_0} {1 + R_2 / R_1} \ $) pero también un "voltaje de error", introducido por el diodo que aumenta exponencialmente con \ $ u_1 \ $ en sí. También puede ver que \ $ R_2 \ $ se tiene en cuenta con el voltaje de error.
Ya que no podemos reescribir esta ecuación en su forma explícita, simplemente la colocamos en Matlab y resolvemos numéricamente para un barrido sobre \ $ U_0 \ $. Mi código matlab es el siguiente:
function [ u0, u1 ] = sweep_diode_divider( U0_sweepstart, U0_sweepend, n_sweep, R1_, R2_, Is_, Ut_, n_ )
syms U0_ R1 R2 Is Ut n U1_ Uc;
U1_(U0_, R1,R2,Is,Ut,n) = (U0_ - Is*R2*(exp(Uc/(Ut*n)) - 1))/(R2/R1 + 1);
u0 = linspace(U0_sweepstart, U0_sweepend, n_sweep);
u1 = [];
res = 0;
for u = u0
res = vpasolve(Uc == U1_(u, R1_, R2_, Is_, Ut_, n_), Uc, res);
u1 = [u1 double(res)];
end
end
Ahora podemos trazar esto para valores plausibles de \ $ I_s, U_T, n \ $ y \ $ R1 = R2 = 1000 \ $ y \ $ 0V < U_0 < 10V \ $ (el cálculo toma aproximadamente 20 segundos por 100 puntos):
>> [u0, u1] = sweep_diode_divider(0, 10, 100, 1000, 1000, 1e-9, 25e-3, 1.75);
>> plot(u0, u1)
Este es el tipo de curva que esperarías y que LTSpice también me da.