可调滤波器模块


可调滤波器模块

模块描述

可调滤波器模块通过数字电位器动态调节截止频率,实现程控滤波功能。采用数字电位器替代固定电阻,配合运算放大器构成RC滤波网络,通过MCU或手动控制改变电阻值,从而实现截止频率的精确调节。典型应用包括程控滤波系统、自适应滤波、测试仪器、音频均衡器等。在电赛中广泛用于需要动态调整滤波特性的场合,如信号处理、频率响应测试、通信系统等题目。

工作原理

可调低通滤波器基本结构:

[Vin] → [数字电位器R] → [运放] → [Vout]
              ↓           ↓
             [C]      [反馈网络]
              ↓
            [GND]

数字电位器控制:
[MCU] → [SPI/I2C] → [数字电位器] → [阻值变化] → [fc调节]
   ↓                    ↓
 [控制字]          [0-255级]

一阶RC低通:
fc = 1 / (2π·R·C)

二阶Sallen-Key结构:
[Vin] → [R1(数字电位器)] → [R2] → [运放+] → [Vout]
             ↓               ↓          ↓
            [C1]            [C2]   [跟随器]
             ↓               ↓
           [GND]           [GND]

fc = 1 / (2π·√(R1·R2·C1·C2))
调节R1即可调节fc

控制方式:
1. SPI控制: MCU发送控制字,精确设定阻值
2. I2C控制: 总线控制,支持多器件级联
3. 按钮控制: UP/DOWN引脚,手动调节
4. 电压控制: 模拟电压映射到阻值

频率调节范围:
- 最小R值: 如1kΩ → fc_max = 1/(2π·1k·C)
- 最大R值: 如100kΩ → fc_min = 1/(2π·100k·C)
- 调节比: 100:1 (典型)
- 步进: 256级(8位) / 1024级(10位)

典型参数:
- C = 10nF固定
- R = 1kΩ~100kΩ可调
- fc = 159Hz ~ 15.9kHz

技术指标

- 数字电位器: X9C103 (10kΩ,99步), MCP41010 (10kΩ,SPI,256步), AD5204 (10kΩ,I2C,256步) - 运放: TL082 (通用), OPA2134 (音频), NE5532 (低噪声) - 阻值范围:

  1. X9C103: 40Ω ~ 10kΩ (99步,每步约100Ω)
  2. MCP41010: 0Ω ~ 10kΩ (256步,每步约39Ω)
  3. AD5232: 1kΩ ~ 50kΩ (双通道,256步)

- 截止频率范围: 10Hz ~ 100kHz (取决于R和C配置) - 频率调节比: 10:1 ~ 100:1 - 频率精度:

  1. 电位器精度: ±20% (典型)
  2. 步进分辨率: 8位0.4%, 10位0.1%
  3. 温度漂移: ±300ppm/°C

- 滤波器阶数: 1阶 / 2阶 / 4阶 (多级级联) - 滚降速率:

  1. 1阶: -20dB/decade
  2. 2阶: -40dB/decade
  3. 4阶: -80dB/decade

- 通带增益: 0dB (跟随器) 至 +40dB (可调) - THD+N: <0.01% @ 1kHz - 动态范围: >85dB - 控制接口:

  1. SPI: 10MHz时钟
  2. I2C: 400kHz (快速模式)
  3. UP/DOWN: 手动控制

- 更新时间: <1ms (SPI), <10ms (X9C103) - 非易失性存储: X9C系列支持断电保存

接口管脚定义

X9C103数字电位器 (8-DIP):

管脚 名称 功能 说明
————————
1 CS 片选 低电平有效
2 U/D 增减控制 高=增大,低=减小
3 INC 步进脉冲 下降沿触发
4 VSS 0V
5 RW 滑动端 可变电阻输出
6 RH 高阻端 电阻上端
7 RL 低阻端 电阻下端(接地)
8 VCC 电源 +5V

MCP41010数字电位器 (8-DIP/SOIC):

