Fixed issues related to Temperature and EC

This commit is contained in:
2026-08-11 11:25:47 +01:00
parent ebb76da3b0
commit 1b19d8035b
12 changed files with 12292 additions and 12821 deletions
+33 -19
View File
@@ -150,6 +150,15 @@ extern "C" {
#define AD5934_GAIN_FACTOR_1K 1000.0f
#define AD5934_GAIN_FACTOR_10K 10000.0f
#define AD5934_EC_IN_SERIES_RESISTOR 100.0f
#define AD5934_EC_10MS 0.01f // Ref 100R
#define AD5934_EC_1MS 0.001f // Ref 1K
#define AD5934_EC_0_1MS 0.0001f // Ref 10k
#define AD5934_DRIFT_PT100 2.12f
#define AD5934_DRIFT_PT1000 0.22f
#define AD5934_GAIN_FACTOR_1413US 1413.0f
#define AD5934_GAIN_FACTOR_12880US 12880.0f
@@ -165,11 +174,19 @@ extern "C" {
#define AD5934_EC_ALPHA_PER_C 0.02f
#define AD5934_EC_TEMP_REF_C 25.0f
#define AD5934_EC_1413US_PT100_DEFAULT 3111 // magnitude
#define AD5934_EC_1413US_PT1000_DEFAULT 2970 // magnitude
//Mux Set to Read...
#define AD5934_ID_RTD 0
#define AD5934_ID_EC 1
#define AD5934_ID_REF 2
#define AD5934_ID_REF_100R_LOWGAIN 2
#define AD5934_ID_REF_100R_MIDGAIN 3
#define AD5934_ID_REF_100R_HIGHGAIN 4
#define AD5934_ID_REF_1K_MIDGAIN 5
#define AD5934_ID_REF_1K_HIGHGAIN 6
#define AD5934_ID_REF_10K_HIGHGAIN 7
/*****************************************************************************/
/**************************** Filtering Defines *****************************/
@@ -179,7 +196,7 @@ extern "C" {
#define AD5934_BURST_SIZE 1 // Number of Repeated Sweeps on the same channel before change the Mux
#define AD5934_TRIM_COUNT 0
#define AD5934_HISTORY_SIZE 8
#define AD5934_HISTORY_SIZE 16
#define AD5934_IIR_ALPHA 0.10f
#define AD5934_REF_FLOAT_SCALE_MIN 1850.0f
@@ -195,12 +212,12 @@ extern "C" {
#define AD5934_RTD_OUT_SCALE_MAX 800
#define AD5934_EC5_FLOAT_SCALE_MIN 0.0f
#define AD5934_EC5_FLOAT_SCALE_MAX 20500.0f
#define AD5934_EC5_FLOAT_SCALE_MAX 7000.0f
#define AD5934_EC5_OUT_SCALE_MIN 0
#define AD5934_EC5_OUT_SCALE_MAX 4095
#define AD5934_EC10_FLOAT_SCALE_MIN 0.0f
#define AD5934_EC10_FLOAT_SCALE_MAX 15000.0f
#define AD5934_EC10_FLOAT_SCALE_MAX 14000.0f
#define AD5934_EC10_OUT_SCALE_MIN 0
#define AD5934_EC10_OUT_SCALE_MAX 4095
@@ -378,8 +395,6 @@ static const uint16_t AD5934_Scale_Out_Max[AD5934_CH_MAX] = {
extern I2C_HandleTypeDef hi2c2;
extern float reference_resistor, temperature_RTD, thermal_compensaded_EC;
extern volatile AD5934_State_t ad5934_state;
extern volatile uint32_t g_ms_counter; // Increment each 1ms Timer
extern volatile uint32_t state_timer;
@@ -391,10 +406,9 @@ extern uint8_t current_ec_mux;
extern uint8_t current_rtd_mux;
extern uint8_t current_ref_mux;
extern AD5934_filter_t g_rtd_filter, g_ec_filter, g_ref_filter;
extern AD5934_filter_t g_rtd_filter, g_ec_filter, g_ref_100R_LowGain_filter, g_ref_100R_MidGain_filter, g_ref_100R_HighGain_filter, g_ref_1K_MidGain_filter, g_ref_1K_HighGain_filter, g_ref_10K_HighGain_filter;
extern int16_t rtd_now, ref_now, ec_now;
extern int16_t rtd_now_i, ref_now_i, ec_now_i;
extern uint8_t is_startup;
/*****************************************************************************/
/************************ Functions Declarations *****************************/
@@ -415,7 +429,7 @@ void AD5934_StopSweep(void);
float AD5934_Get_Ref_Resistance(void);
float AD5934_Calculate_Temperature(float mag_ref, float mag_dut);
float AD5934_Calculate_Temperature(float mag_ref_pt100, float mag_ref_pt1000, float mag_dut);
float AD5934_EC_Compensate_Magnitude_To_25C(float mag_dut, float temperature_dut);
@@ -425,6 +439,8 @@ float AD5934_GetMagnitude(void);
float AD5934_GetImpedance(float mag_ref, float mag_dut);
float AD5934_GetAdmittance(float mag_ref_10mS_MidGain, float mag_ref_1mS_MidGain, float mag_ref_1mS_HighGain, float mag_ref_0_1mS_HighGain, float mag_dut);
uint32_t AD5934_Get_Real_Imag_Numbers(void);
uint16_t AD5934_Compress_To_IntScale(float value, uint8_t scale);
@@ -449,21 +465,19 @@ void AD5934_Process_Sample(AD5934_filter_t *ch, float raw);
void AD5934_RTD_NewSample(float raw);
void AD5934_RTD_Real_NewSample(float raw);
void AD5934_RTD_Imag_NewSample(float raw);
void AD5934_EC_NewSample(float raw);
void AD5934_EC_Real_NewSample(float raw);
void AD5934_Reference_100R_LowGain_NewSample(float raw);
void AD5934_EC_Imag_NewSample(float raw);
void AD5934_Reference_100R_MidGain_NewSample(float raw);
void AD5934_Reference_NewSample(float raw);
void AD5934_Reference_100R_HighGain_NewSample(float raw);
void AD5934_Reference_Real_NewSample(float raw);
void AD5934_Reference_1K_MidGain_NewSample(float raw);
void AD5934_Reference_Imag_NewSample(float raw);
void AD5934_Reference_1K_HighGain_NewSample(float raw);
void AD5934_Reference_10K_HighGain_NewSample(float raw);
void ADG715_SetRegisterValue(char value);
+128 -36
View File
@@ -15,8 +15,6 @@ volatile AD5934_State_t ad5934_state = AD5934_IDLE;
volatile uint32_t state_timer = 0;
volatile uint32_t g_ms_counter = 0; /* Incrementado a cada 1ms no Timer */
float reference_resistor = 0, temperature_RTD = 0, thermal_compensaded_EC = 0;
uint8_t current_mux_channel = 0;
uint8_t current_hw_mux_connection = AD5934_CH_REF100R_LOW_GAIN; // Connection
uint8_t current_ec_mux = AD5934_CH_EC_MID_GAIN;
@@ -27,13 +25,20 @@ uint8_t sweep_count = 0; /* Conta quantos sweeps foram feitos no canal atual (0
AD5934_filter_t g_rtd_filter = {0};
AD5934_filter_t g_ec_filter = {0};
AD5934_filter_t g_ref_filter = {0};
AD5934_filter_t g_ref_100R_LowGain_filter = {0};
AD5934_filter_t g_ref_100R_MidGain_filter = {0};
AD5934_filter_t g_ref_100R_HighGain_filter = {0};
AD5934_filter_t g_ref_1K_MidGain_filter = {0};
AD5934_filter_t g_ref_1K_HighGain_filter = {0};
AD5934_filter_t g_ref_10K_HighGain_filter = {0};
int16_t rtd_now, ref_now, ec_now;
int16_t rtd_now_i, ref_now_i, ec_now_i;
uint8_t is_new_channel = 1;
uint8_t is_startup=1;
/******************************************************************************
* @brief Set an AD5934 internal register value.
*
@@ -165,7 +170,7 @@ void AD5934_Init(void)
AD5934_SetRegisterValue(AD5934_NR_INCR_REG_LB, AD5934_STEP_FREQ_0, 2);
// Set 128 Settling Time
AD5934_SetRegisterValue(AD5934_NR_SETTLE_REG_LB, AD5934_SETTLING_TIME_64, 2);
AD5934_SetRegisterValue(AD5934_NR_SETTLE_REG_LB, AD5934_SETTLING_TIME_90, 2);
}
@@ -232,20 +237,24 @@ void AD5934_StopSweep(void)
*
* @return Temperature in Celsius.
******************************************************************************/
float AD5934_Calculate_Temperature(float mag_ref, float mag_dut)
float AD5934_Calculate_Temperature(float mag_ref_pt100, float mag_ref_pt1000, float mag_dut)
{
uint8_t ch_ref;
float gain_factor, impedance_dut, temperature;
float gain_factor, temperature, drift, mag_ref;
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_7) == GPIO_PIN_SET) // OFF = PT1000, ON = PT100, PA7 has internal pull-up and switch connects to GND
{
ch_ref = AD5934_CH_RTD_LOW_GAIN; //PT100
gain_factor = AD5934_GAIN_FACTOR_100R;
drift = AD5934_DRIFT_PT100;
mag_ref = mag_ref_pt100;
}
else
{
ch_ref = AD5934_CH_RTD_MID_GAIN; //PT1000
gain_factor = AD5934_GAIN_FACTOR_1K;
drift = AD5934_DRIFT_PT1000;
mag_ref = mag_ref_pt1000;
}
float ratio_mag = mag_ref / mag_dut;
@@ -254,7 +263,8 @@ float AD5934_Calculate_Temperature(float mag_ref, float mag_dut)
/*if(ch_ref==AD5934_CH_REF100R_LOW_GAIN) // only for PT100
impedance_dut = AD5934_Linear_Correction(gain_factor * ratio_mag);
else*/
impedance_dut = gain_factor * ratio_mag;
float impedance_dut = gain_factor * ratio_mag;
// Calculate impedance ratio with the Reference Resistor
float ratio = impedance_dut / gain_factor;
@@ -273,7 +283,7 @@ float AD5934_Calculate_Temperature(float mag_ref, float mag_dut)
temperature = (ratio - 1.0f) / AD5934_RTD_ALPHA;
}
return AD5934_Round_Float_Precision(temperature,1);
return AD5934_Round_Float_Precision((temperature-drift),2);
}
@@ -292,7 +302,7 @@ float AD5934_EC_Compensate_Magnitude_To_25C(float mag_dut, float temperature_dut
if (factor < 0.1f)
factor = 0.1f;
return (mag_dut / factor);
return (AD5934_Round_Float_Precision((mag_dut / (factor)),2));
}
/**
@@ -393,7 +403,45 @@ float AD5934_GetImpedance(float mag_ref, float mag_dut)
return impedance_dut;
}
/******************************************************************************
* @brief Get Real and Imaginary values and calculate Magnitude.
*
* @param: none
*
* @return Magnitude (float).
******************************************************************************/
float AD5934_GetAdmittance(float mag_ref_10mS_MidGain, float mag_ref_1mS_MidGain, float mag_ref_1mS_HighGain, float mag_ref_0_1mS_HighGain, float mag_dut)
{
uint8_t ch_ref;
float mag_ref_Min, mag_ref_Max, res_ref_Min, res_ref_Max;
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) == GPIO_PIN_SET) // Hardware Setup: Gain Selection (PA6)
{
ch_ref = AD5934_CH_EC_HIGH_GAIN; // 5mS
mag_ref_Min = mag_ref_0_1mS_HighGain; // Ref 10k
mag_ref_Max = mag_ref_1mS_HighGain; // Ref 1K
res_ref_Min = AD5934_EC_0_1MS;
res_ref_Max = AD5934_EC_1MS;
}
else
{
ch_ref = AD5934_CH_EC_MID_GAIN; //10mS
mag_ref_Min = mag_ref_1mS_MidGain; // Ref 1K
mag_ref_Max = mag_ref_10mS_MidGain; // Ref 100R
res_ref_Min = AD5934_EC_1MS;
res_ref_Max = AD5934_EC_10MS;
}
float gain_factor = (res_ref_Max - res_ref_Min)/(mag_ref_Max - mag_ref_Min);
float offset = mag_ref_Max - (res_ref_Max/gain_factor);
float admittance = (mag_dut - offset) * gain_factor;
float y_cell = admittance / (1 - (AD5934_EC_IN_SERIES_RESISTOR * admittance)); // Resistor in series with EC is 100 Ohms on PCB
return (y_cell*1000000); // in uS
}
/******************************************************************************
* @brief Get Real and Imag values from Magnitude.
*
@@ -531,17 +579,11 @@ void AD5934_Process_System(void)
break;
case AD5934_WAIT_MUX:
//if ((g_ms_counter - state_timer) >= AD5934_SYNC_MUX_SETTLING) // Wait until AD715 Mux switch stability
//{
HAL_Delay(15);
ad5934_state = AD5934_START_CONVERSION;
//}
break;
case AD5934_START_CONVERSION:
//state_timer = g_ms_counter; // Starts to count the Burst period for the sweeps
/* DECISÃO DE COMANDO: Novo canal vs Leituras sucessivas */
if (is_new_channel) // Decision: Channel Switched or Next Sample in the Burst ?
{
@@ -554,7 +596,6 @@ void AD5934_Process_System(void)
}
ad5934_state = AD5934_WAIT_CONVERSION; // Next State
break;
case AD5934_WAIT_CONVERSION:
@@ -570,20 +611,27 @@ void AD5934_Process_System(void)
{
case AD5934_ID_RTD:
AD5934_RTD_NewSample(mag_float);
rtd_now = mag_float;
rtd_now_i = mag_imag;
break;
case AD5934_ID_EC:
AD5934_EC_NewSample(mag_float);
ec_now = mag_real;
ec_now_i = mag_imag;
break;
case AD5934_ID_REF:
AD5934_Reference_NewSample(mag_float);
ref_now = mag_float;
ref_now_i = mag_imag;
case AD5934_ID_REF_100R_LOWGAIN:
AD5934_Reference_100R_LowGain_NewSample(mag_float);
break;
case AD5934_ID_REF_100R_MIDGAIN:
AD5934_Reference_100R_MidGain_NewSample(mag_float);
break;
case AD5934_ID_REF_100R_HIGHGAIN:
AD5934_Reference_100R_HighGain_NewSample(mag_float);
break;
case AD5934_ID_REF_1K_MIDGAIN:
AD5934_Reference_1K_MidGain_NewSample(mag_float);
break;
case AD5934_ID_REF_1K_HIGHGAIN:
AD5934_Reference_1K_HighGain_NewSample(mag_float);
break;
case AD5934_ID_REF_10K_HIGHGAIN:
AD5934_Reference_10K_HighGain_NewSample(mag_float);
break;
}
if(sweep_count<(AD5934_BURST_SIZE-1))
@@ -602,7 +650,7 @@ void AD5934_Process_System(void)
case AD5934_SWITCH_MUX:
AD5934_StopSweep(); // Put AD5934 in Standby
current_mux_channel = (uint8_t)((current_mux_channel + 1) % 3); // Pointer to the next channel (Circular Buffer 0 to 2)
current_mux_channel = (uint8_t)((current_mux_channel + 1) % 8); // Pointer to the next channel (Circular Buffer 0 to 7)
switch (current_mux_channel)
{
case AD5934_ID_RTD:
@@ -619,19 +667,30 @@ void AD5934_Process_System(void)
current_ec_mux = current_hw_mux_connection = AD5934_CH_EC_MID_GAIN;
break;
case AD5934_ID_REF:
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_7) == GPIO_PIN_SET) // OFF = PT1000, ON = PT100, PA7 has internal pull-up and switch connects to GND
case AD5934_ID_REF_100R_LOWGAIN:
current_ref_mux = current_hw_mux_connection = AD5934_CH_REF100R_LOW_GAIN; // 100 Ohms Reference Resistor
else
break;
case AD5934_ID_REF_100R_MIDGAIN:
current_ref_mux = current_hw_mux_connection = AD5934_CH_REF100R_MID_GAIN; // 100 Ohms Reference Resistor
break;
case AD5934_ID_REF_100R_HIGHGAIN:
current_ref_mux = current_hw_mux_connection = AD5934_CH_REF100R_HIGH_GAIN; // 100 Ohms Reference Resistor
break;
case AD5934_ID_REF_1K_MIDGAIN:
current_ref_mux = current_hw_mux_connection = AD5934_CH_REF1K_MID_GAIN; // 1K Reference Resistor
break;
case AD5934_ID_REF_1K_HIGHGAIN:
current_ref_mux = current_hw_mux_connection = AD5934_CH_REF1K_HIGH_GAIN; // 1K Reference Resistor
break;
case AD5934_ID_REF_10K_HIGHGAIN:
current_ref_mux = current_hw_mux_connection = AD5934_CH_REF10K_HIGH_GAIN; // 1K Reference Resistor
break;
}
ADG715_SetChannels(current_hw_mux_connection); // Change the analog mux
HAL_Delay(12);
is_new_channel = 1; // Channel Switched
//state_timer = g_ms_counter; // Reload timer to wait for stability
//ad5934_state = AD5934_WAIT_MUX; // Next State
ad5934_state = AD5934_START_CONVERSION;
ad5934_state = AD5934_START_CONVERSION; // Next State
break;
}
}
@@ -738,7 +797,7 @@ void AD5934_Process_Sample(AD5934_filter_t *ch, float raw)
/* Final output: combines the IIR state (fast response to real drift)
* with the window average (more stable, slower response). Adjust
* the weighting per channel if needed. */
ch->filtered_value = 0.65f * ch->iir_state + 0.35f * window_average;
ch->filtered_value = 0.9f * ch->iir_state + 0.1f * window_average;
//ch->filtered_value = window_average;
ch->value_valid = 1;
}
@@ -790,12 +849,45 @@ void AD5934_EC_NewSample(float raw)
/* Call this every time a sweep completes with the mux on the on-board
* precision reference resistor channel */
void AD5934_Reference_NewSample(float raw)
void AD5934_Reference_100R_LowGain_NewSample(float raw)
{
AD5934_Process_Sample(&g_ref_filter, raw);
AD5934_Process_Sample(&g_ref_100R_LowGain_filter, raw);
}
/* Call this every time a sweep completes with the mux on the on-board
* precision reference resistor channel */
void AD5934_Reference_100R_MidGain_NewSample(float raw)
{
AD5934_Process_Sample(&g_ref_100R_MidGain_filter, raw);
}
/* Call this every time a sweep completes with the mux on the on-board
* precision reference resistor channel */
void AD5934_Reference_100R_HighGain_NewSample(float raw)
{
AD5934_Process_Sample(&g_ref_100R_HighGain_filter, raw);
}
/* Call this every time a sweep completes with the mux on the on-board
* precision reference resistor channel */
void AD5934_Reference_1K_MidGain_NewSample(float raw)
{
AD5934_Process_Sample(&g_ref_1K_MidGain_filter, raw);
}
/* Call this every time a sweep completes with the mux on the on-board
* precision reference resistor channel */
void AD5934_Reference_1K_HighGain_NewSample(float raw)
{
AD5934_Process_Sample(&g_ref_1K_HighGain_filter, raw);
}
/* Call this every time a sweep completes with the mux on the on-board
* precision reference resistor channel */
void AD5934_Reference_10K_HighGain_NewSample(float raw)
{
AD5934_Process_Sample(&g_ref_10K_HighGain_filter, raw);
}
/*****************************************************************************
* ADG715
+22 -86
View File
@@ -90,9 +90,10 @@ int main(void)
uint32_t previous_millis_red = 0;
uint32_t current_millis;
float ref_final;
float reference_resistor_100R = 0, reference_resistor_1K = 0, temperature_RTD = 0, thermal_compensaded_EC = 0;
float mag_reference, mag_rtd, mag_ec;
float mag_rtd_reference = 0, mag_ec_reference = 0, mag_rtd = 0, mag_ec = 0;
/* USER CODE END 1 */
@@ -125,9 +126,6 @@ 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
@@ -143,7 +141,7 @@ int main(void)
/* Infinite loop */
/* USER CODE BEGIN WHILE */
/*
while(averages<20)
{
AD5934_Process_System();
@@ -151,28 +149,15 @@ int main(void)
current_millis = g_ms_counter;
if((current_millis % 20) == 0) // Send data each 20ms
if((current_millis % 100) == 0) // Send data each 40ms
{
if (g_ref_imag_filter.value_valid) // Reference Resistor on Board: 100 Ohms or 1000 Ohms
{
//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);
digital_outputs_toggle(3);
digital_outputs_toggle(4);
digital_outputs_toggle(5);
digital_outputs_toggle(6);
digital_outputs_toggle(7);
while (1)
@@ -181,88 +166,38 @@ int main(void)
AD5934_Process_System();
ADS1015_Process_System();
current_millis = g_ms_counter;
if((current_millis % 500) == 0) // Send data each 100ms
{
//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);
//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
if (g_rtd_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);
temperature_RTD = AD5934_Calculate_Temperature(g_ref_100R_LowGain_filter.filtered_value, g_ref_1K_MidGain_filter.filtered_value, g_rtd_filter.filtered_value);// 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 = temperature_RTD; //g_rtd_filter.filtered_value;
FloatToString(tempString, rtd_final);
uint16_t rtd_final = AD5934_Compress_To_IntScale(temperature_RTD, current_rtd_mux);
intToStr(rtd_final, tempString);
//FloatToString(tempString, temperature_RTD);
rs485_send_broadcast(tempString, (strlen((uint8_t*)tempString)));
rs485_send_broadcast(&newline, 1);
}*/
//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));
}
if (g_ec_filter.value_valid) // EC
{
mag_ec = AD5934_GetAdmittance(g_ref_100R_MidGain_filter.filtered_value, g_ref_1K_MidGain_filter.filtered_value, g_ref_1K_HighGain_filter.filtered_value, g_ref_10K_HighGain_filter.filtered_value, g_ec_filter.filtered_value);
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(ec_now, tempString);
// float ec_final = g_ec_filter.filtered_value;
FloatToString(tempString, mag_ec);
//Convert2Hex((ec_now+0x80008000), tempString);
uint16_t ec_final = AD5934_Compress_To_IntScale(mag_ec, current_ec_mux);
intToStr(ec_final, tempString);
//FloatToString(tempString, thermal_compensaded_EC);
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
{
uint16_t ph_final = ADS1015_Compress_To_IntScale(g_ph_filter.filtered_value);
intToStr(ph_final, tempString);
//float ph_final = g_ph_filter.filtered_value;
//FloatToString(tempString, ph_final);
@@ -275,6 +210,7 @@ int main(void)
}
// Piscar LED verde em PB4 a cada 1 segundo
if ((current_millis - previous_millis_green) >= 1000)
{
@@ -1,30 +1,36 @@
../Core/Src/ad5934_driver.c:48:6:AD5934_SetRegisterValue 2
../Core/Src/ad5934_driver.c:76:10:AD5934_GetRegisterValue 3
../Core/Src/ad5934_driver.c:110:10:AD5934_ReadRegister 3
../Core/Src/ad5934_driver.c:148:6:AD5934_Init 1
../Core/Src/ad5934_driver.c:179:6:AD5934_RestartSweep 1
../Core/Src/ad5934_driver.c:202:6:AD5934_Repeat_Sweep 1
../Core/Src/ad5934_driver.c:215:6:AD5934_StopSweep 1
../Core/Src/ad5934_driver.c:235:7:AD5934_Calculate_Temperature 4
../Core/Src/ad5934_driver.c:288:7:AD5934_EC_Compensate_Magnitude_To_25C 2
../Core/Src/ad5934_driver.c:303:7:AD5934_EC_Calibrate_Temperature 5
../Core/Src/ad5934_driver.c:349:7:AD5934_GetMagnitude 1
../Core/Src/ad5934_driver.c:373:7:AD5934_GetImpedance 2
../Core/Src/ad5934_driver.c:404:10:AD5934_Get_Real_Imag_Numbers 1
../Core/Src/ad5934_driver.c:423:10:AD5934_Compress_To_IntScale 5
../Core/Src/ad5934_driver.c:456:7:AD5934_Round_Float_Precision 2
../Core/Src/ad5934_driver.c:481:7:AD5934_Linear_Correction 1
../Core/Src/ad5934_driver.c:500:7:AD5934_Calibrate 1
../Core/Src/ad5934_driver.c:522:6:AD5934_Process_System 19
../Core/Src/ad5934_driver.c:644:6:AD5934_Sort_Array 4
../Core/Src/ad5934_driver.c:666:7:AD5934_Trimmed_Mean 3
../Core/Src/ad5934_driver.c:692:7:AD5934_History_Average 2
../Core/Src/ad5934_driver.c:706:6:AD5934_Process_Sample 4
../Core/Src/ad5934_driver.c:746:6:AD5934_MovingAvg_Init 2
../Core/Src/ad5934_driver.c:757:6:AD5934_MovingAvg_Process 3
../Core/Src/ad5934_driver.c:777:6:AD5934_RTD_NewSample 1
../Core/Src/ad5934_driver.c:785:6:AD5934_EC_NewSample 1
../Core/Src/ad5934_driver.c:793:6:AD5934_Reference_NewSample 1
../Core/Src/ad5934_driver.c:810:6:ADG715_SetRegisterValue 1
../Core/Src/ad5934_driver.c:828:6:ADG715_ResetChannels 1
../Core/Src/ad5934_driver.c:840:6:ADG715_SetChannels 2
../Core/Src/ad5934_driver.c:53:6:AD5934_SetRegisterValue 2
../Core/Src/ad5934_driver.c:81:10:AD5934_GetRegisterValue 3
../Core/Src/ad5934_driver.c:115:10:AD5934_ReadRegister 3
../Core/Src/ad5934_driver.c:153:6:AD5934_Init 1
../Core/Src/ad5934_driver.c:184:6:AD5934_RestartSweep 1
../Core/Src/ad5934_driver.c:207:6:AD5934_Repeat_Sweep 1
../Core/Src/ad5934_driver.c:220:6:AD5934_StopSweep 1
../Core/Src/ad5934_driver.c:240:7:AD5934_Calculate_Temperature 4
../Core/Src/ad5934_driver.c:298:7:AD5934_EC_Compensate_Magnitude_To_25C 2
../Core/Src/ad5934_driver.c:313:7:AD5934_EC_Calibrate_Temperature 5
../Core/Src/ad5934_driver.c:359:7:AD5934_GetMagnitude 1
../Core/Src/ad5934_driver.c:383:7:AD5934_GetImpedance 2
../Core/Src/ad5934_driver.c:413:7:AD5934_GetAdmittance 2
../Core/Src/ad5934_driver.c:452:10:AD5934_Get_Real_Imag_Numbers 1
../Core/Src/ad5934_driver.c:471:10:AD5934_Compress_To_IntScale 5
../Core/Src/ad5934_driver.c:504:7:AD5934_Round_Float_Precision 2
../Core/Src/ad5934_driver.c:529:7:AD5934_Linear_Correction 1
../Core/Src/ad5934_driver.c:548:7:AD5934_Calibrate 1
../Core/Src/ad5934_driver.c:570:6:AD5934_Process_System 26
../Core/Src/ad5934_driver.c:703:6:AD5934_Sort_Array 4
../Core/Src/ad5934_driver.c:725:7:AD5934_Trimmed_Mean 3
../Core/Src/ad5934_driver.c:751:7:AD5934_History_Average 2
../Core/Src/ad5934_driver.c:765:6:AD5934_Process_Sample 4
../Core/Src/ad5934_driver.c:805:6:AD5934_MovingAvg_Init 2
../Core/Src/ad5934_driver.c:816:6:AD5934_MovingAvg_Process 3
../Core/Src/ad5934_driver.c:836:6:AD5934_RTD_NewSample 1
../Core/Src/ad5934_driver.c:844:6:AD5934_EC_NewSample 1
../Core/Src/ad5934_driver.c:852:6:AD5934_Reference_100R_LowGain_NewSample 1
../Core/Src/ad5934_driver.c:859:6:AD5934_Reference_100R_MidGain_NewSample 1
../Core/Src/ad5934_driver.c:866:6:AD5934_Reference_100R_HighGain_NewSample 1
../Core/Src/ad5934_driver.c:873:6:AD5934_Reference_1K_MidGain_NewSample 1
../Core/Src/ad5934_driver.c:880:6:AD5934_Reference_1K_HighGain_NewSample 1
../Core/Src/ad5934_driver.c:887:6:AD5934_Reference_10K_HighGain_NewSample 1
../Core/Src/ad5934_driver.c:902:6:ADG715_SetRegisterValue 1
../Core/Src/ad5934_driver.c:920:6:ADG715_ResetChannels 1
../Core/Src/ad5934_driver.c:932:6:ADG715_SetChannels 2
Binary file not shown.
+36 -30
View File
@@ -1,30 +1,36 @@
../Core/Src/ad5934_driver.c:48:6:AD5934_SetRegisterValue 32 static
../Core/Src/ad5934_driver.c:76:10:AD5934_GetRegisterValue 40 static
../Core/Src/ad5934_driver.c:110:10:AD5934_ReadRegister 48 static
../Core/Src/ad5934_driver.c:148:6:AD5934_Init 8 static
../Core/Src/ad5934_driver.c:179:6:AD5934_RestartSweep 8 static
../Core/Src/ad5934_driver.c:202:6:AD5934_Repeat_Sweep 8 static
../Core/Src/ad5934_driver.c:215:6:AD5934_StopSweep 8 static
../Core/Src/ad5934_driver.c:235:7:AD5934_Calculate_Temperature 48 static
../Core/Src/ad5934_driver.c:288:7:AD5934_EC_Compensate_Magnitude_To_25C 24 static
../Core/Src/ad5934_driver.c:303:7:AD5934_EC_Calibrate_Temperature 152 static
../Core/Src/ad5934_driver.c:349:7:AD5934_GetMagnitude 24 static
../Core/Src/ad5934_driver.c:373:7:AD5934_GetImpedance 32 static
../Core/Src/ad5934_driver.c:404:10:AD5934_Get_Real_Imag_Numbers 16 static
../Core/Src/ad5934_driver.c:423:10:AD5934_Compress_To_IntScale 32 static
../Core/Src/ad5934_driver.c:456:7:AD5934_Round_Float_Precision 24 static
../Core/Src/ad5934_driver.c:481:7:AD5934_Linear_Correction 24 static
../Core/Src/ad5934_driver.c:500:7:AD5934_Calibrate 48 static
../Core/Src/ad5934_driver.c:522:6:AD5934_Process_System 32 static
../Core/Src/ad5934_driver.c:644:6:AD5934_Sort_Array 24 static
../Core/Src/ad5934_driver.c:666:7:AD5934_Trimmed_Mean 32 static
../Core/Src/ad5934_driver.c:692:7:AD5934_History_Average 24 static
../Core/Src/ad5934_driver.c:706:6:AD5934_Process_Sample 32 static
../Core/Src/ad5934_driver.c:746:6:AD5934_MovingAvg_Init 24 static
../Core/Src/ad5934_driver.c:757:6:AD5934_MovingAvg_Process 24 static
../Core/Src/ad5934_driver.c:777:6:AD5934_RTD_NewSample 16 static
../Core/Src/ad5934_driver.c:785:6:AD5934_EC_NewSample 16 static
../Core/Src/ad5934_driver.c:793:6:AD5934_Reference_NewSample 16 static
../Core/Src/ad5934_driver.c:810:6:ADG715_SetRegisterValue 32 static
../Core/Src/ad5934_driver.c:828:6:ADG715_ResetChannels 8 static
../Core/Src/ad5934_driver.c:840:6:ADG715_SetChannels 16 static
../Core/Src/ad5934_driver.c:53:6:AD5934_SetRegisterValue 32 static
../Core/Src/ad5934_driver.c:81:10:AD5934_GetRegisterValue 40 static
../Core/Src/ad5934_driver.c:115:10:AD5934_ReadRegister 48 static
../Core/Src/ad5934_driver.c:153:6:AD5934_Init 8 static
../Core/Src/ad5934_driver.c:184:6:AD5934_RestartSweep 8 static
../Core/Src/ad5934_driver.c:207:6:AD5934_Repeat_Sweep 8 static
../Core/Src/ad5934_driver.c:220:6:AD5934_StopSweep 8 static
../Core/Src/ad5934_driver.c:240:7:AD5934_Calculate_Temperature 64 static
../Core/Src/ad5934_driver.c:298:7:AD5934_EC_Compensate_Magnitude_To_25C 24 static
../Core/Src/ad5934_driver.c:313:7:AD5934_EC_Calibrate_Temperature 152 static
../Core/Src/ad5934_driver.c:359:7:AD5934_GetMagnitude 24 static
../Core/Src/ad5934_driver.c:383:7:AD5934_GetImpedance 32 static
../Core/Src/ad5934_driver.c:413:7:AD5934_GetAdmittance 72 static
../Core/Src/ad5934_driver.c:452:10:AD5934_Get_Real_Imag_Numbers 16 static
../Core/Src/ad5934_driver.c:471:10:AD5934_Compress_To_IntScale 32 static
../Core/Src/ad5934_driver.c:504:7:AD5934_Round_Float_Precision 24 static
../Core/Src/ad5934_driver.c:529:7:AD5934_Linear_Correction 24 static
../Core/Src/ad5934_driver.c:548:7:AD5934_Calibrate 48 static
../Core/Src/ad5934_driver.c:570:6:AD5934_Process_System 32 static
../Core/Src/ad5934_driver.c:703:6:AD5934_Sort_Array 24 static
../Core/Src/ad5934_driver.c:725:7:AD5934_Trimmed_Mean 32 static
../Core/Src/ad5934_driver.c:751:7:AD5934_History_Average 24 static
../Core/Src/ad5934_driver.c:765:6:AD5934_Process_Sample 32 static
../Core/Src/ad5934_driver.c:805:6:AD5934_MovingAvg_Init 24 static
../Core/Src/ad5934_driver.c:816:6:AD5934_MovingAvg_Process 24 static
../Core/Src/ad5934_driver.c:836:6:AD5934_RTD_NewSample 16 static
../Core/Src/ad5934_driver.c:844:6:AD5934_EC_NewSample 16 static
../Core/Src/ad5934_driver.c:852:6:AD5934_Reference_100R_LowGain_NewSample 16 static
../Core/Src/ad5934_driver.c:859:6:AD5934_Reference_100R_MidGain_NewSample 16 static
../Core/Src/ad5934_driver.c:866:6:AD5934_Reference_100R_HighGain_NewSample 16 static
../Core/Src/ad5934_driver.c:873:6:AD5934_Reference_1K_MidGain_NewSample 16 static
../Core/Src/ad5934_driver.c:880:6:AD5934_Reference_1K_HighGain_NewSample 16 static
../Core/Src/ad5934_driver.c:887:6:AD5934_Reference_10K_HighGain_NewSample 16 static
../Core/Src/ad5934_driver.c:902:6:ADG715_SetRegisterValue 32 static
../Core/Src/ad5934_driver.c:920:6:ADG715_ResetChannels 8 static
../Core/Src/ad5934_driver.c:932:6:ADG715_SetChannels 16 static
+7 -7
View File
@@ -1,7 +1,7 @@
../Core/Src/main.c:79:5:main 4
../Core/Src/main.c:314:6:SystemClock_Config 4
../Core/Src/main.c:365:6:FloatToString 8
../Core/Src/main.c:427:6:intToStr 12
../Core/Src/main.c:493:6:Convert2Hex 2
../Core/Src/main.c:507:6:HAL_TIM_PeriodElapsedCallback 2
../Core/Src/main.c:523:6:Error_Handler 1
../Core/Src/main.c:79:5:main 8
../Core/Src/main.c:250:6:SystemClock_Config 4
../Core/Src/main.c:301:6:FloatToString 8
../Core/Src/main.c:363:6:intToStr 12
../Core/Src/main.c:429:6:Convert2Hex 2
../Core/Src/main.c:443:6:HAL_TIM_PeriodElapsedCallback 2
../Core/Src/main.c:459:6:Error_Handler 1
Binary file not shown.
+7 -7
View File
@@ -1,7 +1,7 @@
../Core/Src/main.c:79:5:main 72 static
../Core/Src/main.c:314:6:SystemClock_Config 88 static
../Core/Src/main.c:365:6:FloatToString 104 static
../Core/Src/main.c:427:6:intToStr 32 static
../Core/Src/main.c:493:6:Convert2Hex 48 static
../Core/Src/main.c:507:6:HAL_TIM_PeriodElapsedCallback 16 static
../Core/Src/main.c:523:6:Error_Handler 4 static,ignoring_inline_asm
../Core/Src/main.c:79:5:main 104 static
../Core/Src/main.c:250:6:SystemClock_Config 88 static
../Core/Src/main.c:301:6:FloatToString 104 static
../Core/Src/main.c:363:6:intToStr 32 static
../Core/Src/main.c:429:6:Convert2Hex 48 static
../Core/Src/main.c:443:6:HAL_TIM_PeriodElapsedCallback 16 static
../Core/Src/main.c:459:6:Error_Handler 4 static,ignoring_inline_asm
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff