添加调试寄存器,可将将波形最大值发回

This commit is contained in:
95384 2024-12-04 10:12:14 +08:00
parent 3d9e0e3b07
commit f2ffc61bf6
4 changed files with 102 additions and 12 deletions

View File

@ -155,6 +155,18 @@ typedef struct _error_log{
extern error_log g_error_log;
#pragma pack(pop)
#define MAX_VALUES 50
typedef struct {
uint16_t values[MAX_VALUES];
uint16_t count;
uint16_t currentIndex;
uint16_t ave;
} AverageCalculator;
extern AverageCalculator Test1;
extern AverageCalculator Test2;
extern AverageCalculator Test3;
extern AverageCalculator Test4;
// 切换通道
void change_channel(uint32_t channel);

View File

@ -71,6 +71,10 @@ typedef enum
FRT_REGISTER_LINEAR_POINT_Y_4 = 48, /* 线性插值校准点4 */
FRT_REGISTER_LINEAR_POINT_Y_5 = 49, /* 线性插值校准点5 */
FRT_REGISTER_LINEAR_ENABLE = 50, /* 线性插值使能 */
FRT_REGISTER_TEST1 = 51, /* 测试寄存器 */
FRT_REGISTER_TEST2 = 52, /* 测试寄存器 */
FRT_REGISTER_TEST3 = 53, /* 测试寄存器 */
FRT_REGISTER_TEST4 = 54, /* 测试寄存器 */
}FRT_MsgRegister;
#pragma pack(push,1)

View File

