Ejemplo n.º 1
0
            public static long cal_inv(double temperature, double RW = 100, string METHOD = "poly3",
                                       double R1 = 10, double R2 = 10, double R3 = 10)
            {
                double rx;

                if (METHOD == "linear")
                {
                    rx = LINEAR.caly(temperature) / 1000;
                }
                else
                {
                    rx = POLY3.caly(temperature) / 1000;
                }
                double v_rxr1   = VREF_R * R1 / (rx + R1);
                double v_r2r3   = VREF_R * R3 / (R2 + R3);
                double ad_input = ((double)10 / 3 + 1 / RW * 200 / 3) * (v_r2r3 - v_rxr1);

                if (ad_input >= AD_MAX)
                {
                    ad_input = AD_MAX;
                }
                else if (ad_input <= 0)
                {
                    ad_input = 0;
                }
                long ret = (long)Math.Round((ad_input / VREF_AD) * AD_MAX);

                return(ret);
            }
Ejemplo n.º 2
0
            public static long cal_inv_by_pts(double temperature, List <double> para, string METHOD = "poly3", double R1 = 10)
            {
                double rx;

                if (METHOD == "linear")
                {
                    rx = LINEAR.caly(temperature) / 1000;
                }
                else
                {
                    rx = POLY3.caly(temperature) / 1000;
                }
                double v_rxr1 = VREF_R * R1 / (rx + R1);
                long   ret    = (long)(para[0] + para[1] * v_rxr1);

                return(ret);
            }
Ejemplo n.º 3
0
            /// <summary>
            /// 根据拟合直线确定温度值,规定x轴为电压,y轴为AD输出
            /// AD_output = para[0] + para[1] * voltage
            /// </summary>
            /// <param name="ad_output"></param>
            /// <param name="para"></param>
            /// <param name="METHOD"></param>
            /// <param name="R1"></param>
            /// <param name="R2"></param>
            /// <param name="R3"></param>
            /// <returns></returns>
            public static double cal_by_pts(long ad_output, List <double> para, string METHOD = "poly3", double R1 = 10)
            {
                double vol    = cal_vol_by_pts(ad_output, para);
                double v_rxr1 = vol;
                double rx     = R1 * (VREF_R / v_rxr1 - 1);
                double ret;

                if (METHOD == "linear")
                {
                    ret = LINEAR.calx(rx * 1000);
                }
                else
                {
                    ret = POLY3.calx(rx * 1000);
                }
                return(ret);
            }
Ejemplo n.º 4
0
            /// <summary>
            /// Better performance on a "Consolas" font.
            /// Unit: kΩ
            /// VREF_R
            /// |
            /// |-----
            /// |    |
            /// RX   R2         VREF_AD
            /// |----+--->--(-)    |
            /// |    |     RW-->--ADC----(0~AD_MAX)
            /// |    |--->--(+)    |
            /// R1   R3           GND
            /// |-----
            /// GND
            /// </summary>
            /// <returns></returns>
            public static double cal(long ad_output, double RW = 100, string METHOD = "poly3",
                                     double R1 = 10, double R2 = 10, double R3 = 10)
            {
                if (RW <= 0 || ad_output == AD_MAX)
                {
                    return(UNDEF);
                }
                double ad_input = ((double)ad_output / AD_MAX) * VREF_AD;
                double v_r2r3   = VREF_R * R3 / (R2 + R3);
                double v_rxr1   = v_r2r3 - ad_input / ((double)10 / 3 + 1 / RW * 200 / 3);
                double rx       = R1 * (VREF_R / v_rxr1 - 1);
                double ret;

                if (METHOD == "linear")
                {
                    ret = LINEAR.calx(rx * 1000);
                }
                else
                {
                    ret = POLY3.calx(rx * 1000);
                }
                return(ret);
            }