胡进德
()仙桃职业学院科研处,仙桃433000
摘要:设计了一种适用于N采用外部中断和定EC红外传输协议的解码系统。系统以单片机STM32F103C8T6为核心,
时器进行软件解码,解码结果通过串口调试软件在PC机上进行了验证。详细介绍了NEC红外传输协议和解码方法,包括系统软硬件设计、软件设计流程图、核心功能函数和程序代码。关键词:红外解码;外部中断;定时器STM32F103C8T6;NEC红外传输协议;
中图分类号:TP31 文献标识码:A
DesinofDecodinstemforInfraredRemoteControllerBasedonSTM32F103C8T6ggSy
HuJinde
:AdAbstractecodinstemofinfraredremotecontrollersuitableforNECinfraredtransortprotocolisdesined.Thesstemtakesgsypgy
(,,)ScientificResearchDeartmentXiantaoVocationalColleeXiantao433000,Chinapg
,,andhardwaredesintheflowchartofsoftwaredesincorefunctionsandproramcode.ggg
,onPCbserialdebuinoftware.NECinfraredtransortrotocolanddecodinethodareintroducedindetailincludinthesoftwareygggsppgmg
,MCUSTM32F103C8T6asthecoretocomletesoftwaredecodinxternalinterrutandtimerandthedecodinesultsareverifiedpgbyepgr
:;;;KeordsSTM32F103C8T6;NECinfraredtransortprotocolinfrareddecodinexternalinterruttimerpgpyw
引 言
码和按键数据码均传送两次,一次是原码,一次是反码,以确保可靠传送;采用PWM(脉冲宽度调制)方式,以发射;“,一个数据位的传输时间是,用时1.38kHz0”125ms
[1]
“”用时2.125ms。NEC红外传输协议的帧数据格式如
红外遥控具有体积小、信息传输可靠、功耗低、成本低
等显著特点,越来越多地应用于嵌入式系统。红外遥控系统一般由发射和接收两大部分组成,红外遥控器所发射的信号编码格式不同,其解码的方法也会随之发生变化。目前市场上所用红外遥控器广泛使用两种形式的编码格式,一种是采用NEC红外传输协
;红外载波的占空比代表比特“和比特“载波频率是0”1”
图1所示,其位定义如图2所示。
议的PWM(脉冲宽度调制)
方式,一种是采用Philis红p
外传输协议的PPM(脉冲位
图1 NEC红外传输协议的帧数据格式
1]
。通过对市场上一种名为T置调制)方式[ELESKY的2]
红外遥控器[所发射的信号进行测试,研究表明,其信号
、位用户编码(含低8位用户编码和高8位用户编码)8位按键数据码和8位按键数据码的反码组成。每帧数据发
在图1中红外遥控器发射的每帧数据有3由12位,6
波形和脉冲间隔时间符合N无重复码。EC红外传输协议,本文依项目需要针对TELESKY红外遥控器设计了基于单片机STM32F103C8T6的解码系统。
1 NEC红外传输协议
;位用户编码(地址码)和8位按键数据码(命令码)用户编
一帧数据包含8NEC红外传输协议的主要特征是:
图2 NEC红外传输协议的位定义
7 8
Microcontrollers&EmbeddedSstems 2019年第10期ywww.mesnet.com.cn
,送前有一个引导码(同步码)引导码由一个9ms的高电
平和一个4.5ms的低电平组成。每帧数据按照低位在
3]
。帧数据中采用反码是为了增加前、高位在后顺序发送[
STM32F103C8T6的PA7引脚进行检测。HS0038B第1
引脚为正电源引脚,工作电压为2.实际工作电7~5.5V,
传输的可靠性,因此,反码可用于解码时进行校验对比。需要注意的是,遵循NEC红外传输协议的发射芯片可有两种用户编码方式,一种是8位用户码原码加8位用户码的反码,另一种是1通过改变红外发射芯片6位用户编码,
1]
。外部电路来选择不同的用户编码方式[
脚为负电源引脚,接地;第3引脚为输出端,连接
STM32F103C8T6的PA7引脚。当HS0038B没有接收到红外遥控信号时,第3引脚输出保持高电平;当接收到红外遥控信号时,第3引脚输出从高电平变为低电平,其下
[6-7]
。需要注意的降沿触发STM32F103C8T6的外部中断
压为3.与S第2引3V,TM32F103C8T6工作电压相同;
ms的低电平构成。一个0.56ms的脉冲对应0.56ms的
1]
。连续载波[
的低电平构成,比特“由一个0.0”56ms的脉冲和0.56
”在图2中比特“由一个0.156ms的脉冲和1.69ms
是,一体化红外接收头输出解调后的脉冲信号电平与红外的P其数A7引脚接收到的帧数据格式电平与图1反相,据位定义也与图2反相:比特“由一个0.1”56ms的低电
8]
,遥控器发送的编码格式电平反相[即STM32F103C8T6
2 解码系统硬件设计
4]
。本系统采用外部中断法,断法和定时器捕获法[即通过
”;平和1.传输比特“需要2.69ms的高电平构成,125ms”比特“由一个0.056ms的低电平和0.56ms的高电平构
单片机解码红外遥控器常用的方法有查询法、外部中
外部中断检测红外信号利用单片机定时器测量帧数据中每一位数据的传输时间,从而识别数据位是比特“还是1”
[3]
”,比特“解码系统硬件设计如图3所示。0
EXTI和定时器TIM2统计PA7引脚接收到的帧数据中2个下降沿之间的间隔时间就可得到帧数据中每一位数据””。的传输时间,从而识别数据位是比特“还是比特“10
[9]
成,传输比特“需要1.通过外部中断0”125ms。因此,
3 解码系统软件设计
功能模块的操作既可以通过对芯片底层的寄存器,也可以使用ST公司提供的标准函数STM32F103C8T6相关寄存器。解码系统软
件设计主要涉及5个方面。
在A对处理器RM嵌入式系统开发中,
]10
,库[本系统采用标准函数库操作
3.1 配置红外脉冲信号输入引脚PA7为下降沿触发中断
图3 红外信号接收与解码电路
具有运行速度ARMCortexM3为内核的32位单片机,
图3中U这是一款以1为STM32F103C8T6处理器,
3.1.1 初始化GPIO的相关寄存器
EXTI和嵌套向量中断控制器NVIC的相关
寄存器,配置PA7为下降沿触发中断。
外部中断 通过初始化通用端口GPIO、
快、处理能力强、外设接口丰富、价格低廉等特点,专门应用于对性能要求较高、成本要求较低以及低功耗的场合,,其最高工作频率为7工作电压为2~3.2MHz6V,KB
/的闪存和2与通用端口G0KB的SRAM,37个IO,PIO
;GPIO_InitTeDefGPIO_InitStructure yp
时钟和A相关初始化程序如下:FIO时钟,
[10]
将P开启端口A7配置为浮空输入,
映射的外部中断EXTI有16个,1个16位高级控制定时器,3个16位通用定时器,3个USART串口通信模块
5]
。本系统通过S等[TM32F103C8T6的PA7引脚以外部
RCC_APB2PerihClockCmd(RCC_APB2Perih_GPIOA|RCC_pp_A;APB2PerihFIO,ENABLE)p
//开启G用到EPIO端口时钟,XTI必须开启AFIO时钟
//选中当前端口的引脚7
//设定为浮空输入
//声明结构体变量以便初始化GPIO相关寄存器
中断方式检测红外信号,使用通用定时器TIM2测量帧数(和串口调试软件在PPA9为发送引脚)C机上显示。
_GPIO_InitStructure.GPIO_Pin=GPIO_Pin7;
据中每一位数据的传输时间,解码结果通过USART1
图3中U它负责将2为一体化红外接收头HS0038B,
ING;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOAT-();GPIO_InitGPIOA,&GPIO_InitStructure
调制在38kHz上的红外编码信号接收和解调后送给//初始化GPIOA相关寄存器
敬请登录网站在线投稿 2019年第10期
7 9
3.1.2 初始化EXTI的相关寄存器
发中断请求,相关初始化程序如下:
[10]
应将P并配置为下降沿触A7与外部中断线连接,
();//设置系统时钟为7SstemInit 2MHzy
;TIM_TimeBaseInitTeDef TIM_StructInityp
__;EXTIInitTeDefEXTIInitStructureyp
);Source7
GPIO_EXTILineConfiGPIO_PortSourceGPIOA,GPIO_Pin-g(
//声明结构体变量以便初始化EXTI相关寄存器
//将PA7与外部中断线连接
;BLE)
RCC_APB1PerihClockCmd(RCC_APB1Perih_TIM2,ENA-pp
//声明结构体变量以便初始化TIM2寄存器
//开启TIM2时钟
TIM_StructInit.TIM_Period=2;
__L_LEXTIInitStructure.EXTIine=EXTIine7; __M_M_;EXTIInitStructure.EXTIode=EXTIodeInterrut p
TIM_StructInit.TIM_Prescaler=3600;
//设定计数器自动重装值
//设定预分频值
//使用外部中断输入线7
TIM_StructInit.TIM_ClockDivision=TIM_CKD_DIV1;
__T_T_F;EXTIInitStructure.EXTIrier=EXTIrierallinggggg__LEXTIInitStructure.EXTIineCmd=ENABLE; _(_);EXTIInit&EXTIInitStructure
//设置EXTI线路为中断请求
_U;TIM_StructInit.TIM_CounterMode=TIM_CounterModep
//设置时钟分割
//设置EXTI线路为下降沿触发中断请求
//开放EXTI线路中断请求//初始化EXTI相关寄存器
();TIM_TimeBaseInitTIM2,&TIM_StructInit
//设置向上计数模式
(,;TIM_ITConfiTIM2,TIM_IT_UdateENABLE) gp(;TIM_CmdTIM2,ENABLE)
//初始化TIM2寄存器
//使能TIM2中断
3.1.3 初始化NVIC的相关寄存器
();TIM_ClearFlaTIM2,TIM_FLAG_Udate gp
//启动TIM2
中断优先级高于T使用vIM2中断,oidNVIC_Priorit-y
(函数设定优GrouConfiuint32_tNVIC_PrioritGroupgyp)
降沿触发中断和定时器TIM2计数溢出中断。设定EXTI先级分组为第1组,EXTI中断抢占优先级为1,TIM2中断抢占优先级为0,相关初始化程序如下:
程序中用到了2个中断源:来自PA7引脚的EXTI下
3.2.2 初始化NVIC的相关寄存器
始化程序如下:
//清除TIM2的待处理标志位
配置定时器T设置其优先级,相关初IM2为中断源,
//选择第1组//配置中断源
(_);NVIC_PrioritGrouConfiNVIC_PrioritGrou1ypgyp_;NVIC_StructInit.NVIC_IRQChannel=TIM2IRQn
;NVIC_InitTeDefNVIC_InitStructureyp
(_);NVIC_PrioritGrouConfiNVIC_PrioritGrou1ypgyp
//声明结构体变量以便初始化NVIC相关寄存器
//选择第1组 //配置中断源
NVIC_StructInit.NVIC_IRQChannelCmd=ENABLE;
;NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn __;NVICInitStructure.NVICIRQChannelPreemtionPriorit=1pyNVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_StructInit.NVIC_IRQChannelPreemtionPriorit=0;py
//使能中断通道
NVIC_StructInit.NVIC_IRQChannelSubPriorit=1;y
//抢占优先级为0//子优先级为1
//抢占优先级为1//子优先级为1
3.3 统计帧数据中每一位脉冲的传输时间
();/初始化NVNVIC_Init&NVIC_StructInit /IC相关寄存器
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
3.2 配置定时器TIM2每0.1ms产生一次溢出中冲的传输时间。程序如下:
();//初始化NVNVIC_Init&NVIC_InitStructureIC相关寄存器
//使能中断通道
_t中断服务程序中,全局变量irime每0.1ms自动加1。_通过irtime可统计PA7引脚接收的帧数据中相邻的2
个下降沿之间的间隔时间,同时也获得帧数据中每一位脉
定时器T在TIM2每0.1ms产生一次溢出中断,IM2
置T以便在其中断处IM2每0.1ms产生一次溢出中断,
通过初始化定时器T配IM2和NVIC的相关寄存器,
_()/voidTIM2IRQHandlervoid /TIM2中断服务程序//清除TIM2中断标志位以便下一个0.1ms到来时触发TIM2
理程序中统计帧数据中每一位数据的传输时间。
{T();IM_ClearITPendinBitTIM2,TIM_IT_Udategp
3.2.1 初始化TIM2的相关寄存器
,设定系统时钟为7预分频值P2MHzrescaler为
计数器自动重装值P此时定时器T3600,eriod为2,IM2
[10]
每0.1ms产生一次溢出中断。相关初始化程序如下:
_irtime++;
//中断
3.4 存储从引导码开始的33个脉冲传输时间
//全局变量i_rtime的计数值自动加1}
当H系统默认处在S0038B没有接收到红外信号时,
8 0
Microcontrollers&EmbeddedSstems 2019年第10期ywww.mesnet.com.cn
“空闲”状态,PA7引脚一直是高电
平。当HS0038B接收到红外信号时,PA7引脚由高电平变为低电平,,此时将触发外部中断E在EXTIXTI中断服务程序中先判断采集到的脉
_t冲信号是否为引导码,如果irime),则可视为引导码(引导码传输ms
,考虑到时间理论值为13.5ms
()计数值大于9且小于109ms50(15
STM32F103C8T6和红外遥控发射器的晶振频率与标称值会有一定的偏差,以及HS0038B红外接收头输
出波形的轻微畸变,在程序设计时要
4]
),留有一定的容限误差[并将从引
保存到事先定义好的time的计数值)
[(数组i全局变量)中。Erdata33]X-_导码开始的33个脉冲传输时间(ir
TI外部中断服务程序流程图如图4图4 EXTI中断服务
所示。流程图
图5 提取4个字节按键码的函数流程图
中提取比特“和比特3.5 从数组irdata[33]1”
“”并形成4个字节的按键码0
[]存放的是引导码传输时间,其他3irdata02个数组元素[]存放了4个字节按键码的传输时irdata1~irdata[32]”,间。比特“的传输时间为2.其对应的数组元素125ms
的解码为0其0FF46B9,
他按键的解码依此类推。从解码的实验结果可以看出,32位比特的前16位为用户码,后16位为8位按键数据码和按键数据码的反码,符合NEC红个按键数据码与图6中
[]数组i存放了3其中数组元素rdata333个脉冲传输时间,
”,取值为2比特“的传输时间为1.其对应2或23;0125ms
的数组元素取值为11或12。在程序设计时同样要留有[[一定的容限误差,当数组元素i取值rdata1]~irdata32][提取1data1]~irdata[16]6位用户编码,irdata[17]~“”。因此从数组i[]中可提取4个字节按键码:0rdata33ir-”,为2可认为接收到比特“否则认为接收到比特0~25时,1
外传输协议,且图7中21
21个按键的数据码相同,
相互依次对应,从而验证了解码方法的正确性。
图6 遥控器外观和按键数据码
[][[提取8位按键数据码,提irdata24irdata25]~irdata32]取8位按键数据码的反码。提取4个字节按键码的函数流程图如图5所示。
4 解码结果验证
为了验证解码方案的正确性,通过串口调试软件将实验结果显示在PC机上。
图6是TELESKY遥控器外观和对应的按键数据码,
图7 串口调试软件显示的按键码
图7是显示在PC机上的实验结果。图7中有84个数据一组对应一个按键,分别指示按键的用户码原码、用户码的反码、按键数据码和按键数据码的反码。如遥控器左上
码,从左向右每4个数据码(对应4个字节共32位比特)角第一个按键“的解码为0按键“CH-”0FF45BA,CH”
结 语
本文介绍的红外遥控器解码方法原理直观、简单可
靠,已经应用于实际项目中,可为无线遥控嵌入式系统学习者提供一个应用范例。该方法不仅适用于NEC红外传输协议,对于其他传输协议的解码同样有很好
85
敬请登录网站在线投稿 2019年第10期
8 1
表4 使用HMM在嘈杂环境下识别结果
控制指令闭合拇指伸开拇指手腕逆时针手腕归位伸开手掌握紧拳头
1号正确2号正确3号正确4号正确次数/总次数次数/总次数次数/总次数次数/总次数
[]黄岗.]马尔可夫及隐马尔可夫模型的应用[电子设计工3J.
州:广东工业大学,2011.
/710/610/710/610/510/610
/610/710/610/410/510/410
/510/510/710/410/610/510
/410/610/810/510/710/610
[]任昕.基于隐马尔可夫模型和卷积神经网络的W4eb安全检
():程,2013,21176062.
[]王稚慧.基于HMM建模的语音识别算法的研究[西安:5D].
测研究[长沙:湖南大学,D].2018.西安建筑科技大学,2005.京理工大学,2018.
[]曹冠彬.基于HMM的连续语音识别技术研究[南京:南6D].
[]袁腾,李秋红,杨国斌,等.基于Z7iBee和3G技术的WSNsg
结 语
HMM算法实现的前提是需要大量的语音样本训练,
不仅需要考虑到语音语调的差别,还要考虑非特定人性别年龄的差异,这样才能够适应实际语音中的不同情况,因此HMM算法具有良好的识别性和抗噪性。
参考文献
[]周艳萍.机器人嵌入式语音识别系统设计与开发[广州:1D].
[]田泽,智爱娟,阎效莺,等.8UDA1341TS在嵌入式语音系统中的
129,133.
]:环境监控系统设计[传感器与微系统,J.2012,31(6)128
[]周夕良.]嵌入式语音识别系统研究[电脑与信息技术,9J.
]():应用[西北大学学报:自然科学版,J.20062214220.
():2014,2215658.
张起浩、蒋少国,主要研究方向为智能硬件设计;赵鹏(助理实验,师)通讯作者,主要研究方向为智能硬件设计、语音识别。
()责任编辑:薛士然 收稿日期:2019-04-23
[]周慧芳.基于HMM的嵌入式语音识别系统的研究[广2D].
华南理工大学,2012.
,77 [5]UnderwoodC,PellerinoS,LaasVJetal.Usingppg
[]韩忠辉.]基于G自动6PIB的无线通信计量自动测试系统[J.
():化与仪器仪表,20166110.
tonomousAssemblfaReconfiurableSaceTelescoeyogpp
([],():AAReST)J.ActaAstronautica2015114112122.
/CubeSatmicrosatellitetechnolotodemonstratetheAu-gy
]():方案设计[计算机测量与控制,J.2017,2569599.
[]曹兴冈,韩晨.基于P11XI航电计算机测试设备的设计与实现
[]():电子技术,J.201626.
[]刘新飞,李亚利,王东,等.通用航管二次雷达功放模块自动12
],():测试系统研制[计算机测量与控制,J.20162494749.
[]刘倩茜,王格芳.基于多总线结构的电路板测试系统设计研7
]():究[价值工程,J.2016,3532131133.
[13]LiuY,PenWanetal.ReviewoncberphsicalgY,gB,yy
/,sstems[J].IEEECAAJournalofAutomaticaSinicay
[]:8ShladoverSE.ConnectedandautomatedvehiclesstemsIn-y
]troductionandoverview[J.JournalofIntellientTransor-gp,():tationSstems2018,223190200.y
[]张凯,李涵,姜静.基于A9TE与BIT组合的NAMP自动测试
():2017,412740.
[]郭栋梁,刘新妹,殷俊龄,等.通用电路板自动故障诊断系统14
]():的设计与实现[中国测试,J.2016,427112116.
():4321325.
[]刘鹏飞,谢森,姚玉山,等.某型制导武器通用自动测试系统10
]与故障诊断系统设计[海军航空工程学院学报,J.2015,30
[]宋丽涵,张琴.基于总线技术的仪器仪表自动检定系统设计15
[]():兰州文理学院学报:自然科学版,J.201625256.
,何进(讲师)主要从事电子技术、电力电子技术等教学研究。
()责任编辑:薛士然 收稿日期:2019-05-06
81 的参考价值。
[]李幸泽.基于WE广1B方式的智能家电控制网关的硏究[D].
州:广东工业大学,2012.[]T红外线遥控器,2ELESKY.2019.[]李雪莹.基于单片机的空调红外线编解码系统的设计和实现3
参考文献
[]管芳绍,徐志江,孟利民.基于嵌入式系统的抗干扰红外软解7
]():码方法[计算机技术与应用,J.2010103033.
[]杨萍.基于F8PGA的功放遥控控制系统的设计与实现[D].
():成都:电子科技大学,201532933.[]胥加林,游安华,皮大伟.基于单片机的智能红外遥控开关9
[成都:电子科技大学,D].2014.
[]何乃味.]单片机定时器捕获模式解码红外遥控器的方法[4J.():现代电子技术,2012181113.[]意法半导体(,5ST).STM32F103x8datasheet2019.
[]():机械制造与自动化,J.201200201.
[]肖广兵,万茂松,羊玢.北京:电10ARM嵌入式开发实例[M].
子工业出版社,2013.
,胡进德(副教授)主要研究方向为嵌入式系统、机电一体化。
()责任编辑:薛士然 收稿日期:2019-05-27
[]圣狄豹.6HS0038B红外线接收发射对管,2019.
敬请登录网站在线投稿 2019年第10期
8 5
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- stra.cn 版权所有 赣ICP备2024042791号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务