增加程控增益(未测试),小于180开启,大于1900关闭
This commit is contained in:
parent
7091edb970
commit
aaec993378
|
@ -134,6 +134,7 @@ typedef struct _mcs_para{
|
||||||
}mcs_para;
|
}mcs_para;
|
||||||
extern mcs_para g_stMcs_Para;
|
extern mcs_para g_stMcs_Para;
|
||||||
|
|
||||||
|
//错误日志
|
||||||
typedef struct _error_log{
|
typedef struct _error_log{
|
||||||
uint16_t tof_error_NS:1; /* 接受南北信号(tofy,tofx<0)很小 */
|
uint16_t tof_error_NS:1; /* 接受南北信号(tofy,tofx<0)很小 */
|
||||||
uint16_t tof_error_WE:1; /* 接受东西信号(tofy,tofx<0)很小 */
|
uint16_t tof_error_WE:1; /* 接受东西信号(tofy,tofx<0)很小 */
|
||||||
|
@ -153,6 +154,19 @@ typedef struct _error_log{
|
||||||
uint16_t error_15:1; /* 保留 */
|
uint16_t error_15:1; /* 保留 */
|
||||||
}error_log;
|
}error_log;
|
||||||
extern error_log g_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)
|
#pragma pack(pop)
|
||||||
|
|
||||||
#define MAX_VALUES 50
|
#define MAX_VALUES 50
|
||||||
|
|
|
@ -40,10 +40,6 @@ AverageCalculator wave_max_val_1;
|
||||||
AverageCalculator wave_max_val_2;
|
AverageCalculator wave_max_val_2;
|
||||||
AverageCalculator wave_max_val_3;
|
AverageCalculator wave_max_val_3;
|
||||||
AverageCalculator wave_max_val_4;
|
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_val[ADC_VAL_LEN];
|
||||||
int16_t adc_val1[ADC_VAL_LEN];
|
int16_t adc_val1[ADC_VAL_LEN];
|
||||||
|
@ -80,12 +76,76 @@ int32_t max_val_index_f32;
|
||||||
// adc增益使能
|
// adc增益使能
|
||||||
void enable_adc_gain(void)
|
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增益取消使能
|
// adc增益取消使能
|
||||||
void disable_adc_gain(void)
|
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)
|
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_NS = 0;
|
||||||
uint8_t tof_error_log_WE = 0;
|
uint8_t tof_error_log_WE = 0;
|
||||||
|
@ -423,6 +488,7 @@ void wind_task(void const * argument)
|
||||||
// 通道1 通道2 测试南北风速
|
// 通道1 通道2 测试南北风速
|
||||||
// 通道1发送 通道2接收
|
// 通道1发送 通道2接收
|
||||||
change_channel(0x01);
|
change_channel(0x01);
|
||||||
|
use_adc_gain(0x01);
|
||||||
// 等待通道切换稳定
|
// 等待通道切换稳定
|
||||||
// adc开启采集数据有个固定的延时,这里取消等待
|
// adc开启采集数据有个固定的延时,这里取消等待
|
||||||
//HAL_Delay(0);
|
//HAL_Delay(0);
|
||||||
|
@ -432,14 +498,22 @@ void wind_task(void const * argument)
|
||||||
osDelay(1);
|
osDelay(1);
|
||||||
// 通道2发送 通道1接收
|
// 通道2发送 通道1接收
|
||||||
change_channel(0x02);
|
change_channel(0x02);
|
||||||
|
use_adc_gain(0x02);
|
||||||
// 等待通道切换稳定
|
// 等待通道切换稳定
|
||||||
//HAL_Delay(0);
|
//HAL_Delay(0);
|
||||||
// 发送pwm 并启动adc采集数据
|
// 发送pwm 并启动adc采集数据
|
||||||
play_one_measure(adc_val1,ADC_VAL_LEN);
|
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);
|
tofx = cal_tof(adc_val,ADC_VAL_LEN, &wave_max_val1);
|
||||||
tofy = cal_tof(adc_val1,ADC_VAL_LEN, &wave_max_val2);addValue(&wave_max_val_2, wave_max_val2);
|
//最大值平均+增益控制
|
||||||
|
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 测试东西风速
|
||||||
// 通道3发送 通道4接收
|
// 通道3发送 通道4接收
|
||||||
change_channel(0x03);
|
change_channel(0x03);
|
||||||
|
use_adc_gain(0x03);
|
||||||
// 等待通道切换稳定
|
// 等待通道切换稳定
|
||||||
//HAL_Delay(0);
|
//HAL_Delay(0);
|
||||||
// 发送pwm 并启动adc采集数据
|
// 发送pwm 并启动adc采集数据
|
||||||
|
@ -491,14 +566,22 @@ void wind_task(void const * argument)
|
||||||
osDelay(1);
|
osDelay(1);
|
||||||
// 通道4发送 通道3接收
|
// 通道4发送 通道3接收
|
||||||
change_channel(0x04);
|
change_channel(0x04);
|
||||||
|
use_adc_gain(0x04);
|
||||||
// 等待通道切换稳定
|
// 等待通道切换稳定
|
||||||
//HAL_Delay(0);
|
//HAL_Delay(0);
|
||||||
// 发送pwm 并启动adc采集数据
|
// 发送pwm 并启动adc采集数据
|
||||||
play_one_measure(adc_val1,ADC_VAL_LEN);
|
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);
|
tofx = cal_tof(adc_val,ADC_VAL_LEN, &wave_max_val3);
|
||||||
tofy = cal_tof(adc_val1,ADC_VAL_LEN, &wave_max_val4);addValue(&wave_max_val_4, wave_max_val4);
|
//最大值平均+增益控制
|
||||||
|
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)
|
if(tofx<0||tofy<0)
|
||||||
|
|
Loading…
Reference in New Issue