kmnqhaha 发表于 2025-6-26 00:36

哪些方法可以减少WiFi干扰?

在硬件补偿的基础上,还可以从软件算法、PCB 设计、系统架构等多个维度采取措施减少 WiFi 对 ADC 采样的干扰。以下是几种有效的方法:
1. 软件数字滤波增强
通过改进数字滤波算法,可以进一步抑制 WiFi 干扰带来的高频噪声:
c
运行
// 卡尔曼滤波实现示例
typedef struct {
    float q;      // 过程噪声协方差
    float r;      // 测量噪声协方差
    float x;      // 状态估计
    float p;      // 估计误差协方差
    float k;      // 卡尔曼增益
} KalmanFilter;

// 初始化卡尔曼滤波器
void KalmanFilter_Init(KalmanFilter *kf, float q, float r) {
    kf->q = q;
    kf->r = r;
    kf->x = 0;
    kf->p = 1.0;
}

// 卡尔曼滤波更新
float KalmanFilter_Update(KalmanFilter *kf, float measurement) {
    // 预测
    kf->p = kf->p + kf->q;

    // 计算卡尔曼增益
    kf->k = kf->p / (kf->p + kf->r);

    // 更新估计值
    kf->x = kf->x + kf->k * (measurement - kf->x);

    // 更新误差协方差
    kf->p = (1 - kf->k) * kf->p;

    return kf->x;
}
2. 同步采样技术
通过精确同步 WiFi 和 ADC 的工作时序,在 WiFi 射频静默期进行 ADC 采样:
c
运行
// 同步采样控制流程
void synchronized_sampling(void) {
    // 1. 等待WiFi进入接收状态(射频静默期)
    while(!wifi_is_receiving());

    // 2. 启动ADC采样,利用接收缓冲区处理时间
    adc_start_conversion();

    // 3. 等待ADC转换完成
    while(!adc_conversion_complete());

    // 4. 读取并处理采样数据
    uint16_t adc_value = adc_read_result();
    process_adc_data(adc_value);

    // 5. 允许WiFi发送数据
    wifi_allow_transmission();
}
3. 频率规划优化
通过调整 WiFi 工作信道,避开 ADC 敏感频段:
c
运行
// 自动信道选择算法
uint8_t select_wifi_channel(void) {
    uint8_t best_channel = 1;
    uint8_t min_interference = 255;

    // 扫描所有可用信道
    for(uint8_t ch = 1; ch <= 13; ch++) {
      uint8_t interference = measure_channel_interference(ch);

      // 记录干扰最小的信道
      if(interference < min_interference) {
            min_interference = interference;
            best_channel = ch;
      }
    }

    return best_channel;
}
4. 自适应采样率调整
根据 WiFi 活动状态动态调整 ADC 采样率:
c
运行
// 自适应采样率控制
void adaptive_sampling_rate(void) {
    uint32_t wifi_activity = get_wifi_activity_level();

    if(wifi_activity > HIGH_ACTIVITY_THRESHOLD) {
      // WiFi高活动状态,降低采样率并增加过采样
      set_adc_sampling_rate(LOW_SAMPLING_RATE);
      set_oversampling_ratio(HIGH_OVERSAMPLING);
    } else {
      // WiFi低活动状态,提高采样率
      set_adc_sampling_rate(HIGH_SAMPLING_RATE);
      set_oversampling_ratio(LOW_OVERSAMPLING);
    }
}
5. 参考电压稳定技术
增强 ADC 参考电压的稳定性,减少电源波动影响:
plaintext
         R7
Vref+ ---/\/\/\---+
                  |
                  +---+
                      |
                      |   C8
                      +---||--- GND
                      |
                  +---+
                  |
Vref- ---/\/\/\---+
         R8
