Программа считывает показания датчиков и управляет сервомашинками.
Fork of NUCLEO_BLUENRG by
tag_math.c
00001 #include <math.h> 00002 #include "stm32f4xx_hal.h" 00003 00004 /* Conversion algorithm for target temperature */ 00005 double calcTmpTarget(uint8_t* rawData) 00006 { 00007 uint16_t rawT = (rawData[1] << 8) | rawData[0]; 00008 double m_tmpAmb = ((rawData[3] << 8) | rawData[2] )/128.0; 00009 00010 //-- calculate target temperature 00011 double Vobj2 = (double)(uint16_t)rawT; 00012 Vobj2 *= 0.00000015625; 00013 00014 double Tdie2 = m_tmpAmb + 273.15; 00015 const double S0 = 6.4E-14; // Calibration factor 00016 00017 const double a1 = 1.75E-3; 00018 const double a2 = -1.678E-5; 00019 const double b0 = -2.94E-5; 00020 const double b1 = -5.7E-7; 00021 const double b2 = 4.63E-9; 00022 const double c2 = 13.4; 00023 const double Tref = 298.15; 00024 double S = S0*(1+a1*(Tdie2 - Tref)+a2*pow((Tdie2 - Tref),2)); 00025 double Vos = b0 + b1*(Tdie2 - Tref) + b2*pow((Tdie2 - Tref),2); 00026 double fObj = (Vobj2 - Vos) + c2*pow((Vobj2 - Vos),2); 00027 double tObj = pow(pow(Tdie2,4) + (fObj/S),.25); 00028 tObj = (tObj - 273.15); 00029 00030 return m_tmpAmb;//tObj; 00031 } 00032 00033 double calcHumTmp(uint16_t rawT) 00034 { 00035 double v; 00036 00037 //-- calculate temperature [deg C] -- 00038 v = -46.85 + 175.72/65536 *(double)(uint16_t)rawT; 00039 00040 return v; 00041 } 00042 00043 /* Conversion algorithm, humidity */ 00044 00045 double calcHumRel(uint8_t* rawData) 00046 { 00047 double v; 00048 00049 uint16_t rawH = (rawData[3] << 8) | rawData[2]; 00050 00051 rawH &= ~0x0003; // clear bits [1..0] (status bits) 00052 //-- calculate relative humidity [%RH] -- 00053 v = -6.0 + 125.0/65536 * (double)rawH; // RH= -6 + 125 * SRH/2^16 00054 00055 return v; 00056 }
Generated on Tue Jul 12 2022 22:44:50 by
![doxygen](doxygen.png)