Example #1
0
        public static string StandardResistorValueApproximation(double val, ResistorSeries tolerance)
        {
            double series = 0;

            switch (tolerance)
            {
            case ResistorSeries.e12:
                series = 12;
                break;

            case ResistorSeries.e24:
                series = 24;
                break;

            case ResistorSeries.e48:
                series = 48;
                break;

            case ResistorSeries.e96:
                series = 96;
                break;

            default:
                series = 192;
                break;
            }

            var l = Math.Log10(val);

            var decplaces = series < 48 ? 10 : 100;

            var pref_val = (Math.Round((Math.Pow(10, (Math.Round(series * l) / series)) / Math.Pow(10, Math.Floor(Math.Log10((Math.Pow(10, (Math.Round(series * l) / series))))))) * decplaces) / decplaces) * Math.Pow(10, Math.Floor(Math.Log10((Math.Pow(10, (Math.Round(series * l) / series))))));

            var rounded = Math.Round(pref_val);
            var abs     = Math.Abs(rounded - pref_val);

            if (abs > 0.999 || abs < 0.0001)
            {
                pref_val = rounded;
            }

            if (pref_val >= 260 && pref_val <= 460)
            {
                pref_val += 10;                                     // fix for E24/E12/E6 series
            }
            else if (pref_val == 830)
            {
                pref_val -= 10;                                     // fix for E24/E12/E6 series
            }
            else if (pref_val == 919)
            {
                pref_val++;                                         // fix for E192 series
            }
            return(string.Format("Nearest standard value within specified tolerance:\r\n{0}", pref_val));
        }
        public static List <double> GenerateList(ResistorSeries serie, double mul)
        {
            List <double> ret = null;

            switch (serie)
            {
            case ResistorSeries.e12:
                ret = new List <double>(e12.Length);
                foreach (var value in e12)
                {
                    ret.Add(value * mul);
                }
                break;

            case ResistorSeries.e24:
                ret = new List <double>(e24.Length);
                foreach (var value in e24)
                {
                    ret.Add(value * mul);
                }
                break;

            case ResistorSeries.e48:
                ret = new List <double>(e48.Length);
                foreach (var value in e48)
                {
                    ret.Add(value * mul);
                }
                break;

            case ResistorSeries.e96:
                ret = new List <double>(e96.Length);
                foreach (var value in e96)
                {
                    ret.Add(value * mul);
                }
                break;

            case ResistorSeries.e192:
                ret = new List <double>(e192.Length);
                foreach (var value in e192)
                {
                    ret.Add(value * mul);
                }
                break;
            }
            return(ret);
        }
 public static List<double> GenerateList(ResistorSeries serie)
 {
     List<double> ret = null;
     switch (serie)
     {
         case ResistorSeries.e12:
             ret = new List<double>(multipliers.Length * e12.Length);
             foreach (var mul in multipliers)
             {
                 foreach (var value in e12) ret.Add(value * mul);
             }
             break;
         case ResistorSeries.e24:
             ret = new List<double>(multipliers.Length * e24.Length);
             foreach (var mul in multipliers)
             {
                 foreach (var value in e24) ret.Add(value * mul);
             }
             break;
         case ResistorSeries.e48:
             ret = new List<double>(multipliers.Length * e48.Length);
             foreach (var mul in multipliers)
             {
                 foreach (var value in e48) ret.Add(value * mul);
             }
             break;
         case ResistorSeries.e96:
             ret = new List<double>(multipliers.Length * e96.Length);
             foreach (var mul in multipliers)
             {
                 foreach (var value in e96) ret.Add(value * mul);
             }
             break;
         case ResistorSeries.e192:
             ret = new List<double>(multipliers.Length * e192.Length);
             foreach (var mul in multipliers)
             {
                 foreach (var value in e192) ret.Add(value * mul);
             }
             break;
     }
     return ret;
 }
