Esempio n. 1
0
 private void calculateBias()
 {
     try
     {
         BiasResult res = bias.Calculate(edit_Vcc.Text, edit_Ic.Text, edit_beta.Text,
                                         edit_Vbe.Text, edit_VeRe.Text, edit_Vce_Rc.Text, edit_R1.Text, edit_R2.Text);
         label_R1.Text  = RtoText(res.r1);
         label_R2.Text  = RtoText(res.r2);
         label_R3.Text  = RtoText(res.rc);
         label_R4.Text  = RtoText(res.re);
         label_R1.Text  = RtoText(res.r1);
         label_Ib.Text  = (res.ib * 1000000).ToString("F2") + "uA";
         label_Ir1.Text = (res.ir1 * 1000000).ToString("F2") + "uA";
         label_Ir2.Text = (res.ir2 * 1000000).ToString("F2") + "uA";
         label_Vce.Text = (res.vce).ToString("F1") + "V";
         label_Ve.Text  = (res.ve).ToString("F1") + "V";
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
         // ShowDialog();
     }
 }
Esempio n. 2
0
        public BiasResult Calculate(string s_vcc, string s_ic, string s_beta, string s_vbe,
                                    string ve_re, string vce_rc, string s_r1, string s_r2)
        {
            double vcc  = Double.Parse(s_vcc);
            double ic   = Double.Parse(s_ic) / 1000;
            double beta = Double.Parse(s_beta);
            double vbe  = Double.Parse(s_vbe);

            ve_re  = ve_re.ToLower();
            vce_rc = vce_rc.ToLower();

            BiasResult res = new BiasResult();

            if (s_r1 == "" && s_r2 == "")
            {
                res.r1 = vcc / (ic / 10);
            }
            else if (s_r1 != "")
            {
                res.r1 = parse_R(s_r1);
            }
            else
            {
                res.r1 = 0.0;
                res.r2 = parse_R(s_r2);
            }

            double ib = ic / beta;

            res.ie = ic + ib;

            if (ve_re.EndsWith("r") || ve_re.EndsWith("k"))
            {
                res.re = Double.Parse(ve_re.Substring(0, ve_re.Length - 1));
                if (ve_re.EndsWith("k"))
                {
                    res.re *= 1000;
                }

                res.ve = res.re * res.ie;
            }
            else if (ve_re.EndsWith("v"))
            {
                res.ve = Double.Parse(ve_re.Substring(0, ve_re.Length - 1));
                res.re = res.ve / res.ie;
            }
            else
            {
                throw new Exception("Ve/Re: " + ve_re + ": missing v or R suffix");
            }

            if (vce_rc.EndsWith("r") || vce_rc.EndsWith("k"))
            {
                res.rc = Double.Parse(vce_rc.Substring(0, vce_rc.Length - 1));
                if (vce_rc.EndsWith("k"))
                {
                    res.rc *= 1000;
                }

                res.vrc = res.rc * ic;
                res.vce = vcc - res.ve - res.vrc;
                if (res.vce < 0)
                {
                    res.vce = 0;
                }
            }
            else if (vce_rc.EndsWith("v"))
            {
                res.vce = Double.Parse(vce_rc.Substring(0, vce_rc.Length - 1));
                res.vrc = vcc - res.vce - res.ve;
                if (res.vrc < 0)
                {
                    res.vrc = 0;
                }
                res.rc = res.vrc / ic;
            }
            else
            {
                throw new Exception("Vce/Rc: " + vce_rc + ": missing v or R suffix");
            }

            res.vb = res.ve + vbe;

            if (res.r1 < 0.0001)
            {
                res.r1 = res.r2 * (vcc / res.vb - 1);
                double vth = vcc * res.r2 / (res.r1 + res.r2);
                double rth = res.r1 * res.r2 / (res.r1 + res.r2);

                if ((res.ie * res.r1) / (beta + 1) > vcc)
                {
                    res.r1 = vcc * 0.6 / res.ie * beta;
                    //System.out.println("r1 is too high, reducing to " + r1);
                }
            }

            double rp = (vcc - (res.ie * res.r1) / (beta + 1)) / res.vb;

            res.r2 = res.r1 / (rp - 1);
            double vth2 = vcc * res.r2 / (res.r1 + res.r2);
            double rth2 = res.r1 * res.r2 / (res.r1 + res.r2);

            res.ir1 = (vcc - res.vb) / res.r1;
            res.ir2 = res.vb / res.r2;
            res.ib  = res.ir1 - res.ir2;


            return(res);
        }