/// <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); }
/// <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); }