《怎么通过红外传感器与DS18B20来认识单总线?.docx》由会员分享,可在线阅读,更多相关《怎么通过红外传感器与DS18B20来认识单总线?.docx(14页珍藏版)》请在第一文库网上搜索。
1、怎么通过红外传感器与DS18B20来认识单总线?在实际情况中很多传感器并不会用到很复杂的通信协议,反而简单的数据传输机制能够大大节省成本且满足实际需要。红外传感器和DS18B20是典型的单总线传感器,本期通过这两类传感器的理和操作实例来认识单总线。单总线能够极大程度节约管脚资源,只用一根管脚即可进行通讯。这种通讯方式在传感器中运用较多,传感器采集到的数据通过一根数据线直接传到里出1机。先导知识:红外线经常使用在红外遥控中,可以通过非接触的方式来控制家中的一些电气设备,既然可以通过遥控控制设备,中间一定存在数据传输。遥控中的发射器将内部按键的数值和命令通过红外线发射出去,电器中有红外接收器,接收
2、器接收到后可以解析命令进行不同的动作。红外线是光的一种,光的本质是电磁波,其传播本质上是一种粒子振动。广义上,光是指所有的电磁波谱。狭义上的光是人类眼睛可以看见的一种电磁波,也称可见光。1光的波长:是指波在一个振动周期内传播的距离。光的波长由光的频率以及传播的介质决定,光通过不同介质的时候,频率不变而波长发生改变。2 .光的颜色:是由它的波长来决定的,各种颜色有各自的波长,人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。红光到紫光,波长逐渐变小,红外线是比红光波长还长的非可见光。高于绝对零度(-273.15)的物质都可以产生红外线。现代物理学称之为热射线。我们把红光
3、之外的辐射叫做红外线(紫光之外是紫外线),人的肉眼不可见。3 .无线远程遥控技术:又称为遥控技术,是指实现对被控目标的遥远控制,在工业控制、航空航天、家电领域应用广泛。4 .红外遥控:是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电壬设备特别是家用电器广泛采用,并越来越多的应用到计算机和王机系统中。5 .红外通讯:就是通过红外线传输数据。发射器发出红外信号,接收器接收到信号进行解析。6 .红外遥控器:遥控器是利用一个红外发光二极管,以红外光为载体来将按键信息传递给接收端的设备。红外光对于人眼是不可见的,因此使用红外遥控器不会影响人的视觉(可
4、以打开手机摄像头,遥控器对着摄像头按,可以看到遥控器发出的红外光)。7 .信号调制:日常生活环境中有很多红外光源,太阳、蜡烛火光、白炽灯、甚至是我们的身体。这些红外光源都可能会对我们的接收设备产生干扰,为了屏蔽干扰,只接收有效信息,我们就需要用到调制。通过调制我们可以把指定的数字信号转换为特定频率的红外光进行发送,调制载波频率一般在30khz到60khz之间,大多数使用的是38kHz。8 .红外接受器:红外线接收器是一种可以接收红外信号并能独立完成从红外线接收到输出与H1电平信号兼容的器件,体积和普通的塑封三极管差不多,适合于各种红外线遥控和红外线数据传输。9 .信号解调:解调就是将摸拟信号(
5、光信号)转换成数字信号。红外接收器接收到外部发射器传过来的红外信号后,会按照固定的协议去解析信号,并转换成数字信号输出。NEC协议详解:NEC协议是典型的红外协议,其实红外协议有很多,如ITT、NRCH(Nokia)SharP等,NEC协议使用的最多的一种。在传出过程中主要传输8位地址码和8位命令码,地址码主要标识遥控可以解析的设备,不同的遥控器控制不同的设备,不同发命令码对应不同的按键;该协议会完整发射两次地址码(第一次地址码,第二次是地址反码,这里起到了一个校验的作用,两次命令码同理)和命令码,以提高可靠性;脉冲时间长短可调制;典型的为38KHZ载波频率;位时间1.12ms(表示逻辑0)或
6、2.25ms(表示逻辑1)红外遥控实例讲解电路分析:整个红外传感器只使用PG8与MCU进行传输实验目的:按下遥控按键,主机通过红外接收器接收到信号(模拟信号)并解码(数字信号),识别出按键的命令码,打印出对应的按键符号将PG8设为中断模式,下降沿和上升沿均可触发中断。第一次检测到下降沿后触发中断并检查是否是下降沿且是否达到要求的时长,如果满足等待第二次上升沿触发,检查是否是上升沿且是否达到要求的时长。之后的每一个波形都会触发两次中断检测时间,用来确定是逻辑1还是逻辑0,连续检测64次实验步骤:1 .配置RCC2 .配置PG8为外部中断模式3 .配置中断4 .编写代码/main,cintmain
7、(void)(HA1_Init();SystemC1ockConfig();MXGPIOInit();MXUSART1UARTInito;*配置systick为IOOus中断一次*/*原来默认是ImS触发一次中断,现在要IOOus中断一次*/*所以只需将计数值缩小10倍即可,因此除数值由IooO变为了IOoOo*/HA1_SYSTICK_Config(HA1_RCC_GetHC1KFreq()/10000);HA1_SYSTICKC1KSourceConfig(systick_c1ksource_hc1k);HA1_NVIC_SetPriority(SysTick-iRQn,0,0);prin
8、tf(nr);printf(,nr);printf(nrFSTTM32开发板IR红外接收是U按程序);printf(nr请将红外接收头连接到开发板对应的接旦);PrintfJnr然后用红外遥控进行控制,注意串口输出);printf(rIr);printf(z,nr协议如下);Printf(nr首先是引导码:开始拉低9ms,接着一个4.5ms的高脉冲”);printf(z引导码的作用是通知接收器准备接收数据);printf(zznr引导码之后是4个字节的二进制码,其中前两个字节是:);printf(r遥控识别码ID,第一个为正码,第二个为反码,);PrintfJnr后两字节是键值,第一个为正码,
9、第二个为反码.);printf(z,nr最后有可能持续按键,上述数据发送完后则发送);Printf(nr9ms低,2ms高的脉冲);printf(nr载波为38kHz);printf(/znr传输一个逻辑1需要2.25ms(560us低电平+168OUS高电平)”);printf(,znr传输一个逻辑0需要1.125ms(560us低电平+56OUS高电平)”);printf(nrprintf(zznr本实验在中断中检测接收IR红外线数据nr);whi1e(1)RemoteInfraredKeyDeCodeo;voidHA1_SYSTICKCa11back(Void)if(G1oba1Timi
10、ngDe1ay1OOus!=0)G1oba1TimingDe1ay1OOus-;voidHA1GPIOEXTICa11back(uinti6_tGP工oEin)(中断处理函数,上升沿和下降沿均可触发中断检测时间用于确定每一个脉冲代表的含义RemoteInfraredKEYISR();)/RemoteInfrared.hinc1udestm32f4xx_ha1.h#defineRemote_Infrared_DAT_INPUTHA1_GPIO_ReadPin(GPIOG,GPI0_PIN_8)typedefstruct_Remote_Infrared_data_struct定义红外线接收到的数据
11、结构体类型uint8_tbKeyCodeNot;按键的ASIIC码值反码uint8_tbKeyCode;Shift键按下标志uint8_tb1DNot;断码标志位反码uint8_tbiD;新键标志位RemoteInfrareddatastruct;typedefunion_Remote_Infrared_data_union定义红外线接收到的数据联合体类型(Remote_Infrared_data_structRemoteInfraredDataStruct;uint32_tUiRemoteInfraredData;Remote_Infrared_data_union;voidRemote_I
12、nfraredKEYISR(void);uint8tRemote_InfraredKeyDeCode(VOiCI);/RemoteInfrared.cinc1udezzRemoteInfrared.hdefineREPEAT_KEYOxEEextern_IOuint32_tG1oba1TimingDe1ay1OOuszextern_IOuint32_tG1oba1TimingDe1ay1OOusTx;IOuint32_tF1agGotKey=0;IORemote_Infrared_data_unionRemoteInfrareddata;*红外处理接收协议开始拉低9ms,接着是一个4.5ms的
13、高脉冲,通知器件开始传输数据了接着是发送4个8位二进制码,第一二个是遥控器识别码(REMoTED),第一个为正码(0),第二个为反码(255),接着两个数据是键值,第一个为正第二个为反码,发送完后40ms,遥控器再发送一个9ms低,2ms高的脉冲,表示按键的次数,出现一次则证明只按下了次,如果出现多次,则可以认为是持续按下该键* 名称:Remote_InfraredKEY_ISR(INT11_vect)* 功能:INn)中断服务程序* 参数:无* 返回:无* */检测脉冲宽度最长为5msconstuint32_ttime_de1ay_6ms=60;constuint32_ttime_de1ay
14、_ioms=100;voidRemOtenfrared_KEY_ISR(Void)static_IOuint8_tbBitCounter=0;记录中断进入的次数static_iouint32_tbKeyCode=0;bBitCounter+;ifCbBitCounter=1)为1表示第一次进来,就需要检测波形(if(Remote_Infrared_DAT_INPUT)如果读售脚是高电年,山为真,则无效因为先进来的必须是9ms的低电平(bBitCounter=0;)e1se(G1oba1TimingDe1ay1OOus=TIME_DE1AY_10MS;将GIobaITimingDeIay1OOU
15、S值浚为165,因为该值每IOOus减1/10OUS触发一次中断,减1,从100减到。刚好IOmS当然正常情况下不会减到0,因为9ms左右就会再次触发中断)1sif(bBitCounter=2)/4.5ms脉冲(if(Remotenfrared_DAT_:ENPUT)高脉冲为真(高脉冲触发中断,先检查上次G1oba1TimingDe1ay1OOus剩余值理想状态下为10,当然不可能那么精确若以我们给定了一个范围,剩余值在这个范围就认为满足时间if(G1oba1TimingDe1ay1OOus2)&(G1oba1TimingDe1ay1OOus18)(之后就可以G1oba1TimingDe1ay1OOus赋新值60检查高脉冲时间G1oba1TimingDe1ay1OOus=TIME_DE1AY_6MS;)e1se(bBitCounter=0;Printf(.);)e1sebBitCounter=0;)1sif(bBitCounter=3)/4.51T1S的局脉冲if(Re