管脚 名称 功能 说明
————————
1 CS 片选 低电平有效
2 SCK SPI时钟 串行时钟输入
3 SI SPI数据输入 串行数据输入
4 VSS 0V
5 PA0 滑动端A 可变电阻输出
6 PW0 滑动端(同PA0) 可变电阻输出
7 PB0 高阻端B 电阻上端
8 VDD 电源 +2.7V~+5.5V

运放接口 (TL082双运放):

管脚 名称 功能 说明
————————
1 OUT1 输出1 第一级输出
2 IN1- 反相输入1 第一级反相输入
3 IN1+ 同相输入1 第一级同相输入
4 V- 负电源 -5V至-15V或GND
5 IN2+ 同相输入2 第二级同相输入
6 IN2- 反相输入2 第二级反相输入
7 OUT2 输出2 第二级输出
8 V+ 正电源 +5V至+15V

控制接口:

接口 信号 功能 说明
————————
MCU GPIO CS, SCK, SI SPI控制 MCP41010
MCU GPIO CS, INC, U/D 步进控制 X9C103
I2C总线 SDA, SCL I2C控制 AD5232等
按钮 UP, DOWN 手动控制 物理按键
模拟输入 ADC → MCU → 数字电位器 电压控制 压控滤波器

板上设置和信号指示

- 电源配置:

  1. 数字电位器: 单电源+5V
  2. 运放: 双电源±12V 或 单电源+5V(需偏置)
  3. 退耦电容: 100nF陶瓷电容就近放置

- 输入接口:

  1. BNC或SMA接口
  2. 串联保护电阻100Ω
  3. 输入缓冲器(可选,提高输入阻抗)

- 输出接口:

  1. BNC或SMA接口
  2. 输出缓冲器(运放跟随器)
  3. 短路保护电阻100Ω

- 控制接口:

  1. SPI: 4线接口(CS, SCK, SI, GND)
  2. I2C: 2线接口(SDA, SCL) + 上拉电阻4.7kΩ
  3. 按钮: UP/DOWN按钮 + 防抖电容

- 拨码开关/跳线:

  1. 滤波器类型选择: 低通/高通/带通
  2. 阶数选择: 1阶/2阶/4阶
  3. 控制模式: SPI/I2C/手动

- LED指示:

  1. 电源指示: 绿色LED
  2. 数字电位器活动: 黄色LED(数据传输时闪烁)
  3. 频率档位: 多个LED指示当前频率范围

- 测试点:

  1. 输入/输出测试点
  2. 电位器滑动端测试点(监测R值)
  3. 电源测试点

- 显示(可选):

  1. 7段数码管显示当前频率
  2. OLED显示屏显示fc, Q值, 增益等参数

- 元件配置:

  1. 电容: 5%精度薄膜电容或NPO/C0G陶瓷电容
  2. 固定电阻: 1%精度金属膜电阻
  3. 运放去耦: 每个电源引脚100nF+10μF电解电容

电气指标

- 电源电压:

  1. 数字电位器: +5V ±5%
  2. 运放: ±5V至±15V (双电源) 或 +5V至+15V (单电源)

- 电源电流:

  1. 数字电位器: <1mA (静态), <5mA (工作)
  2. 运放: 5-10mA (每片TL082)
  3. 总电流: <50mA (典型配置)

- 控制接口电气特性:

  1. SPI时钟: 0-10MHz
  2. SPI电平: CMOS 3.3V/5V兼容
  3. I2C速率: 100kHz (标准) / 400kHz (快速)
  4. 按钮输入: 施密特触发器输入,防抖

- 信号接口:

  1. 输入电压范围: ±10V (双电源), 0-5V (单电源)
  2. 输出电压摆幅: ±12V (双电源,±15V供电), 0.2-4.8V (单电源)
  3. 输入阻抗: >100kΩ (带缓冲器), R值 (无缓冲器)
  4. 输出阻抗: <100Ω

- 频率特性:

  1. 截止频率范围: 10Hz ~ 100kHz (可配置)
  2. 调节步进: 256级 (8位) / 1024级 (10位)
  3. 频率精度: ±5% (受电容和电位器精度影响)
  4. 频率稳定性: ±1% (温度稳定后)
  5. 温度系数: ±300ppm/°C

