基于STM32万能学习型红外遥控器设计Word下载.docx
《基于STM32万能学习型红外遥控器设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于STM32万能学习型红外遥控器设计Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
1概述
1.1设计背景
红外遥控器是一种应用较为广泛的遥控。
它具有功耗低,体积小,成本低廉等特点。
在目前的家用电器应用领域中,大部分的智能电器都是使用红外遥控器来操作控制家用电器设备,红外遥控器的应用可以说是无处不在[1]。
但是随着科技的发展,形色各异的智能家电出现在人们的日常生活中,致使遥控器的种类越来越多。
据调查数据表明,每户居民家中至少有3个以上的遥控器,而在这些遥控器中,有极大部分的遥控器是属于红外遥控器。
然而随着经济的快速增长,智能家用电器越来越多,各式各样遥控器的数量也随之增长,红外遥控器的数量也在不断增长,各种不便也随之而来。
人们常常会浪费过多时间来寻找控制各种各样家用智能电器遥控器。
为了解决人们同时使用众多遥控器的烦恼,于是越来越多的自学习型遥控器也就诞生了。
不过现在市场上的红外遥控器,基于成本的考量,绝大部分都是采用455KHz的陶振[2]来驱动,选择以12分频系数,其载波频率约为38KHz,此设计方法也使学习型遥控器的设计变得更加简单。
但是现在市面上许多常见的遥控器大多都只能控制几种产品,并不是真正实现“万能”红外遥控器[3]功能。
本系统采用STM32F103C8作为主控芯片,以多个发光二极管做为指示灯,分别用来提示系统工作的模式、红外信号输入输出指示及其电源指示,以独立键盘作为系统操作的键盘,高可靠性的VS1838B红外一体化接收头组成的红外接收模块和红外发射管组成的红外发射模块等构成。
不仅能实现一个遥控器控制多个智能家电,真正实现万能遥控的功能,而且系统具有性能高,功耗低,成本价低等优势。
1.2设计目的
红外通信技术是利用红外线信号来传输数据的,红外通信技术更多的是应用与短距离无线传输的领域中,是一种高可靠、低功耗的无线传输技术。
红外通信无需用实体连接线路,并且简单易用、实现成本低,而且从功率方面来考量,相对于其他无线遥控器来说,红外传输它的功耗低于其他无线遥控,因此现已广泛应用在微型的移动设备间的数据交换和家用电器设备的控制。
例如智能电视、空调、智能家电、电动窗帘等。
红外技术现已广泛应用于各种智能家用电器和形色各异的娱乐设施中,所以也突出了万能学习型遥控器设计的重要性[4]。
但是由于红外遥控领域在全球并无一个统一通信协议标准,在不同地区,不同公司采用的编码格式也都不一样。
因此,智能化学习型万能遥控器的产品也倍受人们的喜好,青睐。
本设计首先对红外线遥控器编码原理进行了全面的分析,并结合市面上出售的随着智能家电的增长,红外遥控设备也越来越多,因此也决定了学习型遥控器的重大意义。
1.3设计要求
设计一个万能学习型遥控器,其具体设计指标要求如下:
①用红外发射管作为系统的红外发射模块。
②用按键来切换学习型红外遥控的学习模式与非学习模式。
当用户操作进入非学习模式下是,通过按下发射信号的按钮来控制红外编码信号的发射。
③当用户按下学习键,系统处于学习模式,此时将被学习的红外遥控器对准红外接收头,按下被学习遥控器的按键发射红外信号,系统完成红外编码的捕捉和记录。
④当学习型遥控器处于学习模式时,再按学习键退出学习模式,进入非学习模式状态。
⑤在非学习模式下按下红外发射键,还原红外编码并发送红外信号,实现控制其红外遥控的智能家电。
⑥在此硬件设计时,要尽力做到硬件模块简单方便、性能稳定且易于实现,促使整个系统电路简化。
⑦软件设计流程清晰,且软件程序思维清晰,要做到以最为简单的程序实现系统所需功能。
1.4设计方案选型
1.4.1方案一:
采用单片机(AT89C51)设计学习型红外遥控器
学习型红外遥控器采用单片机(AT89C51)、一体化红外接收头、红外发射管、红外接收发射驱动电路、串行I2C总线的EEPROM(可擦写编程存储器)24c02及其独立键盘组成学习型遥控器[5]的控制电路。
通过按键来切换学习模式、非学习模式、控制发射红外遥控信号。
切换至学习模式状态时,将红外信号捕捉并记录到单片机RAM,再存储到存储器。
发射红外信号时,从EEPROM取出记录的红外信号数据,再由单片机(AT89C51)定时器产生38KHz频率的载波信号[6],通过红外发射管发射出红外信号。
1.4.2方案二:
用STM32F103C8嵌入式芯片其红外发射接收模块电路构成学习型红外遥控器
STM32系列芯片具有低成本,功耗低,芯片内部资源丰富、高性能等优点。
STM32F103C8芯片是ARMCortex-M3内核的工作频率最高可达72MHz,芯片内部集成了高速嵌入式存储器(高达20KByte的SRAM存储器,和128KByte的FLASH存储器)。
STM32功能强大,本方案采用它作为主控芯片,红外接收一体头[7]、红外发射管组成的红外发射接收模块、独立式键盘和复位电路组成的本系统。
通过此硬件平台并结合c语言编程使本系统实现所需功能。
1.4.3方案的比较和选择
方案一,以单片机(AT89C51)为主控搭建硬件平台系统,所需外围芯片和元器件较为繁多,成本较高。
实现所需功能的原理和方法也较为复杂,需有单片机产生38KHz的载波信号,使得单片机的负荷繁重,同时单片机的主板低,捕捉红外信号时由于单片机主频低,误差较大。
该方案成本高,编程算法和电路搭建较为复杂,可靠性和后期的扩展性低,所以方案一不适合该设计。
方案二,采用ARM架构ARMCortex-M3的STM32系列的芯片STM32F103C8为该系统的主控,主控内部集成了丰富的资源,且功能强大,搭建后可用ARM内核芯片推出的仿真器J-Link进行在线联调,使得编程更为方便,大大降低了系统软件编程的难度,而且具有成本低、可扩展性强、功耗低、高性能[7]等特点。
显而易见选用方案二对系统的后期扩展较为有益,故本设计选用方案二作为系统的设计方案。
2系统硬件设计
2.1系统的总体设计
本系统设计的学习型红外遥控器模块设计框图如图2-1所示,采用STM32F103C8为系统主控芯片,电源电路、复位电路、时钟电路、按键控制电路、键盘输入电路、VS1838B红外一体化接收头和红外接收头搭建的红外发射接收电路[8]所组成。
整机供电采用5号电池供电,运用按键来操作系统,采用红外一体化接收头来捕捉红外信号,通过红外发射管发射所记录的红外信号。
系统框图如下图2-1所示:
图2-1系统硬件框图
2.2STM32F103C8芯片介绍
图2-2STM32F103C8主控芯片
(1)STM32F103C8是ARM32-BitCortex-M3内核的处理器,它的主频最高可达72M,内部集成了64KByte的FLASH,20KBye的静态随机存储器SRAM,内嵌出厂已经调校好的8MHz的RC振荡器和32KHz带校准功能的RC振荡器。
内部嵌有RTC时钟,两个12位的数模转换器。
拥有7路支持定时器、SPI、ADC、USART和IIC的DMA通道。
两种单线调试接口:
JTAG和SWD接口和多路外部中断通道。
7个定时器,16位定时器3个,4个可用于输出捕获和输入比较的PWM通道。
芯片还内嵌了两个独立的、窗口的看门狗定时器,2个IIC通信接口,9个通信接口,两个SPI通信IO口,3个USART(串口)接口,CAN总线通信接口和USB2.0通信口。
STM32F103C8是一种高效的微控制器,内嵌资源多,体积小,稳定性高,而且成本低,在目前的嵌入式系统中得到了广泛的应用。
(2)STM32F103C8增强型系列MCU,工作频率可达到72MHz,其内核使用的是高可靠性,高性能的ARM®
Cortex™-M3的RISC32位的内核[9]。
STM32资源丰富,包含两个ADC12位精度的采集数据通道、1个PWMTimer和3个通用的16位Timer定时器,还包含标准、先进的通信总线接口:
拥有3个标准的USART接口、2个标准I2C接口和高速通信总线SPI接口、一个通用型USB接口和一个CAN(控制局域网络)接口。
芯片内部有高速存储器(高达128KByte的闪存和20KByte的SRAM),32个增强型I/O接口和两条高速APB总线外设。
STM32F103C8芯片供电电压为2.0V~3.6V,正常工作温度在-40°
C至+85°
C温度之间,其工作温度扩展范围在-40°
C至+105°
C之间。
主控芯片STM32的省电模式保证低功耗应用的需求。
2.3主要元器件介绍
2.3.1红外发射管
红外信号发射管原理与红外发光二极管类似,也称为红外发射二极管,但是红外发射管发出的光信号是不可见光,这是与发光二极管的区别等,它属于二极管类型的器件。
它能将电信号转换成不可见的红外光并发射红外信号出去的发光元器件。
红外发射管的原理和结构与普通的发光二极管相似。
红外发射管高效率构成材料常用有由砷化镓(GaAs)、砷铝化镓[10](GaAlAs)等制作成PN结,再外加正向偏压往PN结导入电路并激发红外光信号[11]。
红外发射二极管发射的波长,与其本身的材质有关。
如以砷化镓材质制成的红外发射二极管,其所发出的红外光信号光波长一般在940~950nm范围之间。
红外线发射管的发射的光信号也是随电流变化的比例而定。
同时,红外光信号也随温度变化而产生影响,当温度下降时,红外发射光信号反而增强;
而温度上升时,红外光信号则会减弱。
因热损耗原因,元件上的温度会随之上升,发射管的发光效率就会受到相应的影响而降低。
红外发射二极管如图2-3-1所示:
图2-3-1红外发射二极管
2.3.2红外一体化接收头VS1838B
目前市面上通常是用红外一体化接收头对红外遥控信号进行解调。
一体化红外接收头主要特点:
体积小、灵敏度高、无需多加外接元件,而且抗干扰性强,使用十分的方便。
技术参数如下:
Ø
工作电压:
2.7~5.5V
工作电流:
大于0.6mA
工作温度:
-25~+85(℃)摄氏度
储存温度:
-40~+125(℃)摄氏度
静态电流:
在无信号输入的条件性,静态电流处于0.1~0.5mA之间
接收距离:
不少于20~23米
接收角度:
θ1/2+/-35Deg
载波频率:
38KHz
图2-3-2
2.4系统各模块介绍
2.4.1电源电路
图2-4-1电源模块
本设计电路采用LM1117稳压芯片将外接5V电源转换成3.3V,然后将转换得到的电源给分别给单片机和红外模块供电。
LM1117是一个低压差三端可调稳压集成电路,其压差在1.2v输出,它有电流限制和热保护的作用,输出端需要一个22UF的电容来维持稳定性。
它的特性有以下4点:
(1)电流限制和热保护作用;
(2)输出电流可达800mA;
(3)线性天调整率为0.2%;
(4)负载调整率为0.4%;
LM1117的实物图如下:
2.4.2复位电路
图2-4-2复位电路模块
2.4.3时钟电路
图2-4-3时钟电路模块
2.4.4下载电路
下载电路模块采用SWD接口方式下载,另SWD方式下载最少需要两根线(SWDIO和SWCLK)才能下载并调试代码。
SWD方式下载在产品设计过程中更为方便,因为SWD可实现在线联调功能,而且下载速度更快,在研发设计时建议采用SWD方式下载。
图2-4-4下载电路
2.4.5独立键盘电路
该设计的键盘模块电路采用独立键盘的方式排列。
因为该设计主要是对红外遥控学习功能的验证,所以其按键应用的个数也相对较少,所以系统最后决定采用独立键盘的方式来设计该系统的按键[12]。
图2-4-5独立键盘模块
2.4.6红外发射电路
红外发射模块电路采用红外发光二极管来发射红外遥控信号。
红外信号发射的电路原理如图2-4-6所示。
发射红外信号时需由STM32F103C8芯片内部的16定时器产生一个频率为38KHz载波信号作为红外信号发射时必不可少的红外载波信号。
红外发射信号为高电平时启动定时器,产生载波信号,当为低电平时,关闭定时器[13]。
从而实现红外信号的的还原、再生。
红外编码信号是先对38KHz左右的红外载波信号进行调制,而不是直接采用未调制红外光信号所产生的红外线信号来发射的[14]。
用其载波信号来驱动红外发射二极管发光,即采用此调制的技术的主要好处是:
能使红外发射管的脉冲电流很大而平均的直流电流比较小,发射管管芯不至于过热并且所产生的信号有利于接收端解调出有效的信号。
提高了其信噪比和红外信号传输距离。
红外遥控发射电路模块如图2-4-6所示:
图2-4-6红外发射模块
2.4.7红外接收电路
红外接收模块采用的是红外接收一体头VS1838B,其频率为37.90KHz。
图2-4-7红外接收模块
3软件部分设计
3.1KeiluVision4集成开发环境介绍
KeiluVision4是ARM公司在原有的的Keil的开发环境下再集成RealViewMDK等一些开发工具,与2011年3月发布了功能更为强大,性能较为稳定功能更为完善的版本——KeiluVision4。
KeiluVision4强大的编译功能和灵活的调试工具实现与ARM器件的完美融合。
KEILuVision4采用标准C编译器ARM系列等微控制器的嵌入式软件开发提供了人性化的C语言编译环境,同时保留了汇编代码高效,快速的特点[15]。
随着KeiluVision4编译器功能的不断完善,KEILuVision4集成了越来越多的工具。
其集成了开发环境包含:
实时操作系统,汇编器,调试器,项目管理器,编译器[16]。
KeiluVision4为ARM内核ARM7、ARM9、Cortex-M、Cortex-R4等微处理器设备提供了一个完整的软件开发环境。
KeiluVision4开发环境界面如下图所示。
图3-1KeiluVision4开发软件界面
3.2软件总架构
该系统采用的编程语言为C语言,C语言的功能强大,执行效率高,且可移植性高,所以采用C语言编写该系统的软件。
该系统的软件主要划分为四个模块:
红外接收模块、红外发射模块、独立键盘驱动模块、滴答定时器驱动模块等四个主要的软件模块代码。
3.2.1系统主程序流程图
图3-2-1
系统上电后开始工作,首先对外设进行初始化配置,并实时监测是否有按键操作,若有按键操作则响应相应的事件。
3.2.2主程序程序代码
/****************************************Copyright(c)*******************
**福建师范大学
**-----------------------------------------------------------------------
**文件:
main.c
**作者:
Liwx
**日期:
2014.03.08
**版本:
v1.0
**版本信息:
NONE
**文件信息:
主函数实现
**版本特征:
**
************************************************************************/
intmain(void)
{
Device_Init();
//设备初始化
while
(1)
{
switch(ReadKey())
{
caseSTUDYKEY:
IR_Rec();
//接收红外信号,记录高低电平时间
break;
caseSENDKEY:
IrSend(TimeBuf_L,IRBUFSIZE);
//发送红外编码
default:
break;
}
P26=~P26;
Delay(0xffff);
}
}
3.2.3红外接收模块流程图
图3-2-3
红外接收程序主要实现对红外信号的捕捉和记录。
3.2.4红外接收模块程序代码
/************************************************************************
**函数:
IR_Rec,红外学习(轮循)
**参数:
**返回:
Liwx
*************************************************************************/
voidIR_Rec(void)
Ir_u8i;
//------------------------------------------------------------------
//等待(遥控或按键)按键按下
NEXT:
if(WaitKey_Down(