本节我们来使用stm32控制一款集成收音机芯片TEA5767,来制作一台FM收音机。
TEA5767是一款低功耗立体声收音IC,接收频率76MHz~108MHz(适应日本/美国/欧洲各FM频段选择)并可以使用软件进行静音和消除噪音。
主要电性能指标:工作电压:2.5V~5.0V,工作电流10mA,立体声分离度30dB,信噪比60dB,输出信号电平75mV。支持I2C总线通信、3-wire总线。
1)硬件设计
TEA5767芯片外围需要搭配较多的电阻、电容、电感、晶振等器件,而且高频电路的PCB设计是有一定难度的,稍不注意可能会造成很大干扰。
实际设计电路时,我们可以使用如下这种TEA5767的模块,它已经把芯片外围一些必要的器件集成到一个小电路板上了,这样可以省去这部分难度较大的PCB设计,只用关注单片机和模块的接口。
相关的电路图如下所示:
供电直接使用和单片机一致的3.3V,建议串联一个磁珠,以滤除数字电路对收音机芯片的干扰(这个图里没有画);
天线处需要连接较长的导线,否则信号质量会变差(一般在70~80cm,也不严格要求);
模块的输出是L和R两个喇叭,具有左右声道分别输出;由于芯片输出的音量有限,只能接到耳机输出,如果有兴趣,可以在后端增加功率放大器,连接喇叭;
第3引脚接地,选择使用I2C总线进行通信;
模块与stm32的接口只需要连接I2C总线。
2)软件设计
TEA5767有5个字节的控制寄存器,通过向寄存器写入控制字,它才能正常工作。这5个控制字中,只有前两个字节中的PLL字段与设置FM频率有关,所以,我们在写入控制字时,可以只修改前两个字节。
依据以下公式计算,将频率转换为PLL:
HLSI=1时:(frequencry+225000)*4/32768(HZ)
HLSI=0时:(frequencry-225000)*4/32768(HZ)
HLSI是第3个控制字中的bit4,用于选择高端/低端本振输入,如果我们固定后面的控制字不改变,则换算PLL值的公式也是固定的。
假如固定选择低端本振输入,我们要把频率设置为107.8MHz,则如下计算:
PLL = (107.8*10^6-225000)*4/32768 = 13132 = 0x334B
这样,我们需要写入TEA5767的5个字节为:0x33、0x4B、0xC0、0x17、0x00。具体的解释见下面几个表:
第一字节:
BIT7(MSB) | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0(LSB) |
MUTE | SM | PLL13 | PLL12 | PLL11 | PLL10 | PLL9 | PLL8 |
0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
非静音 | 非搜索 | 3 | 3 |
第二字节:
BIT7(MSB) | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0(LSB) |
PLL7 | PLL6 | PLL5 | PLL4 | PLL3 | PLL2 | PLL1 | PLL0 |
0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 |
4 | B |
第三字节:
BIT7(MSB) | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0(LSB) |
SUD | SSL1 | SSL0 | HLSI | MS | ML | MR | SWP1 |
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
向上搜索 | 搜索停止电平 | 低本振 | 立体声 | 非静音 | 随便 |
第四字节:
BIT7(MSB) | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0(LSB) |
SWP2 | STBY | BL | XTAL | SMUTE | HCC | SNC | SI |
0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
不使用 | 非待机 | 欧美 | 32768 | 非软件静音 | 高音切割 | 除噪声 | SWP1=RF |
第五字节::
BIT7(MSB) | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0(LSB) |
PLLREF | DTC | - | - | - | - | - | - |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
使用I2C写入时,TEA5767的地址为0xC0,读出时地址为0xC1;
这里我们只需要用到写入,先写地址,再依次写入5个字节的控制字即可,写寄存器write_TEA5767函数实现的代码如下所示:
其中调用的I2C操作的相关函数都是使用的软件模拟I2C,实现如下:
Main函数中,我们使用串口来接收数据,调用write_TEA5767函数设置频率:
我们需要修改的只有前两个字节,后面的可以不改变:
程序实现的是,用户通过串口按此格式发送:FM107.58,可以设置收音频率为107.58MHz。
这样,我们的收音机的基本功能就做好了。
3)更加完善的设计
要想更加完善地设计出一个收音机,我们还需要考虑增加很多功能。
这里开源一个小白白已经实现的收音机的全套资料,包括原理图、PCB以及软件实现代码,可以关注文末的公众号获取。
原理图如下所示,实现了:锂电池的充电、供电,显示频段、电量,按键调节频率,存储默认频道,音频放大输出等功能。
PCB图如下:
资料目录:
欢迎关注我的微信公众号“小白白学电子”,可留言“资料”获取所有电路、源码和参考资料: