|
|
@@ -131,6 +131,109 @@ float ALGO_Temp_RTD_Res_Below(float rtdRes)
|
|
|
- (2.8183e-8) * rtdRes * rtdRes * rtdRes * rtdRes
|
|
|
+ (1.5243e-10) * rtdRes * rtdRes * rtdRes * rtdRes * rtdRes);
|
|
|
}
|
|
|
+// PT1000
|
|
|
+// R(t)=R0(1+At+Bt2)
|
|
|
+// A=0.0038623139728
|
|
|
+// B=-0.00000065314932626
|
|
|
+
|
|
|
+#include "math.h"
|
|
|
+#define A 3.9083e-3
|
|
|
+#define B -5.775e-7
|
|
|
+#define C -4.183e-12
|
|
|
+//#define A2 3.9083e-2
|
|
|
+//#define B2 -5.775e-6
|
|
|
+//#define C2 -4.183e-11
|
|
|
+
|
|
|
+double ALGO_Temp_RTD_T_PT1000(double T)
|
|
|
+{
|
|
|
+ if(T >= -200 && T < 0)
|
|
|
+ {
|
|
|
+ return 100 * (1 + A * T + B * T * T + C * (T - 100) * T * T * T);
|
|
|
+ }
|
|
|
+ else if(T >= 0 && T <= 850)
|
|
|
+ {
|
|
|
+ return 100 * (1 + A * T + B * T * T);
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief ???????
|
|
|
+ * @param[in] resist ??
|
|
|
+ * @param[out] temp ???
|
|
|
+ * @retval ????
|
|
|
+ * @note ????????,????????????,?1?3??????????????:
|
|
|
+ * 1. ???????????????:
|
|
|
+ * t1 = (Rt / R0 - 1) / A
|
|
|
+ *
|
|
|
+ * ??t1???:
|
|
|
+ * 0??????:Rt1 = R0 * (1 + A * t1 + B * t1 * t1);
|
|
|
+ * 0??????:Rt1 = R0 * [1 + A * t1 + B * t1 * t1 + C * (t1 - 100) * t1 * t1 * t1];
|
|
|
+ *
|
|
|
+ * ?? |Rt1 - Rt| < 0.001,t1 ???????,???????????:
|
|
|
+ *
|
|
|
+ * 2. ???????????:
|
|
|
+ * ?? Rt = R0
|
|
|
+ * t1' = 1 / [R0 * (A + 2 * B * t1)]
|
|
|
+ * t1'' =-2 * B * R0 * t1' * t1' * t1'
|
|
|
+ * ?? Rt < R0
|
|
|
+ * t1' = 1 / [R0 * (A + 2 * B * t1 - 300 * C * t1 * t1 + 4 * C * t1 * t1 * t1)]
|
|
|
+ * t1''=- R0 * (2 * B - 600 * C * t1 + 12 * C * t1 * t1) * t1' * t1' * t1'
|
|
|
+ *
|
|
|
+ * 3. ?? Rt,t1,Rt1 ?????? t2:
|
|
|
+ * t2 = t1 + t1' * (Rt - Rt1) + 0.5 * t1'' * (Rt - Rt1) * (Rt - Rt1),???? t2 ????? Rt2?
|
|
|
+ *
|
|
|
+ * 4. ?? |Rt2 - Rt| < 0.001,t2 ???????,??????????? t2 ??????,???????????
|
|
|
+ */
|
|
|
+double ALGO_Temp_RTD_Res_PT100(double resist)
|
|
|
+{
|
|
|
+ double fT, fT0;
|
|
|
+ short i;
|
|
|
+
|
|
|
+ /* 1. use a linear formula to get a rough temperature first */
|
|
|
+ fT0 = (resist / 100 - 1) / A;
|
|
|
+ /* -200C ~ 0C */
|
|
|
+ if(resist >= 18.52 && resist < 100)
|
|
|
+ {
|
|
|
+ for(i = 0; i < 50; i++)
|
|
|
+ {
|
|
|
+ fT = fT0 + (resist - 100 * (1 + A * fT0 + B * fT0 * fT0 - 100 * C * fT0 * fT0 * fT0 + C * fT0 * fT0 * fT0 * fT0)) /
|
|
|
+ (100 * (A + 2 * B * fT0 - 300 * C * fT0 * fT0 + 4 * C * fT0 * fT0 * fT0));
|
|
|
+ if(fabs(fT - fT0) < 0.001) /* If | Rt1-Rt | < 0.001, t1 is the desired temperature */
|
|
|
+ {
|
|
|
+ return fT;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ fT0 = fT;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* 0C ~ 850C */
|
|
|
+ else if(resist >= 100 && resist <= 390.481)
|
|
|
+ {
|
|
|
+ for(i = 0; i < 50; i++)
|
|
|
+ {
|
|
|
+ fT = fT0 + (resist - 100 * (1 + A * fT0 + B * fT0 * fT0)) / (100 * (A + 2 * B * fT0));
|
|
|
+ if(fabs(fT - fT0) < 0.001) /* If | Rt1-Rt | < 0.001, t1 is the desired temperature */
|
|
|
+ {
|
|
|
+ return fT;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ fT0 = fT;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+double ALGO_Temp_RTD_Res_PT1000(double resist)
|
|
|
+{
|
|
|
+ return ALGO_Temp_RTD_Res_PT100(resist / 10.0f);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* @brief
|