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