增加程控增益(未测试),小于180开启,大于1900关闭

This commit is contained in:
95384 2024-12-16 17:03:53 +08:00
parent 7091edb970
commit aaec993378
2 changed files with 107 additions and 10 deletions

View File

@ -134,6 +134,7 @@ typedef struct _mcs_para{
}mcs_para;
extern mcs_para g_stMcs_Para;
//错误日志
typedef struct _error_log{
uint16_t tof_error_NS:1; /* 接受南北信号tofytofx<0很小 */
uint16_t tof_error_WE:1; /* 接受东西信号tofytofx<0很小 */
@ -153,6 +154,19 @@ typedef struct _error_log{
uint16_t error_15:1; /* 保留 */
}error_log;
extern error_log g_error_log;
//增益控制位
typedef struct _adc_gain_status{
uint16_t gain_status_s:1;
uint16_t gain_status_n:1;
uint16_t gain_status_e:1;
uint16_t gain_status_w:1;
uint16_t bit4:1;
uint16_t bit5:1;
uint16_t bit6:1;
uint16_t bit7:1;
}adc_gain_status;
#pragma pack(pop)
#define MAX_VALUES 50

View File

@ -40,10 +40,6 @@ AverageCalculator wave_max_val_1;
AverageCalculator wave_max_val_2;
AverageCalculator wave_max_val_3;
AverageCalculator wave_max_val_4;
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];
@ -80,12 +76,76 @@ int32_t max_val_index_f32;
// adc增益使能
void enable_adc_gain(void)
{
HAL_GPIO_WritePin(GPIO_GAIN_SET_GPIO_Port, GPIO_GAIN_SET_Pin, GPIO_PIN_SET);
HAL_GPIO_ReadPin(GPIO_GAIN_SET_GPIO_Port, GPIO_GAIN_SET_Pin) ? (void)0 : HAL_GPIO_WritePin(GPIO_GAIN_SET_GPIO_Port, GPIO_GAIN_SET_Pin, GPIO_PIN_SET);
}
// adc增益取消使能
void disable_adc_gain(void)
{
HAL_GPIO_WritePin(GPIO_GAIN_SET_GPIO_Port, GPIO_GAIN_SET_Pin, GPIO_PIN_RESET);
HAL_GPIO_ReadPin(GPIO_GAIN_SET_GPIO_Port, GPIO_GAIN_SET_Pin) ? HAL_GPIO_WritePin(GPIO_GAIN_SET_GPIO_Port, GPIO_GAIN_SET_Pin, GPIO_PIN_RESET) : (void)0;
}
adc_gain_status gain_status = {0};
// adc增益控制0x01:S,0x02:N,0x03:E,0x04:W当次使能下次生效暂定为180开1900关
void config_adc_gain(uint8_t channel, uint16_t max_val)
{
switch(channel)
{
case 0x01:
if(max_val <= 180)
gain_status.gain_status_s = 1;
else if(max_val >= 1900)
gain_status.gain_status_s = 0;
break;
case 0x02:
if(max_val <= 180)
gain_status.gain_status_n = 1;
else if(max_val >= 1900)
gain_status.gain_status_n = 0;
break;
case 0x03:
if(max_val <= 180)
gain_status.gain_status_e = 1;
else if(max_val >= 1900)
gain_status.gain_status_e = 0;
break;
case 0x04:
if(max_val <= 180)
gain_status.gain_status_w = 1;
else if(max_val >= 1900)
gain_status.gain_status_w = 0;
break;
default:
break;
}
}
void use_adc_gain(uint8_t channel)
{
switch(channel)
{
case 0x01:
gain_status.gain_status_s ? enable_adc_gain() : disable_adc_gain();
break;
case 0x02:
gain_status.gain_status_n ? enable_adc_gain() : disable_adc_gain();
break;
case 0x03:
gain_status.gain_status_e ? enable_adc_gain() : disable_adc_gain();
break;
case 0x04:
gain_status.gain_status_w ? enable_adc_gain() : disable_adc_gain();
break;
default:
break;
}
}
// 多项式插值
@ -401,6 +461,11 @@ char str[100];
void wind_task(void const * argument)
{
// 最大幅值
uint16_t wave_max_val1;
uint16_t wave_max_val2;
uint16_t wave_max_val3;
uint16_t wave_max_val4;
//错误次数统计,南北,东西分开(接受信号很小)
uint8_t tof_error_log_NS = 0;
uint8_t tof_error_log_WE = 0;
@ -423,6 +488,7 @@ void wind_task(void const * argument)
// 通道1 通道2 测试南北风速
// 通道1发送 通道2接收
change_channel(0x01);
use_adc_gain(0x01);
// 等待通道切换稳定
// adc开启采集数据有个固定的延时,这里取消等待
//HAL_Delay(0);
@ -432,14 +498,22 @@ void wind_task(void const * argument)
osDelay(1);
// 通道2发送 通道1接收
change_channel(0x02);
use_adc_gain(0x02);
// 等待通道切换稳定
//HAL_Delay(0);
// 发送pwm 并启动adc采集数据
play_one_measure(adc_val1,ADC_VAL_LEN);
tofx = cal_tof(adc_val,ADC_VAL_LEN, &wave_max_val1);addValue(&wave_max_val_1, wave_max_val1);
tofy = cal_tof(adc_val1,ADC_VAL_LEN, &wave_max_val2);addValue(&wave_max_val_2, wave_max_val2);
tofx = cal_tof(adc_val,ADC_VAL_LEN, &wave_max_val1);
//最大值平均+增益控制
addValue(&wave_max_val_1, wave_max_val1);
config_adc_gain(0x01, wave_max_val_1.ave);
tofy = cal_tof(adc_val1,ADC_VAL_LEN, &wave_max_val2);
//最大值平均+增益控制
addValue(&wave_max_val_2, wave_max_val2);
config_adc_gain(0x02, wave_max_val_2.ave);
// 接受信号很小
@ -483,6 +557,7 @@ void wind_task(void const * argument)
// 通道3 通道4 测试东西风速
// 通道3发送 通道4接收
change_channel(0x03);
use_adc_gain(0x03);
// 等待通道切换稳定
//HAL_Delay(0);
// 发送pwm 并启动adc采集数据
@ -491,14 +566,22 @@ void wind_task(void const * argument)
osDelay(1);
// 通道4发送 通道3接收
change_channel(0x04);
use_adc_gain(0x04);
// 等待通道切换稳定
//HAL_Delay(0);
// 发送pwm 并启动adc采集数据
play_one_measure(adc_val1,ADC_VAL_LEN);
tofx = cal_tof(adc_val,ADC_VAL_LEN, &wave_max_val3);addValue(&wave_max_val_3, wave_max_val3);
tofy = cal_tof(adc_val1,ADC_VAL_LEN, &wave_max_val4);addValue(&wave_max_val_4, wave_max_val4);
tofx = cal_tof(adc_val,ADC_VAL_LEN, &wave_max_val3);
//最大值平均+增益控制
addValue(&wave_max_val_3, wave_max_val3);
config_adc_gain(0x03, wave_max_val_3.ave);
tofy = cal_tof(adc_val1,ADC_VAL_LEN, &wave_max_val4);
//最大值平均+增益控制
addValue(&wave_max_val_4, wave_max_val4);
config_adc_gain(0x04, wave_max_val_4.ave);
// 如果测量的信号幅值过小。
if(tofx<0||tofy<0)