关键设计参数:
R7=R8=10kΩ (0.1% 精度)
C8=10μF 钽电容并联 0.1μF 陶瓷电容
采用低噪声 LDO 为参考电压源供电
6. 数字校准技术
实现实时数字校准算法,补偿 WiFi 干扰带来的固定偏差:
c
运行
// 数字校准实现
float digital_calibration(float raw_value) {
    static float offset = 0;
    static bool calibrated = false;

    // 在WiFi关闭时计算偏移量
    if(!wifi_is_active() && !calibrated) {
      // 采集多次样本计算平均偏移
      float sum = 0;
      for(int i = 0; i < 100; i++) {
            sum += adc_read_result();
      }
      offset = sum / 100.0 - KNOWN_REFERENCE_VALUE;
      calibrated = true;
    }

    // 应用校准
    return raw_value - offset;
}
7. 多通道冗余设计
采用多 ADC 通道并行采样,通过数据融合提高可靠性:
c
运行
// 多通道数据融合
float multi_channel_fusion(void) {
    float value1 = adc_read_channel(ADC_CHANNEL_1);
    float value2 = adc_read_channel(ADC_CHANNEL_2);

    // 计算加权平均值
    float fused_value = (value1 * WEIGHT_1 + value2 * WEIGHT_2) / (WEIGHT_1 + WEIGHT_2);

    // 异常值检测与处理
    if(fabs(value1 - value2) > THRESHOLD) {
      // 触发警报或使用备用算法
      handle_anomaly();
    }

    return fused_value;
}
8. 软件 EMI 屏蔽算法
通过软件算法模拟硬件屏蔽效果:
c
运行
// 软件EMI屏蔽实现
float software_emi_shielding(float input) {
    static float prev_value = 0;
    static uint8_t glitch_count = 0;

    // 检测突变
    if(fabs(input - prev_value) > GLITCH_THRESHOLD) {
      glitch_count++;

      // 如果连续多次检测到突变,认为是干扰
      if(glitch_count > MAX_GLITCHES) {
            // 使用上一次有效值代替
            input = prev_value;
            glitch_count = 0;
      }
    } else {
      glitch_count = 0;
    }

    prev_value = input;
    return input;
}
9. 电源管理优化
通过动态电源管理减少 WiFi 与 ADC 的冲突:
c
运行
// 电源管理策略
void power_management_strategy(void) {
    if(adc_is_sampling()) {
      // ADC采样期间降低WiFi发射功率
      wifi_set_transmit_power(LOW_POWER);
    } else {
      // ADC空闲时允许WiFi全功率工作
      wifi_set_transmit_power(FULL_POWER);
    }
}
10. 信号重构技术
利用信号处理技术从受干扰的采样中重构原始信号:
c
运行
// 信号重构算法
float signal_reconstruction(float *samples, uint16_t length) {
    float reconstructed = 0;

    // 应用带通滤波器
    apply_bandpass_filter(samples, length, ADC_FREQUENCY_BAND);

    // 使用插值算法提高分辨率
    reconstructed = interpolate_signal(samples, length);

    return reconstructed;
}

这些方法可以与硬件补偿措施相结合,形成多层次的抗干扰体系,有效提升 GD32W515PIQ6 在 WiFi 环境下的 ADC 采样稳定性和精度。

tpgf 发表于 2025-6-26 10:44

在MCU电源引脚就近放置 0.1μF(高频)+ 10μF(低频) 陶瓷电容,降低电源噪声

laocuo1142 发表于 2025-6-26 14:32

远离干扰源

flycamelaaa 发表于 2025-6-26 14:32

更新设备固件

sdlls 发表于 2025-7-2 11:12

使用高质量的电源隔离模块,确保WiFi模块和其他敏感电路(如ADC)的电源独立,减少电源噪声的相互干扰。

plsbackup 发表于 2025-7-2 12:18

在检测到强干扰时触发ADC重复采样,直到数据满足完整性要求。

maqianqu 发表于 2025-7-2 13:08

在WiFi电源路径串联高频磁珠            

mickit 发表于 2025-7-3 18:36

优化电路板的布局,尽量将WiFi模块和ADC输入信号线远离彼此,减少相互干扰。

sdCAD 发表于 2025-7-4 16:07

采用分布式架构,将WiFi模块和ADC模块分别放置在不同的子板上,减少相互干扰。

jimmhu 发表于 2025-7-4 20:34

合理设置PCB层叠结构,比如将电源平面和地平面紧邻放置,形成自然的去耦电容,有助于减小电源噪声传播。

wengh2016 发表于 2025-7-4 22:19

在连接WiFi模块和主控板的数据线和电源线时,使用屏蔽线,并确保屏蔽层接地,减少电磁干扰。
页: [1]
查看完整版本: 哪些方法可以减少WiFi干扰?