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