查看: 4323|回复: 4

基于GD32F450的红外解码--硬件篇

[复制链接]
  • TA的每日心情

    2023-7-25 22:49
  • 签到天数: 385 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2017-5-23 21:48:47 | 显示全部楼层 |阅读模式
    分享到:
           拿到这个板子有一段时间了,硬究了一段时间,今天才开始更新。
           要红外分析仪,那必须要有红外的接收头,这个在网上买的HS0038一体化接收头塑封红外接收头红外接收管,这东西很便宜。
    0038一共三个引脚,脚位排列(正面):
    脚1:OUT
    脚2:GND
    脚3:VCC
    接收范围:12-13米
    电压范围:2.7V-5.5V
    225222hzah9m45jm9zn5cp.png
    GD32F450使用3.3v电压,在有效电压范围之内。
          红外协议,我这里科普下,已经熟悉的朋友,可以略过。
          NEC协议载波:38khz
          其逻辑1与逻辑0的表示如图所示:
          QQ截图20170523213106.png
         逻辑1为2.25ms,脉冲时间560us;逻辑0为1.12ms,脉冲时间560us。所以我们根据脉冲时间长短来解码。推荐载波占空比为1/3至1/4。
          NEC协议格式:
           QQ截图20170523213257.png
          首次发送的是9ms的高电平脉冲,其后是4.5ms的低电平,接下来就是8bit的地址码(从低有效位开始发),而后是8bit的地址码的反码(主要是用于校验是否出错)。然后是8bit 的命令码(也是从低有效位开始发),而后也是8bit 的命令码的反码。
          以上是一个正常的序列,但可能存在一种情况:你一直按着1个键,这样的话发送的是以110ms为周期的重复码,如下图:
           QQ截图20170523213504.png
          就是说,发了一次命令码之后,不会再发送命令码,而是每隔110ms时间,发送一段重复码。
           QQ截图20170523213635.png
          重复码由9ms高电平和2.25ms的低电平以及560us的高电平组成。

          因为我们使用的HS0038是一体化接收头,这个接收头内部电路包括红外监测二极管,放大器,限副器,带通滤波器,积分电路,比较器等。红外监测二极管监测到红外信号,然后把信号送到放大器和限幅器,限幅器把脉冲幅度控制在一定的水平,而不论红外发射器和接收器的距离远近。交流信号进入带通滤波器,带通滤波器可以通过30khz到60khz的负载波,通过解调电路和积分电路进入比较器,比较器输出高低电平,还原出发射端的信号波形。
          HS0038接收头电路和工作原理如下:
           1437142_201406201042310779.gif
          HS0038红外一体接收头为了提高接受灵敏度。输入高电平,其输出的是相反的低电平。如下图:
    QQ图片20170523211708.png

          我们的硬件电路图如下:
    QQ截图20170523221946.png
    测试代码如下:
    1. #include "gd32f4xx.h"                   // Device header

    2. //GPIO口和PIN定义
    3. #define LED4PORT        GPIOB
    4. #define LED6PORT        GPIOB
    5. #define LED5PORT        GPIOD
    6. #define LED4                GPIO_PIN_4
    7. #define LED5                GPIO_PIN_7
    8. #define LED6                GPIO_PIN_3

    9. #define IRPORT                GPIOB
    10. #define IR_PIN                GPIO_PIN_2

    11. void InitLED(void);
    12. void InitIR(void);

    13. int main()
    14. {
    15.         InitLED();
    16.         InitIR();
    17.         
    18.         while(TRUE)
    19.         {
    20.                 //测试是否接收到红外信号
    21.                 if(gpio_input_bit_get(IRPORT,IR_PIN) == RESET)
    22.                         gpio_bit_toggle(LED4PORT,LED4);
    23.                
    24.                 //gpio_bit_toggle(LED5PORT,LED5);
    25.                 //gpio_bit_toggle(LED6PORT,LED6);
    26.         }
    27. }

    28. /*!
    29.     \brief      initialize LED Pin
    30.     \param[in]  none
    31.     \param[out] none
    32.     \retval     none
    33. */
    34. void InitLED(void)
    35. {
    36.         rcu_periph_clock_enable(RCU_GPIOB);
    37.         rcu_periph_clock_enable(RCU_GPIOD);
    38.         
    39.         
    40.         gpio_mode_set(LED4PORT,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,LED4|LED6);
    41.         gpio_output_options_set(LED4PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,LED4|LED6);
    42.         
    43.         gpio_mode_set(LED5PORT,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,LED5);
    44.         gpio_output_options_set(LED5PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,LED5);
    45.         
    46.         gpio_bit_reset(LED4PORT,LED4);
    47.         gpio_bit_reset(LED6PORT,LED6);
    48.         gpio_bit_reset(LED5PORT,LED5);
    49. }

    50. /*!
    51.     \brief      initialize IR Pin
    52.     \param[in]  none
    53.     \param[out] none
    54.     \retval     none
    55. */
    56. void InitIR(void)
    57. {
    58.         rcu_periph_clock_enable(RCU_GPIOB);
    59.         gpio_mode_set(IRPORT,GPIO_MODE_INPUT,GPIO_PUPD_PULLDOWN,IR_PIN);
    60.         
    61. }

    复制代码
    实验现象:当用遥控器对着红外接收头按下,LD4会不停的闪烁,说明接收到红外信息。使用逻辑分析仪测量PB2的电平得到如下:
    QQ图片20170523222951.png
    下一篇,会对接收到的红外信息进行存储和传输。
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2017-5-24 10:39:27 | 显示全部楼层
    不错的分享 要加油哦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-12-29 15:29
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2017-5-24 15:06:28 | 显示全部楼层
    谢谢分享,收藏了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-12-7 12:35
  • 签到天数: 1354 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2017-6-9 22:45:36 | 显示全部楼层
    写的好,很有用,多谢!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    14 小时前
  • 签到天数: 3750 天

    连续签到: 76 天

    [LV.Master]伴坛终老

    发表于 2017-6-10 17:46:59 | 显示全部楼层
    本帖最后由 toofree 于 2017-6-10 17:56 编辑

    多谢分享,这个很好。正好手头有个HX1838,有时间试试看
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 16:08 , Processed in 0.181302 second(s), 26 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.