2021-11-18 11:48:52 索煒達電子 1128
項目編號:E2281
文件大?。?6K
源碼說明:帶中文注釋
開發(fā)環(huán)境:Verilog
簡要概述
紅外
基于FPGA編寫Verilog語言的紅外發(fā)送程序是本小小小項目的一個重要組成部分,我們通過FPGA的signaltap解析了格力空調(diào)遙控器的紅外編碼,然后模仿地發(fā)出了編碼,編寫了控制空調(diào)開關(guān)以及調(diào)節(jié)設(shè)定溫度的功能,其實其他的功能也可以在我們程序的基礎(chǔ)上酌情增加,十分簡單,下面簡要描述一下實現(xiàn)過程。具體狀態(tài)機編寫什么的就不詳述了,可以參考代碼。
爬編碼
通過查閱資料,我們知道了(格力YB-02遙控器)的編碼的大概構(gòu)成:
1.一個9000us的高電平+4500us的低電平作為起始碼。
2.用高低電平的交錯來表示邏輯1與0,其中高電平的時間長度一定,如果后面跟著短的低電平,就是表示邏輯0,長的低電平就是表示邏輯1。
3.碼一共由兩段組成,兩段都是32位(二進制)。
4.在第一段32位的后面有一個3位的連接碼,即第一段為35位,第二段32位。
5.在第一段的35位和第二段的第一位之間,有一段過渡碼,為一般的高電平持續(xù)時間(與邏輯0、1相同),再接40000us的低電平。
其中,高電平和低電平分別持續(xù)多少us,這個可能不同的遙控器有所區(qū)別,最好自己爬一下遙控器的編碼,把signaltap的clk稍微調(diào)的頻率高一些來看(我們用的是38kHz),準(zhǔn)確度會更高一些。
具體的空調(diào)編碼這里就不講了,很多的博文都有,需要的可以自行搜索,保險起見建議自己用signaltap爬一下波形(其實示波器也可以看邏輯電平,只是電平的長度不太準(zhǔn)確)。
調(diào)制
說到38kHz就不得不說很重要的事情了,那就是調(diào)制。
查閱資料可以得知,發(fā)送的紅外信號是用38kHz的方波信號調(diào)制得到的。
那么我們該如何理解這個調(diào)制呢?(如果沒有學(xué)習(xí)過信號課程的話)
說的通俗一些,也就是把高電平拉開來看,不是一個連續(xù)的高電平,而是一個一個的分立的方波,方波的頻率是38kHz,實現(xiàn)方波信號調(diào)制在FPGA上很簡單,直接把需要輸出的邏輯信號和方波調(diào)制信號用一個與門過一下就ok了。
我們知道了調(diào)制信號是38kHz的方波信號,但是我們還不知道信號的具體占空比。之后我們可以再用signaltap爬一波遙控器信號的再放大一些的信號,從操作上來講,就是設(shè)置clk的頻率再高一些,其實50MHz的晶振就挺不錯的,我們測得的高低電平比例大約是1:10,僅供參考。
注意:這里爬占空比用的紅外接收是比較有講究的,需要最高接收頻率足夠高,至少要比38KHz高才行,否則看起來就是一個連續(xù)的高電平而已,顯示不了方波調(diào)制信號。
FPGA藍牙通信
其實這個FPGA的小小小項目是兩個部分組成的,通過UART協(xié)議的藍牙通信也是一個部分,這塊主要也就是大家對于協(xié)議的理解問題,網(wǎng)上有現(xiàn)成資源,可以自行查找。
目錄│文件列表:
└ 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