# 可调滤波器模块 --- ## 可调滤波器模块 ### 模块描述 可调滤波器模块通过数字电位器动态调节截止频率,实现程控滤波功能。采用数字电位器替代固定电阻,配合运算放大器构成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 (低噪声) - **阻值范围**: - X9C103: 40Ω ~ 10kΩ (99步,每步约100Ω) - MCP41010: 0Ω ~ 10kΩ (256步,每步约39Ω) - AD5232: 1kΩ ~ 50kΩ (双通道,256步) - **截止频率范围**: 10Hz ~ 100kHz (取决于R和C配置) - **频率调节比**: 10:1 ~ 100:1 - **频率精度**: - 电位器精度: ±20% (典型) - 步进分辨率: 8位0.4%, 10位0.1% - 温度漂移: ±300ppm/°C - **滤波器阶数**: 1阶 / 2阶 / 4阶 (多级级联) - **滚降速率**: - 1阶: -20dB/decade - 2阶: -40dB/decade - 4阶: -80dB/decade - **通带增益**: 0dB (跟随器) 至 +40dB (可调) - **THD+N**: <0.01% @ 1kHz - **动态范围**: >85dB - **控制接口**: - SPI: 10MHz时钟 - I2C: 400kHz (快速模式) - 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 → 数字电位器 | 电压控制 | 压控滤波器 | ### 板上设置和信号指示 - **电源配置**: - 数字电位器: 单电源+5V - 运放: 双电源±12V 或 单电源+5V(需偏置) - 退耦电容: 100nF陶瓷电容就近放置 - **输入接口**: - BNC或SMA接口 - 串联保护电阻100Ω - 输入缓冲器(可选,提高输入阻抗) - **输出接口**: - BNC或SMA接口 - 输出缓冲器(运放跟随器) - 短路保护电阻100Ω - **控制接口**: - SPI: 4线接口(CS, SCK, SI, GND) - I2C: 2线接口(SDA, SCL) + 上拉电阻4.7kΩ - 按钮: UP/DOWN按钮 + 防抖电容 - **拨码开关/跳线**: - 滤波器类型选择: 低通/高通/带通 - 阶数选择: 1阶/2阶/4阶 - 控制模式: SPI/I2C/手动 - **LED指示**: - 电源指示: 绿色LED - 数字电位器活动: 黄色LED(数据传输时闪烁) - 频率档位: 多个LED指示当前频率范围 - **测试点**: - 输入/输出测试点 - 电位器滑动端测试点(监测R值) - 电源测试点 - **显示(可选)**: - 7段数码管显示当前频率 - OLED显示屏显示fc, Q值, 增益等参数 - **元件配置**: - 电容: 5%精度薄膜电容或NPO/C0G陶瓷电容 - 固定电阻: 1%精度金属膜电阻 - 运放去耦: 每个电源引脚100nF+10μF电解电容 ### 电气指标 - **电源电压**: - 数字电位器: +5V ±5% - 运放: ±5V至±15V (双电源) 或 +5V至+15V (单电源) - **电源电流**: - 数字电位器: <1mA (静态), <5mA (工作) - 运放: 5-10mA (每片TL082) - 总电流: <50mA (典型配置) - **控制接口电气特性**: - SPI时钟: 0-10MHz - SPI电平: CMOS 3.3V/5V兼容 - I2C速率: 100kHz (标准) / 400kHz (快速) - 按钮输入: 施密特触发器输入,防抖 - **信号接口**: - 输入电压范围: ±10V (双电源), 0-5V (单电源) - 输出电压摆幅: ±12V (双电源,±15V供电), 0.2-4.8V (单电源) - 输入阻抗: >100kΩ (带缓冲器), R值 (无缓冲器) - 输出阻抗: <100Ω - **频率特性**: - 截止频率范围: 10Hz ~ 100kHz (可配置) - 调节步进: 256级 (8位) / 1024级 (10位) - 频率精度: ±5% (受电容和电位器精度影响) - 频率稳定性: ±1% (温度稳定后) - 温度系数: ±300ppm/°C - **滤波器性能**: - 通带平坦度: ±0.5dB - 阻带衰减: 20dB/dec (1阶), 40dB/dec (2阶) - THD+N: <0.01% @ 1kHz - 噪声: <20μVrms (输入短路) - 信噪比: >85dB - 动态范围: >85dB - **时序特性**: - 数字电位器更新时间: <1ms (SPI), <10ms (X9C103) - 滤波器建立时间: 5-10个时间常数 τ=RC - 控制响应延迟: <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:** ```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 #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):** ```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范围: - R_min = 1/(2π·fc_max·C) = 1/(2π·10k·10n) ≈ 1.6kΩ - R_max = 1/(2π·fc_min·C) = 1/(2π·100·10n) ≈ 160kΩ 4. 选择数字电位器: - 需要100:1范围 → MCP41100 (100kΩ) - 或级联电阻: 固定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阶) ``` **自动测试程序:** ```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: 频率漂移** - 原因: 温度变化,电容漂移 - 解决: - 使用NPO/C0G电容(±30ppm/°C) - 温度补偿算法 - 定期自校准 **问题2: 控制不稳定** - 原因: 信号干扰,地环路 - 解决: - 数字地与模拟地分离 - 控制线远离信号线 - 加滤波电容 **问题3: 频率精度低** - 原因: 数字电位器非线性,电容误差 - 解决: - 校准表补偿 - 使用1%电容 - 多点校准插值 **问题4: 高频性能差** - 原因: 运放带宽不足,寄生电容 - 解决: - 选择高速运放(OPA356, AD8065) - 减小PCB走线长度 - 优化布局布线 **问题5: 噪声大** - 原因: 数字电位器开关噪声,电源噪声 - 解决: - 加输出低通滤波(RC) - 电源LC滤波 - 屏蔽敏感电路 #### 7. 高级应用 **A. 自适应滤波器** ```cpp // 根据信号频率自动调节fc void adaptiveFilter() { float signalFreq = detectDominantFreq(); // FFT检测 float fc = signalFreq * 1.5; // fc设为信号频率1.5倍 setCutoffFrequency(fc); } ``` **B. 多频段均衡器** ```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. 扫频分析仪** ```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. 程控陷波器** ```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步,非易失): - 优点: 断电保存,简单控制(3线) - 缺点: 步数少,更新慢(~10ms) - 适用: 手动调节,不频繁更改 - **MCP41/42系列** (256步,SPI): - 优点: 高分辨率,快速更新(<1ms) - 缺点: 易失性,需初始化 - 适用: MCU自动控制,频繁调节 - **AD5231/5232** (256步,I2C,非易失): - 优点: I2C总线,断电保存,高精度 - 缺点: 成本较高 - 适用: 高端应用,多通道控制 #### 2. 频率精度优化 - **电容选择**: NPO/C0G (±5%, ±30ppm/°C) - **校准方法**: 1. 工厂校准: 预设校准表写入EEPROM 2. 现场校准: 测量实际fc,建立映射表 3. 温度补偿: 温度传感器+补偿算法 - **软件插值**: 线性/多项式插值提高分辨率 #### 3. 动态性能 - **更新速率**: - SPI数字电位器: <1ms - 滤波器建立时间: 5τ = 5RC - 总响应时间: 更新时间 + 建立时间 - **实时控制**: - 使用中断/DMA更新数字电位器 - 预测算法提前调节 #### 4. 多通道同步 - **并联控制**: 同一SPI/I2C总线控制多个数字电位器 - **同步更新**: LDAC引脚(部分型号)实现同步 - **相位匹配**: 同型号同批次,相位偏差<5° #### 5. 噪声与干扰 - **数字噪声隔离**: - 数字地/模拟地分离 - 控制信号远离信号通路 - 光耦隔离(高要求场合) - **电源滤波**: - 数字电位器独立LDO - LC滤波器 + 大容量电容 - 磁珠隔离数字/模拟电源 #### 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 | **代码框架:** ```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显示] ``` ---