红外编码与解码的VHDL实现.docx
- 文档编号:4067474
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:14
- 大小:308.82KB
红外编码与解码的VHDL实现.docx
《红外编码与解码的VHDL实现.docx》由会员分享,可在线阅读,更多相关《红外编码与解码的VHDL实现.docx(14页珍藏版)》请在冰豆网上搜索。
红外编码与解码的VHDL实现
红外编码与解码的VHDL实现
红外遥控在家电中应用广泛,采用VHDL语言设计红外遥控器的控制系统,该系统通过了实时仿真的验证,可现实键值读入,红外发射码的生成及发送功能。
电路模块的程序代码可重复使用,可方便的嵌入到各类需要红外遥控控制器的嵌入式系统中,本次窗帘的遥控器电路就是用VHDL语言编写,并下载至CPLD中执行。
红外遥控作为一种单向红外通讯技术,因其具有性能稳定、使用方便以及成本低廉等特点,已经在消费电器中得到了普遍的应用。
随着对电器产品智能化和使用便利性要求的进一步提高,红外遥控的应用已经从传统家电领域向智能设备等新领域扩展。
由于集成电路制造工艺的设计水平的不断提高,将此类奋力电路功能集成到嵌入式系统中已成为可能。
本文设计脉冲信号调制采用了PPM方式,红外遥控系统采用了VHDL语言编写,来实现该电路的功能。
市场上的红外遥控器种类繁多,一般有这些类型uPD6121、TC9012、M50560-001、SA3010等等
不管遥控器的种类如何,其编码方式大多类似,本文以比较典型的uPD6121为例,要想用可编程逻辑器件编写其内部电路模块,首先得了解整个电路的工作原理,
以下是uPD6121红外遥控器的主要原理。
载波波形:
图4-14红外载波波形
使用455kHZ晶体,经内部分频电路、信号被调制在37.91kHZ的频率上,占空比为:
1/3,1/3的占空比有助于提高红外线的发射效率。
数据格式:
数据格式包括了引导码、用户码、数据码、和数据反码,编码总占32位。
数据反码是数据码反向后的编码,编码时可用于对数据纠错。
(注:
第二段用户码也可以在遥控应用电路中被设置成第一段用户码的反码。
图4-15uPD6121编码前数据格式
使用455kHZ晶体时各代码所占用的时间
图4-16uPD6121编码后数据格式
位定义:
用户码或者数据码中的每一位可以是位‘0’,也可以是位‘1’。
区分‘0’和‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式,英文简称PPM。
图4-17uPD6121的位定义
uPD6121G按键输出波形有两种方式:
一种是每次按键都输出完整的一帧数据;另一种是按键按下相同的按键后每发送完整的一帧数据后,在发送重复码,知道按键松开。
重复码
图4-18uPD6121重复码波形
单一按键波形
图4-19uPD6121单一按键波形
连续按键波形
图4-20uPD6121连续按键波形
4.4.1、EPM3128ATC100-10复杂可编程逻辑器件芯片介绍
EPM3128ATC100-10是ALTERA公司MAX3000ACPLD系列中的一种。
MAX3000A系列的CPLD采用成本优化的0.3um,四层金属生产工艺,提供32到512个宏单元。
3.3V的MAX3000ACPLD系列提供商业级和工业级常用的速度等级和封装,是那些对成本敏感,大批量应用的企业的理想选择方案。
MAX3000A系列产品的特性:
图4-21max3000a系列产品特性
EPM3128ATC100-10特点:
逻辑门:
2500
逻辑阵列块(LAB):
8
宏单元(Macrocells):
128
用户IO口:
76
非用户IO口:
20
JTAG下载口:
4
合计:
100
封装:
TQFP
图4-22EPM3128ATC100-10封装
芯片中包含四个专用输入口(GCLK1,OE1,GLCRn,OE2(GCLK2)),分别为是全局时钟、全局使能、全局清零、全局时钟/使能信号,这几个信号有专用的连线与CPLD内部的每个宏单元相连,信号到每个宏单元的延时相同且延时最短,如果不用这些引脚可以将其接地。
4.4.2、红外遥控器模块的原理图
红外遥控模块的硬件部分原理图较为简单,该电路主要由键盘扫描电路、红外发射部分组成,而编码调制部分由软件部分负责。
图4-23红外遥控发射电路图
由于ALTERA公司的3.3V/2.5V的MAX3000A芯片的IO脚兼容5V,所以键盘扫描电路的上拉电源可以接5V。
D1为红外发射管,D2为红外发射指示灯。
4.5、主控制板每个模块功能介绍
主控制板电路除了CPLD的最小系统之外主要有双门限电压比较电路、数码管扫描显示电路、按键脉冲发生电路、红外接收电路(上面已有介绍)、电机驱动电路(上面有介绍)以及一些接插件等。
4.5.1、CPLD最小系统绍
CPLD的最小系统主要是电源电路、程序的下载电路以及时钟输入电路(作为纯组合逻辑时可不接)几部分组成。
电源电路:
采用5V电源适配器供电经AMS1117稳压后产生3.3V电压给CPLD供电。
CPLD的每个电源引脚均要接滤波电容,典型值0.1uF。
图4-24电源部分
电容C5~C12为芯片的每个电源引脚的旁路滤波电容,起电荷池作用,以平滑电流变化引起的电源电压的波动,当芯片电流突然增大时,旁路滤波电容放电以降低芯片的电压波动。
旁路滤波电容通常选用10~100nF的瓷片电容,瓷片电容的特点是:
电感小,等效串联电阻低,用作旁路滤波电容非常合适。
下载电路:
ALTERA公司提供了多种编程下载电缆,如ByteBlasterMV、ByteBlasterⅡ并行下载电缆,目前更好的选择是采用USB接口的USB-Blaster下载电缆。
USB-Blaster电缆与ALTERA器件的接口一般是10芯的接口,其信号定义见表。
引脚
1
2
3
4
5
6
7
8
9
10
JTAG模式
TCK
GND
TDO
VCC
TMS
—
—
—
TDI
GND
图4-2510芯接口引脚图
下载电路原理图:
图4-26下载电路
时钟电路:
CPLD的主时钟采用25MHZ有源晶振,电路图如下:
图4-27时钟电路
5.1、红外遥控编码原理与设计
由于EPM3128A芯片的宏单元数量的有限性,在编写红外编码发射电路时,不得不考虑芯片资源的节约问题,所以本设计编写的红外遥控编码原理与uPD6121稍微有所差别,uPD6121格式中数据码和用户码均为8bit,这样编码或者解码时会占用很多的寄存器,及占用CPLD内部很多的可编程触发器。
而本文设计的遥控器只有16个按键,没有那么多种数据要编码发射,且EPM3128A芯片资源也是有限的,所以对用户码和数据码均设定义为4bit。
本文设计的红外编码采用PPM编码方式,下面是其编码信息。
载波信号:
f=38khz;占空比1/3;
位定义:
a为一个时间单位时间长度是38kHZ的16个时钟周期,即a=1÷38kHZ×16=0.421ms(这样有助于时钟分频,减少触发器使用的数量)
图5-2位定义
数据格式:
数据格式中包含了引导码、数据码、数据反码、用户码、用户码,除引导码外其余均为4bit,编码总占16bit。
其中引导码的高电平6.74ms=16a,低电平3.37ms=8a。
图5-3编码前数据格式
每按一次按键发送一帧数据
图5-4编码后数据格式
红外遥控编码的主要电路有,键盘扫描电路、PPM编码电路、时钟分频电路、以及调制电路等组成。
时钟分频电路:
产生整个电路所需要的所有时钟频率
键盘扫描电路:
产生4位键值信号
PPM编码电路:
对要发送的数据进行编码后发送
调制电路:
38kHZ的频率与PPM编码后的串行输出信号进行相与即可
很明显电路的关键是对要发送的数据进行PPM编码,为了充分利用EPM3128A有限的宏单元,选择一个良好的PPM编码的实现方式显的非常的重要。
下面是两种PPM编码方式:
有PPM编码的位定义可知,
原码1—〉1000
0—〉10
方案1:
首先在PPM编码过程中省去了引导码(方案2同样),只对要发送的数据进行PPM编码论述。
由编码格式可知,要发送的数据的有效信号位数长短不一,不能用简单的逻辑变换将原信号转变为要发送的PPM编码信号后再移位输出。
数据必须按照顺序装载在移位寄存器的前半部分。
将数据码、数据反码、用户码、用户码分别装入16位缓冲寄存器中,用38kHZ、占空比为1/3的频率(频率不固定,其周期最好大于时间a)对这16位缓冲寄存器进行逐位采样,当待译码为1时采样得到的信号为1000,当待译码为0时得到的信号10,并依次装入64位移位寄存器,移位寄存器若有空余位,则全部补零。
当装载完成后,移位寄存器进行移位,在移位的过程中,需要对移位的位数进行计数,当移位寄存器寄满64位时停止移位。
实际应用时最好在移位寄存器前加一个输出位。
该方案的实现方法较为简单,但是会浪费系统很多的资源,紧紧这两个寄存器就需占用80个可编程触发器,当要发送的数据过长,用这样的方法编码简直就是不切实际的。
其逻辑框2图如下:
图5-5方案1编码原理框图
方案2:
方案2也是本人被芯片有限的资源逼出来的一种实现方案,方案若有啥不足之处,请多多指教。
当键盘扫描模块得到稳定键值数据时,将数据码、数据反码、用户码(用户码可以设定为4bit常量)分别装载于寄存器中。
并且启动PPM编码发送电路。
数据码、数据反码。
用户码、用户码分时装载于缓冲寄存器(4bit)中,再由缓冲寄存器装载于移位寄存器(5bit、右移)的4个高位中,及移位寄存器的最低位(输出位)不装载。
自由计数器是两位模值可控计数器,当移位寄存器的移出位是‘0’时,自由计数器计数值由“00”―〉“01”―〉“00”变化,当移位寄存器输出位是‘1’时,自由计数器计数值由“00”―〉“01”―〉“10”―〉“11”―〉“00”变化。
自由计数器每次清零时,产生移位时钟,以对移位寄存器中的数据进行移位。
当移位满4位时,产生地址时钟信号,以对地址发生器做加1处理。
地址发生器由两位计数器构成,地址时钟信号每来一次脉冲,计数器加1,四位地址分别为“00”“01”“10”“11”。
分别对应数据码、数据反码、用户码、用户码。
比较器的功能是,将自由计数器的输出值与“01”比较,当自由计数器输出“01”时,比较器输出为‘1’,其余数值时比较器输出‘0’。
这样当移位寄存器的输出位是‘1’时,比较器就按顺序输出‘1’‘0’‘0’‘0’,当移位寄存器输出位是‘0’时,比较器就按顺序输出‘1’‘0’。
图5-6方案2编码原理框图
了解数据发送的基本结构后,在程序编写时,关键是在无“时间缝隙”的情况下,分别将数据调制发送出去,所以把握好整个电路中的每一个时钟的上升沿和下降沿显的非常的重要。
方案2虽然在结构上貌似麻烦了一点,但是它可以节约芯片的资源,而且当数据量越大时效果越明显。
无疑对于像触发器比较匮乏的MAX3000A系列的CPLD来实现类似于NEC的uPD6121的编码规则,是一个良好的实现方案。
遥控器除了遥控编码当然还有键盘扫描电路。
键盘是4*4键盘,行线接的电阻是上啦电阻,阻值一般为几个K,作用是限流。
CPLD循环输出行信号(KX[3..0])“1110”“1101”“1011”“0111”,当没有按键按下时,CPLD的列输入信号(KY[3..0])为“1111”。
当有按键按下时,例如,按下1键,此时KX[3..0]行信号输出为“0111”,此时输入端KY[3..0]检测到的信号将是“0111”。
可以在编写程序时,将输出信号KX[3..0]于输入信号KY[3..0]同时判断,如刚刚举的例子,可以认为当数据“KX&KY”为“01110111”时,可以译成数据1,同理可得其它按键的编码。
键盘扫描程序设计思想:
循环输出行信号“1110”“1101”“1011”“0111”。
检测列信号输入,将行、列信号相并“K_CODE<=KX_TEMP&KY”。
译键值,将行、列相并的信号“K_CODE”译成“0000”“0001”“0010”“0011”“0100”“0101”“0110”“0111”“1000”“1001”“1010”“1011”“1100”“1101”“1110”“1111”,并且锁存。
去抖动,在译每一个键值后,为了防止按键抖动,加了一个计数环节,一旦检测到列信号后就译码,紧跟着进入计数环节,此时键抖动不会进入其它环节,这样可以防止键的抖动。
5.2、红外解码原理与设计
红外接收器接收到的红外信号后,输出电平与信号的有无一般是反向的,但是在硬件电路连接时,在其输出脚接了PNP管,信号从三极管的集电极输出至CPLD。
所以,CPLD需要解码的数据与其发射时数据的相位是同相的。
一般文献在介绍红外解码时,选用VHDL语言的有限状态机对红外信号进行解码,用有限状态机解码的优点有很多,本文不再冗述。
本文主要是基于寄存器或者计数器的状态对整个电路的解码流程进行详细的数据流描述,这样可以更好了解电路的硬件结构以节约整个电路资源。
下面就以其发射时的波形对红外解码电路进行阐述。
图5-7编码后数据格式
解码流程结构图:
图5-8红外解码流程结构图
解码电路:
输入信号Din、时钟信号38khz和输出信号code[7..0]。
流程1:
当红外信号的第一个上升沿来临时,锁存器锁存输出至‘1’,开始起始码解码过程,当起始码解码完成后,对输出标志位至‘1’,启动数据码解码过程。
(起始码电路后面详细阐述)
流程2:
当红外信号的第二个上升沿来临时,位地址加‘1’。
流程3:
当红外信号的第二个下降沿(及数据码的第一个下降沿),延时计数器复位,开始倒计时计数(实际为下降沿后一个很短的低电平信号对延时计数器复位)。
流程4:
延时计数器为模值为24的到计时计数器,当计数器为1是,输出为‘1’,即产生clk脉冲。
(延时计数器的模值计算:
当数据码的下降沿来临时开始延时,延时的时间宽度最好在1.5a,a是数据码最小脉冲的宽度。
也就是说,当下一位数据为0时,延时后的脉冲信号要对准下一位数据码的高电平的中间部分,这样即使编码器的晶振时钟与解码器的晶振时钟有所误差也不会产生解码错误。
至于延时计数器的时钟频率,最好远远高于红外信号的数据传输速率。
当然,频率越高,计数器的模值就越大,适当就好。
38k频率时钟的周期t=1/16a,所以选择了模值为24的倒计时计数器。
)
流程5:
clk时钟根据位地址将Din反向后装载于code[7],上升沿触发.
流程6:
再重复整个数据解码过程7次,解出所有数据码及其反码。
(后八位在实际测试时未解码,读者可以适当修改电路后再解码)
位地址与数据装载于缓冲寄存器的关系如下:
CASEADDRESSIS
WHEN“0001”=>CODE(7)<=NOTDIN;
WHEN“0010”=>CODE(6)<=NOTDIN;
WHEN“0011”=>CODE(5)<=NOTDIN;
WHEN“0100”=>CODE(4)<=NOTDIN;
WHEN“0101”=>CODE(3)<=NOTDIN;
WHEN“0110”=>CODE
(2)<=NOTDIN;
WHEN“0111”=>CODE
(1)<=NOTDIN;
WHEN“0100”=>CODE(0)<=NOTDIN;
WHENOTHERS=>NULL;
ENDCASE;
当完成整个解码过程后要产生一个使能信号,一个脉冲沿,还有四位有效数据。
解起始码部分:
图5-9起始码解码框图
起始码部分由16a的高电平和8a的低电平组成,用38khz的频率对红外信号Din进行采样。
起初,当采样信号为1时累加器1加一处理,如果其中有一次为0,则对累加器清零。
直到采满15次连续的‘1’信号后,再对Din信号的低电平采样,同理踩满连续7个‘0’信号后,输出起始码有效信号。
如果连续的‘0’信号中出现一个或者多个高电平信号,则对累加器1和累加器2全部清零,恢复初始解码状态。
比较器的大小并无固定的值,根据采样时钟而定,允许累加器的数值有所偏差,采样频率越高,越是能够采的比较精确的起始码,但频率越高,累加器位数也越多,适可而已即可。
注:
大顺与你分享
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 红外 编码 解码 VHDL 实现