1. Si4731与PIC18LF4680的硬件搭档解析
这个项目最吸引人的地方在于它巧妙结合了两款经典器件:Si4731数字调谐收音机芯片和PIC18LF4680微控制器。作为从业十余年的嵌入式开发者,我亲测这套组合在音频处理项目中性价比极高。
Si4731是Silicon Labs推出的一款全集成AM/FM收音机芯片,支持76-108MHz的FM频段和520-1710kHz的AM频段。它的核心优势在于:
- 只需最少的外围元件(一个晶振和几个电容)
- 通过I2C接口控制
- 内置数字音频处理(自动增益控制、软静音等)
- 接收灵敏度达2μV(FM模式)
而PIC18LF4680则是Microchip的8位MCU代表作,特别适合作为Si4731的主控:
- 64KB闪存完全够用(收音机控制程序通常不超过20KB)
- 内置I2C主控接口(与Si4731完美匹配)
- 3.3V工作电压(与Si4731电平兼容)
- 40引脚封装留有充足IO(可扩展LCD、按键等外设)
实际选型时要注意:PIC18F4680(5V版)和PIC18LF4680(3.3V版)引脚兼容但供电不同,建议优先选用LF版本以简化电源设计。
2. 硬件搭建关键细节
2.1 最小系统搭建
先准备以下核心元件:
- Si4731-D60模块(已集成晶振和滤波电路)
- PIC18LF4680芯片
- 3.3V稳压电路(如AMS1117-3.3)
- 0.1μF去耦电容若干
- 10kΩ上拉电阻(用于I2C总线)
连接示意图:
Si4731 PIC18LF4680 VCC ---- 3.3V GND ---- GND SCL ---- RC3/SCL SDA ---- RC4/SDA RST ---- RB0(可编程复位)2.2 容易被忽视的细节
- 天线处理:FM波段建议使用75cm左右的导线作为天线,AM波段需要外接磁棒天线
- 音频输出:Si4731的LINE_OUT需接10kΩ电位器调节音量后接入功放
- 电源滤波:在Si4731的VCC引脚就近放置0.1μF+10μF并联电容
3. 软件开发实战
3.1 开发环境配置
推荐使用MPLAB X IDE v5.50+XC8编译器:
// I2C初始化代码示例 void I2C_Init() { SSPCON = 0x28; // I2C主模式 SSPCON2 = 0x00; SSPADD = 39; // 100kHz时钟 @16MHz Fosc SSPSTAT = 0x00; TRISC3 = 1; // SCL设为输入 TRISC4 = 1; // SDA设为输入 }3.2 Si4731驱动开发
关键操作流程:
- 上电复位(拉低RST引脚至少100ms)
- 发送Power Up命令(0x01)
- 设置波段参数(如FM波段0x01)
- 启动自动搜台(0x21)
典型问题排查:
- 若收不到信号,先检查天线连接
- I2C通信失败时,用逻辑分析仪抓取波形
- 音频失真可能是电源纹波过大导致
4. 功能扩展思路
4.1 添加LCD显示
推荐使用1602字符型LCD(通过4位模式连接):
// 显示频率示例 void ShowFreq(uint16_t freq) { char buf[16]; sprintf(buf, "FM:%d.%dMHz", freq/100, freq%100); LCD_WriteString(0, 0, buf); }4.2 实现频道存储
利用PIC18LF4680的EEPROM存储预设频道:
#define PRESET_ADDR 0x00 void SavePreset(uint8_t index, uint16_t freq) { uint8_t addr = PRESET_ADDR + index*2; WriteEEPROM(addr, freq>>8); WriteEEPROM(addr+1, freq&0xFF); }4.3 添加红外遥控
通过HS0038接收头解码NEC协议:
void IR_Init() { TRISB1 = 1; // 红外接收接RB1 OPTION_REGbits.INTEDG = 0; // 下降沿触发 INTCONbits.INTE = 1; }5. 实测性能优化
经过实际测试,这套系统在FM波段可稳定接收20个以上电台。几个实测技巧:
- RSSI值大于40时信号质量较好
- 搜台步进设为50kHz(国内标准)
- 开启Si4731的软静音功能可减少噪声
电源管理建议:
- 空闲时关闭Si4731的音频输出(功耗从25mA降至5mA)
- 使用PIC的休眠模式进一步省电
我在多个城市实测发现,这套系统的接收效果不亚于商用收音机。特别是在车载环境下,通过优化天线位置,即使在高速移动中也能保持稳定接收。