从零开始学GD32_红外遥控实验

[复制链接]
6296|18
手机看帖
扫描二维码
随时随地手机跟帖
reayfei|  楼主 | 2013-7-14 01:06 | 显示全部楼层 |阅读模式
本帖最后由 reayfei 于 2013-7-14 01:17 编辑

从零开始学GD32

第一节   红外遥控实验

      遥控器是一种无线发射装置,通过现代的数字编码技术,将按键信息进行编码,通过红外线二极管发射光波,光波经接收机的红外线接收器将收到的红外信号转变成电信号,由处理器进行解码,解调出相应的指令来达到控制机顶盒等设备完成所需的操作要求。

一、红外遥控器原理
      很多电器都采用红外线遥控,那么红外线遥控的工作原理是什么呢?首先我们来看看什么是红外线。
     人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为0.62~0.76μm;紫光的波长范围为0.38~0.46μm。比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线。
红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。
      常用的红外线遥控系统一般分发射和接收两个部分。
      发射部分的主要元件为红外发光二极管。它实际上是一只特殊的发光二极管,由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它便发出的是红外线而不是可见光。
      大量使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通发光二极管相同,只是颜色不同。
      红外发光二极管一般有黑色、深蓝、透明三种颜色。
      判断红外发光二极管好坏的办法与判断普通二极管一样:用万用表电阻挡量一下红外发光二极管的正、反向电阻即可。
红外发光二极管的发光效率要用专门的仪器才能精确测定,而业余条件下只能用拉距法来粗略判定。接收部分的红外接收管是一种光敏二极管。
      在实际应用中要给红外接收二极管加反向偏压,它才能正常工作,亦即红外接收二极管在电路中应用时是反向运用,这样才能获得较高的灵敏度。
      红外接收二极管一般有圆形和方形两种。
      由于红外发光二极管的发射功率一般都较小(15mW左右),所以红外接收二极管接收到的信号比较微弱,因此就要增加高增益放大电路。
      前些年常用μPC1373H、CX20106A等红外接收专用放大电路。最近几年不论是业余制作还是正式产品,大多都采用成品红外接收头。
      成品红外接收头的封装大致有两种:一种采用铁皮屏蔽;一种是塑料封装。均有三只引脚,即电源正(VDD)、电源负 (GND)和数据输出(VO或OUT)。红外接收头的引脚排列因型号不同而不尽相同,可参考厂家的使用说明。成品红外接收头的优点是不需要复杂的调试和外 壳屏蔽,使用起来如同一只三极管,非常方便。但在使用时注意成品红外接收头的载波频率。
红外遥控常用的载波频率为38kHz,这是由发射端所使用的455kHz陶振来决定的。
     在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9 kHz≈38kHz。也有一些遥控系统采用36kHz、40kHz、56kHz等,一般由发射端晶振的振荡频率来决定。

二、红外遥控编码
     常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。
    我的遥控器使用的是NEC协议,即PWM方法,其特点如下:
    1、8位地址和8位指令长度;
    2、地址和命令2次传输(确保可靠性)
    3、PWM脉冲位置调制,以发射红外载波的占空比代表“0”和“1”;
    4、载波频率为38Khz;
    5、位时间为1.125ms或2.25ms;
       NEC码的位定义:一个脉冲对应560us的连续载波,一个逻辑1传输需要2.25ms(560us脉冲+1680us低电平),一个逻辑0的传输需要1.125ms(560us脉冲+560us低电平)。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑1应该是560us低+1680us高,逻辑0应该是560us低+560us高。
      NEC遥控指令的数据格式为:同步码头、地址码、地址反码、控制码、控制反码。同步码由一个9ms的低电平和一个4.5ms的高电平组成,地址码、地址反码、控制码、控制反码均是8位数据格式。按照低位在前,高位在后的顺序发送。采用反码是为了增加传输的可靠性(可用于校验)。

三、解码过程
插图1.jpg
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image002.jpg
      从图中可以看到,其地址码为0,控制码为168。可以看到在100ms之后,我们还受到了几个脉冲,这是NEC码规定的连发码(由9ms低电平+2.5m高电平+0.56ms低电平+97.94ms高电平组成),如果在一帧数据发送完毕之后,按键仍然没有放开,则发射重复码,即连发码,可以通过统计连发码的次数来标记按键按下的长短/次数。

四、实验操作
基于GD32 实验21 红外遥控实验基础上,在remote.h文件中添加以下宏定义:
#defineBUTTON_1                     218
#defineBUTTON_2                     242
#defineBUTTON_3                     202
#defineBUTTON_4                     90
#defineBUTTON_5                     240
#defineBUTTON_6                     122
#defineBUTTON_7                     106
#defineBUTTON_8                     114
#defineBUTTON_9                     74
#defineBUTTON_0                     170
#define BUTTON_POWER                 234
    作为遥控器的新键值。

    main.c文件中的switch函数也进行了如下修改:

            switch(key)
            {
                caseBUTTON_POWER:
                    LCD_ShowString(86,150,"POWER");      
                    break;
                caseBUTTON_1:
                    LCD_ShowString(86,150,"1     ");
                    break;
                caseBUTTON_2:
                    LCD_ShowString(86,150,"2     ");
                    break;
                caseBUTTON_3:
                    LCD_ShowString(86,150,"3     ");
                    break;
                caseBUTTON_4:
                    LCD_ShowString(86,150,"4     ");
                    break;
                caseBUTTON_5:
                    LCD_ShowString(86,150,"5     ");
                    break;
                caseBUTTON_6:
                    LCD_ShowString(86,150,"6     ");
                    break;
                caseBUTTON_7:
                    LCD_ShowString(86,150,"7     ");
                    break;
                caseBUTTON_8:
                    LCD_ShowString(86,150,"8     ");
                    break;
                caseBUTTON_9:
                    LCD_ShowString(86,150,"9     ");
                    break;
                caseBUTTON_0:
                    LCD_ShowString(86,150,"0     ");
                    break;
               
                default:
                    break;      
            }
最后,测试一切正常!


从零开始学GD32_红外遥控实验.pdf

106.99 KB

评分
参与人数 2威望 +13 收起 理由
chenhaibin1990 + 3 神马都是浮云
永远的不知 + 10 赞一个!
锐鑫同创| | 2013-7-14 01:21 | 显示全部楼层
期待楼主后续精彩**,谢谢您对GD32的支持。
这么晚了,reayfei辛苦了。

使用特权

评论回复
永远的不知| | 2013-7-14 01:24 | 显示全部楼层
支持一下,reayfei这么晚了,还来发精品**,我回头联系GD给您发个最热心网友奖,哈哈。

使用特权

评论回复
cgd| | 2013-7-14 05:33 | 显示全部楼层
强贴留名!

使用特权

评论回复
神器飞天| | 2013-7-14 13:00 | 显示全部楼层
非常好的经验总结和应用实例。期望看到楼主更多的心得分享,帮助更多的网友从零开始系统学习GD32!

使用特权

评论回复
shenpingbing| | 2013-8-29 20:29 | 显示全部楼层
不错不错   给我一个板子啊  我也要学习一下   看看比st的强多少

使用特权

评论回复
筱禾1988| | 2013-8-30 13:23 | 显示全部楼层
这种方式不是基本没人用了么?

使用特权

评论回复
reayfei|  楼主 | 2013-8-30 13:42 | 显示全部楼层
筱禾1988 发表于 2013-8-30 13:23
这种方式不是基本没人用了么?

成本比较低啊!你有什么好的无线控制方案?

使用特权

评论回复
筱禾1988| | 2013-8-30 20:52 | 显示全部楼层
reayfei 发表于 2013-8-30 13:42
成本比较低啊!你有什么好的无线控制方案?

没有成本更低的方案

使用特权

评论回复
筱禾1988| | 2013-11-27 22:36 | 显示全部楼层
期待更精彩的**啦

使用特权

评论回复
喵小棋| | 2013-11-27 22:47 | 显示全部楼层
学一下啊

使用特权

评论回复
zhangjin_comeon| | 2013-11-27 23:21 | 显示全部楼层
这个不错

使用特权

评论回复
zhangmangui| | 2013-11-27 23:55 | 显示全部楼层
资料很全面

使用特权

评论回复
chenhaibin1990| | 2013-12-22 11:04 | 显示全部楼层
资料很不错

使用特权

评论回复
fengshuo123| | 2013-12-24 19:30 | 显示全部楼层
写得很入门

使用特权

评论回复
kfliuyan| | 2014-7-29 11:31 | 显示全部楼层
下载看看

使用特权

评论回复
2013搬运工| | 2021-10-19 09:52 | 显示全部楼层
看看,谢谢分享

使用特权

评论回复
full_stack| | 2021-10-22 14:16 | 显示全部楼层
支持继续

使用特权

评论回复
full_stack| | 2021-10-22 15:02 | 显示全部楼层
又看了下,你这是2013年的帖子?真的这么久吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:WiFi包邮:http://item.taobao.com/item.htm?id=19254130983

15

主题

395

帖子

2

粉丝