- 滤波器性能:

  1. 通带平坦度: ±0.5dB
  2. 阻带衰减: 20dB/dec (1阶), 40dB/dec (2阶)
  3. THD+N: <0.01% @ 1kHz
  4. 噪声: <20μVrms (输入短路)
  5. 信噪比: >85dB
  6. 动态范围: >85dB

- 时序特性:

  1. 数字电位器更新时间: <1ms (SPI), <10ms (X9C103)
  2. 滤波器建立时间: 5-10个时间常数 τ=RC
  3. 控制响应延迟: <20ms

使用说明

1. 硬件连接

基本连接 (X9C103 + TL082):

MCU               X9C103           运放            信号
GPIO1 ────────→ CS(1)
GPIO2 ────────→ U/D(2)
GPIO3 ────────→ INC(3)
                 VSS(4) ──→ GND
                 RW(5) ───→ R2 ──→ [Sallen-Key网络]
                 RH(6) ───→ +5V/悬空
                 RL(7) ───→ GND
                 VCC(8) ──→ +5V

一阶RC低通:
Vin ──→ [RW-RL] ──→ [C] ──→ GND
              └──────────→ [运放跟随器] ──→ Vout

二阶Sallen-Key:
Vin → [R1固定] → [X9C103 RW] → [运放+] → Vout
         ↓            ↓              ↓
        [C1]         [C2]      [反馈网络]
         ↓            ↓
        GND          GND

2. 控制代码示例

Arduino控制X9C103:

snippet.cpp
// X9C103引脚定义
#define CS_PIN 10
#define INC_PIN 11
#define UD_PIN 12
 
void setup() {
  pinMode(CS_PIN, OUTPUT);
  pinMode(INC_PIN, OUTPUT);
  pinMode(UD_PIN, OUTPUT);
 
  digitalWrite(CS_PIN, HIGH);  // 禁用
  digitalWrite(INC_PIN, HIGH);
}
 
