【E2281】FPGA上基于Verilog的红外遥控格力空调以及蓝牙通信

2021-11-18 11:48:52      索炜达电子      1129     

项目编号:E2281

文件大小:36K

源码说明:带中文注释

开发环境:Verilog

简要概述

红外

基于FPGA编写Verilog语言的红外发送程序是本小小小项目的一个重要组成部分,我们通过FPGA的signaltap解析了格力空调遥控器的红外编码,然后模仿地发出了编码,编写了控制空调开关以及调节设定温度的功能,其实其他的功能也可以在我们程序的基础上酌情增加,十分简单,下面简要描述一下实现过程。具体状态机编写什么的就不详述了,可以参考代码。


爬编码

通过查阅资料,我们知道了(格力YB-02遥控器)的编码的大概构成:


1.一个9000us的高电平+4500us的低电平作为起始码。


2.用高低电平的交错来表示逻辑1与0,其中高电平的时间长度一定,如果后面跟着短的低电平,就是表示逻辑0,长的低电平就是表示逻辑1。


3.码一共由两段组成,两段都是32位(二进制)。


4.在第一段32位的后面有一个3位的连接码,即第一段为35位,第二段32位。


5.在第一段的35位和第二段的第一位之间,有一段过渡码,为一般的高电平持续时间(与逻辑0、1相同),再接40000us的低电平。


其中,高电平和低电平分别持续多少us,这个可能不同的遥控器有所区别,最好自己爬一下遥控器的编码,把signaltap的clk稍微调的频率高一些来看(我们用的是38kHz),准确度会更高一些。


具体的空调编码这里就不讲了,很多的博文都有,需要的可以自行搜索,保险起见建议自己用signaltap爬一下波形(其实示波器也可以看逻辑电平,只是电平的长度不太准确)。


调制

说到38kHz就不得不说很重要的事情了,那就是调制。

查阅资料可以得知,发送的红外信号是用38kHz的方波信号调制得到的。


那么我们该如何理解这个调制呢?(如果没有学习过信号课程的话)


说的通俗一些,也就是把高电平拉开来看,不是一个连续的高电平,而是一个一个的分立的方波,方波的频率是38kHz,实现方波信号调制在FPGA上很简单,直接把需要输出的逻辑信号和方波调制信号用一个与门过一下就ok了。


我们知道了调制信号是38kHz的方波信号,但是我们还不知道信号的具体占空比。之后我们可以再用signaltap爬一波遥控器信号的再放大一些的信号,从操作上来讲,就是设置clk的频率再高一些,其实50MHz的晶振就挺不错的,我们测得的高低电平比例大约是1:10,仅供参考。


注意:这里爬占空比用的红外接收是比较有讲究的,需要最高接收频率足够高,至少要比38KHz高才行,否则看起来就是一个连续的高电平而已,显示不了方波调制信号。


FPGA蓝牙通信

其实这个FPGA的小小小项目是两个部分组成的,通过UART协议的蓝牙通信也是一个部分,这块主要也就是大家对于协议的理解问题,网上有现成资源,可以自行查找。

目录│文件列表:

 └ IRsend_FPGA

    │ assignment_defaults.qdf

    │ BT.dpf

    │ BT.qsf

    │ BT.qws

    │ BTCA.qpf

    │ BTCA_tmp_archive.qarlog

    │ BT_assignment_defaults.qdf

    │ freq.v

    │ HumidityControl.v

    │ IRsend_FPGA

    │ IRtest.v

    │ IRtest.v.bak

    │ out_directory_tmp.txt.tmp

    │ Rx.v

    │ Rx.v.bak

    │ stp1.stp

    │ stp1_auto_stripped.stp

    │ stp2.stp

    │ stp2_auto_stripped.stp

    │ tiaozhi.v

    │ TOP.v

    │ TOP.v.bak

    │ Translater.v

    │ Translater.v.bak

    │ UART_baudrate_generator.v

    └ _config.yml

TAG蓝牙通信
  • 2 次
  • 1 分