AVR单片机的调频立体声收音机设计解析
2018-03-16 来源:eefocus
引言
早期的数字FM处理芯片TEA5767由Philips公司开发并被广泛地使用,但该芯片需要外加音频放大电路才能驱动耳机。鉴于此,国内锐迪科微电子公司独立开发了一颗具备高接收灵敏度的FM立体声数字芯片RDA5807P,具有自动搜台、重低音、静音、休眠、直接驱动耳机等优异的性能。本文介绍用RDA5807P芯片设计和制作了一款带遥控功能的收音机。
1 收音机总体设计方案
收音机的总体设计框图如图1所示。本收音机采用单节3.7 V、容量1500 mAh的锂电池作力电源,在使用寿命期内可以用手机充电器反复对它进行充电,使用非常方便。采用低功耗的AVR单片机ATmega8L作为微控制器,负责处理和协调各模块电路的工作,ATmega8L的工作电压为2.7~5.5 V,片内有512字节的EEPROM,不用专门外接EEPROM芯片就可以将掉电前接收电台的频道和音量信息保存起来,重新开机后又可以恢复原来的信息。调频收音机模块采用国产芯片RDA5807P加上少量的外围元件组成,由微控制器通过I2C总线接口对芯片内部寄存器进行写/读操作。通过键盘或红外遥控发射器可以进行自动搜台、手动选台、音量调节、静音操作。LCD用于显示当前收听电台的频率、音量等级等信息。音频功率放大器放大当前收听电台的音频信号,驱动扬声器发出声音。
2 系统硬件电路设计
2.1 电源管理模块电路设计
电源管理模块电路如图2所示。LM2054是一款单节锂电池恒流、恒压线性充电芯片,最大充电电流可达到800 mA。它只需外接极少的外部元件,预设4.2 V充电电压,精度达到±1%。充电时,若锂电池电压低于4.2V,充电指示灯D101亮,充电达到预设值4.2 V后指示灯D101熄灭。
2.2 微控制器及键盘、显示、红外遥控接收电路设计
微控制器及键盘、显示、红外遥控接收电路如图3所示。
键盘K1~K6用于选频、音量调节等。红外遥控接收头连接到单片机ATmega8L的PB0,用单片机的输入捕获功能进行解码。为了减少液晶显示器LCD1602A占用单片机过多的I/O口,数据接口只使用高4位,在写入命令或数据时,分两次写入,先写高4位,再写低4位。为了降低LCD的用电量,LCD的背光灯用单片机的PD3和PC1进行控制,当用户设置好想收听的电台,5 s后LCD背光灯自动熄灭。
2.3 调频收音模块电路设计
调频收音模块电路如图4所示。RDA5807P是国产的FM立体声收音机接收芯片,加上极少的外围元件且基本不需要校准,通过程序设定即可接收欧洲、美国和日本的调频波段。单片机通过I2C总线SCL和SDA将访问RDA5807P芯片所需的地址、命令、数据写入内部的寄存器中,也可以通过该总线读出芯片内部寄存器中的数据,取得接收频道的数据和音量值,供显示使用。RDA5807P的输出经磁珠F301、F302及电容器C30 3、C304抑制高频干扰后,可以直接驱动32 Ω的耳机发出声音,也可以接到下级音频功放进行放大,推动扬声器发出声音。
2.4 音频功率放大电路设计
音频功率放大电路如图5所示。PAM8403是一块D类音频功率放大器芯片,它具有谐波失真低、噪声串扰小、可直接驱动喇叭的特点。用它制作的音频功放,电路简单,工作可靠。在5 V电源和4 Ω负载条件下,能输出3 W的功率。效率可达90%以上,非常适合于用电池供电的便携式电子产品。电路中
引脚可通过单片机输出低电平控制其进行静音和关闭功放系统。
2.5 红外发射模块电路设计
红外遥控发射器电路如图6所示。BA5104是一块红外遥控编码芯片,内接有上拉电阻,无键按下时,电路中无电流流通,振荡电路不起
振,无遥控编码信号输出。当有某一键按下时,电路产生455 kHz的振荡信号,由BA5104内部电路进行12分频,获得38 kHz的载波信号。此时按键的编码信息和C1、C2引脚的状态信息对38 kHz载波进行编码调制,经15引脚串行输出,由三极管Q501、Q502构成的达灵顿驱动电路放大,经外发射管向空间发射,同时14引脚输出高电平,发射状态指示灯D501点亮。
3 系统软件程序设计
软件程序设计主要包括读写RDA5807P芯片相关的模块程序、频率及音量显示模块程序、按键检测与功能设定模块程序、遥控解码及功能设定模块程序等。本设计选用CodeVisionAVR作为开发软件,软件中集成有LCD1602、I2C总线驱动程序,不用再编写相应的底层函数,使用非常方便。故在此仅介绍RDA5807P芯片工作在RDA5807P模式及采用I2C总线接口进行搜台的程序设计和红外遥控解码程序的设计。
3.1 搜台程序设计
搜台程序可用硬件模式进行搜台,也可以采用软件模式进行搜台。本文着重介绍硬件模式搜台,软件模式搜台可参照硬件搜台模式进行编程。
I2C总线接口是由START、命令字节、数据字节及每个字节后的ACK及NACK比特、STOP组成。RDA58027P芯片写器件地址为0x20,读器件地址为0x21。RDA5807P芯片内部的I2C总线接口有4个写数据寄存器,其地址分别是0x02、0x03、0x04、0x05。2个读数据寄存器,其地址分别为0x0A、0x0B,每个数据寄存器又分为高字节和低字节。这些数据寄存器的地址是不可见的,不能通过单片机直接对指定地址的数据寄存器进行读/写操作。因此,单片机在发出读/写命令字节后,接下来必须对数据寄存器进行连续地读/写操作。其子程序如下:
硬件模式搜台程序设计主要是通过调用连续写和连续读操作子程序来对收音模块寄存器进行读/写,其程序流程图如图7所示。
根据该流程图编写的子程序如下:
3.2 红外遥控解码程序设计
由BA5104的编码格式可知;遥控码的一帧长度为12位,其中包括3位起始码、2位用户码、7位指令码。遥控码的每一帧时间间隔为4T,T=1.6879 ms为一位遥控码的周期。一帧完整的遥控码如图8所示。
遥控码中“1”用3T/4的高电平与T/4的低电平表示,“0”用T/4的高电平与3T/4的低电平表示,一位遥控码的波形如图9所示。
由图9可见,要用单片机来判断遥控发射器发出的是“0”还是“1”,关键是要判断接收脉冲下降沿至上升沿之间的时间。可以采用外部中断法,也可以采用输入捕获功能法,本文采用后一种方法。解码的思路是:初始化时,将ATmcga8L的ICP1引脚设置为输入状态,下降沿触发,当红外接收头接收到红外遥控信号时,产生下降沿,单片机自动将TCNT1寄存器中的值保存至ICR1寄存器中,在捕获中断服务程序中将ICR1中的值保存至T1中;然后将ICP1设置为上升沿触发,当再次产生捕获中断时,将ICR1中的值保存至T2中,将ICP1设置为下降沿触发,并将TCNT1置0。之后计算出T2-T1的时间并保存至事先开辟的数组中,要注意的是,T2-T1有可能出现负值,此时要将(T2-T1+0xffff)再保存,直到接收完12位数据。
保存在数组中的数据,当其值为3/4×1.687 9ms≈1266μs时,被认为接收到“1”,当其值为1/4×1.687 9 ms≈422 μs时,被认为接收到“0”。由于遥控发射器和单片机所使用的晶振频率与标称值会有一定的偏差,所以在程序中要留有一定的余量。
结语
经过多次比对测试,该收音机可以清晰、稳定地收听省府及本地所发射的调频电台信号。
- 基于 Microchip AVR DA MCU 的带加热 HoD 离手检测+触摸多功能方向盘方案
- Microchip推出AVR® DU系列USB单片机,支持增强型代码保护和高达15W 的 功率输出
- 贸泽电子开售面向工业和汽车应用的Microchip Technology AVR64EA 8位AVR MCU
- AVR32 MCU上的ABDAC外设音频播放设计
- 使用AVR微控制器控制GSM模块实现发送和接收短信
- 如何使用USBASP烧写器和Atmel Studio 7.0对AVR微控制器进行编程
- 使用AVR微控制器Atmega16连接伺服电机的方法
- 使用AVR微控制器ATmega16的循迹机器人
- 了解Atmega16 / 32 AVR微控制器中的脉冲宽度调制(PWM)
- 如何使用AVR微控制器ATmega16连接霍尔传感器