AS - example 2 - current loop transmitter
Figure 1: C:\jobs\Maxima\AS\ex\_img\ex2.png
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 $ |
| (%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)) $ |
| (%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))) $ |