@ -22,8 +22,28 @@ arm_rfft_fast_instance_f32 s;
float32_t rfft_float_buf[FFT_DATA_LEN];
// fft结果
float32_t fft_out_f32[ADC_VAL_LEN] = {0};
//
// 波形最大点
void addValue(AverageCalculator *calc, uint16_t value) {
calc->values[calc->currentIndex] = value;
calc->currentIndex = (calc->currentIndex + 1) % MAX_VALUES;
if (calc->count < MAX_VALUES) {
calc->count++;
}
uint32_t sum = 0;
for (int i = 0; i < calc->count; i++) {
sum += calc->values[i];
}
calc->ave = sum / calc->count;
}
AverageCalculator Test1;
AverageCalculator Test2;
AverageCalculator Test3;
AverageCalculator Test4;
uint16_t wave_max_val1;
uint16_t wave_max_val2;
uint16_t wave_max_val3;
uint16_t wave_max_val4;
int16_t adc_val[ADC_VAL_LEN];
int16_t adc_val1[ADC_VAL_LEN];
@ -101,7 +121,8 @@ float32_t RSSI;
float32_t buf[ADC_VAL_LEN];
float32_t buf2[ADC_VAL_LEN];
/*****************滤波器BUFF**********/
float32_t cal_tof(q15_t* x,uint32_t len)
float32_t cal_tof(q15_t* x,uint32_t len, int16_t *maxVal)
// float32_t cal_tof(q15_t* x,uint32_t len)
{
q15_t max_val,dc_offset;
float32_t echo_p = 0,echo_dt = 0;
@ -132,7 +153,8 @@ float32_t cal_tof(q15_t* x,uint32_t len)
// arm_float_to_q15(buf2,firFilterTestOutData,len);
for(i= 0 ;i<len;i++ )
{
x[i] = (int16_t)(buf2[i]*2.5f);
// x[i] = (int16_t)(buf2[i]*2.5f);
x[i] = (int16_t)(buf2[i]);
}
/*****************滤波器**********/
@ -163,9 +185,11 @@ float32_t cal_tof(q15_t* x,uint32_t len)
RSSI = rfft_float_buf[fft_200khz_pos-2]+rfft_float_buf[fft_200khz_pos-1]+ rfft_float_buf[fft_200khz_pos]+rfft_float_buf[fft_200khz_pos+1]+rfft_float_buf[fft_200khz_pos+2];
// 如果RSSI小于
// 可变RSSI范围
if(RSSI < ((float)g_stConfigInfo.RSSI_range/100.0))
// if(RSSI<0.2)
if(RSSI < ((float)g_stConfigInfo.RSSI_range/100.0))
return -1;
// 取出最大值
*maxVal = max_val;
// 可变参数
uint16_t max_val_zero_1R5 = max_val * g_stConfigInfo.transducer_cfg_1R5/100;
@ -403,8 +427,8 @@ void wind_task(void const * argument)
play_one_measure(adc_val1,ADC_VAL_LEN);
tofx = cal_tof(adc_val,ADC_VAL_LEN);
tofy = cal_tof(adc_val1,ADC_VAL_LEN);
tofx = cal_tof(adc_val,ADC_VAL_LEN, &wave_max_val1);addValue(&Test1, wave_max_val1);
tofy = cal_tof(adc_val1,ADC_VAL_LEN, &wave_max_val2);addValue(&Test2, wave_max_val2);
// 接受信号很小
@ -462,8 +486,8 @@ void wind_task(void const * argument)
play_one_measure(adc_val1,ADC_VAL_LEN);
tofx = cal_tof(adc_val,ADC_VAL_LEN);
tofy = cal_tof(adc_val1,ADC_VAL_LEN);
tofx = cal_tof(adc_val,ADC_VAL_LEN, &wave_max_val3);addValue(&Test3, wave_max_val3);
tofy = cal_tof(adc_val1,ADC_VAL_LEN, &wave_max_val4);addValue(&Test4, wave_max_val4);
// 如果测量的信号幅值过小。
if(tofx<0||tofy<0)

View File

@ -81,6 +81,11 @@ static u_int16_t FRT_WriteRegPoint_3Y(void *pMsg);
static u_int16_t FRT_WriteRegPoint_4Y(void *pMsg);
static u_int16_t FRT_WriteRegPoint_5Y(void *pMsg);
static u_int16_t FRT_WriteRegLinearEnable(void *pMsg);
/* 测试 */
static u_int16_t FRT_ReadRegTest1(void *pMsg);
static u_int16_t FRT_ReadRegTest2(void *pMsg);
static u_int16_t FRT_ReadRegTest3(void *pMsg);
static u_int16_t FRT_ReadRegTest4(void *pMsg);
static void pdebug_mcs_info();
@ -121,10 +126,10 @@ FRT_RegProcTable_s g_RegTbl[] =
{ FRT_REGISTER_TRANSDUCER_CFG_8R0, FRT_ReadRegTransducerCFG8R0 }, /* 读换能器参数寄存器值8R0 */
{ FRT_REGISTER_RSSI_RANGE, FRT_ReadRegRSSIRange }, /* 读RSSI有效范围 */
{ FRT_REGISTER_COEFFICIENT, FRT_ReadRegCoefficient }, /* 读粘度修正系数 */
{ FRT_REGISTER_DISTANCE_NS, FRT_ReadRegDISTANCE_NS }, /* 读南北探头表面有效距离 */
{ FRT_REGISTER_DISTANCE_NS, FRT_ReadRegDISTANCE_NS }, /* 读南北探头表面有效距离 */
{ FRT_REGISTER_DISTANCE_WE, FRT_ReadRegDISTANCE_WE }, /* 读东西探头表面有效距离 */
{ FRT_REGISTER_ERROR_LOG, FRT_ReadRegErrorData }, /* 读错误日志 */
{ FRT_REGISTER_WIND_C_NS, FRT_ReadRegWindC_NS }, /* 读计算得到的南北风速 */
{ FRT_REGISTER_WIND_C_NS, FRT_ReadRegWindC_NS }, /* 读计算得到的南北风速 */
{ FRT_REGISTER_WIND_C_WE, FRT_ReadRegWindC_WE }, /* 读计算得到的东西风速 */
{ FRT_REGISTER_LINEAR_POINT_X_1, FRT_ReadRegPoint_1X }, /* 线性插值原始点1 */
{ FRT_REGISTER_LINEAR_POINT_X_2, FRT_ReadRegPoint_2X }, /* 线性插值原始点2 */
@ -137,6 +142,10 @@ FRT_RegProcTable_s g_RegTbl[] =
{ FRT_REGISTER_LINEAR_POINT_Y_4, FRT_ReadRegPoint_4Y }, /* 线性插值校准点4 */
{ FRT_REGISTER_LINEAR_POINT_Y_5, FRT_ReadRegPoint_5Y }, /* 线性插值校准点5 */
{ FRT_REGISTER_LINEAR_ENABLE, FRT_ReadRegLinearEnable }, /* 线性插值使能 */
{ FRT_REGISTER_TEST1, FRT_ReadRegTest1 }, /* 测试寄存器 */
{ FRT_REGISTER_TEST2, FRT_ReadRegTest2 }, /* 测试寄存器 */
{ FRT_REGISTER_TEST3, FRT_ReadRegTest3 }, /* 测试寄存器 */
{ FRT_REGISTER_TEST4, FRT_ReadRegTest4 }, /* 测试寄存器 */
};
/* 写寄存器处理表 */
@ -797,6 +806,47 @@ static u_int16_t FRT_ReadRegLinearEnable(void *pMsg)
return FRT_swap_endian_16(value);
}
/**
* @brief 111111111111111
* @param
* @retval
*/
static u_int16_t FRT_ReadRegTest1(void *pMsg)
{
u_int16_t value=(u_int16_t)(Test1.ave);
return FRT_swap_endian_16(value);
}
/**
* @brief 111111111111111
* @param
* @retval
*/
static u_int16_t FRT_ReadRegTest2(void *pMsg)
{
u_int16_t value=(u_int16_t)(Test2.ave);
return FRT_swap_endian_16(value);
}
/**
* @brief 111111111111111
* @param
* @retval
*/
static u_int16_t FRT_ReadRegTest3(void *pMsg)
{
u_int16_t value=(u_int16_t)(Test3.ave);
return FRT_swap_endian_16(value);
}
/**
* @brief 111111111111111
* @param
* @retval
*/
static u_int16_t FRT_ReadRegTest4(void *pMsg)
{
u_int16_t value=(u_int16_t)(Test4.ave);
return FRT_swap_endian_16(value);
}
/**
* @brief 1R5
* @param
@ -1106,7 +1156,7 @@ void FRT_MsgProc_ReadRegister(device_handle device, void *pMsg)
start_reg_addr < 0x00 ||\
(start_reg_addr > FRT_REGISTER_PRESSURE && start_reg_addr < FRT_REGISTER_DEVICE_ADDR) ||\
(start_reg_addr > FRT_REGISTER_TEMPHUM_UPDATE_TIME && start_reg_addr < FRT_REGISTER_TRANSDUCER_CFG_1R5) ||\
start_reg_addr > FRT_REGISTER_LINEAR_ENABLE \
start_reg_addr > FRT_REGISTER_TEST4 \
)
{
@ -1118,7 +1168,7 @@ void FRT_MsgProc_ReadRegister(device_handle device, void *pMsg)
reg_num < 0x01 ||\
(((reg_num + start_reg_addr - 1) > FRT_REGISTER_PRESSURE) && ((reg_num + start_reg_addr - 1) < FRT_REGISTER_DEVICE_ADDR)) ||\
(((reg_num + start_reg_addr -1) > FRT_REGISTER_TEMPHUM_UPDATE_TIME) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_TRANSDUCER_CFG_1R5)) ||\
((reg_num + start_reg_addr -1) > FRT_REGISTER_LINEAR_ENABLE) \
((reg_num + start_reg_addr -1) > FRT_REGISTER_TEST4) \
)
{