基于STM32的FM收发器的设计_第1页
基于STM32的FM收发器的设计_第2页
基于STM32的FM收发器的设计_第3页
基于STM32的FM收发器的设计_第4页
基于STM32的FM收发器的设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计说明书2023届基于STM32的FM收发器的设计学生姓名xxxxxx学号xxxxxx院系数理信息学院专业电子信息工程指导教师xxxxxx完成日期201基于STM32的FM收发器的设计摘要现今多媒体技术和通信技术高速开展,无线收发技术在现代的通信技术占据了越来越重要的位置,而无线通信技术依赖的是有效可靠的调制解调方式和稳定的收发系统。FM调制方式本钱不高,技术成熟,可靠性强,因此FM收发器在通讯技术中得到了广泛的使用。本文提出了一种基于STM32微控制器的FM收发系统,其中包括STM32F103C8T6单片机控制、NOKIA5110液晶显示、4*4矩阵键盘、FM收发模块、音频输入模块、音频滤波器、音频功率放大器。本文对设计开发全数字式控制的FM收发器的各个模块作了详细的硬件原理分析,软件控制以及调试分析,实现了全数字式控制FM接收和发射的频道选择、音量控制、信号强度检测的功能。本文实现的基于STM32的FM收发器为简易的音频收发器,可实现收音机、小功率电台以及半双工对讲机的功能。本系统实现的硬件功耗小,体积小,携带方便,稳定性强,操作方便,是一个实用的多功能FM收发器。关键词通信技术;FM收发器;STM32微控制器;音频THEDESIGNOFFMTRANSCEIVERBASEDONSTM32ABSTRACTWiththerapidgrowthofmodernmultimediaandcommunicationtechnology,wirelesstransceivertechnologyplaysarisingsignificantroleinthemoderncommunicationtechnology,wirelesscommunicationstransceiversystemisdependentonamodulation,demodulationmeasureefficacious,credibleandstable.FMmodulationtechnologyismature,withlowcostandstrongreliability,thustheFMtransceiverhasbeenproverbiallyappliedinradiocommunicationtechnology.ThispaperpresentsaFMtransceiversystembasedonSTM32MCU,includingSTM32F103C8T6MCUcontrolmodule,NOKIA5110LCD,4*4matrixkeyboard,FMtransceivermodule,audioinputmodule,audiofilterandpoweramplifier.Inthispaper,designanddevelopmentofeachmoduleofthedigitalcontrolFMtransceiverisanalyzedwiththeprincipleofhardware,programdominationanddebug,actualizesthechannelselection,volumecontrolandsignalstrengthdetectionfunctionofdigitalcontrolFMreceivingandtransmitting.TheimplementationofFMtransceiverbasedonSTM32isasimpleaudiotransceiver,whichcanrealizeradiogram,smallpowerradiosetandhalfduplexintercomfunction.Thehardwareimplementationofthesystemisoflowpowerconsumption,tinybulk,handy,highsteadinessandeasymanipulation,whichKEYWORDSCommunicationTechnology;FMTransceiver;STM32MCU;Audio目录TOC\t"摘要,1,一级标题,1,二级标题,2,三级标题,3,参考文献,1,ABSTRACT,1,目录,1,引言,1,结论,1,附录,1,致谢,1"摘要IABSTRACT II目录III引言11.基于STM32的FM收发器系统总体设计方案及论证21.1FM收发器的工作原理21.2基于STM32的FM收发器的总体结构图21.2.1基于STM32的FM收发器硬件模块划分22.基于STM32的FM收发器硬件电路设计22.1电源模块42.2STM32F103C8T6单片机控制模块42.3液晶显示模块52.4矩阵键盘模块62.5音频输入模块72.6音频功放、输出模块72.7FM收发模块82.8音频滤波模块93.基于STM32的FM收发器软件设计113.1LCD液晶显示屏的软件开发113.1.1FM接收模式下LCD的显示模式113.1.2FM发射模式下LCD的显示模式113.2矩阵薄膜键盘的软件开发113.3FM收发模块的软件开发133.3.1I2C总线控制133.3.2RDA5820收发芯片的驱动143.4信号指示灯的软件开发154.基于STM32的FM收发器系统调试及结果分析164.1FM收发器的接收模式调试及结果分析164.2FM收发器的发射模式调试及结果分析16结论17参考文献18附录1实物图19附录2系统原理图20附录3各模块程序21致谢31引言随着电子技术和通信技术的高速开展,无线电技术在如今的社会和工作中处于不可或缺的地位。FM调频技术具有其他调幅播送所不能及的优点:调频播送方式的频带较宽,可做高保真播送,且抗干扰能力较强,系统的信噪比拟高[1]。调频技术的投资和运行维护的本钱较低且容易实现立体声的调频播送,因此很多兴旺国家很早就开始了调频播送的效劳。目前调频播送技术已开展到调频多工播送,即除了传输立体声节目外,还传输道路交通信息、气象信息、新闻等。FM播送技术为生活信息的传输和交换提供了极大便利。FM收发一体机缩小了FM系统的体积,提高了FM系统的便携性,降低了FM系统的维护本钱,故需要利用电子技术设计一套功耗较低、稳定性较强、功能较为完善的FM收发器系统。我国的FM播送起步于五十年代,当时调频播送只作为节目传输手段使用。八十年代中期,播送电影电视部根据我国四化建设的需要,确定将调频播送作为播送高质量节目的主要方式。这一决定立即有力推动了我国调频技术的飞速进展。到1985年底许多厂家从国外引进了高端调频技术和高效率生产线。这些发射机采用直接调频数字频率合成调制、动态瞬时响应滤波、自动导频相位控制技术和频率合成技术等。除了引进技术和生产线进行调频播送发射机的研制生产外,国内还有些厂家采用大量国产化元器件,生产出具有国际水平的立体声调频技术产品。现今国内外FM调频技术已经非常成熟稳定[2]。本系统就是围绕稳定可靠的FM收发系统进行研究的,通过将音频处理技术和FM收发技术结合,开发出一套低功耗、稳定性强、人机接口友好的FM收发器系统。该FM收发器通过人机接口控制FM收发功能,完成对FM收发频道、音量等的控制以及信号强度的检测。FM音频信号的发射通过麦克风输入语音信号或通过3.5mm耳机接口输入音频信号,然后由带通滤波器滤去多余频段的信号,最后经FM调制芯片调制,由天线将调制完成的信号发射。由天线接收到的FM音频信号同样通过带通滤波器滤去杂波,由音频功率放大器放大音频信号的功率,通过喇叭播放音频信号。本设计最终实现了FM信号的接收,即收音机和FM信号的发射功能,假设利用未被占用的频道那么可实现半双工对讲机的功能。本系统功耗低、实时性强,对于FM收发系统设计的多样化和数字化具有重要意义。1.基于STM32的FM收发器系统总体设计方案及论证1.1FM收发器的工作原理FM收发器完成对输入信号的发射和对接收到的FM信号的输出功能。通过音频输入引脚输入立体声,通过带通滤波器滤去多余频带的干扰,经过可调增益放大器放大,由AD转换器将音频模拟量转换成数字量,FM合成器将AD转换器输出的数字量加到压控振荡器产生的载波上,完成对音频信号的数字调制,最后经过可编程音频功放放大功率,经由天线发射,完成对FM音频信号的发射功能。从天线接收的FM信号,经LNA将其线性放大,正交混频器将不同频率下的高频FM信号下变频到固定频率的低中频FM信号,AD转换器将可调增益放大器放大的信号转换为数字量,然后DSP处理器将得到的数字量解调,最后经过DA转换器将其转换为可用的音频模拟信号,完成了FM音频信号的接收并输出的功能。STM32单片机通过I2C总线读写FM收发芯片的存放器,可修改音频输出的音量大小、FM收发的频道,读取信号接收的信号1.2基于STM32的FM收发器的总体结构图基于STM32的FM收发器硬件模块划分FM收发器的硬件局部分为假设干个模块,主要包括电源模块、LCD显示模块、矩阵键盘模块、单片机控制模块、音频输入模块、音频输出模块、音频滤波模块、FM收发模块、音频功放模块。图1-1是FM收发器的硬件系统总体框图。图1-1FM收发器的硬件总体框图2.基于STM32的FM收发器硬件电路设计FM收发器的总原理图如图2-1所示。FM收发器的硬件电路主要包括:LCD显示模块、矩阵键盘模块、STM32主控模块、音频输入输出模块、音频滤波模块、FM收发模块等。图2-1FM收发器的总电路原理图2.1电源模块电源模块原理图如图2-2所示。电源模块可以以220V市电作为输入,经过220V-9V/50Hz变压器、全波整流桥、滤波电容、7805稳压片、LM1117稳压片得到+5V、+3.3V供电电源。+5V电源也可以通过USB接口输入或者3节干电池得到+4.5V,然后经过LM1117稳压芯片得到+3.3V。图2-2电源模块原理图其中+5V作为LCD液晶显示屏、麦克风、FM收发芯片、运算放大器、音频功率放大器的供电电源,+3.3V作为主控芯片STM32的供电电源。7805是一种三端稳压集成电路,78/79系列的三端稳压IC所需的外围元件极少,使用方便可靠,本钱较低,电子制作中经常采用。其电路内部具有过流、过热的保护电路,可以输出1.5A的电流,驱动能力较强。LM1117是一种低压差电压调节器,可以输出800mA的负载电流,且有不同可调电压的版本。LM1117内置过流和过热限制功能,芯片内置由齐纳二极管稳定的基准源使得输出电压误差在±1%以内。STM32为低功耗单片机,800mA的输出电流足以驱动多片STM32。2.2STM32F103C8T6单片机控制模块STM32F103C8T6微控制器及其所需的外围元件如图2-3所示。STM32F103C8T6是一款性价比拟高的ARM系列低功耗单片机,内含FLASH、USB接口、定时器、ADC等外设。STM32F103C图2-3STM32主控模块原理图单片机控制模块的功能是驱动各局部硬件能够稳定运行。STM32F103C8T6单片机需要驱动液晶显示屏显示FM收发模块的收发状态、所在的工作频道、音量大小、检测到的信号强度等信息,同时对4*4矩阵键盘模块进行扫描,检测用户的按键键入,完成人机接口的驱动。其核心工作为通过I2C总线驱动FM收发模块RDA5820,完成FM音频信号的接收功能和发射功能。对于FM收发芯片的工作频道,STM32F103C8T6利用FLASH外设将频道数值保存,使本系统再次2.3液晶显示模块液晶显示模块原理图如图2-4所示。本系统采用NOKIA5110作为液晶显示模块。NOKIA5110液晶显示模块的主要功能是为STM32F103C8T6的GPIO口所驱动并作为人机接口显示FM收发器的相关信息:FM收发器所在的工作频道、音量大小、信号强度和图2-4液晶显示模块原理图NOKIA5110液晶显示模块使用了串行方式与MCU通信,因此所需的信号线较少,且支持多种串行方式通信协议〔例如SPI总线〕,数据传送速度到达了4Mb/s,微控制器可无需等待时间写入数据。其驱动芯片已与LCD晶片绑定,具有体积小的特点。NOKIA5110供电电压较低,一般工作电流小于200uA,且分辨率较高,显示清晰,驱动简单。这些优点使其适合于小型、功耗较低的便携式测试设备和通信设备中[4]。2.4矩阵键盘模块矩阵键盘模块原理图如图2-5所示。矩阵键盘模块使用4*4薄膜矩阵键盘,主要作为人机接口供用户键入相关控制信息,例如调整音量大小、设置FM收发器工作频道、设置接收或发射模式等。4*4薄膜矩阵键盘集成度高、重量轻,其上清晰标注“0~9〞数字键以及“A~D〞字母键,界面美观清晰,使用方便,其接口为8引脚驱动模式,利用单片机GPIO口驱动方便。图2-5矩阵键盘模块原理图矩阵键盘的驱动方式比独立按键的驱动方式稍为复杂。矩阵键盘的驱动方式:首先将四根行线全部置低,此时假设有按键键入,那么四根列线其中一根会出现低电平,根据低电平出现的列数可确定键入按键的列数。同理,在按键键入的时间段内再将四根列线全部置低,此时假设有按键键入,那么四根行线的其中一根会出现低电平,然后根据低电平出现时的行数可以确定键入按键的行数。做一定软件去抖工作之后,根据扫描程序得到的行数和列数即可完全确定被按下的按键。STM32时钟频率较高,因此做矩阵键盘扫描不会占用过多资源。2.5音频输入模块音频输入模块原理图如图2-6所示。音频信号由两个通道输入:通过麦克风输入语音或3.5mm耳机接口输入立体声。当由麦克风输入语音信号时,麦克风通过一个上拉电阻产生波形,波形同时输入左声道和右声道。当由3.5mm耳机接口输入立体声信号时,左声道波形和右声道波形分别输入。其中麦克风使用的是结构简单、电声性能好的9*7mm电容式驻极体式麦克风,灵敏度高达52dB。图2-6音频输入模块原理图2.6音频功放、输出模块音频功放、输出模块如图2-7所示。FM收发模块将接收到的FM信号解调后输出,但其输出功率无法驱动一个25W/8Ω的喇叭,因此使用该专用音频功放对音频信号进行一定放大使其能够驱动喇叭播放声音。图2-7音频功率放大器原理图LM386是一款音频专用功放,具有功率消耗较低、供电电压范围较宽、可调内链增益、谐波失真小、本钱较低和所需外围器件较少等诸多优点,较多使用于例如MP3、收音机等播放设备之中[5]。如图2-7为LM386芯片的典型驱动电路之一,其预设内置功放增益为20。考虑到系统的功耗问题和噪音问题,此处增益选择为20即可。喇叭选择25W/8Ω扩音器。同时功率放大器的输入端将音频信号通过一个可调电阻器接入,可通过调节电位器改变音量大小,增加音量的可控性。2.7FM收发模块FM收发模块原理图如图2-8所示。STM32单片机使用I2C总线串行方式写入并修改RDA5820内部存放器值,从而修改FM收发器所在的工作频道、播放音量大小图2-8FM收发模块原理图FM收发系统的核心电路为RDA5820调频收发集成电路。RDA5820收发芯片是一款所需外接器件少、信噪比极小的FM收发芯片。该集成电路具有体积小、低功耗、低本钱、应用简单、使用范围广的优点,是一款使用简单且具有较高性价比的单片音频收发集成电路。其应用范围主要有:便携式MP4、MP3等无线调频接收器,校园、企业等公共场所立体声调频播送系统,高档游戏机及无线音频电子玩具等[6]。FM收发集成电路RDA5820的电路模块划分如图2-9。其中主要包括低噪声放大器、正交混频器、可编程增益放大器、AD转换器、DSP内核、DA转换器、压控振荡器、功率放大器等模块。图2-9RDA5820内部结构图FM音频信号的发射过程如下:语音信号或立体声信号从LIN、RIN引脚输入,经过可编程增益放大器放大〔通过写入相关存放器控制增益值〕,AD转换器将音频信号数字化,然后合成器将音频数字信号加载到压控振荡器产生的高频载波上〔通过写入相关存放器控制高频载波的频率〕,完成了音频信号的FM调制,最后经过功率放大器将信号功率放大〔通过写入相关存放器控制功率放大倍数〕,由天线发射出去,在一定距离范围内的收音机便可以接收到该FM信号并播放。FM音频的发送功能分为以下几个步骤,其过程划分如图2-10所示。图2-10FM音频信号的发射过程示意图FM信号的接收过程如下所述:通过天线接收FM信号,经过低噪声放大器放大,正交混频器将多种频率的高频FM信号变频到一定频率的低中频,降低了对ADC的信号带宽的要求。然后经可编程增益放大器放大,AD模数转换器将该信号数字化,DSP核心将该数字量解调,然后经过DA数模转换器将其转换为可用的立体声信号,最后功率放大器将信号放大并输出。FM音频信号的接收过程如图2-11所示。图2-11FM信号的接收过程示意图2.8音频滤波模块音频滤波模块原理图如图2-12所示。音频信号的频带一般为50Hz~10kHz,本设计根据此原那么设计带通滤波器。由于本系统无负电源供电,音频信号中的负值信号无法通过运放,因此先利用一个同相加法器将音频信号和+2.5V的基准源信号相加,由此得到含有+2.5V直流分量的音频信号,可通过由正电源供电的滤波器。低通滤波器和高通滤波器以+2.5V基准源作为“虚地〞,以通过以+2.5V基准源作为直流分量的音频信号。经过带通滤波器滤除多余频带的信号之后,经过一个RC高通滤波网络滤除直流分量,得到音频信号的交流分量。图2-12音频滤波模块原理图本设计的带通滤波电路使用MCP6002型号作为运放。MCP6002是一种低功耗、高带宽、稳定性高、本钱较低的通用运放,它的供电电压范围是1.8V~5.5V,对电源的要求比拟低。MCP6002的低功耗、高带宽等优点使其非常适合于FM收发器系统的设计。如图2-13所示为典型的二阶有源低通滤波电路[7]。图2-13二阶有源低通滤波电路考虑到集成运放的同相端输入电压为(2-1)而与的关系为(2-2)对于节点a,应用KCL方程可得(2-3)假设将公式(2-1)~公式(2-3)联立,可以较容易得到该运放网络的传递函数是(2-4)令(2-5)(2-6)那么有(2-7)式(2-7)为二阶有源低通滤波器传递函数的典型表达式。其中(2-8)为该低通滤波器的特征频率,即Q为0.707时的3dB截止频率。根据以上结果同理推导可以得到二阶有源高通滤波器的截止频率为。根据式(2-8)可得本系统设计的二阶有源带通滤波器的截止频率分别为30Hz和16kHz,该通频段可有效地保存音频信号并滤除其他频段的杂波。3.基于STM32的FM收发器软件设计本设计的软件环境为RealviewMDK。MDK-ARM是一款为Cortex-M、ARM7、ARM9等CPU提供的一个功能强大的开发环境,是一款微控制器使用的开发环境,可以满足大多数嵌入式应用的根本需要。基于STM32的FM收发器的软件局部大致有矩阵键盘、LCD、FM收发器的驱动和信号指示灯的控制。3.1LCD液晶显示屏的软件开发本设计使用的LCD液晶型号为NOKIA5110。单片机与NOKIA5110使用串行方式进行通信,只需占用5个GPIO口即可完成驱动。NOKIA5110的分辨率为84*48,可完成4行字符串的显示。本设计使用STM32F103CFM接收模式下LCD的显示模式当FM收发器在接收状态,LCD的显示内容为:第1行:显示“Receiver〞模式。第2行:显示FM接收器正在接收的频道,例如“94.1MHz〞。第3行:显示FM接收模式播放的音量。第4行:显示所在FM频道的信号强度。FM发射模式下LCD的显示模式在FM收发器在发射状态,LCD的显示内容为:第1行:显示“Sender〞模式。第2行:显示FM发射器所在的频道。3.2矩阵薄膜键盘的软件开发矩阵键盘的驱动方式:首先将四根行线全部置低,此时假设有按键键入,那么四根列线其中一根会出现低电平,根据低电平出现的列数可确定键入按键的列数。同理,在按键键入的时间段内再将四根列线全部置低,此时假设有按键键入,那么四根行线的其中一根会出现低电平,然后根据低电平出现时的行数可以确定键入按键的行数。由于矩阵薄膜键盘没有硬件去抖电路,因此采用软件去抖方式,最后根据扫描程序得到的行数和列数即可确定按键的位置[8]。矩阵键盘的扫描流程图如图3-1所示。图3-1矩阵键盘扫描软件流程图根据按键位置-功能映射表可确定按键键入且矩阵键盘扫描完成后需要执行的具体功能。按键位置-功能映射表如表3-1所示。表3-1键盘按键位置-功能映射表按键位置按键功能1数字“1〞2数字“2〞3数字“3〞4字母“A〞5数字“4〞6数字“5〞7数字“6〞8字母“B〞9数字“7〞10数字“8〞11数字“9〞12字母“C〞13“-〞键14数字“0〞15“+〞键16模式切换键3.3FM收发模块的软件开发FM收发模块采用了功能丰富且驱动方式简单的RDA5820集成电路,单片机与其交换数据使用串行方式且采用了I2C总线。由于STM32F103C8T6没有硬件I2C总线,且I2C总线的时序控制较为严格,因此采用GPIO口驱动I2I2C总线控制I2C总线的协议格式如图3-2所示。I2C是PHILIPS公司设计的双线式串行总线,具有引脚少、元件封装方式较小、协议简单和数据传送速度快等特点。I2C总线下的每个器件都有唯一的识别地址。当I2C总线处于闲置状态时,SDA和SCL都为高电平。因为联接到I2C接口上的器件接口必须是开漏或者开集,因此任一器件接口电平假设置低,都会拉低引脚,也就是总线上各个设备的引脚之间都是“与〞的逻辑。因为各个器件的输出均为OC门或OD门,所以各个引脚必须上拉,从而使SDA和SCL在该总线闲置时被置为高电平状态。该总线的开始、停止和数据传递图3-2I2C(1)起始信号。SCL保持高电平,假设SDA线产生一个由高到低的电平变化,那么代表起始信号。其它I2C指令在起始信号发生之后且能有效地运行(2)终止信号。SCL保持高电平,假设SDA线产生一个由低到高的电平变化,那么代表终止信号。终止信号出现后,所有其它指令操作都无效。(3)数据传送。利用I2C总线传输数据的数据量没有限制,并且必须以8位作为每个字节的长度。数据传递时,从MSB位开始发,并且需要有一位应答位跟随在每个字节后面。总线的应答在SCL的第九个时钟上产生,且该时钟是由总线的主机方来控制。此时发送方必须将SDA置高,使接收方可以产生应答信号[9]RDA5820收发芯片的驱动(1)接收模式。控制RDA5820的工作方式为FM接收模式,可以通过写入40H内部存放器的CHIP_FUNC[3:0]=0。设置FM接收器所在的工作频道那么可以通过改变地址为03H的内部存放器的值。通过修改SPACE存放器来设置自动搜台的步进值(50kHz,100kHz,200kHz),频道由存放器CHAN[9:0]来选择,频率范围(87MHz~108MHz,76MHz~108MHz,76MHz~91MHz)通过存放器BAND[1:0]设置。当用户修改03H的调谐位1时,RDA5820会启动调谐。在调谐完成时,STC位会自动置为1,用户可以读取存放器0AH和存放器0BH来获取该频道的状态值(FM_READY,RSSI等)。设置为接收模式时调谐过程要持续10ms。(2)发射模式。控制RDA5820的工作方式为FM发射模式,可以通过写入40H内部存放器的CHIP_FUNC[3:0]=1。设置FM发射器所在的工作频道那么可以通过改变地址为03H的内部存放器的值。通过修改SPACE存放器来设置自动搜台的步进值(50kHz,100kHz,200kHz),频道由存放器CHAN[9:0]来选择,频率范围(87MHz~108MHz,76MHz~108MHz,76MHz~91MHz)通过存放器BAND[1:0]设置。当用户修改03H的调谐位1时,RDA5820会启动调谐。在调谐完成时,STC位会自动置为1,用户可以读取存放器0AH和存放器0BH来获取该频道的状态值(FM_READY,RSSI等)。设置为发射模式时调谐过程要持续100ms[10]。其中每次修改FM收发器的发射/接收模式、频道、音量大小时,STM32会将上述数据保存在STM32自带的FLASH中,使每次开机时FM收发器为上次关机前的状态和模式,用户无需重新设置。STM32控制其稳定工作的流程如图3-3所示。图3-3RDA5820控制流程图3.4信号指示灯的软件开发本系统使用一个绿色贴片LED指示接收信号强度。根据实践,当FM接收模块可以接收到FM音频信号并播放时,从RDA5820存放器中读取的信号强度值(RSSI)一般为20以上,当FM接收模块在该频道无法接收信号时,信号强度值一般小于5。由此可以根据RSSI的值判断FM接收模块所在的工作频道是否有可用的FM信号覆盖,假设有可用的FM信号覆盖,那么使LED亮,否那么LED灭。本设计以1s为周期检测本地该频道的FM信号强度。其中1s的周期更新中断采用STM32外设中的16位定时器(TIM2)。STM32F103C8T6的TIM2使用的是PCLK1,即TIM2的最高时钟频率为72MHz。TIM2的外设时钟使用TIM2预分频器分频为相应的计数时钟后使用。通过赋值语句设置定时器的预分频存放器为7199,然后得到10kHz的计数频率。设置TIM的周期存放器(TIM_Period)值为9999,得到1s的更新中断。指定TIM2的周期中断优先级为高,在TIM2的更新中断效劳程序4.基于STM32的FM收发器系统调试及结果分析4.1FM收发器的接收模式调试及结果分析FM收发器的接收模式调试过程如下:(1)利用USB的+5V电源或三节干电池为FM收发系统电路板供电。LCD显示“Receiver〞接收模式。假设液晶显示屏显示“Sender〞发送模式,那么按下“切换〞键,将FM收发器切换到FM接收模式。(2)使用数字键键入频道。例如“94.10MHz(绍兴交通播送)〞,依次键入“9”、“4”、“1”、“0”,液晶显示屏显示“FM:94.10MHz〞,此时喇叭将播放该电台的节目。同时液晶显示屏显示信号强度值,(3)使用“+〞、“-〞键调节播放音量的大小,或者通过调节电位器调节音量。结果分析:经过一系列简单调试,FM收发系统的接收模式功能已经根本实现。利用信号指示灯LED的亮灭指示是否有FM信号覆盖,使用户体验更加直观。4.2FM收发器的发射模式调试及结果分析FM收发器的发射模式调试过程如下:(1)利用USB的+5V电源或三节干电池为FM收发系统电路板供电。LCD显示“Receiver〞接收模式。假设液晶显示屏显示“Sender〞发送模式,那么按下“切换〞键,将FM收发器切换到FM接收模式。(2)使用数字键键入频道。例如“95.90MHz〞,依次键入“9”、“5”、“9”、“0”,液晶显示屏显示“(3)查找到没有可用FM信号覆盖的频道后,按下“切换〞键,将FM收发器从接收模式切换到发射模式,液晶显示屏显示“Sender〞发射模式。(4)使用数字键键入没有FM信号覆盖的频道,例如“95.90MHz〞,依次键入“9”、“5”、“9”、“0(5)靠近并使用麦克风录入语音或使用3.5mm耳机接口输入音频。输入信号的通道通过一个双刀双掷开关切换。(6)在一定距离范围使用另一台收音机或“基于STM32的FM收发器〞,如果使用FM收发器那么需要按“切换〞键将其切换到FM接收模式。将收音机或处于接收模式的FM收发器的工作频道调整到FM发射器所在的频道,此时收音机可播放从FM发射器输入的语音信号或音频信号。结果分析:经过一系列简单调试,FM收发系统的发射模式功能已经根本实现。FM收发器的发射功能可以将从麦克风输入的语音信号或从3.5mm耳机接口输入的音频信号通过未被占用的FM频道较好地发射出去,且噪音和失真很小。结论本文详细介绍并阐述了基于STM32的FM收发器的硬件设计和软件开发过程。其中主要包括单片机控制模块、液晶显示模块、矩阵键盘输入模块、音频输入模块、音频功放模块、FM收发模块和音频滤波模块。单片机控制模块使用STM32F103C8T6单片机执行每个硬件模块的驱动和协调工作。LCD显示模块使用NOKIA5110液晶显示屏,完成FM频道、信号强度、收发模式和音量大小的显示功能。键盘输入模块采用4*4矩阵薄膜键盘,通过键盘按键输入修改FM收发器的收发模式、音量大小、FM工作频道等。音频输入模块通过麦克风录入语音或者使用3.5mm耳机接口输入音频。音频滤波模块使用一个二阶有源带通滤波器滤除多余频带的信号,在信号输入FM发射模块或FM接收模块输出音频信号时均采用该带通滤波器滤波。FM收发器继而完成音频的低噪放大、调制、解调等处理功能。应用RealviewMDK软件开发环境生成的代码控制STM32的运行,使硬件局部的各个模块协调运行。根据实测结果,基于STM32的FM收发器调试较为成功,实现了根本功能,人机接口友好,将FM调频的发射和接收功能相参考文献[1]姜胜涛.FM播送天线原理、测试与维护[J].辽宁播送电视技术,2007,1:39~40[2]吴琼瑶.FM播送发射技术的现状及展望[J].电视设备通讯,1993,1:24~26[3]张旭,李世光等.基于STM32电力数据采集系统的设计[J].电子测量技术,2023,33(11):90~93[4]successzsj.Nokia5110LCD应用资料[EB/OL].sOFCUn3lsrJ_fEcn-ve8UUoLRPf4Lv76kbYZ5tzL4BVaO2PdS4jNZnlPhL2BUh1ODUwqrw0tbWAP1yPPu3EhFDDO,2015-05-05/2015-05-08[5]杜芸强,毕淑娥.LM386在小功率主动声呐发射及接收电路中的应用[J].电声技术,2023,34(07):37~40[6]王晓峰,王素香,武晓威等.基于STC12LE5A16S2和RDA5820的校园调频无线播送系统的设计[J].电力学报,2023,28(05):434~435[7]康华光.电子技术根底[M].北京:高等教育出版社,2006:417~419[8]黄忠良.线反转法矩阵键盘程序设计[J].电脑学习,2023,1:61~62[9]张毅刚,彭喜元,彭宇.单片机原理及应用[M].北京:高等教育出版社,2023:274~279[10]lh569965.RDA5820系列编程指南V3.0[EB/OL].MIOhjUHeSQtZpwrUMcD-cYsk8wj_lC5GyJkcQ3zU8NNkTd8Ahoql7mMCHbL5L6q51h0AuBUh_PfBqeQ2euJKBEIvdrMTu,2015-05-05/2015-05-08附录1实物图附录2系统原理图附录3各模块程序(1)主程序main.c代码如下:#include"stm32f10x.h"#include"nokia5110.h"#include"kbd.h"#include"i2c.h"#include"rda5820.h"#include"interface.h"#include"indicator.h"/*dec*/voidRCC_Config(void);voidFLASH_Save(void);u32FLASH_Read(u8addr);intmain(){ RCC_Config(); /*DisableJTAGDebugEnbaleSWD*/ GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); /*flashinit*/FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR); vol=FLASH_Read(0); freq=FLASH_Read(1); freq2=FLASH_Read(2); state=FLASH_Read(3); if(!(vol<16&&vol))vol=5;//修正音量 if(!(freq>7000&&freq<10000))freq=9410;//修正接收频率 if(!(freq2>7000&&freq2<10000))freq2=9590;//修正发送频率 if(state!=1&&state!=0)state=0;//修正状态 /*液晶屏*/ LCD5110_Init(); LCD_clear(); /*initrda5820*/ Rda5820Init();//initialization Rda5820VolSet(vol);//volume5默认音量:5 Rda5820SpaceSet(2);//step50KHz(0.05MHz) Rda5820BandSet(2);//band76~108MHz Rda5820TxPgaSet(5);//输入增益:6 Rda5820TxPagSet(63);//最大发射功率 if(state) { Rda5820TxMode(); Rda5820FreqSet(freq2); TxShow(); } else { Rda5820RxMode(); Rda5820FreqSet(freq); RxShow(); } Indicator_Init();//信号指示灯 while(1) { kbdHandler(kbdScan()); /*checkoneSecondFlag*/ if(OneSec) { OneSec=0; rssi=Rda5820RssiGet(); if(rssi>15)LED_ON; elseLED_OFF; if(state)TxShow(); elseRxShow(); } }}/*ClockInitialization*/voidRCC_Config(){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//EnableGPIOA,GPIOBClock RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);}#defineStartAddr((u32)0x08008000)voidFLASH_Save(){ u8i; u32dat[4]; dat[0]=vol;dat[1]=freq;dat[2]=freq2;dat[3]=state; FLASH_Unlock(); FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR); for(i=0;i<4;i++) FLASH_ErasePage(StartAddr+i*4); for(i=0;i<4;i++) FLASH_ProgramWord(StartAddr+i*4,dat[i]); FLASH_Lock();}u32FLASH_Read(u8addr){ return(u32)(*((vu32*)(StartAddr+4*addr)));}(2)FM收发模块驱动程序RDA5820.c代码如下:#include"stm32f10x.h"//#include"ioremap.h"//#include"delay.h"#include"i2c.h"#include"rda5820.h"voidDelayMs(u16tCount){unsignedchara,b,c; for(;tCount;tCount--)for(c=1;c>0;c--)for(b=56;b>0;b--)for(a=137;a>0;a--);}//初始化//0,初始化成功;//其他,初始化失败.u8Rda5820Init(void){u16id;IIcInit();//初始化IIC口id=Rda5820ReadReg(RDA5820_R00);//读取ID=0X5805if(id==0X5805)//读取ID正确{Rda5820WriteReg(RDA5820_R02,0x0002);//芯片软复位DelayMs(400);//等待复位结束 Rda5820WriteReg(RDA5820_R02,0x0001); //芯片上电 DelayMs(600);Rda5820WriteReg(RDA5820_R02,0xD201);//芯片上电,不复位正常天线32.768时钟循环搜索不开始搜索想上搜索低音增强立体声非静音非高阻抗 Rda5820WriteReg(RDA5820_R03,0x0000); //100kapace87-108baud不开启调谐 Rda5820WriteReg(RDA5820_R04,0x0000); //关闭中断0.75us去加重不使能iisio口全部浮空 Rda5820WriteReg(RDA5820_R05,0X8548); //搜索强度8,LNAN,1.8mA,VOL最大无输入低噪声 //Rda5820WriteReg(RDA5820_R0A,0X7800); //0A不用设置 //Rda5820WriteReg(RDA5820_R0B,0X7800); //0b不用设置 Rda5820WriteReg(RDA5820_R40,0X0000); //半自动搜台RX工作模式 Rda5820WriteReg(RDA5820_R41,0X0000); //RDS应答为0不复位fifofifo深度为0 //Rda5820WriteReg(RDA5820_R42,0X0000); //42不用设置 Rda5820WriteReg(RDA5820_R4A,0X0010); //fifo满中断 Rda5820FreqSet(8100);//设置初始化频率81.00M}elsereturn1;//初始化失败return0;}//写RDA5820存放器voidRda5820WriteReg(u8addr,u16val){IIcStart();IIcSendByte(RDA5820_WRITE);//发送写命令IIcWaitAck();IIcSendByte(addr);//发送地址IIcWaitAck();DelayMs(2);IIcSendByte(val>>8);//发送高字节IIcWaitAck();IIcSendByte(val&0XFF);//发送低字节IIcWaitAck();IIcStop();//产生一个停止条件}//读RDA5820存放器u16Rda5820ReadReg(u8addr){u16res;IIcStart();IIcSendByte(RDA5820_WRITE);//发送写命令IIcWaitAck();IIcSendByte(addr);//发送地址IIcWaitAck();DelayMs(2);IIcStart();IIcSendByte(RDA5820_READ);//发送读命令IIcWaitAck();res=IIcReadByte(1);//读高字节,发送ACKres<<=8;res|=IIcReadByte(0);//读低字节,发送NACKIIcStop();//产生一个停止条件returnres;//返回读到的数据}//设置RDA5820为RX模式voidRda5820RxMode(void){u16temp;temp=Rda5820ReadReg(0X40);//读取0X40的内容temp&=0xfff0;//RX模式Rda5820WriteReg(0X40,temp);//FMRX模式}//设置RDA5820为TX模式voidRda5820TxMode(void){u16temp;temp=Rda5820ReadReg(0X40);//读取0X40的内容temp&=0xfff0;temp|=0x0001;//TX模式Rda5820WriteReg(0X40,temp);//FMTM模式}//得到信号强度//返回值范围:0~127u8Rda5820RssiGet(void){u16temp;temp=Rda5820ReadReg(0X0B);//读取0X0B的内容returntemp>>9;//返回信号强度}//设置音量ok//vol:0~15;voidRda5820VolSet(u8vol){u16temp;temp=Rda5820ReadReg(0X05);//读取0X05的内容temp&=0XFFF0;temp|=vol&0X0F;Rda5820WriteReg(0X05,temp);//设置音量}//静音设置//mute:0,不静音;1,静音voidRda5820MuteSet(u8mute){u16temp;temp=Rda5820ReadReg(0X02);//读取0X02的内容if(mute)temp|=1<<14;elsetemp&=~(1<<14);Rda5820WriteReg(0X02,temp);//设置MUTE}//设置灵敏度//rssi:0~127;voidRda5820RssiSet(u8rssi){u16temp;temp=Rda5820ReadReg(0X05);//读取0X05的内容temp&=0X80FF;temp|=(u16)rssi<<8;Rda5820WriteReg(0X05,temp);//设置RSSI}//设置TX发送功率//gain:0~63voidRda5820TxPagSet(u8gain){u16temp;temp=Rda5820ReadReg(0X42);//读取0X42的内容temp&=0XFFC0;temp|=gain;//GAINRda5820WriteReg(0X42,temp);//设置PA的功率}//设置TX输入信号增益//gain:0~7voidRda5820TxPgaSet(u8gain){u16temp;temp=Rda5820ReadReg(0X42);//读取0X42的内容temp&=0XF8FF;temp|=gain<<8;//GAINRda5820WriteReg(0X42,temp);//设置PGA}//设置RDA5820的工作频段//band:0,87~108Mhz;1,76~91Mhz;2,76~108Mhz;3,用户自定义(53H~54H)voidRda5820BandSet(u8band){u16temp;temp=Rda5820ReadReg(0X03);//读取0X03的内容temp&=0XFFF3;temp|=band<<2;Rda5820WriteReg(0X03,temp);//设置BAND}//设置RDA5820的步进频率//band:0,100Khz;1,200Khz;3,50Khz;3,保存voidRda5820SpaceSet(u8spc){u16temp;temp=Rda5820ReadReg(0X03);//读取0X03的内容temp&=0XFFFC;temp|=spc;Rda5820WriteReg(0X03,temp);//设置BAND}//设置RDA5820的频率//freq:频率值(单位为10Khz),比方10805,表示108.05MhzvoidRda5820FreqSet(u16freq){u16temp;u8spc=0,band=0;u16fbtm,chan;temp=Rda5820ReadReg(0X03);//读取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=Rda5820ReadReg(0X53);//得到bottom频率fbtm*=10;}if(freq<fbtm)return;chan=(freq-fbtm)/spc;//得到CHAN应该写入的值chan&=0X3FF;//取低10位temp|=chan<<6;temp|=1<<4;//TONEENABLERda5820WriteReg(0X03,temp);//设置频率DelayMs(20);//等待20mswhile((Rda5820ReadReg(0X0B)&(1<<7))==0);//等待FM_READY}//得到当前频率//返回值:频率值(单位10Khz)u16Rda5820FreqGet(void){u16temp;u8spc=0,band=0;u16fbtm,chan;temp=Rda5820ReadReg(0X03);//读取0X03的内容chan=temp>>6;band=(temp>>2)&0x03;//得到频带spc=temp&0x03;//得到分辨率if(spc==0)spc=10;elseif(spc==1)spc=20;elsespc=5;if(band==0)fbtm=8700;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论