Example #4
0
        public static string StandardResistorValueApproximation(double val, ResistorSeries tolerance)
        {
            double series = 0;

            switch (tolerance)
            {
                case ResistorSeries.e12:
                    series = 12;
                    break;
                case ResistorSeries.e24:
                    series = 24;
                    break;
                case ResistorSeries.e48:
                    series = 48;
                    break;
                case ResistorSeries.e96:
                    series = 96;
                    break;
                default:
                    series = 192;
                    break;
            }

            var l = Math.Log10(val);

            var decplaces = series < 48 ? 10 : 100;

            var pref_val = (Math.Round((Math.Pow(10, (Math.Round(series * l) / series)) / Math.Pow(10, Math.Floor(Math.Log10((Math.Pow(10, (Math.Round(series * l) / series))))))) * decplaces) / decplaces) * Math.Pow(10, Math.Floor(Math.Log10((Math.Pow(10, (Math.Round(series * l) / series))))));

            var rounded = Math.Round(pref_val);
            var abs = Math.Abs(rounded - pref_val);
            if (abs > 0.999 || abs < 0.0001)
                pref_val = rounded;

            if (pref_val >= 260 && pref_val <= 460) pref_val += 10; // fix for E24/E12/E6 series
            else if (pref_val == 830) pref_val -= 10;               // fix for E24/E12/E6 series
            else if (pref_val == 919) pref_val++;                   // fix for E192 series

            return string.Format("Nearest standard value within specified tolerance:\r\n{0}", pref_val);
        }
Example #5
0
        private static double ToleranceMultiplier(ResistorSeries serie)
        {
            switch (serie)
            {
            case ResistorSeries.e12:
                return(0.1);

            case ResistorSeries.e24:
                return(0.05);

            case ResistorSeries.e48:
                return(0.02);

            case ResistorSeries.e96:
                return(0.01);

            case ResistorSeries.e192:
                return(0.005);

            default:
                return(1);
            }
        }
        public static double GetTolerance(ResistorSeries serie)
        {
            switch (serie)
            {
            case ResistorSeries.e12:
                return(0.1);

            case ResistorSeries.e24:
                return(0.05);

            case ResistorSeries.e48:
                return(0.02);

            case ResistorSeries.e96:
                return(0.01);

            case ResistorSeries.e192:
                return(0.005);

            default:
                return(0.1);
            }
        }
Example #7
0
        public static string Solve(double desiredvalue, ResistorSeries serie)
        {
            var sb = new StringBuilder();

            sb.AppendLine("--------------------------------------------------------------------");
            sb.AppendLine("Serial configuration:");
            sb.AppendLine("--------------------------------------------------------------------");
            double remain = desiredvalue;
            double sum = 0;
            double min_sum = 0;
            double max_sum = 0;
            double tolerancemultiplier = ToleranceMultiplier(serie);
            var    list = ResitorListGenerator.GenerateList(serie);
            int    i, j;

            for (i = 0; i < 3; i++)
            {
                var q = (from item in list where item <= remain orderby item descending select item).FirstOrDefault();
                if (q != 0)
                {
                    remain  -= q;
                    sum     += q;
                    min_sum += (q - (tolerancemultiplier * q));
                    max_sum += (q + (tolerancemultiplier * q));
                    sb.AppendLine(q + " Ω");
                }
            }
            sb.AppendLine("--------------------------------------------------------------------");
            sb.AppendFormat("Sum value: {0} Ω\r\n", sum);
            sb.AppendFormat("Sum value range: {0} - {1}\r\n", min_sum, max_sum);
            sb.AppendFormat("Error at best case: {0} Ω\r\n", remain);
            sb.AppendFormat("Error at worst case: {0} Ω\r\n", (max_sum - min_sum) + remain);

            sb.Append("\r\n\r\n\r\n");

            sb.AppendLine("--------------------------------------------------------------------");
            sb.AppendLine("Parallel configuration:");
            sb.AppendLine("--------------------------------------------------------------------");

            list = (from item in ResitorListGenerator.GenerateList(serie) where item > (desiredvalue / 2) select item).ToList();
            var    _results = new Dictionary <double, double[]>();
            double marginp  = desiredvalue + (desiredvalue * ResitorListGenerator.GetTolerance(serie));
            double marginn  = desiredvalue - (desiredvalue * ResitorListGenerator.GetTolerance(serie));

            for (i = 0; i < list.Count; i++)
            {
                for (j = 0; j < list.Count; j++)
                {
                    double value = (list[i] * list[j]) / (list[i] + list[j]);
                    if ((value > marginn) && (value < marginp))
                    {
                        if (_results.ContainsKey(value))
                        {
                            _results[value] = new double[] { list[i], list[j] }
                        }
                        ;
                        else
                        {
                            _results.Add(value, new double[] { list[i], list[j] });
                        }
                    }
                }
            }

            var best = (from result in _results where result.Key <= desiredvalue orderby(desiredvalue - result.Key) ascending select result).FirstOrDefault();

            if (best.Value != null)
            {
                sb.AppendLine(best.Value[0] + " Ω");
                sb.AppendLine(best.Value[1] + " Ω");
            }
            sb.AppendLine("--------------------------------------------------------------------");
            sb.AppendFormat("Paralell value: {0} Ω\r\n", best.Key);
            sb.AppendFormat("Error: {0} Ω\r\n", desiredvalue - best.Key);
            sb.AppendFormat("Error(%): {0} %\r\n", Math.Round((desiredvalue - best.Key) / desiredvalue, 4) * 100);

            return(sb.ToString());
        }