// 设置电位器位置 (0-99)
void setPotPosition(uint8_t pos) {
  digitalWrite(CS_PIN, LOW);  // 使能
 
  // 先归零
  digitalWrite(UD_PIN, LOW);  // 减小方向
  for(int i=0; i<100; i++) {
    digitalWrite(INC_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(INC_PIN, LOW);
    delayMicroseconds(1);
  }
 
  // 增加到目标位置
  digitalWrite(UD_PIN, HIGH);  // 增大方向
  for(int i=0; i<pos; i++) {
    digitalWrite(INC_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(INC_PIN, LOW);
    delayMicroseconds(1);
  }
 
  digitalWrite(CS_PIN, HIGH);  // 禁用(保存到EEPROM)
}
 
// 设置截止频率 (Hz)
void setCutoffFrequency(float fc) {
  // C = 10nF, R范围 1k-10k
  // fc = 1/(2*PI*R*C)
  // R = 1/(2*PI*fc*C)
 
  float C = 10e-9;  // 10nF
  float R = 1.0 / (2 * PI * fc * C);
 
  // 映射到0-99
  uint8_t pos = map(R, 1000, 10000, 0, 99);
  pos = constrain(pos, 0, 99);
 
  setPotPosition(pos);
}
 
void loop() {
  // 扫描频率: 100Hz → 10kHz
  for(float fc=100; fc<=10000; fc*=1.1) {
    setCutoffFrequency(fc);
    delay(500);
  }
}

Arduino控制MCP41010 (SPI):

snippet.cpp
#include <SPI.h>
 
#define CS_PIN 10
 
void setup() {
  pinMode(CS_PIN, OUTPUT);
  digitalWrite(CS_PIN, HIGH);
 
  SPI.begin();
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE0);
  SPI.setClockDivider(SPI_CLOCK_DIV16);  // 1MHz
}
 
// 设置电位器 (0-255)
void setMCP41010(uint8_t value) {
  digitalWrite(CS_PIN, LOW);
 
  SPI.transfer(0x11);  // 命令字节: 写数据寄存器
  SPI.transfer(value); // 数据字节
 
  digitalWrite(CS_PIN, HIGH);
}
 
// 设置截止频率
void setCutoffFrequency(float fc) {
  float C = 10e-9;  // 10nF
  float R = 1.0 / (2 * PI * fc * C);
 
  // MCP41010: 10kΩ电位器
  // R_actual = (value/256) * 10kΩ
  uint8_t value = (uint8_t)((R / 10000.0) * 256);
  value = constrain(value, 0, 255);
 
  setMCP41010(value);
}
 
void loop() {
  // 线性扫频
  for(int i=10; i<=255; i+=5) {
    setMCP41010(i);
    delay(100);
  }
}

STM32控制(I2C - AD5232):

snippet.c
#include "stm32f1xx_hal.h"
 
#define AD5232_ADDR 0x2C  // I2C地址
 
// 写数字电位器
void AD5232_Write(uint8_t channel, uint8_t value) {
  uint8_t data[2];
  data[0] = (channel == 0) ? 0x01 : 0x02;  // 通道选择
  data[1] = value;
 
  HAL_I2C_Master_Transmit(&hi2c1, AD5232_ADDR<<1,
                          data, 2, HAL_MAX_DELAY);
}
 
// 设置截止频率
void SetCutoffFreq(float fc_hz) {
  float C = 10e-9;
  float R = 1.0 / (2 * PI * fc_hz * C);
 
  // AD5232: 50kΩ范围,256步
  uint8_t value = (uint8_t)((R / 50000.0) * 256);
 
  AD5232_Write(0, value);  // 通道0
}
 
int main(void) {
  HAL_Init();
  MX_I2C1_Init();
 
  while(1) {
    // 程控滤波: 1kHz → 10kHz
    for(float f=1000; f<=10000; f+=100) {
      SetCutoffFreq(f);
      HAL_Delay(200);
    }
  }
}

3. 频率计算与设计

一阶RC低通:

fc = 1 / (2π·R·C)

选定C=10nF (固定):
- R=1kΩ:   fc = 15.9kHz
- R=10kΩ:  fc = 1.59kHz
- R=100kΩ: fc = 159Hz

调节比 = R_max / R_min = 100:1
频率比 = fc_max / fc_min = 100:1

二阶Sallen-Key:

fc = 1 / (2π·√(R1·R2·C1·C2))

简化设计 (R1=R2=R, C1=C2=C):
fc = 1 / (2π·R·C)

C = 10nF, R可调1k-100kΩ:
fc范围: 159Hz ~ 15.9kHz

巴特沃斯Q=0.707:
R1 = R2 = R (可调)
C1 = C2 = C (固定)

设计步骤: 1. 确定频率范围: 如100Hz ~ 10kHz 2. 选择电容C: 如C=10nF (NPO/C0G) 3. 计算R范围:

  1. Rmin = 1/(2π·fcmax·C) = 1/(2π·10k·10n) ≈ 1.6kΩ
  2. Rmax = 1/(2π·fcmin·C) = 1/(2π·100·10n) ≈ 160kΩ

4. 选择数字电位器:

  1. 需要100:1范围 → MCP41100 (100kΩ)
  2. 或级联电阻: 固定1kΩ + 数字电位器100kΩ

5. 验证阶跃响应: τ = R·C, 建立时间 ≈ 5τ

4. 多阶滤波器设计

4阶巴特沃斯 (2个2阶级联):

第一级: Q1 = 0.541, fc1 = fc
第二级: Q2 = 1.306, fc2 = fc

[Vin] → [2阶Q1] → [2阶Q2] → [Vout]
          ↓           ↓
    [数字电位器1] [数字电位器2]

两级同步调节,保持Q值不变:
R1_stage1 = f(fc, Q1)
R1_stage2 = f(fc, Q2)

使用查找表或公式计算

5. 校准与测试

频率校准:

1. 使用频率计数器/示波器
2. 扫描数字电位器全程0-255
3. 记录每个设定值对应的实际fc
4. 建立校准表:
   设定值 → 实际R值 → 实际fc
5. 软件查表插值,补偿非线性

幅频响应测试:

测试设备:
- 信号发生器(DDS)
- 示波器/频谱仪

测试流程:
1. 设定fc = 1kHz
2. 输入幅度Vin = 1Vrms
3. 扫频: 10Hz ~ 100kHz
4. 记录Vout
5. 计算增益: G(f) = 20·log(Vout/Vin)
6. 验证-3dB点在fc附近
7. 验证滚降速率: 20dB/dec (1阶)

自动测试程序:

snippet.cpp
// 自动扫描测试
void autoTest() {
  Serial.println("fc_set, fc_measured, gain_1kHz");
 
  for(int pos=10; pos<=255; pos+=10) {
    setMCP41010(pos);
    delay(100);  // 等待稳定
 
    // 测量fc (需要外部频率计数器)
    float fc_actual = measureCutoff();
    float gain = measureGain(1000);  // 1kHz增益
 
    Serial.print(calcFcFromPos(pos));
    Serial.print(",");
    Serial.print(fc_actual);
    Serial.print(",");
    Serial.println(gain);
  }
}

6. 常见问题与解决

问题1: 频率漂移 - 原因: 温度变化,电容漂移 - 解决:

  1. 使用NPO/C0G电容(±30ppm/°C)
  2. 温度补偿算法
  3. 定期自校准

问题2: 控制不稳定 - 原因: 信号干扰,地环路 - 解决:

  1. 数字地与模拟地分离
  2. 控制线远离信号线
  3. 加滤波电容

问题3: 频率精度低 - 原因: 数字电位器非线性,电容误差 - 解决:

  1. 校准表补偿
  2. 使用1%电容
  3. 多点校准插值

问题4: 高频性能差 - 原因: 运放带宽不足,寄生电容 - 解决:

  1. 选择高速运放(OPA356, AD8065)
  2. 减小PCB走线长度
  3. 优化布局布线

问题5: 噪声大 - 原因: 数字电位器开关噪声,电源噪声 - 解决:

  1. 加输出低通滤波(RC)
  2. 电源LC滤波
  3. 屏蔽敏感电路

7. 高级应用

A. 自适应滤波器

snippet.cpp
// 根据信号频率自动调节fc
void adaptiveFilter() {
  float signalFreq = detectDominantFreq();  // FFT检测
  float fc = signalFreq * 1.5;  // fc设为信号频率1.5倍
  setCutoffFrequency(fc);
}

B. 多频段均衡器

snippet.cpp
// 3段均衡器: 低频/中频/高频
void setEqualizer(float bass, float mid, float treble) {
  // 低频: 低通fc=200Hz
  setDigipot(POT_LP, bass);
 
  // 中频: 带通fc=1kHz
  setDigipot(POT_BP, mid);
 
  // 高频: 高通fc=5kHz
  setDigipot(POT_HP, treble);
}

C. 扫频分析仪

snippet.cpp
// 自动扫频测量幅频响应
void sweepTest() {
  for(float fc=100; fc<=10000; fc*=1.1) {
    setCutoffFrequency(fc);
    delay(50);  // 稳定时间
 
    float Vout = measureOutput();
    float gain = 20 * log10(Vout / Vin);
 
    Serial.print(fc); Serial.print(",");
    Serial.println(gain);
  }
}

D. 程控陷波器

snippet.cpp
// 可调陷波器: 消除特定频率干扰
void setNotchFilter(float f_notch) {
  // 带通 + 全通 - 原信号 = 陷波
  // 或使用Twin-T + 数字电位器
 
  // 计算R值
  float C = 10e-9;
  float R = 1 / (2 * PI * f_notch * C);
 
  // 设置3个数字电位器(Twin-T网络)
  setDigipot(POT1, calcValue(R));
  setDigipot(POT2, calcValue(R));
  setDigipot(POT3, calcValue(R/2));
}

全国大学生电子设计竞赛相关赛题

  • 2021年E题: 简易电路特性测试仪
    • 要求: 测量幅频特性,需可调滤波器扫频
    • 应用: 数字电位器控制fc,自动扫描测量
  • 2019年F题: 纸张计数显示装置
    • 要求: 信号调理,滤除干扰
    • 应用: 可调低通滤波器,适应不同速度
  • 2017年E题: 远程幅频特性测试装置
    • 要求: 程控滤波,精确fc设定
    • 应用: 数字电位器+MCU,远程控制截止频率
  • 2015年C题: 风力摆控制系统
    • 要求: 传感器信号滤波
    • 应用: 自适应滤波器,根据摆动频率调节
  • 2013年H题: 射频功率放大器
    • 要求: 自动匹配网络
    • 应用: 数字电容+数字电位器,可调滤波
  • 2011年D题: 波形采集与重现
    • 要求: 抗混叠滤波器,适应不同采样率
    • 应用: 根据ADC采样率动态调节fc
  • 2009年G题: 声音导引系统
    • 要求: 音频信号处理,多频段滤波
    • 应用: 可调带通滤波器,提取特定频率
  • 2007年B题: 程控滤波器
    • 要求: 核心题目,实现程控低通/高通/带通
    • 应用: 数字电位器阵列,MCU控制,LCD显示
  • 2005年F题: 简易频谱分析仪
    • 要求: 扫频分析,可调带通滤波器
    • 应用: 数字电位器控制中心频率,扫描频谱
  • 2003年: 宽带放大器
    • 要求: 增益和带宽可调
    • 应用: 数字电位器调节增益和滤波器fc

应用技术要点总结

1. 数字电位器选型

- X9C系列 (99步,非易失):

  1. 优点: 断电保存,简单控制(3线)
  2. 缺点: 步数少,更新慢(~10ms)
  3. 适用: 手动调节,不频繁更改

- MCP41/42系列 (256步,SPI):

  1. 优点: 高分辨率,快速更新(<1ms)
  2. 缺点: 易失性,需初始化
  3. 适用: MCU自动控制,频繁调节

- AD5231/5232 (256步,I2C,非易失):

  1. 优点: I2C总线,断电保存,高精度
  2. 缺点: 成本较高
  3. 适用: 高端应用,多通道控制

2. 频率精度优化

- 电容选择: NPO/C0G (±5%, ±30ppm/°C) - 校准方法:

1. 工厂校准: 预设校准表写入EEPROM
2. 现场校准: 测量实际fc,建立映射表
3. 温度补偿: 温度传感器+补偿算法

- 软件插值: 线性/多项式插值提高分辨率

3. 动态性能

- 更新速率:

  1. SPI数字电位器: <1ms
  2. 滤波器建立时间: 5τ = 5RC
  3. 总响应时间: 更新时间 + 建立时间

- 实时控制:

  1. 使用中断/DMA更新数字电位器
  2. 预测算法提前调节

4. 多通道同步

- 并联控制: 同一SPI/I2C总线控制多个数字电位器 - 同步更新: LDAC引脚(部分型号)实现同步 - 相位匹配: 同型号同批次,相位偏差<5°

5. 噪声与干扰

- 数字噪声隔离:

  1. 数字地/模拟地分离
  2. 控制信号远离信号通路
  3. 光耦隔离(高要求场合)

- 电源滤波:

  1. 数字电位器独立LDO
  2. LC滤波器 + 大容量电容
  3. 磁珠隔离数字/模拟电源

6. PCB布局

布局原则:
[MCU/数字区] ──(隔离)── [数字电位器] ── [RC网络] ── [运放] ── [输出]
      ↓                      ↓            ↓          ↓
   [数字地] ────(单点)──── [模拟地] ──────────────────┘

关键点:
- 控制信号走内层或背面
- RC元件紧邻运放
- 地平面完整,避免分割
- 信号线垂直跨接,减少耦合
- 高频旁路电容就近放置

7. 自动化测试

- SCPI命令: 标准仪器控制 - Python自动化:

```python
import serial
import pyvisa
# 控制滤波器
ser = serial.Serial('/dev/ttyUSB0', 115200)
# 控制示波器
rm = pyvisa.ResourceManager()
scope = rm.open_resource('USB0::0x1234::0x5678::INSTR')
# 扫频测试
for fc in range(100, 10000, 100):
    ser.write(f'SET_FC {fc}\n')
    time.sleep(0.1)
    gain = measure_gain(scope)
    print(f'{fc},{gain}')
```

8. 成本优化

- 低成本方案: X9C103 + TL082 (< ¥5) - 中端方案: MCP41010 + NE5532 (< ¥10) - 高端方案: AD5232 + OPA2134 (< ¥30)

9. 可靠性设计

- 看门狗复位: 防止数字电位器锁死 - 默认值保护: 上电默认安全频率 - 过压保护: TVS管保护输入输出 - ESD防护: ESD二极管阵列

10. 设计验证

- 幅频响应: 扫频仪测量,验证fc和滚降 - 相频响应: 网络分析仪或示波器XY模式 - 阶跃响应: 方波输入,观察过冲和振铃 - THD测试: 音频分析仪,<0.01% - 噪声测试: 输入短路,测量输出噪声<20μV


设计实例

实例1: 程控低通滤波器 (10Hz-10kHz)

规格: - 截止频率: 10Hz ~ 10kHz, 256步可调 - 阶数: 4阶巴特沃斯 - 控制: SPI (STM32) - 显示: OLED显示当前fc

电路:

[输入] → [缓冲器] → [2阶LP Stage1] → [2阶LP Stage2] → [输出]
                         ↓                  ↓
                    [MCP41010-1]       [MCP41010-2]
                         ↓                  ↓
                    [STM32 SPI] ←──────────┘
                         ↓
                    [OLED显示]

BOM:

器件 型号 数量 说明
————————
数字电位器 MCP41010 2 10kΩ, SPI
运放 NE5532 2 双运放,低噪声
电容 NPO 10nF 4 ±5%, C0G
电阻 1% 10kΩ 8 金属膜
MCU STM32F103C8T6 1 控制核心
显示 OLED 0.96“ 1 I2C

代码框架:

snippet.c
void setFilter4thOrder(float fc) {
  // 4阶巴特沃斯: 两个2阶级联
  // Stage1: Q=0.541
  // Stage2: Q=1.306
 
  float C = 10e-9;
 
  // Stage1 计算
  float R1 = calcResistor(fc, 0.541, C);
  uint8_t pot1 = (uint8_t)((R1/10000.0)*256);
 
  // Stage2 计算
  float R2 = calcResistor(fc, 1.306, C);
  uint8_t pot2 = (uint8_t)((R2/10000.0)*256);
 
  // 更新数字电位器
  MCP41010_Write(CS1_PIN, pot1);
  MCP41010_Write(CS2_PIN, pot2);
 
  // OLED显示
  OLED_ShowString(0, 0, "fc:");
  OLED_ShowNum(30, 0, (uint16_t)fc, 5);
  OLED_ShowString(80, 0, "Hz");
}

实例2: 自适应陷波器 (50Hz/60Hz工频干扰)

规格: - 陷波频率: 可调48-52Hz, 58-62Hz - Q值: 10 (窄带陷波) - 控制: 自动检测或手动 - 衰减: >40dB @ 陷波频率

电路: Twin-T陷波器 + 数字电位器

       R1          R2
Vin ──┬──[Rpot]───┬────┬── Vout
      │           │    │
     [C]         [C]  [运放]
      │           │
     GND         GND

      │
     [2C]─[Rpot/2]
      │     │
     GND   GND

特性: - 调节Rpot改变陷波频率 - 高Q值,不影响邻近频率 - 自动跟踪工频漂移

实例3: 音频10段均衡器

规格: - 10个频段: 31, 63, 125, 250, 500, 1k, 2k, 4k, 8k, 16kHz - 增益: ±12dB, 每段独立可调 - 控制: 10个数字电位器 (I2C总线) - 显示: LCD柱状图

架构:

[输入] → [分频网络] → [10个带通滤波器] → [可调增益] → [混合器] → [输出]
                           ↓                  ↓
                      [带通fc固定]     [数字电位器阵列]
                                             ↓
                                        [MCU I2C]
                                             ↓
                                        [LCD显示]