基于RDA的收音机.docx
- 文档编号:29244093
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:31
- 大小:43.47KB
基于RDA的收音机.docx
《基于RDA的收音机.docx》由会员分享,可在线阅读,更多相关《基于RDA的收音机.docx(31页珍藏版)》请在冰豆网上搜索。
基于RDA的收音机
编号:
课程设计说明书
(信息系统综合实训)
题目:
立体声调频收音机
院(系):
信息与通信学院
专业:
电子信息工程
学生姓名:
峰之使者
学号:
指导教师:
2016年1月8日
摘要
本系统为立体声调频收音机,设计采用RDA5807收音模块,与单片机相结合,使收音解调电路设计变的简单,实现FM收音并显示频率。
我们通过矩阵键盘设定我们需要的频段,并设置音量大小,通过诺基亚5110液晶屏显示出来,并根据所显示接收信号的强度等级,判断收音所在地的信号强度。
RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强、灵敏度高、噪声小、抗干扰能力强等功能,所以使用本模块很容易实现,且系统可靠稳定。
关键词:
单片机;RDA5807收音模块;FM收音;
引言
随着科学技术的发展,调频收音机的应用十分广泛,尤其消费类占有相当的市场。
从分离元件组成的收音机到由集成电路组成的收音机,调频收音机技术已达到十分成熟的地步。
本次设计采用RDA5807收音模块与单片机相结合,实现FM收音并显示频率。
单片机自20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。
单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易,所以本次采用STC89c52单片机。
此外,RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强、灵敏度高、噪声小、抗干扰能力强等功能,还可以具备频率显示功能。
1任务要求与设计的背景
设计任务要求
本论文的任务是根据调频收音机的特点和应用情况,结合新一代高性能芯片设计一种使用简单、性能优良的收音机。
整个系统以单片机STC89S52控制,RDA5807芯片为核心,配置相应的外设及接口电路。
接收频率可设置、输出音量可数控、显示信号强度和设置静音,用C语言开发,组成一个多功能的程控数字收音机。
课题背景
随着科学技术的不断发展,新颖的调频收音机的不断出现,技术不断的提高,设计出来的收音机外型精致和小巧。
从分离元件到集成电路,这标志着收音机的内部电路简单。
用一个集成块就能完成所有的工作。
从早期的调幅收音机到现在的调频收音机,我们可以想象收音机的不断的改进和不断创新,使收音机的发展空间愈来愈大。
现在,出现了新一代高科技产品——数字调频收音机,功能强大,性能优良,设计精巧耐用。
2调频收音机的分析和设计思路
系统设计原理
本文提出的采用RDA5807模块作为解调的核心器件的全数控调频收音机设计方案,根据接收频率可设置、输出音量可数控、显示信号强度和设置静音等要求,本设计外置一根天线,信号从天线进入RDA5807模块,因为内部有一放大器,所以不需要外加放大器,内部AD对信号进行采样,通过单片机的I/O口与RDA5807的IIC总线相连,经过程序控制进行对收音芯片内部的寄存器读写,改写这些寄存器,则可输出对应的频率和音量的信号。
控制电路采用4*4的矩阵键盘,输入的数字信息经STC89C52控制的诺基亚5110液晶屏显示。
系统框图分析和设计
系统结构组成如图所示,主要由单片机控制模块、键盘与显示模块、收音机解调模块、天线组成。
其中,信号接收由单片机控制模块、收音机解调模块和天线实现,键盘与显示模块则用来实现人机交互的功能,通过外接的喇叭或者耳机可以接收到对应频道的信息。
图收音机系统框图
3硬件设计
单片机最小系统
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用STC公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。
STC89C52具有以下标准功能:
8k字节Flash、256字节RAM、32位I/O口线、看门狗定时器、2个数据指针、二个16位定时器/计数器、一个6向量2级中断结构、全双工串行口、片内晶振及时钟电路。
另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
一般单片机需外接一个时钟电路和一个复位电路,如图和图所示。
时钟电路
图时钟电路
XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
STC89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自激振荡器。
片外石英晶体或者陶瓷谐振器及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,这里采用电容22pF,晶振采用12MHz。
复位电路
STC89C52的外部复位电路有上电自动复位和手动按键复位。
上电复位电容充电来实现。
手动按键复位又分为按键电平复位和按键脉冲复位。
按键电平复位电路是在普通RC复位电路的基础上接一个有下拉电阻10K、上拉电容10μf接VCC,电源由开关接至复位脚(和上拉电容并联),上拉电容支路负责在“上电”瞬间实施复位;开关通过10K下拉电阻分压器,保证对单片机实施按键电平复位。
电路图如下图所示:
图复位电路
RDA5807模块
RDA5807模块管脚
“”立体声收音模块(FMStereoradioModule)高灵敏度、低功耗、超小体积的调频立体声收音模组。
采用RDAMicroelectronics的RDA5807M(或RDA5802NM),此电路外围元件少、噪声系数极小。
具有体积小、低功耗、低成本、应用简单、使用范围广等优点。
是一款简单易用且具极高性价比的单芯片FM立体声收音模组,管脚如图所示,管脚功能如表。
表管脚功能
图RAD5807模块管脚示意图
RDA5807模块特点
(1)采用通用的102BC模块的封装,用户可直接替换使用,无需更改电路设计。
(2)、灵敏度高、噪声小、抗干扰能力强、外接元件极少、体积小(11*Max)、使用极其简单。
(3)、76-108MHz全球FM频段兼容(包括日本76-91MHz和欧美)。
(4)、I2C串行数据总线接口通讯,支持外部基准时钟输入方式。
(5)、完全整合的COMS工艺单晶片集成电路,功耗极小。
(6)、内置高精度A/D(模数转换器)及数字频率合成器。
(7)、内置LDO调整、低功耗、超宽电压使用范围()。
(8)、内置噪声消除、软静音、低音增强电路设计。
(9)、高功率32Ω负载音频输出,直接耳机驳接,无需外接音频驱动放大。
RDA5807模块与单片机接口
RDA5807是以I2C协议为通信方式的芯片,通过CLK时钟总线和SDA数据总线与单片机相连,如图所示。
图RAD5807与单片机接口
原理图
本原理图是实现一个收音功能的电路,通过天线接收广播,并利用RDA5807收音模块,解调出音频信号,通过耳机播放出来,如图所示。
图系统原理图
PCB图
利用软件DXP,将原理图导入进行制作PCB图,通过白色线的指引,把各个部分的电路连接起来,如图所示。
图PCB图
4软件设计
IIC通信?
IIC是由菲利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS)?
,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源。
这种方式简化了信号输总线。
?
IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。
所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。
?
IIC时序
在IIC总线传输过程中,将两种特定的情况定义为开始和停止条件:
当SCL保持“高”时,SDA由“高”变为“低”为开始条件;当SCL保持“高”且SDA由“低”变为“高”时为停止条件。
开始和停止条件均由主控制器产生。
使用硬件接口可以很容易地检测到开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对SDA取样,以检测这种变化。
?
?
SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。
输出到SDA线上的每个字节必须是8位,每次传输的字节不受限制,但每个字节必须要有一个应答ACK。
如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态;当接收器准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。
I2C数据总线传送时序。
?
?
数据传送具有应答是必须的。
与应答对应的时钟脉冲由主控制器产生,发送器在应答期间必须下拉SDA线。
当寻址的被控器件不能应答时,数据保持为高并使主控器产生停止条件而终止传输。
在传输的过程中,在用到主控接收器的情况下,主控接收器必须发出一数据结束信号给被控发送器,从而使被控发送器释放数据线,以允许主控器产生停止条件。
图为RDA5807寄存器写时序,图为RDA5807寄存器读时序。
图I2C写时序
图I2C读时序
软件流程图
在应用系统中,系统软件的设计是建立在具体硬件电路基础之上,根据系统功能要求可靠地实现系统的各种功能。
好的软件设计能够充分发挥微控制器的运算和逻辑控制功能,从而提高仪器的精度和使用的方便性。
先初始化接收频率,并实现对频率和音量步进的控制。
处理用户由键盘键入的频率值和音量值,判断是否超出范围,生成频率和音量控制字,经I2C方式送入解调模块并改写寄存器数据,设置用户所需的接收频段和音量,并通过程序实现频率、音量和信号强度的显示,程序流程图如图所示。
图总程序流程图
根据图的总程序流程图。
程序从main函数开始,先对LCD5110液晶屏进行初始化,主要对液晶屏进行忙或不忙检测,当液晶屏忙时,程序等待中;当液晶屏不忙时,程序继续。
再对LCD清屏,为显示作准备。
再显示我们需要的信息。
最后初始设置频率和音量,初始化程序如下:
LCD_init();如图所示。
图解决后电路
软件调试
软件遇到的主要问题是RDA5807的I2C协议通信的时序问题,I2C协议通过时钟总线CLK和数据总线SDA与单片机相连,我们所用的单片机没有I2C接口,给我们造成了很大的不便,我们是根据I2C时序,通过拉低或拉高总线和延时函数模拟I2C。
在写I2C
读一个字节的数据时,数据只能读出16位数据的高8位,而不能读出数据的低8位,。
解决:
在读数据前,将SDA总线拉高,因为51单片机讲引脚置高可设为输入引脚,即可读出数据。
部分程序如下:
ucharIICReadByte(unsignedcharack)1单片机C语言教程:
电子工业出版社,2008
[2]李欧儒主编.短波单边带收发信机原理与调制.北京:
人民邮电出版社,1985
[3]董在望.陈雅琴,雷有华,肖华庭.通信电路原理.第二版.北京:
高等教育出版社,2002
[4]孙育才.MCS-51系列单片机及应用(第4版):
东南大学出版社,2004
[5]阎石.数字电子技术基础(第5版):
清华大学出版社,2005
[6]谭浩强.C语言程序设计(第3版):
清华大学出版社,2005
[7]郑学坚、周斌.微型计算机的原理及应用:
清华大学出版社,2002
[8]胡伟、季晓衡.单片机c程序设计及应用实例:
北京人民邮电出版社.2003
附录
#include<>
#include<>
#include<>
#include<>
#defineucharunsignedchar
#defineuintunsignedint
#defineulintunsignedlongint
#definelintlongint
unsignedintRXFreq=8980;
//RDA的寄存器地址
#defineRDA_R000X00//读出16个位的ID=0X5800
#defineRDA_R020X02//DHIZ[15],DMUTE[14]静音,MONO[13]声道,BASS[12]重低音,SEEKUP[9],SEEK[8],SKMODE[7],CLK_MODE[6:
4]时钟源选择,SOFTRESET[1]软复位,ENABLE[0]电源使能
#defineRDA_R030X03//CHAN[15:
6],TUNE[4],BAND[3:
2],SPACE[1:
0]设置频率带宽步长
#defineRDA_R040X04//STCIEN[14],DE[11],I2Senable[6],
#defineRDA_R050X05//INT_MODE[15],SEEKTH[14:
8](设定自动搜索信号强度阀值),LNA_PORT_SEL[7:
6]=0b10,LNA_ICSEL_BIT[5:
4],VOLUME[3:
0]音量;
#defineRDA_R0A0X0A//STC[14]seekcompleteSF[13]seekfailreadchan[9:
0]当前频道
#defineRDA_R0B0X0B//RSSI[15:
9],FMTRUE[8]当前频道是一个节目台
#defineRDA_READ0X23//读RDA5807
#defineRDA_WRITE0X22//写RDA5807
sbitSDA=P0^1;//IIC接口
sbitSCL=P0^0;
uchar*table[]={"0","1","2","3","4","5","6","7","8","9"};
uchartemp,key,Vol=8,mute=1;
uintDiantai[20]={8830};
voiddelay(ucharz)
{
uchari,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
/*----------------------------------------IIC通信程序---------------------------------------------------*/
voidIIC_delayms()//用于IIC延时
{
_nop_();_nop_();_nop_();_nop_();
}
voidOpenIIC()//IIC启动信号
{
SDA=1;
SCL=1;
IIC_delayms();
SDA=0;
IIC_delayms();
SCL=0;
}
voidCloseIIC()//IIC停止信号
{
SCL=0;
SDA=0;
IIC_delayms();
SCL=1;
SDA=1;
IIC_delayms();
}
ucharIIC_Wait_Ack(void)//IIC发送字节后等待从机发送响应信
{
ucharucErrTime=0;
SDA=1;
IIC_delayms();
SCL=1;
IIC_delayms();
while(SDA==1)
{
ucErrTime++;
if(ucErrTime>250)
{
CloseIIC();
return1;
}
}
SCL=0;
return0;
}
voidIIC_Ack(void)//发送应答信号
{
SCL=0;
SDA=0;//0±íê?
ó|′e
IIC_delayms();
SCL=1;
IIC_delayms();
SCL=0;
}
voidIIC_NAck(void)//IIC非应答信号
{
SCL=0;
SDA=1;
IIC_delayms();
SCL=1;
IIC_delayms();
SCL=0;
}
voidIICsendByte(uchartxd)//IIC·写一个字节
{
uchart;
SCL=0;
for(t=0;t<8;t++)
{
if(((txd&0x80)>>7)==1)
SDA=1;
else
SDA=0;
txd<<=1;
IIC_delayms();
SCL=1;
IIC_delayms();
SCL=0;
IIC_delayms();
}
}
ucharIICReadByte(unsignedcharack)//IIC读一个字节
{
unsignedchari,receive=0;
SDA=1;//51单片机讲引脚置高可设为输入引脚
for(i=0;i<8;i++)
{
SCL=0;
IIC_delayms();
SCL=1;
receive<<=1;
if(SDA==1)receive++;
IIC_delayms();
}
if(!
ack)
IIC_NAck();
else
IIC_Ack();
returnreceive;
}
uintReadReg(ucharregAddr)//芯片读寄存器
{
uintbuf;
OpenIIC();
IICsendByte(RDA_WRITE);//发送芯片地址方向为写
IIC_Wait_Ack();
IICsendByte(regAddr);//发送寄存器地址
IIC_Wait_Ack();
OpenIIC();
IICsendByte(RDA_READ);//发送芯片地址方向为读
IIC_Wait_Ack();
buf=IICReadByte
(1);
buf=buf<<8;
buf=buf|IICReadByte(0);
CloseIIC();
returnbuf;
}
voidWriteReg(ucharregAddr,uintval)//芯片写寄存器
{
OpenIIC();
IICsendByte(RDA_WRITE);//发送芯片地址方向为写
IIC_Wait_Ack();
IICsendByte(regAddr);//发送寄存器地址
IIC_Wait_Ack();
IICsendByte(val>>8);
IIC_Wait_Ack();
IICsendByte(val&0XFF);
IIC_Wait_Ack();
CloseIIC();
}
voidVol_Set(ucharvol)//音量设置0~15
{
uinttemp=0;
temp=ReadReg(RDA_R05);
temp&=0xfff0;
WriteReg(0x05,vol|temp);
}
voidMute_Set(ucharmute)//静音设置1为静音0为不静音
{
uinttemp=0;
temp=ReadReg(0X02);
if(!
mute)temp|=1<<14;
elsetemp&=~(1<<14);
WriteReg(0X02,temp);
}
voidBass_Set(ucharbass)//频带设置
{
uinttemp=0;
temp=ReadReg(0X02);
if(bass)temp|=1<<12;
elsetemp&=~(1<<12);
WriteReg(0X02,temp);
}
ucharRssi_Get(void)//信号强度获取0~63
{
uinttemp=0;
temp=ReadReg(0X0B);
temp=(temp>>9)&0x7f;
returntemp;
}
voidSeekth_Set(uintrssi)//自动搜台信号阈值强度0~15默认为8数值越低搜到的台越多
{
uinttemp;
rssi=rssi&0xf;
temp=ReadReg(0X05);
temp&=~(0xf<<8);
temp|=rssi<<8;
WriteReg(0X05,temp);
}
voidSeek_direction(uchardirection)//搜台方向1向上搜索0向下搜索
{
uinttemp;
temp=ReadReg(RDA_R02);
temp&=~(1<<9);
if(direction==1)
temp|=1<<9;
elseif(direction==0)
temp|=0<<9;
WriteReg(0X05,temp);
}
voidFreq_Set(uintfreq)//频率设置单位是:
10KHz6500~10800
{
uinttemp;
ucharspc=0,band=0;
uintfbtm,chan;
temp=ReadReg(0X03);
temp&=0X001F;
band=(temp>>2)&0x03;
spc=temp&0x03;
if(spc==0)spc=10;
elseif(spc==1)spc=20;
elsespc=5;
if(band==0)fbtm=8700;
elseif(band==1||band==2)fbtm=7600;
else
{
fbtm=ReadReg(0X53);
fbtm*=10;
}
if(freq chan=(freq-fbtm)/spc; chan&=0X3FF; temp|=chan<<6; temp|=1<<4; WriteReg(RDA_R03,temp); delayms(20); //while((ReadReg(0X0B)&(1<<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 RDA 收音机