Fixed error from 0.5 to 0.1 Celsius Degree

This commit is contained in:
2026-08-07 17:48:48 +01:00
parent 0452925384
commit ebb76da3b0
12 changed files with 13130 additions and 11832 deletions
+101 -32
View File
@@ -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)
{