msp430红外解码
- 格式:docx
- 大小:15.20 KB
- 文档页数:3
敬请登录网站在线投稿 2018年第1期79M S P 430G 2553的红外学习调试方法吴丽萍,戈志明(苏州工业园区职业技术学院,苏州215123)摘要:电视遥控器使用的是专用集成发射芯片来实现遥控码的发射,不同公司的遥控芯片采用的遥控码格式不同,较普遍的有两种,一种是N E C 标准,另一种是P H I L I P S 标准㊂有些公司摄像机的遥控器是不遵循任何标准的红外编码格式的,针对这种情况我们提出定时器捕获的方法,记录接收到的波形的过程即实现红外学习过程㊂关键词:M S P 430G 2553;遥控器;红外学习中图分类号:T P 336 文献标识码:AI n f r a r e dL e a r n i n g D e b u g g i n g Me t h o dB a s e do nM S P 430G 2553W uL i p i n g ,G eZ h i m i n g(S u z h o u I n d u s t r i a l P a r k I n s t i t u t e o fV o c a t i o n a lT e c h n o l o g y,S u z h o u215123,C h i n a )A b s t r a c t :T h e s p e c i a l i n t e g r a t e de m i s s i o nc h i p isu s e dt or e a l i z e r e m o t ec o n t r o l c o d e t r a n s m i s s i o n i nt h e t e l e c o n t r o l l e r ,b u t t h er e m o t e c o n t r o l c h i p s c o m e f r o md i f f e r e n t c o m p a n i e sw h i c hu s i n g t h e d i f f e r e n t f o r m a t .T h e r e a r e t w o c o mm o n t y p e s ,o n e i s t h eN E Cs t a n d a r d ,t h e o t h e r i s t h eP H I L I P S s t a n d a r d .H o w e v e r ,s o m e c o m p a n y 's r e m o t e c a m e r a s d o n o t f o l l o wa n y i n f r a r e d e n c o d i n gf o r m a t s t a n d a r d .I n v i e wo f t h i s s i t u a t i o n ,t h em e t h o d o f t i m e r c a p t u r e i s p r o p o s e d ,w h i c h c a n r e c o r d t h e r e c e i v e dw a v e f o r ma n d t h e n a c h i e v e s t h e p r o c e s s o f i n f r a r e d l e a r n i n g.K e y wo r d s :M S P 430G 2553;t e l e c o n t r o l l e r ;i n f r a r e d l e a r n i n g 引 言电视遥控器使用专用集成发射芯片来实现遥控码的发射,如东芝T C 9012㊁飞利浦S A A 3010T 等㊂通常彩电遥控信号的发射,就是将某个按键所对应的控制指令和系统码(由0和1组成的序列)调制在38k H z 的载波上,然后经放大㊁驱动红外发射管将信号发射出去㊂本文使用的是一体化接收头,当一体化接收头收到38k H z 红外信号时,输出端输出低电平,否则为高电平㊂不同公司的遥控芯片,采用的遥控码格式也不一样㊂较普遍的有两种:一图1 N E C 标准种是N E C 标准,另一种是P H I L I P S 标准㊂1 背景分析N E C 标准:遥控载波的频率为38k H z (占空比为1:3),当某个按键按下时,系统首先发射一个完整的全码,如果键按下超过108m s 仍未松开,接下来发射的代码(连发代码)将仅由起始码(9m s )和结束码(2.5m s)组成㊂一个完整的全码=引导码+客户码+客户码+数据码+数据反码㊂其中,引导码是由高电平4.5m s 和低电平4.5m s 组成;接着是客户码的低8位㊁客户码的高8位㊁数据码8位㊁数据码的反码8位,共32位数据;其中前16位为客户码,能区别不同的红外遥控设备,防止不同机种遥控器互相干扰;后16位为8位的数据码和8位的数据反码,数据反码用于核对数据是否接收准确㊂N E C ㊁T O S H I B A ㊁S A M S O N G 公司的编码格式有其共通之处:全码都由 引导码+客户码+客户码+数据码+数据码反码 组成;接收端根据数据码作出应该执行什么动作的判断㊂连发代码是在持续按键时发送的码,它告知接收端,某键是在被连续地按着㊂N E C 标准如图1所示㊂发射数据0时用 0.56m s 高电平+0.565m s 低电平=1.125m s 表示,数据1用 高电平0.56m s +低电平1.69m s =2.25m s 表示㊂即发射码 0 表示发射38k H z 的红外线0.56m s ,停止发射0.565m s ㊂发射码 1 表示发射38k H z 的红外线0.56m s ,停止发射1.69m s㊂需要注80M i c r o c o n t r o l l e r s&E m b e d d e dS ys t e m s 2018年第1期w w w .m e s n e t .c o m .c n意的是:当一体化接收头收到38k H z 红外信号时,输出端输出低电平,否则为高电平㊂所以一体化接收头输出的波形是与发射波形是反向的,如图2所示㊂图2 遥控发射码与一体化接收头信号比较N E C ㊁T O S H I B A ㊁S AM S O N G 公司的编码格式有其共通之处:全码都由 引导码+客户码+客户码+数据码+数据码反码 组成;数据 0 和 1的定义相同,不同的只是引导码高低电平的持续时间不同,客户码位数有长有短,第一个简码和全码最后一位之间的延时不同,简码的引导脉冲不同等㊂所以,可以把相同的部分做成通用子程序,包括产生数据 0 和 1 的子程序 O N E 和 Z E R O,9m s ㊁4.5m s ㊁2.25m s ㊁22m s ㊁45m s 等时间控制子程序㊂当使用M S P 430G 2553时,红外遥控器的学习需要和通信功能相结合,单片机不能存储学习到的红外键值,需要传给存储器保存,也需要由存储器来传输要还原的键值㊂同时由于M S P 430G 2553的R AM 比较小,只有512字节,如果要实现红外键值的学习,需要谨慎使用R AM 空间㊂2 解决方案有些公司的摄像机的遥控器是不遵循任何标准的红外编码格式的,所以要进行红外学习只能采集到红外接收头端收到的码值波形,在还原的时候,也就是在低电平时间内红外输出端发送38k H z 的载波,在高电平时间内红外输出端保持低电平㊂记录接收到的波形的过程就是红外学习的过程,可以采用定时器捕获的方法,定时器设置为上升沿㊁下降沿都捕获㊂M S P 430G 2553有两个定时器,其中一个用来记录系统T I C K S (精度为10μs),另外一个用作定时器捕获㊂使用这两个定时器就可以记录下红外接收头接收到的波形,中断处理流程图如图3所示㊂我们记录波形中高㊁低电平的时间,由于开始学习的第一个状态一定是低电平状态,所以不需要记录高低电平位置,那么接下来需要把记录下来的高低电平的值传给业图3处理流程图4 业务程序处理流程务,此时要区别下是不是干扰,如果记录的值太少就不是键值,而是干扰源发出的,然后在业务程序需要进行发送的时候再把这组值发给我们,业务程序处理流程如图4所示㊂那么如果业务将包含一个键值信息的高低电平值发给我们,该怎么处理呢?在红外键值还原过程中只需要用到一个用于计时功能的定时器,结合接收到的键值延时信息进行还原就可以了㊂其中的长延时是公司的摄像机遥控器在按键按下后发送的若干组值,这些代表一个键值,每组之间会有20m s左右的延时,这个延时也需要记录下来,并且需要记录下这个长延时出现在第几个高低电平位置,以便能正确还原出键值㊂还原流程如图5所示㊂敬请登录网站在线投稿2018年第1期81图5还原处理流程结语在调试过程中,首先需要弄明白红外编码和解码的原理,然后针对具体情况学习不止一种遥控器㊂由于不能针对某种红外协议标准进行学习,所以直接将接收到的红外波形的高低电平时间记录下来,还原时也是依据这个时间值进行还原㊂调试中总是遇到学习到的数据错误的问题,原因一般都是定义的中间全局变量的范围超出,因为M S P430G2553的R AM空间很小,如果定义的变量已经超出了范围,那么这个变量里存的值都是错误的㊂参考文献[1]T I.R S422a n dR S485S t a n d a r d sO v e r v i e wa n dS y s t e mC o n f i g u r a t i o n s,2010.[2]T I.G P I O U s e r'sG u i d e,2011.[3]J o n a h a nC o r b e,A l e s s a n d r o R u b i n i,G r e g K r o a h-H a r t m a n. L I N U X设备驱动程序[M].魏永明,等译.北京:中国电力出版社,2010.[4]刘刚,赵建川.L I N U X系统移植[M].北京:清华大学出版社,2011.吴丽萍(讲师),主要研究方向为自动控制系统;戈志明(工程师),主要研究方向为嵌入式系统,软件测试㊂(责任编辑:杨迪娜收稿日期:2017-09-14)传输,管理人员可以在多个平台上登录,实时掌控酒店房间动态,集中控制管理㊂此设计可帮助酒店节能省电,提高管理效率,给客人更加安全舒适的环境㊂参考文献[1]江苏沁恒股份有限公司.C H563D S1.P D F,2017.[2]K e v i nRF a l l,W.R i c h a r dS t e v e n s.T C P/I P详解(卷一)[M].北京:机械工业出版社,2016.[3]R F C2616H y p e r t e x tT r a n s f e rP r o t o c o l H T T P/1.1[E B/O L].[201710].h t t p://w w w.d o c i n.c o m/p7*******.h t m l&e n d p r o=t r u e.(责任编辑:杨迪娜收稿日期:2017-10-31)摔倒㊂此时设备向井上服务器传达人员处于摔倒状态的信息,通知井上人员对该井下人员采取相应急救措施㊂如果是误报警,该携带装置的人员可以通过误报警按钮取消㊂防摔倒检测功能软件设计流程如图3所示㊂图3防摔倒检测功能软件设计流程结语实验结果表明,本定位装置具有设备简单㊁成本低㊁实施方便㊁可靠性㊁精度和灵敏度高等特点,能适应井下恶劣环境并长期稳定工作,还结合R S S I技术与步长估计技术进行定位,得到具体的精确位置信息,以这样的方式对井下人员进行定位,可以减少事故发生后人员抢救的时间,保证人员的安全㊂参考文献[1]于平.煤矿井下人员定位系统的现状和发展[J].环球市场,2016(15):41-43.[2]何伟刚,吴其琦.煤矿井下小型无线定位器的设计[J].煤矿机械,2013(10):154-156.[3]苏静,吴桂义.煤矿井下人员定位系统现状与发展趋势[J].内蒙古煤炭经济,2012(9):111-112.[4]季利佳.基于W i F i和Z i g B e e技术的无线通信及人员定位系统在矿山的应用[J].电子世界,2016(14).(责任编辑:杨迪娜收稿日期:2017-10-19)。
基于MSP430单片机的红外甲烷检测仪设计及实现开题报告一、课题背景及意义甲烷是一种常见的天然气体,火灾、矿难和煤气中毒等危险事故中常常伴随着甲烷的泄漏,因此,研发一种可靠的、可用于现场检测的甲烷检测仪显得非常必要。
利用红外吸收技术来检测甲烷的浓度,是当前比较成熟的检测方法之一。
本课题的研究目的是针对红外吸收原理的特点,设计并实现一款基于MSP430单片机的红外甲烷检测仪。
二、研究内容1. 梳理现有的基于红外吸收原理的甲烷检测仪设计方案和实现方法,并对各方案进行分析,选择最适合本课题的方案。
2. 进行硬件设计,包括甲烷气体检测模块、光源和检测模块控制模块、信号放大和滤波电路、单片机控制模块以及电源等。
3. 进行软件设计,包括实现甲烷浓度检测的算法设计和单片机控制程序的编写。
4. 搭建实验平台,进行甲烷检测仪的测试和性能验证,包括响应时间、检测范围、测量误差等。
三、研究方案和方法1. 根据文献调研和吸取现有方案的优点,设计并确定最优的甲烷检测仪硬件电路方案。
2. 利用Proteus和Altium Designer等软件,进行电路的仿真和PCB 的布局设计。
3. 利用Keil等开发工具,进行单片机控制程序的编写和调试。
4. 构建实验平台和标准检测体系,测试甲烷检测仪的性能和精度等参数。
四、预期成果1. 基于MSP430单片机的红外甲烷检测仪硬件电路设计和实现。
2. 实现甲烷浓度检测的算法设计和单片机控制程序的编写。
3. 完成红外甲烷检测仪的性能和精度测试,并验证其性能和精度能够满足实际应用要求。
四、研究进度计划第一阶段:文献调研和方案设计(1个月)1. 商业化红外甲烷检测仪的调研。
2. 各方案的优缺点分析。
3. 最优方案的确定。
4. 硬件电路的设计。
第二阶段:开发工具学习和程序编写(2个月)1. Keil编译器的学习和配置。
2. 单片机控制程序的编写和调试。
第三阶段:实验平台和性能测试(2个月)1. 搭建实验平台。
MSP430AFE2x3MSP430AFE2x2MSP430AFE2x1 ZHCS136A–NOVEMBER2010–REVISED MARCH2011混合信号微控制器特性•低电源电压范围:1.8V至3.6V•多达3个具有差分可编程增益放大器(PGA)输入的24位三角积分模数(A/D)转换器•超低功耗•具有3个捕获/比较寄存器的16位Timer_A –激活模式:220μA(在1MHz频率和2.2V电压条件下)•串行通信接口(USART),可用软件来选择异步UART或同步SPI–待机模式:0.5μA•16位硬件乘法器–关闭模式(RAM保持):0.1μA•欠压检测器•5种节能模式•具有可编程电平检测功能的电源电压监控器/监视器•可在不到1μs的时间里超快速地从待机模式唤醒•串行板上编程,无需从外部进行电压编程,利用安•16位精简指令集(RISC)架构,高达12MHz系统时全熔丝实现可编程代码保护钟•片上仿真模块•基本时钟模块配置•系列成员汇总于表1。
–带有两个已校准频率的高达12MHz的内部频率•如需了解完整的模块说明,请参阅《MSP430x2xx –内部超低功耗低频(LF)振荡器系列用户指南》,文献编号SLAU144–高达16MHz的高频(HF)晶振–谐振器–外部数字时钟源说明德州仪器(TI)MSP430™系列超低功率微控制器包含几个器件,这些器件特有针对多种应用的不同的外设集。
这种架构与5种低功耗模式相组合,专为在便携式测量应用中延长电池使用寿命而优化。
该器件具有一个强大的16位RISC CPU,16位寄存器和有助于获得最大编码效率的常数发生器。
数字控制振荡器(DCO)可在不到1µs 的时间里完成从低功耗模式至运行模式的唤醒。
MSP430AFE2x3器件是超低功耗混合信号微控制器,集成了三个独立的24位三角积分A/D转换器、一个16位定时器、一个16位硬件乘法器、USART通信接口、安全装置定时器和11个I/O引脚。
MSP430单片机的原理与应用1. 简介MSP430单片机是德州仪器公司(Texas Instruments)推出的一款低功耗、高性能的16位单片机,广泛应用于各种嵌入式系统和物联网设备中。
本文将介绍MSP430单片机的基本原理和常见应用场景。
2. 基本原理MSP430单片机采用哈佛结构的架构,拥有16位的CPU,8到256KB的闪存和0.5到16KB的RAM。
其低功耗特点使得它在电池供电的嵌入式设备中得到广泛应用。
MSP430单片机的工作原理可以简单概括为以下几个步骤: - 程序存储器中的指令被取出并送入指令译码器。
- 指令译码器将指令解码,并执行相应的操作。
- 执行的结果被存储器读写单元读取或写入。
- 控制单元协调整个系统的操作,包括时钟、中断、输入输出等。
3. 应用场景3.1 智能家居MSP430单片机在智能家居领域中具有广泛的应用。
通过连接传感器、执行器和通信模块,MSP430单片机可以实现对温度、湿度、光照等环境参数的监控与控制。
并且,MSP430单片机能够通过无线通信和云平台实现智能家居设备的远程控制和监测。
3.2 工业自动化在工业自动化领域,MSP430单片机能够通过连接传感器和执行器实现对生产过程的监测和控制。
它能够实时采集温度、压力、流量等参数,并根据设定的逻辑进行自动控制。
同时,MSP430单片机的低功耗特性使得它适合在工业现场长时间运行。
3.3 物联网设备随着物联网的快速发展,MSP430单片机在物联网设备中的应用越来越广泛。
它可以用于连接各种传感器、执行器和通信模块,实现对环境、设备等的监测和控制。
而且,MSP430单片机的低功耗特性使得它非常适合在物联网设备中使用,能够延长电池寿命。
3.4 医疗设备在医疗设备领域,MSP430单片机能够实现对患者的生理参数的监测和控制。
它可以连接各种传感器,如心电传感器、体温传感器等,实时采集患者的生理数据,并可以根据需要进行报警和控制操作。
红外解码程序本篇介绍红外解码的原理和程序的写法。
下面来看一下,红外线是如何编码的。
下面来具体说一下,解码的原理,每按一下遥控器的一个按键,遥控器就会发出32个“0”“1”代码(当然是通过高低电平的占空比来判断是0还是1的),具体是0,1是如何编码的上面图片中有介绍,和一个引导码,引导码的作用是告诉处理器,接下来将要开始发送代码,我们在编写程序时,当检测到引导码时,就应该准备接受数据了。
32位代码中的前16位是用户识别码,不同的遥控器不相同,防止互相干扰的,后16是8为数据码,和8位数据反码。
接下来开始介绍如何解码程序的编写。
程序中用到了两个中断,一个是定时器中断,一个是外部中断。
定时器中断用来准确计时,判断接受的代码是0还是1,外部中断用来准确确定定电平到来的时刻,然后开始计时。
/*********************************************************函数功能:红外解码,用八位数码管显示红外线的按键码,便于红外控制测试环境:hot 51学习板编译环境:keil4整理人:张家越QQ:435835181整理时间:2011-04-03************************************************************/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code seg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0 x6f,0x77,0x7c,0x39,0x5E,0x79,0x71 };//0-f的段选码unsigned char code seg_we[]={0,1,2,3,4,5,6,7};uchar irtime,startflag,bitnum,irreceok;uchar irdata[33];uchar irprosok;uchar display[8];uchar ircode[8] ;sbit led1=P0^1;sbit led2=P0^2;/******************************************************************** ****函数功能:延时函数,在数码管显示时使用,不需要很精确********************************************************************* ****/void delay_50us(uint t){uchar j;for(;t>0;t--)for(j=19;j>0;j--);}/******************************************************************** ******函数的功能:定时器0的初始化********************************************************************* *****/void timer0init(){TMOD=0x02; //设置定时器工作在方式2TH0=0x00; //TL0=0x00; //设置定时器的初值ET0=1; //开定时器中断TR0=1; // 打开定时器EA=1; //开总中断}/******************************************************************** ****外部中断1的初始化********************************************************************* **/void int1init(){IT1=1; //设置触发方式为上升沿EX1=1; //开外部中断1EA=1; //开总中断}/******************************************************************** **定时器0的功能函数,每中断一次irtime++,用于计时********************************************************************* **/void timer0() interrupt 1{irtime++; //定时器中断一次irtime++,用于计时}/******************************************************************** ***外部中断0的处理函数,每当有低电平数据过来时,中断一次,(使用次中断的前提是,信号线必需接在外部中断0上面,也就是P3^2口),函数功能是,把信号从高低电平变成时间的代码放入irdata【】中********************************************************************* ***/void int1() interrupt 2{if(startflag){if(irtime>32) //一组代码检测完毕{bitnum=0;}irdata[bitnum]=irtime; //把检测到的时间送到数组irdata【】中去irtime=0;bitnum++;if(bitnum==33) //如果检测到bitnum=33,说明32位用户码已经检测完毕{bitnum=0; //将bitnum清零以便重新计数irreceok=1; //接收完毕标志位置一}}else //(此函数先进入else语句,跳过引导码的检测){startflag=1; //将开始标志位置一irtime=0; //设置时间初值为零irreceok=1; //接收完毕标志位置一}}/******************************************************************** *****函数功能:把irdata【】中的时间代码转换成二进制代码存放在ircode【】中********************************************************************* *****/void irpros(){uchar k=1,value,j,i;for(j=0;j<4;j++){for(i=0;i<8;i++){value=value>>1; //右移7次(第一次是00,相当于没有移位)if(irdata[k]>6) //循环8次{value=value|0x80;}k++;}ircode[j]=value;}irprosok=1;}/******************************************************************** ********函数的功能是:将ircode【】中的二进制代码转换成为16进制代码便于在数码管上显示******************************************************************* ********/void irwork(){display[0]=ircode[0]/16;display[1]=ircode[0]%16;display[2]=ircode[1]/16;display[3]=ircode[1]%16;display[4]=ircode[2]/16;display[5]=ircode[2]%16;display[6]=ircode[3]/16;display[7]=ircode[3]%16;}/******************************************************************** ****函数功能:用数码管显示解码结果********************************************************************* ***/void display1(){uchar i;for(i=0;i<8;i++){P2=seg_we[i];P0=seg_du[display[i]];delay_50us(40);}}void main(){timer0init(); //定时器初始化int1init(); //外部中断初始化while(1){if(irreceok) //判断数据接收完毕(数组中存储的是高低电平的时间){irpros(); //执行处理函数,将高低电平时间转化成16进制的0,1代码,存放在数组中irreceok=0; //标志清零}if(irprosok) //处理函数执行完毕,{irwork(); //将存储的16进制代码分离,便于数码管显示irprosok=0; //标志清零}display1();}}//在最后我再分析一下程序的编写思路,便于大家理解,一旦有按键按下,接受管接收到引导码,进入外部中断,并将高低电平的时间放入irdata【】数组中,接受完毕标志位置一,判断接受标志位,为1,进行处理函数,将高低电平转换成16进制数,处理标志位置一,判断处理标志位,为1,执行分离函数,将16进制数分离,便于数码管显示,分离完毕后显示。
红外通讯原理及实现详解红外线遥控是目前使用最广泛的一种通信和遥控手段。
由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。
1红外通信原理介绍红外通讯通过使用红外光进行通信,发送设备将电信号转成光信号,接收设备则再将光信号还原成电信号,红外收发系统的框图如图所示:图 1 红外收发系统目前基于红外通讯的通讯协议有上百种,这些协议大同小异,下面以飞利蒲的RC5协议为例来进行介绍。
同别的红外协议一样,飞利蒲的RC5协议也是由下列几部分组成:1 .1键码之所以定义键码就是为了规范设计,至少保证飞利蒲公司内部的红外通信设备之间可以互通,不会出现混乱的情况,当然大家也可以自个定义,这有点像TCP/IP中的应用层,你可以自个定义一个协议,也可以用标准定义好的协议。
键码是基于数字信号二进制的0/1而言的。
比如0x12,换成二进制就是0b0001 0010。
飞利蒲定义的键码如下所示。
1)地址设备对照表(下表中的不同地址用于给不同类型的设备使用)RC5 Address Device RC5 Address Device$00 - 0 TV1 |$10 - 16 Pre-amp$01 - 1 TV2 |$11 - 17 Tuner$02 - 2 Teletext |$12 - 18 Recorder1$03 - 3 Video |$13 - 19 Pre-amp$04 - 4 LV1 |$14 - 20 CD Player$05 - 5 VCR1 |$15 - 21 Phono$06 - 6 VCR2 |$16 - 22 SatA$07 - 7 Experimental |$17 - 23 Recorder2$08 - 8 Sat1 |$18 - 24$09 - 9 Camera |$19 - 25$0A - 10 Sat2 |$1A - 26 CDR$0B - 11 |$1B - 27$0C - 12 CDV |$1C - 28$0D - 13 Camcorder |$1D - 29 Lighting$0E - 14 |$1E - 30 Lighting$0F - 15 |$1F - 31 Phone2)命令功能对照表(下表中定应义了常用的遥控的命令)RC5 Command | TV Command | VCR Command------------------------------------------------------ $00 - 0 | 1 | 1$01 - 1 | 2 | 2$02 - 2 | 2 | 2$03 - 3 | 3 | 3$04 - 4 | 4 | 4$05 - 5 | 5 | 5$06 - 6 | 6 | 6$07 - 7 | 7 | 7$08 - 8 | 8 | 8$09 - 9 | 9 | 9$0C - 12 | Standby Standby |$10 - 16 | Volume + |$11 - 17 | Volume - |$12 - 18 | Brightness + |$13 - 19 | Brightness - |$32 - 50 | | Fast Rewind $34 - 52 | | Fast Forward $35 - 53 | | Play$36 - 54 | | Stop$37 - 55 | | Recording---------------------------------------------------------1 .2编码如何实现上述的键码的发送,并保持红外接收解码器件收到并识别呢,当然就必须按一定的格式进行编码并发送。
MSP430简介(超详细·)msp430简介MSP430是德州公司新开发的⼀类具有16位总线的带FLASH 的单⽚机,由于其性价⽐和集成度⾼,受到⼴⼤技术开发⼈员的青睐.它采⽤16位的总线,外设和内存统⼀编址,寻址范围可达64K,还可以外扩展存储器.具有统⼀的中断管理,具有丰富的⽚上外围模块,⽚内有精密硬件乘法器、两个16位定时器、⼀个14路的12位的模数转换器、⼀个看门狗、6路P⼝、两路USART通信端⼝、⼀个⽐较器、⼀个DCO内部振荡器和两个外部时钟,⽀持8M 的时钟.由于为FLASH型,则可以在线对单⽚机进⾏调试和下载,且JTAG⼝直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真⼯具,⽅便实⽤,⽽且,可以在超低功耗模式下⼯作对环境和⼈体的辐射⼩,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好,加强电⼲扰运⾏不受影响,适应⼯业级的运⾏环境,适合与做⼿柄之类的⾃动控制的设备.我们相信MSP430单⽚机将会在⼯程技术应⽤中得以⼴泛应⽤,⽽且,它是通向DSP 系列的桥梁,随着⾃动控制的⾼速化和低功耗化, MSP430系列将会得到越来越多⼈的喜爱.⼀、IO⼝(⼀)、P⼝端⼝寄存器:1、PxDIR 输⼊/输出⽅向寄存器(0:输⼊模式 1:输出模式)2、PxIN 输⼊寄存器输⼊寄存器是只读寄存器,⽤户不能对其写⼊,只能通过读取该寄存器的内容知道I/O⼝的输⼊信号。
3、PxOUT 输出寄存器寄存器内的内容不会受引脚⽅向改变的影响。
4、PxIFG 中断标志寄存器(0:没有中断请求 1:有中断请求)该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求;这8个中断标志共⽤⼀个中断向量,中断标志不会⾃动复位,必须软件复位;外部中断事件的时间必须>=1.5倍的MCLK的时间,以保证中断请求被接受;5、PxIES 中断触发沿选择寄存器(0:上升沿中断 1:下降沿中断)6、PxSEL 功能选择寄存器(0:选择引脚为I/O端⼝ 1:选择引脚为外围模块功能)7、PxREN 上拉/下拉电阻使能寄存器(0:禁⽌ 1:使能)(⼆)、常⽤特殊P⼝:1、P1和P2⼝可作为外部中断⼝。
MC9148配合使用时,可构成一个完整的遥控具有单脉冲(SP )、保持脉冲(HP 和循环脉冲 (CP 三类输岀功能振荡电路仅使用一个引脚外接RC 元件具有较强的接收码检查功能 ,以防止来自外界的 干扰 DIP16封装红外遥控解码器MC9149是一块红外遥控接收专用电路,与红外遥控发射电路 发射、接收系统。
特点CMOS 工艺工作电压VCC=4.5~5.5V 低功耗 抗干扰性好 10路控制功能可并行输出5路组合按键信号管脚图23二n一二二n n1―1 VDD卸1 -苗215 105C RxIN 2153U C0DE2HP13Ur - 413 -1 C0DE3HP2匚 4135 12SP1HP3 5 12 &SP2 HP4 6117 10-1SP3NP511089| SP4CP2匚 SgGND RxIN HP 1HP 2 HP 3 HP 4 HP5卯5MC9149A MC9149AL管脚说明直流参数(除非特殊说明,Tamb=253, VDD=5.0V极限参数700TO W M M 7-i-离聶雅参載 符号恤电涯电压 VU-03-6.0 V 輸人衔岀电压血,V 舸V«-0.3VW ffi +0.3VV 功耗 h200 mW 工伽度Topr 0—70 C 贮打温度Tstg-40-+125c内部框图功能说明1、振荡器回路接收信号的定时和内部工作时钟由此振荡器决定。
一般地,由CMOS 电路内的反相器构成的线性放大器和外接的 455KHZ 的陶瓷谐振器可构成一振荡器 。
然而,在使用MC9149寸,可在OSC 端和地之间并联接一电阻和电容来构成一稳定的振荡器。
当R=39K Q, C=1000PF 时,振荡频率为38KHzi5KHz (参见下图的振荡频率曲线 )。
&SC VDD CNDC0DE2CODE3RxINUP1HP5 SP1SP5CPI CP;1-42振荡频率与电阻、电容的关系曲线2、接收信号输入回路*—肮k副_世吾那 _©——m 1 [>■ ----- [>1—►0 丫由红外感光元件接收到的信号经过放大器和检测器,38KHZ 的载波信号被滤去,然后再被送到接收回路的输入端(Rx-IN )。
红外解码一直是单片机中应用较多的,需要设备加装专用解码芯片,这就大大减轻了单片机的负担。
需要单片机样例使用延时做红外解码,比较容易理解,但是由于在主程序中使用,当存在许多中断时就可能造成误码,很多时候误码率较高,成品中则一般使用中断方式。
下面通过TC9012和uPD6121芯片为例大致讲解解码原理:先看一些遥控器发射波形图从上图可以看出 4.5ms高电平+4.5ms低电平称为头码,用于识别是否遥控码开始,uPD6121的头码是9ms+4.5ms,其他的一样,一些datasheet会提及连续发射码的波形图(就是一直按下某一遥控器按键),这里我们不做分析,仅分析单次按键发射的正个码的波形图。
头码过后可以看到4个8位的数据,我们最终目的就是要把这个 32位(4x8)从一体化红外接收头提取出来,并转换成16进制数,用于区分不同按键按下得出的不同数值。
在遥控器发射波形中,可以看出,8位数中的0或者1不是用高低电平表示,而是用不同的低电平的宽度表示,0.565ms表示0,1.69ms表示1,2个位中间还会有一个0.56ms的高电平(上图阴影部分)。
这个是红外遥控器发射的波形,图中看到的阴影高电平表示载波,一般使用38KHz,遥控器发射出去的含有载波的红外信号通过一体化红外接收头处理后得到的是含有载波的反向的波形,也就是没有上图中的阴影部分。
大致如下图一体化红外接收头内部集成了选频放大(38KHz左右频率增益最大),检波(把38KHz的载波滤除),放大整形(变成容易检测的矩形波)。
看到如上图波形,表示单片机引脚可以接收到的波形,我们只要通过单片机读取波形并分析波形的宽度,然后分辨出是头码,还是0或者1,最后整理出这组码的16进制组合。
正确的解码结果是按同一个按键得出的16进制数值是不变化的。
通过这个原理,我们可以分辨出每个按键的键值。
mini80/mini80e样例程序中使用的红外解码程序,应用了外部中断,平时从书上或者网络上看到的解码一般是单纯解码,整个程序不做其他工作,这种方式可以使用普通io口,用延时等待的方法判断接收到的是高电平还是低电平,从而判断码值。
MSP430系列单片机介绍MSP430系列单片机是德州仪器(TI)公司推出的一种低功耗、高集成度、高性能的16位超低功耗单片机。
它采用精确的调度技术和先进的低功耗架构设计,拥有出色的性能、高功耗效率、广泛的外设集成以及丰富的工具和软件支持。
MSP430系列单片机的内核基于RISC架构,拥有16位数据总线和16位地址总线。
它可以工作在多种工作频率下,从几kHz到几十MHz不等,以满足不同的应用需求。
此外,MSP430系列单片机还具有多种睡眠模式,可以进一步降低功耗。
MSP430系列单片机内置了丰富的外设,包括模拟接口、数字接口和通信接口。
模拟接口包括模数转换器(ADC)、数字模拟转换器(DAC)和比较器等,可以实现各种传感器接口和模拟信号处理。
数字接口包括通用输入输出(GPIO)、定时器/计数器、串行通信接口等,可以实现数字信号处理和通信功能。
通信接口包括UART、SPI和I2C等,可以实现与外部设备的数据交换。
MSP430系列单片机广泛应用于各种电子设备中,如便携式设备、智能家居、医疗器械、工业自动化等。
由于其低功耗和高性能的特点,它可以满足不同应用场景下对功耗和性能的需求。
例如,在便携式设备中,MSP430系列单片机可以实现长时间的电池寿命;在智能家居中,它可以实现低功耗的远程控制和数据传输;在医疗器械中,它可以实现高精度的信号处理和通信。
总之,MSP430系列单片机是一种低功耗、高集成度、高性能的16位超低功耗单片机。
通过其先进的架构设计和丰富的外设集成,它可以满足各种应用的需求。
同时,它还提供了丰富的工具和软件支持,方便开发者进行开发和调试。
#include <msp430x14x.h>#define uchar unsigned char#define uint unsigned intuint count=0;uchar value = 0;uint ifclr = 0;long LastTime;/*********发送的码都是高位在后,低位在前********/long preamble_code; //引导码长int address_code[16]; //地址码,先是低位地址码,再是高位地址码int data_code[16]; //数据码,先是8位数据,再是8位数据反码uchar infrared_address_high = 0;uchar infrared_address_low = 0;uchar infrared_data = 0;uchar infrared_back_data = 0;/*******************************************函数名称:Delay_1ms功能:延时约1ms的时间参数:无返回值:无********************************************/void Delay_1s(){long a,i;for(a=200;a>0;a--){for(i = 10000;i > 0;i--) _NOP();}}/*******************************************函数名称:Infrared_decoding()功能:红外解码参数:无返回值:无********************************************/void Infrared_decoding(){uint count1;if(count>32){_DINT();count = 0;value = 0;ifclr = 0;if(preamble_code>13000 && preamble_code<14000){for(count1=0;count1<8;count1++){infrared_address_low = infrared_address_low>>1;if(address_code[count1]<2500 && address_code[count1]>1500) infrared_address_low |= 0x80;elseinfrared_address_low |= 0x00;}for(count1=8;count1<16;count1++){infrared_address_high = infrared_address_high>>1;if(address_code[count1]<2500 && address_code[count1]>1500) infrared_address_high |= 0x80;elseinfrared_address_high |= 0x00;}for(count1=0;count1<8;count1++){infrared_data = infrared_data>>1;if(data_code[count1]<2500 && data_code[count1]>1500){infrared_data |= 0x80;}elseinfrared_data |= 0x00;}for(count1=8;count1<16;count1++){infrared_back_data = infrared_back_data>>1;if(data_code[count1]<2500 && data_code[count1]>1500)infrared_back_data |= 0x80;elseinfrared_back_data |= 0x00;}}/* P1OUT = infrared_address_low; //实验测得为0x00Delay_1s();P1OUT = infrared_address_high; //实验测得为0xffDelay_1s();P1OUT = infrared_data;/**************************************************************** 实验测得为01 2 3 ** 4 5 6 ** 7 8 9 **OXA2 0X62 0XE2 0X22 0X02 0XC2 0XE0 0XA8 0X9010 11 12 ** 13 14 15 ** 16 17 18 **OX68 0X98 0XB0 0X30 0X18 0X7A0X10 0X31 0X5A19 20 210X42 0X4A0X52******************************************************************/ Delay_1s();P1OUT = infrared_back_data; //实验测得为0xff*//* if((infrared_data & infrared_back_data)==0X00)P1OUT = 0X00;else P1OUT = 0XFF;*/P1OUT = infrared_data;_EINT();}}/*******************************************函数名称:init_clk()功能:时钟初始化参数:无返回值:无********************************************/void init_clk(){uchar i;BCSCTL1&=~XT2OFF; //打开XT振荡器do{IFG1 &= ~OFIFG; //清除振荡错误标志for(i = 0; i < 100; i++)_NOP(); //延时等待}while ((IFG1 & OFIFG) != 0); //如果标志为1继续循环等待BCSCTL2 |= SELM_2 + SELS + DIVS_3; //MCLK SMCLK 选择外部高频时钟}/***********************主函数*************************************/int main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;/*下面六行程序关闭所有的IO口*/P1DIR = 0XFF;P1OUT = 0XFF;P2DIR = 0XFF;P2OUT = 0XFF;P3DIR = 0XFF;P3OUT = 0XFF;P4DIR = 0XFF;P4OUT = 0XFF;P5DIR = 0XFF;P5OUT = 0XFF;P6DIR = 0XFF;P6OUT = 0XFF;init_clk();P4DIR&=~BIT0;P4SEL|=BIT0;TBCCTL0 |= CM_2 + CCIS_0 + SCS + CAP + CCIE; //设置捕获模式,下降沿捕获,同步,开中断TBCTL |= TBSSEL_2 + MC_2 + TBCLR; //选择SMCLK 连续计数模式1us 1MHZ//TBCLR 清零_EINT();while(1){Infrared_decoding();}// LPM1;}/**********************捕获中断函数******************************/#pragma vector=TIMERB0_VECTOR__interrupt void TIMERB0(){if(ifclr==0){TBCTL |= TBCLR;ifclr=1;}else if(ifclr==1){LastTime = TBCCR0;TBCTL |= TBCLR;if(count==0){preamble_code = LastTime;}else if(count>=1 && count<=16){address_code[count-1] = LastTime;}else if(count>16 && count<=32){data_code[count-17] = LastTime;}if(preamble_code>13000 && preamble_code<14000) count++;}}。
科技与创新|Science and Technology & Innovation2024年 第04期DOI :10.15913/ki.kjycx.2024.04.014基于MSP430的智能小车跟随行驶系统*董锦衡,蔡欣怡,邓俊逸,朱建红,袁银龙(南通大学电气工程学院,江苏 南通 226019)摘 要:以MSP430F5529LP 单片机为控制芯片,通过TCRT5000红外传感器和HC-SRF05超声波传感器实现路径识别和车距识别,结合HC-05蓝牙模块完成数据通信。
由信号检测结合PID (比例-积分-微分)算法提升小车的调速性能及跟随性能,实现速度和距离双闭环控制,并在循迹方案设计时引入模糊规则控制器提升循迹稳定性。
实物调试时,从车快速响应主车信号,2个车车速控制误差平均值控制在10%以内,主从车距误差控制在6 cm 以内,实现了跟踪及超车行驶任务。
关键词:MSP430;PID ;超声波测距;红外循迹中图分类号:TP273 文献标志码:A 文章编号:2095-6835(2024)04-0056-03——————————————————————————*[基金项目]南通市科技局应用研究项目(编号:JC2020148)作为机器人领域的一个重要分支[1],智能小车一直以来都是科研工作者研究的热点[2]。
随着人工智能技术的快速发展,小车的智能化成为趋势[3],自动跟随小车也逐渐进入人们的视野。
对跟随小车的研究不仅可以推动AGV (Automatic Guided Vehicle ,自动导引车)系统的完善,还对无人驾驶系统的模拟实验有着重要意义。
为此,本文以MSP430为主控芯片,建立了适用于不同路径的智能小车跟随行驶系统,给出了2个小车的通信方案和模糊PID 循迹控制策略,介绍了增量式PID 控制器调节车速、车距的方法。
在地图(如图1所示)上进行测试时,2个车能够在保持车距的同时沿外圈黑线循迹行驶,并根据工作模式的不同准确完成追逐前车、超越前车的任务。
基于C的PWM红外解码•PWM红外解码技术概述•基于C的PWM红外解码系统设计•PWM红外解码关键技术分析•基于C的PWM红外解码系统测试与评估•基于C的PWM红外解码系统优化与改进建议•基于C的PWM红外解码技术未来发展趋势与展望目录CHAPTERPWM红外解码技术概述红外通信基本原理010203030102PWM红外解码技术简介家电遥控智能家居工业控制医疗设备01030204PWM红外解码技术应用场景CHAPTER基于C的PWM红外解码系统设计红外线传感器01微控制器02电源和接口03设计一个基于C语言的程序框架,用于实现红外解码功能。
程序框架在程序启动时,对硬件进行初始化,包括传感器和微控制器。
初始化在主循环中,不断检测传感器的信号并进行解码。
主循环算法选择选择适合该系统的解码算法,如PWM解码或红外解码等。
算法实现使用C语言实现所选算法,确保解码的准确性和可靠性。
调试与优化对算法进行调试和优化,以提高解码效率。
解码算法实现CHAPTERPWM红外解码关键技术分析PWM信号采集与处理信号采样频率信号滤波信号解码1 2 3算法复杂度算法准确性适应性解码算法优化抗干扰技术硬件抗干扰采用屏蔽、滤波等手段,以减小外界电磁干扰对解码的影响。
软件抗干扰采用数字滤波、容错等技术,以提高解码的鲁棒性和稳定性。
CHAPTER基于C的PWM红外解码系统测试与评估测试环境包括一个标准的计算机实验室,其中配备了用于测试的计算机、PWM红外发射器和接收器、示波器和数据采集器等设备。
测试方案与测试环境测试环境测试方案功能性测试性能测试稳定性测试系统性能测试与评估分析解码算法的时间复杂度和空间复杂度,以评估其运算效率和资源占用情况。
算法精度评估通过对比解码算法的实际输出和预期输出,分析算法的解码精度和误差率。
算法效率分析解码算法性能分析VSCHAPTER基于C的PWM红外解码系统优化与改进建议硬件优化建议选用高速、低功耗的微控制器01优化PWM模块设计02增加抗干扰措施03软件优化建议优化PWM信号采集算法实现软件看门狗功能优化数据处理速度解码算法优化建议采用更高效的解码算法度和准确度。
#include <msp430x14x.h>
#include "LCD1602.h"
uint data[2],add=0,cnt=0,sign=1;
uchar Ir_Buf[4];
void clk_init()
{
WDTCTL=WDTPW+WDTHOLD;
BCSCTL1 &= ~XT2OFF; // XT2on
BCSCTL2 |= SELM1 + SELS; // MCLK为8M
unsigned int delay;
for(delay=5000;delay>0;delay--);
IFG1 &=~OFIFG;
}
void io_init()
{
P1SEL|=0X04; //P1.2 timerA0捕获输入口红外信号输入口
P1DIR&=~0x04; //输入方向
P1OUT|=0X04; //上拉电阻
P1DIR|=BIT1; //数字IO口
}
void timerA_init()
{
TACTL=TASSEL_2+ID_3+MC_2; //选择子系统时钟SMCLK 8分频到1MHZ 增计数模式TACCTL0|=CCIE; //中断允许
CCR0=15000;
TACCTL1=CAP+SCS+CM_3+CCIE; //TA1捕获功能同步捕获上升,下降沿均捕获TA1比较捕获中断允许
}
void sysinit() //系统初始化
{
clk_init();
LCD1602_init();
io_init();
timerA_init();
}
void display2()//编码显示函数
{
display1(0x80,Ir_Buf[1],2); //用户码高8位
display1(0x82,Ir_Buf[0],2); //用户码低8位
display1(0xc0,Ir_Buf[2],2); //键码
display1(0xc2,Ir_Buf[3],2); //键码的反码
}
void main()
{
sysinit();
__bis_SR_register(GIE); //开启全局可屏蔽中断
while(1)
{
}
}
#pragma vector=TIMERA1_VECTOR //TA1捕获中断函数用于接收处理红外线信号
__interrupt void timerA1()
{
uchar i=0;
switch(TAIV)
{
case 2 :
TAR=0X0000;
if(P1IN&BIT2) //上升沿捕获
{
data[0]=CCR1; //data[0]保存的是接收信号为低电平时的计数周期数(下降沿开始计数,上升沿时读取计数值)
if(add) //红外线引导码已确定,开始接收数据
if(data[0]<200||data[0]>800) //判断接收的的低电平时长是否符合红外线特性1(真) 不符合0(假) 符合
add=0; //不符合,使引导失效
}
else
{
data[1]=CCR1;
if((data[0]<9500&&data[0]>8500)&&(data[1]<5000&&data[1]>4000)) //判断捕获到的信号是否为红外线的引导码(9ms低电平)及其结果码(4.5ms高电平)
{add=1;} //确认接收信号为引导码
else if(add)
{
if(data[1]<200||data[1]>2000) //判断接收的的高电平时长是否符合红外线特性1(真) 不符合0(假) 符合
add=0; //不符合,使引导失效
else //200=<data[1]<=2000 接收到的电平信
号符合线外线的特性
{
i=(add-1)/8;
Ir_Buf[i]>>=1;
if(data[1]>1120) //判断接收到的电平信号表示的是高电平,还是低电平
Ir_Buf[i]|=0x80; //存放接收到的信号Ir_Buf[2]为键码值,Ir_Buf[3]为键码反值,Ir_Buf[1]&Ir_Buf[0]共16位为用户识别码
}
if(add>=32) //一组红外信号接收完成
{
add=0; //引导失效
display2(); //显示编码
}
else
add++;
}
}
break;
case 4 : _NOP();break;
case 10: _NOP();break;
}
TACCTL1&=~COV;
}。