找回密码
 注册
关于网站域名变更的通知
查看: 265|回复: 1
打印 上一主题 下一主题

源码系列:基于FPGA的红外线遥控系统设计(附源工程)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
 楼主| 发表于 2024-5-1 20:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

今天给大侠带来基于FPGA的红外线遥控系统设计,附源码,获取源码,请在“FPGA技术江湖”公众号内回复“红外线遥控系统设计源码”,可获取源码文件。话不多说,上货。

, l; ?5 t0 ]/ s* I( w9 ~

/ D# N4 q1 U! g, v3 [+ }
7 k2 c& w, P9 M* W
# Z% r. A! D+ ?9 @+ {

# ]. U1 C/ m" k& u$ B: N
前言0 K/ ?0 A" n, E2 N" z1 Z

7 R3 d; a2 Z7 d' q/ w2 h  f

& x! `* s8 j+ C1 {/ _; u7 v
       红外线(Infrared)是波长介乎微波与可见光之间的电磁波,波长在760纳米(nm)至1毫米(mm)之间,比红光长的非可见光。 红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。现在工业设备中,也已经广泛在使用。
" [- ^4 |& ]- r/ ]% l
2 t1 e; w$ {3 O) t) b

' N  _% |/ G% D# D) d
设计原理

; F+ I" R, Y9 v8 ?6 n, L, |

红外遥控系统主要由红外的发送装置和接收装置组成,发送装置可由按键,编码模块,发射电路等组成,接收装置由红外接收电路,遥控,解码模块等组成,此次设计我们用到的硬件平台式是Altera的DE1_SOC,晶振为50MHZ。


2 I/ N: k% @% k% M

在红外的编码中,我们对1 和 0 的编码是通过38KHZ的脉冲来定义的,在红外的的编码中每个脉冲的为256.25us长的38KHZ载波频率(26.3us),对0,1的脉冲的定义的时间如下图:

+ s: E. I) N4 G7 k9 l! j

0 N# S! b' i+ {* j& l# e

, j: D7 N' v1 ~8 u$ O2 ?% p
% D  {& R5 `/ v& s! S) x6 D
2 p# M7 ~3 J1 Q8 t1 J

红外的数据格式为包括引导码,用户码,数据码和数据纠错码,停止位编码总为32位。数据反码是数据码反相后的编码,可用于对数据的纠错。此外第二段的用户码可以在遥控应用电路中设置为第一段用户码的反码。


* n" n6 p4 ^) A" C0 H; B, j5 j" ~- Z# O0 F+ H

数据格式如下图:

