AS - example 2 - current loop transmitter

Figure 1: C:\jobs\Maxima\AS\ex\_img\ex2.png
Result

Figure above (embedded only *.wxmx) shows a linear model of a current transmitter.
Transfer functions are processed below to calculate component values for 4..20mA range.

(%i1) /* working directory must be explicitly defined HERE ! */
kill(all) $
file_search_maxima : append(["c:/jobs/Maxima/AS/ex/libs/###.{mac,mc}"],file_search_maxima )$
load("_myUnits") $
load("_myFunctions") $
/* suppress ratsimp warnings */
ratprint: false $
DBG: 0 $

Result

(%i6) /* I=Nd*Vd+Ne*Ve+Nr*Vr+KIdd*Idd */
da: (gm)*(Y6*Y2) $
dbNd: (gm)*(Ys*Y6*Y1+Y6*Y2*Y1) $
Nd:dbNd/da $
dbNe:0 $
Ne:dbNe/da $
dbNr: (gm)*(Y6*Y3*Y2+Ys*Y6*Y3) $
Nr:dbNr/da $
dbKIdd:0 $
KIdd:dbKIdd/da $
I:ratsimp(Nd*Vd+Ne*Ve+Nr*Vr+KIdd*Idd) $
print("I=",I) $
I:ratsimp(subst([Y1=1/R1, Y2=1/R2, Y3=1/R3, Ys=1/Rs],I)) $
print("I=",I) $
DBG_2("properties(I) = ", properties(I)) $
/* define I as a function of Vr,Vd */
I(Vr,Vd):= expandwrt(I,Vr,Vd) $
print("I(Vr,Vd) = ",I(Vr,Vd)) $
DBG_2("properties(I) = ", properties(I)) $

Result

(%i23) /* Let's assume, that the design is ready, i.e. the values of components are settled. */
Vref: 2.5 $
R1:287*kOhm $
R2:24.900*kOhm $
R3:2.0*MOhm $
Rs:10 $
define(I_mA(Vr,Vd),expandwrt(ratsimp(ev(I(Vr,Vd)/mA,
       [R1=float(R1),R2=float(R2), R3=float(R3), Rs=float(Rs)])), Vr,Vd)) $

fpprintprec: 4 $
(print ("R1[kOhm] = ", float(R1)/kOhm), print("R2[kOhm] = ",float(R2)/kOhm)) $
(print ("R3[kOhm] = ", float(R3)/kOhm), print("Rs[Ohm] = ",float(Rs))) $
print("I_mA(Vr,Vd) = ",I_mA(Vr,Vd)) $
Vref: 2.5 $
print ("Vref = ", float(Vref)) $
/* And let's calculate DAC output Vd for zero and full scale for given Vref */
eq1: I_mA(Vref,Vd) = 4 $
Vd0:float(rhs(solve(eq1,Vd)[1])) $
eq2: I_mA(Vref,Vd) = 20 $
Vd1:float(rhs(solve(eq2,Vd)[1])) $
print ("Vd0 = ", Vd0, " I_mA(Vref,Vd0) = ", float(I_mA(Vref,Vd0))) $
print ("Vd1 = ", Vd1, " I_mA(Vref,Vd1) = ", float(I_mA(Vref,Vd1))) $

Result


Created with wxMaxima.