Fixed error from 0.5 to 0.1 Celsius Degree
This commit is contained in:
+101
-32
@@ -62,6 +62,7 @@ void SystemClock_Config(void);
|
||||
/* USER CODE BEGIN PFP */
|
||||
void intToStr(int16_t N, uint8_t *str);
|
||||
void FloatToString(uint8_t * buf, double val);
|
||||
void Convert2Hex(uint32_t value, char *str);
|
||||
|
||||
/* USER CODE END PFP */
|
||||
|
||||
@@ -89,7 +90,9 @@ int main(void)
|
||||
uint32_t previous_millis_red = 0;
|
||||
uint32_t current_millis;
|
||||
|
||||
float ref_final;
|
||||
|
||||
float mag_reference, mag_rtd, mag_ec;
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
||||
@@ -122,6 +125,9 @@ int main(void)
|
||||
|
||||
HAL_TIM_Base_Start_IT(&htim3);
|
||||
|
||||
//AD5934_MovingAvg_Init (&g_rtd_filter);
|
||||
//AD5934_MovingAvg_Init (&g_ref_filter);
|
||||
//AD5934_MovingAvg_Init (&g_ec_filter);
|
||||
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET); // LED Green Off
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET); // LED Red Off
|
||||
@@ -129,6 +135,7 @@ int main(void)
|
||||
digital_outputs_init();
|
||||
rs485_init();
|
||||
|
||||
ADG715_ResetChannels();
|
||||
ADS1015_Init(); // Initializes pH Measurement
|
||||
AD5934_Init(); // Initializes CE and RTD Measurement
|
||||
|
||||
@@ -136,8 +143,8 @@ int main(void)
|
||||
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
|
||||
while(averages<15)
|
||||
/*
|
||||
while(averages<20)
|
||||
{
|
||||
AD5934_Process_System();
|
||||
ADS1015_Process_System();
|
||||
@@ -146,16 +153,18 @@ int main(void)
|
||||
|
||||
if((current_millis % 20) == 0) // Send data each 20ms
|
||||
{
|
||||
if (g_ref_filter.value_valid) // Reference Resistor on Board: 100 Ohms or 1000 Ohms
|
||||
if (g_ref_imag_filter.value_valid) // Reference Resistor on Board: 100 Ohms or 1000 Ohms
|
||||
{
|
||||
reference_resistor = g_ref_filter.filtered_value;
|
||||
uint16_t reference_final = AD5934_REF_OUT_SCALE_MAX - AD5934_Compress_To_IntScale(g_ref_filter.filtered_value, current_ref_mux);
|
||||
//reference_resistor = g_ref_filter.filtered_value;
|
||||
reference_resistor = sqrtf((g_ref_real_filter.filtered_value * g_ref_real_filter.filtered_value)+(g_ref_imag_filter.filtered_value * g_ref_imag_filter.filtered_value));
|
||||
//reference_resistor = ref_now;
|
||||
//uint16_t reference_final = AD5934_REF_OUT_SCALE_MAX - AD5934_Compress_To_IntScale(g_ref_filter.filtered_value, current_ref_mux);
|
||||
|
||||
averages++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
digital_outputs_toggle(0);
|
||||
digital_outputs_toggle(1);
|
||||
digital_outputs_toggle(2);
|
||||
@@ -177,41 +186,78 @@ int main(void)
|
||||
if((current_millis % 500) == 0) // Send data each 100ms
|
||||
{
|
||||
|
||||
/* if (g_ref_filter.value_valid) // Reference Resistor on Board: 100 Ohms or 1000 Ohms
|
||||
{
|
||||
//if (g_ref_filter.value_valid) // Reference Resistor on Board: 100 Ohms or 1000 Ohms
|
||||
//{
|
||||
mag_reference = g_ref_filter.filtered_value;
|
||||
//mag_reference = sqrtf(((float)ref_now * (float)ref_now) + ((float)ref_now_i * (float)ref_now_i));
|
||||
//mag_reference = sqrtf((g_ref_real_filter.average * g_ref_real_filter.average)+(g_ref_imag_filter.average * g_ref_imag_filter.average));
|
||||
//mag_reference = (float)ref_now;
|
||||
//reference_resistor = g_ref_filter.filtered_value;
|
||||
uint16_t reference_final = AD5934_REF_OUT_SCALE_MAX - AD5934_Compress_To_IntScale(g_ref_filter.filtered_value, current_ref_mux);
|
||||
//uint16_t reference_final = AD5934_REF_OUT_SCALE_MAX - AD5934_Compress_To_IntScale(g_ref_filter.filtered_value, current_ref_mux);
|
||||
|
||||
intToStr(reference_final, tempString);
|
||||
// float ref_final = g_ref_filter.filtered_value;
|
||||
//FloatToString(tempString, ref_final);
|
||||
//intToStr(reference_final, tempString);
|
||||
//ref_final = g_ref_filter.filtered_value;
|
||||
FloatToString(tempString, mag_reference);
|
||||
//Convert2Hex(ref_now, tempString);
|
||||
//intToStr(ref_now, tempString);
|
||||
rs485_send_broadcast(tempString, (strlen((uint8_t*)tempString)));
|
||||
//intToStr(ref_now_i, tempString);
|
||||
//rs485_send_broadcast(tempString, (strlen((uint8_t*)tempString)));
|
||||
rs485_send_broadcast(&newline, 1);
|
||||
//}
|
||||
|
||||
//if (g_rtd_filter.value_valid) // PT100 or PT1000 in °C
|
||||
//{
|
||||
//mag_rtd = (float)rtd_now;
|
||||
mag_rtd = g_rtd_filter.filtered_value;
|
||||
//mag_rtd = sqrtf((g_rtd_real_filter.average * g_rtd_real_filter.average)+(g_rtd_imag_filter.average * g_rtd_imag_filter.average));
|
||||
//mag_rtd = sqrtf(((float)rtd_now * (float)rtd_now) + ((float)rtd_now_i * (float)rtd_now_i));
|
||||
//temperature_RTD = AD5934_Calculate_Temperature(mag_reference, mag_rtd);
|
||||
temperature_RTD = AD5934_Calculate_Temperature(mag_reference,mag_rtd);// AD5934_GetImpedance(mag_reference,mag_rtd);//
|
||||
//uint16_t rtd_final = AD5934_RTD_OUT_SCALE_MAX - AD5934_Compress_To_IntScale(g_rtd_filter.filtered_value, current_rtd_mux);
|
||||
//uint16_t rtd_final = AD5934_Compress_To_IntScale(temperature_RTD, current_rtd_mux);
|
||||
//intToStr(rtd_final, tempString);
|
||||
//float rtd_final = g_rtd_filter.filtered_value; //g_rtd_filter.filtered_value;
|
||||
FloatToString(tempString, temperature_RTD);
|
||||
//Convert2Hex(rtd_now, tempString);
|
||||
//intToStr(rtd_now, tempString);
|
||||
rs485_send_broadcast(tempString, (strlen((uint8_t*)tempString)));
|
||||
//Convert2Hex(rtd_now_i, tempString);
|
||||
//intToStr(rtd_now_i, tempString);
|
||||
//rs485_send_broadcast(tempString, (strlen((uint8_t*)tempString)));
|
||||
rs485_send_broadcast(&newline, 1);
|
||||
|
||||
//}
|
||||
/*if (g_rtd_imag_filter.value_valid) // PT100 or PT1000 in °C
|
||||
{
|
||||
|
||||
//float mag_rtd = sqrtf((g_rtd_real_filter.filtered_value * g_rtd_real_filter.filtered_value)+(g_rtd_imag_filter.filtered_value * g_rtd_imag_filter.filtered_value));
|
||||
temperature_RTD = AD5934_Calculate_Temperature(reference_resistor, mag_rtd);
|
||||
//uint16_t rtd_final = AD5934_RTD_OUT_SCALE_MAX - AD5934_Compress_To_IntScale(g_rtd_filter.filtered_value, current_rtd_mux);
|
||||
//uint16_t rtd_final = AD5934_Compress_To_IntScale(temperature_RTD, current_rtd_mux);
|
||||
//intToStr(rtd_final, tempString);
|
||||
float rtd_final = temperature_RTD; //g_rtd_filter.filtered_value;
|
||||
FloatToString(tempString, rtd_final);
|
||||
rs485_send_broadcast(tempString, (strlen((uint8_t*)tempString)));
|
||||
rs485_send_broadcast(&newline, 1);
|
||||
}*/
|
||||
|
||||
if (g_rtd_filter.value_valid) // PT100 or PT1000 in °C
|
||||
{
|
||||
temperature_RTD = AD5934_Calculate_Temperature(reference_resistor, g_rtd_filter.filtered_value);
|
||||
uint16_t rtd_final = AD5934_RTD_OUT_SCALE_MAX - AD5934_Compress_To_IntScale(temperature_RTD, current_rtd_mux);
|
||||
//if (g_ec_filter.value_valid) // EC
|
||||
//{
|
||||
//mag_ec = sqrtf((g_ec_real_filter.filtered_value * g_ec_real_filter.filtered_value)+(g_ec_imag_filter.filtered_value * g_ec_imag_filter.filtered_value));
|
||||
mag_ec = sqrtf(((float)ec_now * (float)ec_now) + ((float)ec_now_i * (float)ec_now_i));
|
||||
thermal_compensaded_EC = AD5934_EC_Compensate_Magnitude_To_25C(mag_ec, temperature_RTD);
|
||||
//uint16_t ec_final = AD5934_Compress_To_IntScale(thermal_compensaded_EC, current_ec_mux);
|
||||
|
||||
intToStr(rtd_final, tempString);
|
||||
//float rtd_final = g_rtd_filter.filtered_value;
|
||||
//FloatToString(tempString, rtd_final);
|
||||
rs485_send_broadcast(tempString, (strlen((uint8_t*)tempString)));
|
||||
rs485_send_broadcast(&newline, 1);
|
||||
}
|
||||
|
||||
if (g_ec_filter.value_valid) // EC
|
||||
{
|
||||
thermal_compensaded_EC = AD5934_EC_Compensate_Magnitude_To_25C(g_ec_filter.filtered_value, temperature_RTD);
|
||||
uint16_t ec_final = AD5934_Compress_To_IntScale(thermal_compensaded_EC, current_ec_mux);
|
||||
|
||||
intToStr(ec_final, tempString);
|
||||
//intToStr(ec_now, tempString);
|
||||
// float ec_final = g_ec_filter.filtered_value;
|
||||
// FloatToString(tempString, ec_final);
|
||||
FloatToString(tempString, mag_ec);
|
||||
//Convert2Hex((ec_now+0x80008000), tempString);
|
||||
rs485_send_broadcast(tempString, (strlen((uint8_t*)tempString)));
|
||||
//intToStr(ec_now_i, tempString);
|
||||
//rs485_send_broadcast(tempString, (strlen((uint8_t*)tempString)));
|
||||
rs485_send_broadcast(&newline, 1);
|
||||
}
|
||||
//}
|
||||
|
||||
if (g_ph_filter.value_valid) // pH
|
||||
{
|
||||
@@ -222,6 +268,7 @@ int main(void)
|
||||
//FloatToString(tempString, ph_final);
|
||||
rs485_send_broadcast(tempString, (strlen((uint8_t*)tempString)));
|
||||
rs485_send_broadcast(&newline, 1);
|
||||
rs485_send_broadcast(&newline, 1);
|
||||
}
|
||||
|
||||
rs485_send_broadcast(&newline, 1);
|
||||
@@ -359,7 +406,7 @@ void FloatToString(uint8_t *buf, double val)
|
||||
fracBuffer[1] = (fracPart / 10) % 10; // Dezena
|
||||
fracBuffer[0] = (fracPart / 100) % 10; // Centena
|
||||
|
||||
for (int k = 2; k >= 0; k--) {
|
||||
for (int k = 0; k <= 2; k++) {
|
||||
temp[i++] = fracBuffer[k] + '0';
|
||||
}
|
||||
|
||||
@@ -434,6 +481,28 @@ void intToStr(int16_t N, uint8_t *str)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Converte um valor uint32_t para string hexadecimal,
|
||||
* escrevendo o resultado no buffer apontado por 'str'.
|
||||
*
|
||||
* @param value Valor a ser convertido (ex: 4276803469)
|
||||
* @param str Ponteiro para buffer de destino (mínimo 9 bytes:
|
||||
* 8 dígitos hex + terminador nulo)
|
||||
*/
|
||||
void Convert2Hex(uint32_t value, char *str)
|
||||
{
|
||||
const char hexTable[] = "0123456789ABCDEF";
|
||||
|
||||
for (int8_t i = 7; i >= 0; i--)
|
||||
{
|
||||
str[i] = hexTable[value & 0xF];
|
||||
value >>= 4;
|
||||
}
|
||||
//str[8] = '\0';
|
||||
}
|
||||
|
||||
|
||||
/* TIM3 Timer Interrupt */
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user