3 {3 v% q9 X6 U, M/ G

. e) J2 C, E3 q& E( \8 m7 V6 j8 d4 H( U2 d- E
+ l5 X# G6 y; i5 J  F( ^+ a2 b
5 q/ F( U! p% p- p+ c; b1 a
( M! _$ @3 t9 A$ v
! z+ e+ P3 i5 j! y! g# e
9 D2 O" R  U1 w; I7 i& {; b: g. I
+ G/ H! Q7 X9 }& @, i% D6 o

一帧数据在发送时先发送9MS的高电平,然后发送4.5MS的低电平的起始位,然后发送用户码,数据码,数据反码。然后再发送一位的停止位。不发送数据时数据线一直为低。


: W' g$ o0 l, O' ]

发送的时序图如下:


4 ~' h  f, k- x6 g7 N2 [7 o. n) h
, u; F5 r( u8 R2 o


" o% F* p7 E$ X6 W
. p/ R! e( y5 Q( T1 Q. o

接受的时,接收到的时序和发送的时序恰恰相反,如发送时先发送9ms的高,4.5ms的低,接收为接收9ms的低电平,4.5ms低电平。

2 g3 n# V+ d7 s* p: w4 ]0 K. b
; f5 W0 S/ J* `3 K2 \( M% I

接收的控制器我们用的时红外遥控装置,按键发送的数据如下图所示:

/ B; z2 s% S9 N2 {

8 X4 I  r7 I- w7 L0 D


# J8 Q+ n1 M$ j- r8 o; D9 w: m. C  ^; b$ [
. U$ y. o# X: j9 ~1 p- ]

设计框架

2 X* W4 m2 G3 {6 @! p& ]8 {

设计的总框架如下图:

5 f, V: s* r1 V' p6 q3 E

$ H1 Q$ v- X, e4 F8 D3 j% o7 g

: n6 r: W/ n9 V% g( t

1 x: K  f4 }: P3 B$ Y- Z1 x" f  v. M4 I' }/ R  F& N

  F% O; Z) M6 ]& u5 e

在设计中分频模块提供所需要的38KHZ的时钟,当按键按下时发送我们的发送模块发送一个给定的数值,我用户码为8'b0,第二段用户码为8'hff,然后发送给定的数据码,和数据反码。上电后我们的设计会发一次我们给定的数据码,然后在接受模块会接受到其发送的数据并在数码管上显示出来,之后我们可以用我们我的遥控键盘来发送数据,接收模块接收显示出来,通过验证我们接收和发送的正确。

% [6 s3 l3 h' Q+ x. Y* G

$ d4 A" o0 \/ k& J' Q+ ~9 }9 p
/ b( j1 `7 b# H2 {3 l3 C
! V2 G  B3 D) P0 P; U) N* Y$ C2 ~
- [2 H2 q) c1 o8 e2 P
设计代码

0 |6 Z2 p+ {8 J/ _3 J% _4 D8 ~
( ~: H. q( C0 z* z2 M
7 L+ f" ?; H7 X0 }1 o" `# j
顶层模块infrared代码:

; s. f3 x- ?% }/ ~" {6 [  ~8 I7 V5 z/ \% V& N1 V7 `

8 q4 l' K% j6 i! r
& b/ `/ B" P4 U
7 M1 c* y- c' ~7 d  D

6 D6 S! _% j7 P" L% t
发送模块tttxxx代码:
  O  b+ A. q% O6 I$ |4 z
. h; Y6 r2 g7 j+ B4 G* F1 D# `
' {1 Q) G* }. \- G" y! e5 }

3 z4 S2 i% _( _& B6 g
* P' U& J/ [0 @, A7 |: n6 b

: l0 p) C1 C2 |
" N9 M% S% w- Z  l1 J- a& X; }3 ?6 ^' l( E7 [5 ?
+ m1 p" L- i7 ^; A
! q' Q4 ^5 W* B& w
: F& O$ Z) X0 K6 V8 ^; a
5 c4 ?9 B3 c  s1 I* p0 k8 t7 x  m1 i
& e( a; t# a. A
. G! X% x( D0 _9 M+ i2 F
接收模块rx_led代码:

, t% f0 [- e8 n. ~
: r/ j( V0 Y  n4 e/ a
: N: q9 p+ ~! T& d2 E4 J& }
* y& H4 F9 x' d0 q$ g* N
) }% e3 _: k6 t* j
0 i. n2 Z/ @. |4 M* x/ e

; P" d& _5 O4 B$ M& E! J3 U9 f9 g: M5 ~2 j

4 B$ U: x6 Y/ {7 p
+ ^- }6 q8 A* {' b# ?! z" \( W5 W& Z+ o! B8 K" x
* F- X2 \/ |1 m& J
数码管seg模块:
1 m6 s0 ?2 H/ K* L) B

  m: ?, w, o$ ?3 U* V/ G" i
0 ?: S/ p9 u! ~  i7 d
( a3 X9 M; `  J: w+ t1 j1 V. ~8 t' o. X* E# g2 }
6 Z# b% k5 B9 u9 z& Q, I$ R; q* r
- \/ Q% Y; j. _6 p/ R$ |% T

/ ^7 i6 w0 r/ s4 T' r- ?1 J$ s" @: i! N& h3 b4 e

; S( N" S1 d: Y' a( |; D/ V4 `; w( t& r& y+ w

; H" r6 j6 B9 |+ F# ^) h. f8 G
分频模块clk_frep代码:
7 |) [2 Q6 p( l" N# @

: e$ B+ Y+ M0 D- q  L- ?" [" f+ w: ^4 Y6 }4 V  f1 U2 X
, c9 I# @: E% w" F
' f5 c# N4 N4 R6 y" ]2 _' p

$ p! y' k' g2 U9 [3 p  ?9 k
5 [/ j( g: s' f/ n. n9 B$ H) j+ s2 q# t* z& ^
仿真测试

' O  e0 z1 Q3 |* |+ R
% l! ]; a8 d) R3 u, `. K1 d) M' w( r$ `0 p4 t/ B. ]
: F/ d2 _# Z% R; j
- E4 g! w3 [' W; g/ w/ ^
测试模块infrared_tb代码:

8 ]' Q  L' }% ^5 D7 G# j, \
! ~+ E  M! {9 Q1 n+ U3 b! U3 N9 F1 T) F. H4 B4 d- U/ G
/ |$ x! Y  J) I; a" {' o8 t

2 D# Z4 {9 ]' T( f  I9 }8 [1 f! H
; r$ i5 m) ~6 {; Y! t
3 ~. O* G: b9 p% v" n5 e

6 C# `: o( q7 `. G1 S; j# A& z8 `, b9 D" l. ~
0 I- }- d* c: C0 B0 I) q( A1 w5 h

仿真图:

8 V$ Z1 p4 A6 B/ ~0 F  v4 C" z

仿真中我们可以把数码管模块的计数器的值改小一点,便于仿真。


, q2 A4 g4 ~) i1 b5 |8 X/ a& M! {8 c


: O* @0 b% @7 ]( O# M4 N
2 s; e* m# J5 E

如图中所示的我们发的是32’h00ffa25d,那么数据为是8’b1010_0010,那么先发送时就时就按下面的序列开始0100_0101接收到的为45,所以工程正确。


3 ~4 i, O( g6 H; R7 ]& r! d6 E
9 |8 N* ]- F3 Q# v

该用户从未签到

2#
发表于 2024-5-6 11:26 | 只看该作者
FPGA程序写的很规范
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-19 03:37 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表