Example #8
0
 private static double ToleranceMultiplier(ResistorSeries serie)
 {
     switch (serie)
     {
         case ResistorSeries.e12:
             return 0.1;
         case ResistorSeries.e24:
             return 0.05;
         case ResistorSeries.e48:
             return 0.02;
         case ResistorSeries.e96:
             return 0.01;
         case ResistorSeries.e192:
             return 0.005;
         default:
             return 1;
     }
 }
Example #9
0
        public static string Solve(double desiredvalue, ResistorSeries serie)
        {
            var sb = new StringBuilder();
            sb.AppendLine("--------------------------------------------------------------------");
            sb.AppendLine("Serial configuration:");
            sb.AppendLine("--------------------------------------------------------------------");
            double remain = desiredvalue;
            double sum = 0;
            double min_sum = 0;
            double max_sum = 0;
            double tolerancemultiplier = ToleranceMultiplier(serie);
            var list = ResitorListGenerator.GenerateList(serie);
            int i, j;

            for (i = 0; i < 3; i++)
            {
                var q = (from item in list where item <= remain orderby item descending select item).FirstOrDefault();
                if (q != 0)
                {
                    remain -= q;
                    sum += q;
                    min_sum += (q - (tolerancemultiplier * q));
                    max_sum += (q + (tolerancemultiplier * q));
                    sb.AppendLine(q + " Ω");
                }
            }
            sb.AppendLine("--------------------------------------------------------------------");
            sb.AppendFormat("Sum value: {0} Ω\r\n", sum);
            sb.AppendFormat("Sum value range: {0} - {1}\r\n", min_sum, max_sum);
            sb.AppendFormat("Error at best case: {0} Ω\r\n", remain);
            sb.AppendFormat("Error at worst case: {0} Ω\r\n", (max_sum - min_sum) + remain);

            sb.Append("\r\n\r\n\r\n");

            sb.AppendLine("--------------------------------------------------------------------");
            sb.AppendLine("Parallel configuration:");
            sb.AppendLine("--------------------------------------------------------------------");

            list = (from item in ResitorListGenerator.GenerateList(serie) where item > (desiredvalue / 2) select item).ToList();
            var _results = new Dictionary<double, double[]>();
            double marginp = desiredvalue + (desiredvalue * ResitorListGenerator.GetTolerance(serie));
            double marginn = desiredvalue - (desiredvalue * ResitorListGenerator.GetTolerance(serie));

            for (i = 0; i < list.Count; i++)
            {
                for (j = 0; j < list.Count; j++)
                {
                    double value = (list[i] * list[j]) / (list[i] + list[j]);
                    if ((value > marginn) && (value < marginp))
                    {
                        if (_results.ContainsKey(value)) _results[value] = new double[] { list[i], list[j] };
                        else _results.Add(value, new double[] { list[i], list[j] });
                    }
                }
            }

            var best = (from result in _results where result.Key <= desiredvalue orderby (desiredvalue - result.Key) ascending select result).FirstOrDefault();
            if (best.Value != null)
            {
                sb.AppendLine(best.Value[0] + " Ω");
                sb.AppendLine(best.Value[1] + " Ω");
            }
            sb.AppendLine("--------------------------------------------------------------------");
            sb.AppendFormat("Paralell value: {0} Ω\r\n", best.Key);
            sb.AppendFormat("Error: {0} Ω\r\n", desiredvalue - best.Key);
            sb.AppendFormat("Error(%): {0} %\r\n", Math.Round((desiredvalue - best.Key) / desiredvalue, 4) * 100);

            return sb.ToString();
        }
 public static double GetTolerance(ResistorSeries serie)
 {
     switch (serie)
     {
         case ResistorSeries.e12:
             return 0.1;
         case ResistorSeries.e24:
             return 0.05;
         case ResistorSeries.e48:
             return 0.02;
         case ResistorSeries.e96:
             return 0.01;
         case ResistorSeries.e192:
             return 0.005;
         default:
             return 0.1;
     }
 }