Using the XGATE for Manchester Decoding中文翻译.docx
- 文档编号:30424444
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:24
- 大小:768.18KB
Using the XGATE for Manchester Decoding中文翻译.docx
《Using the XGATE for Manchester Decoding中文翻译.docx》由会员分享,可在线阅读,更多相关《Using the XGATE for Manchester Decoding中文翻译.docx(24页珍藏版)》请在冰豆网上搜索。
UsingtheXGATEforManchesterDecoding中文翻译
青岛大学
毕业论文(设计)科技文献翻译
院系:
自动化工程学院电气工程系
专业:
电气工程及其自动化
班级:
2009级电气2班
姓名:
唐玉龙
指导教师:
李立伟教授
2008年月日
使用XGATE进行曼彻斯特译码
本文档的目的是证明使用XGATE可编程外部设备作为无线频率接收系统的曼彻斯特译码器,XGATE属于HCS12X微控制器系列,是精简指令集外部设备,它允许数据在外部设备和内部RAM之间传输,曼码信号的译码过程需要大量的由定时器输入的中断服务以及高级中央处理器CPU的装载。
这些应用程序通长用在噪声干扰的环境中,从而使曼彻斯特译码成为一个更加密集的任务。
XGATE可编程外部设备通过处理中断服务进程来从HCS12X核心卸下CPU的负载,这个中断并没有使HCS12X核心的程序停止执行。
这个应用程序的说明文件讨论了使用XGATE进行曼彻斯特密码译码这个提议的执行。
实现是基于一个典型的汽车射频接收机中的应用,例如遥控无钥匙进入(RKE)或轮胎压力检测(TPM)。
除了证明曼彻斯特译码的可行性,本文还突出了使用XGATE的附加好处。
1绪论
曼彻斯特编码是一种同步时钟编码技术,通常被用于数据传输,在单一的比特流中来编码时钟信号和数据。
它被广泛的用于射频应用程序,例如远程无钥匙进入、家庭自动化、监视传感器、轮胎压力监测传感器。
曼彻斯特编码并没有使用通常的‘1’。
‘0’逻辑序列(不归零制---NRZ)。
相反的,在一个bit持续中间由高到低电平的转换代表二进制1,而由低到高电平的转换代表二进制0。
图表1曼彻斯特编码
1.1HCS12X微控制器中的XGATE模块
本节描述了使用HCS12X微控制器的XGATE可编程外部设备进行曼彻斯特译码功能的实现。
XGATE是精简指令系统计算机的外部设备,它允许数据在外部设备和内部RAM之间传输,它的主要功能是通过降低它的中断负载来增加HCS12Xcpu的吞吐量,曼彻斯特译码算法非常适合使用XGATE执行,因为她允许HCS12XCPU在一个应用程序中执行任何其他必要的功能,而不是与曼彻斯特译码被加载。
1.1.1XGATE模块特征
XGATE模块具有以下特征:
•数据在不同目标之间流动(闪存,RAM,外部设备)
•通过内置的RISC核心数据处理
•多大112个XGATE通道
•HCS12XCPU和XGATE之间共享硬件信号灯
•在运行和等待模式的操作能力
•使用C完全可编程的,类似使用微控制器单元编写一个常见的中断程序
•编程,编译和调试都集成在CodeWarrior环境下,这使得XGATE成为一个使用非常简单的外部可编程设备
1.1.2XGATE模块图解
图表2.XGATE模块图解
1.1.3XGATE服务中断
•XGATE的主要特点是响应HCS12XCPU通常会服务的中断。
在HCS12XMCUs中每个中断被响应有两种不同的选择:
HCS12XCPU或XGATE可编程外部设备。
当在中断请求配置数据寄存器(INT_CFDATA0-7)中设置中断优先级时,指明RQST区的值来决定中断是由HCS12XCPU或者XGATE执行。
当设置RQST位为高
(1)时,服务中断由XGATE执行。
默认情况下,它为低(0)。
使用的资源如下:
•MC9S12XDP512微控制器
•时钟和复位发生器(CGR)模块用于定时配置(与外部振荡器一起工作在16MHz,总线时钟位8MHz)
•增强型捕捉定时器(ECT)信道0输入捕捉功能(输入捕捉中断,上升沿检测);这些是译码算法必须的
•串行通信接口0(SCI0)模块用于演示的目的,用户通信(接收中断可用);只在演示配置中可用
•端口B用于LED
•在RAM中的2K字节的XGATE代码
•20%XGATE加载
用于验证目的的装置:
•Tango3装置或者MC33591是一个锁相环路(PLL)调频,超高频(UHF)发射机,通过使用软件AN2777(MC33493的监视软件)在曼彻斯特译码中来发送信号。
•Romeo2装置或MC33591装置时锁相回路的超高频接收器;两个装置都能工作在315MHz和434MHz频段内,通过OOK和FSK实现调节。
•434MHz波段被用于这个项目
•用MC68HC908QY4来执行曼彻斯特编码是为了测试其在无噪声情况下的实现
想了解更多关于飞思卡尔装置的信息,请浏览。
2译码算法
本译码算法的基本思路是利用定时器的输入捕捉能力,定时器用于检测上升沿;这是译码过程的主要部分,只需要一个计时通道。
通常,当一个曼彻斯特编码信号作为一个通道样本并被检测上升沿的时候,每检测到一个上升沿就产生一个中断,这个中断是由HCS12XCPU产生的。
但是,在这里,中断是由XGATE可编程外部设备产生的。
XGATE作为曼彻斯特译码器的选择,被定义在Manchester_Decoder_General.h这个文件里。
关于译码,每个上升沿检测到的时间被保存,并且用该时间减去前一个上升沿检测到的时间,两个上升沿之间的脉冲宽度决定译码值。
概括来说,当一个曼码信号作为样本信号时,只有三种时间测量情况:
1位,1.5位和2位。
译码结果由时间测量值和上升沿被检测到的位置(位置有两种:
位于数据位的中间或者是位于数据位的末尾)。
图表3不同类型的上升沿检测
1位曼码的举例,译码序列值为‘0000’
1.5位曼码的举例,译码序列值为‘0110’
2位曼码的举例,译码序列值为‘0101’
表格1提供的逻辑真值表把时间测量值解码成位。
表格1中的输入有时间测量值,被存储到gu16TimeMeasured寄存器,和上升沿位置(该位置指上升沿相对数据位的位置)。
图表4上升沿位置
上升沿位置:
在数据位的中间(M),在数据位的末尾(E)。
表格1中,输出为译码值,被存储在数据缓冲区(gau8BufferTemporalXX)。
在1.5和两位的情况下,当上升沿发生在输入数据位的中间时,还能够译码出相邻下一位的值。
最后一个输出值是一个标志位,指出了译码值被存放的缓冲区的位置(gu8DecodeIndex)。
表格1.曼彻斯特译码真值表
在译码刚开始开始的时候,不能确定上升沿是发生在数据位的中间还是末尾,但是,我们能够通过一些有用的信息来确定。
这个信息是基于上一个上升沿被检测到的时间。
●1位:
上升沿的位置和上一个上升沿被检测到的位置相同(位于数据位的中间或者末尾)。
●1.5位:
上升沿的位置和上一个上升沿被检测到的位置不相同,如果上一个上升沿被检测到的位置在中间,则这个上升沿被检测到的位置在末尾。
●2位:
上升沿被检测到的位置只能位于数据位的中间。
根据上面的声明,当检测到一个2位的时间测量值时,我们就能确定被检测到的上升沿的位置一定位于数据位的中间,因此,信号发射侧在发送有用的数据前,推荐先发送一串包含2位时间测量值的序列。
变量寄存器gu8RisingPosition在接收到包含2位时间测量值的序列后,会初始化为0,根据上面的规则,当这种模式被检测到后,能逆向的译码。
无线频率帧在发送数据前通常包含一个前导码,帧头,或者是元素,因此在数据被传送前就能知道gu8RisingPosition变量的值,这可以使用户不用等待一串2位时间测量值就可以正确的初始化位置变量。
译码算法必须有足够的抗干扰能力,来抵抗噪声对译码的干扰。
在规律信号的顶部,一个由射频接收器产生的微弱的射频信号也能转变为扰动或小故障,这意味着信号脉冲的宽度会变化并且可能会影响译码过程。
这里提出一个好的解决方法,就是允许每个上升沿的时间窗口按下面的模式来决定数据位:
●0.75bit<=测量的脉冲宽度<1.25bit,作为1bit
●1.25bit<=测量的脉冲宽度<1.75bit,作为1.5bit
●1.75bit<=侧脸的脉冲宽度<2.25bit,作为2bit
●任何其他测量值,视为无效。
总结:
曼码的译码过程必须包括下面四步
1)当检测到“010”2bit长度的信号模式时,初始化正在译码的序列。
2)检测上升沿。
3)根据时间测量装置测得的两个上升沿之间的宽度,决定位长度模式。
4)根据真值表进行译码(表1)。
通过本节,我们了解了译码算法,它能被分成三个功能模块:
上升沿检测部分(计数器通道),时间宽度测量部分(MD时间测量装置),和译码器(MD译码器),它们都遵循表格1中的规律。
3.软件执行
目前为止,论述中还没有包括完整的曼码译码过程中需要的重要元素,好像正在偏离类似存储器管理的译码数据,背景噪音考虑和方案的框架这样的问题。
本节将回归主题,描述怎样执行和处理这些问题。
3.1帧方案
这个执行帧方案的选择和Romeo2数据管理使用一样,这个方案包括前导码,时钟恢复周期,身份识别ID,数据头,数据,数据结束符。
Romeo2装置有两个不同的调节方式(就像Tango3):
OOK(开/关钥匙)和FSK(频率转换钥匙)模式。
这个帧方案也是一样的有上述两种调节方式(除了在前导码阶段)。
图表5前导码的不同
因为这个执行出现在这个应用文件里。
在OOK调节方式下,且波特率为9.6kBd,前导码在NRZ码里是两个‘1’;在FSK调节方式下,9.6kBd,前导码在曼码里是3个‘0’。
对两者而言,时钟恢复周期都是1个‘0’。
ID:
在曼码译码的时候,这个ID是由8位组成的,ID的选择没有限制;唯一的约束是ID不能包含有与数据头相同的数字。
在曼码中被使用的ID是00001111,如果一个帧包括不同的ID或者从同一个预期中可以翻译出不同的ID,那么这个帧就会被舍弃。
数据头:
数据头是数据的前段,数据必须紧随在数据头之后,不能有任何延或前导,数据头是一个4bit的曼码信息。
在Romeo2这个装置中,他可能是0110或者其补数,如果一个帧在同种预期下包含有不同的数据头,那么这个帧会被舍弃。
数据:
这部分内容不受限制,不同的执行命令数据位数可能不同。
例如,Tango3监视器AP2777允许几乎200位数据,但是它只发送10位数据。
我们可以通过改变缓冲区的大小来改变数据位。
数据结束符:
暗示帧的结束。
对于两种调节方式数据结束符是一样的,NRZ编码波特率为9.6kBd,数据结束符位两个‘1’。
3.2操作模式和演示
3.2.1完整模式
完整模式的目的是在一个噪声干扰的环境下检测一个完整的帧(包含上面提到的所有元素)。
在这种模式下,一个完整的帧只有在用户决定发送的时候才会被发送出去。
它可以随时被发送并且发送必须由曼彻斯特译码执行决定。
图表6帧结构
3.2.2演示
接下来准备用一个更加互动的方式来演示这一实现。
该演示使HCS12X评估板和PC系列接口(超级终端)之间进行连续的通信,其速率被设置在9600波特率,8bit,无奇偶性,一个停止位,并且没有流控制。
SCI0模块也已经被按上述参数设定并且开始和HCS12X评估板之间进行通信。
发射器模式和接收器模式已经被激活,但是只有接受中断可用。
一个帧被Tango装置或者曼彻斯特编码器发射出去,每次当一个完整的帧被接收,一个计数器会显示被接收的完整的帧的数量和在最终数据缓存中的最后10位数据。
完整模式是以FSK和OOK两种调节方式实现的。
所有的密码都是由SCI0模块实现的,而中断服务是由HCS12XCPU执行的。
XGATE掌握所有的与曼彻斯特译码算法的有关的功能。
图表7.即时演示(左)演示显示(右)
3.3文件总结
这个实现的目的是使用XGATE可编程外部设备来实现译码算法;然而,它也被用于SHC12Xcpu来实现译码器。
用于执行曼彻斯特译码的核心的选择在Manchester_Decoder_General.h文件里。
其他的选择例如模式使用等也被定义在这个文件里。
这部分描述了这个项目的采取的步骤和对驱动器和文件的组织,它包含了一些对曼码译码驱动器的简要的意见。
当这个项目在勇士集成电路设备准则里被公开后,有一些实用的文件和文件夹允许用户查看其执行或改变软件的工能。
图表8文件结构
3.3.1概述
•总目录:
包含Manchester_Decoder_General.h文件;主标题一般为全局定义,也有一些重要的提示,比如像核心,执行模式,编码器,演示使能。
•来源:
包含一些通用文件,这些文件是当有任何XGATE项目被创建时默认产生的。
一些最重要的或至少能被用户修改的文件如下:
─Manchester_Decoder_main.c:
包含主功能函数,全局变量初始化,演示代码,XGATE设置,定时器通道0的服务日程(输入捕获上升沿检测),和SCI0接收服务日程。
─Vector_s12x.c:
包括HCS12Xcpu的中断向量表,和由HCS12Xcpu控制的中断原型操作。
─Xgate.cxgate:
是Vector_s12x.c的等价物,但是适用于XGATE模型。
它包含XGATE的中断向量表和由XGATE产生的中断的服务日程。
在这种情况下,当XGATE被选择执行曼码译码时,只有定时器通道0可用。
•驱动器:
包含译码算法,定义,和需要完成执行的原型。
译码算法包含以下文件:
─HCS12Xcpu原始资料/XGATE原始资料:
正如前面所描述的,有两种调节模式和一种执行模式(完整模式),因此,每个文件对应每种调节模式。
例如:
OOK调节模式(Manchester_Decoding_ook.c/XGATE_Manchester_decoding_ook.cxgate),
FSK调节模式
(Manchester_decoding_fsk.c/XGATE_Manchester_decoding_fsk.cxgate).
─文件头:
包括原始资料需要的原型和定义。
一些定义是缓冲区大小,定时器计数器的大小,阶段定义和错误定义。
有两个文件,一个是为了两种调节模式(Manchester_decoding_ook.h)。
这个头文件同时适用于HCS12XCPUor和XGATE。
─驱动原始资料包含Manchester_DecodingModule_Setup.c。
这个文件能够初始化CRG,ECT和SCI0模块。
3.3.2曼彻斯特驱动器
这部分包含译码算法文件和模块设置文件的功能说明说。
3.3.2.1模块设置
这个文件包括CRG模块的初始化。
对于这个项目来说,它的初始化是通过禁用事实中断和电脑的正常运行来完成的。
锁相环路也被禁用。
总线时钟等于系统时钟除以2。
系统时钟是由一个16MHz的外部时钟源提供的。
ECT模块的初始化信号来源于检测到的所有的通道的输入,但是只有通道0可用。
通道0只有检测到上升沿才会产生一个中断请求。
SCI0模块工作在9600波特。
发射机和接收机都是可激活的,但是只有接收机中断可用。
除了模块设置外,当使用这个演示时,还有三个用于管理串行接口的设置:
发送信息,接收信息,和把长的数字转换成合法的ASCII码。
3.3.2.2译码算法函数
本节主要描述了包含在曼彻斯特译码文件中用于XGATE和HCS12XCPU的函数,该描述是通用的,不同调节模式的差异将在下节中说明。
•MDTimeMeasurement:
在上一个上升沿和它前面的上升沿之间做减法来确定测量位的类型。
•MDDecode:
根据表格1来译码来自曼彻斯特编码发出的位信号。
该函数分为三个主要的块;每个模块代表被函数MDTimeMeasurement测量的位的类型(1位,1.5位,2位)。
•MDIncrement:
增量就是缓冲区中指标变量的值。
当所有译码工作完成后,它会填补最后的缓冲区(ID和数据)。
这个函数发生在过渡阶段(ID到报头,报头到数据,等等)。
•MDIdlePosition:
发生错误的情况。
每当有一个非程序化的事件或错误,调用该函数。
它也会初始化变量并且准备好等待下一个帧。
•MDStartListening:
起源于射频测试,负责检测帧的前导,即使在噪声环境下;同时开始测量和译码过程。
3.4完整的模式流程图
下面的流程图展示了主要的功能函数和帧的过渡阶段。
SL:
StartListening,TM:
TimeMeasurement,IP:
IdlePosition,D:
Decode,I:
Increment.
图表9完整的模式流程图
3.4.1阶段流程
在所有的阶段中,TimerChannel0Isr都会一直发送上升沿检测信息,这些信息一定会被MDStartListening()或者MDTimeMeasurement()函数根据不同的阶段采用。
只有一些变量会在这个过程的说明中被提到。
1.前导码(Id):
MDStartListening()等待一个合适的序列来完成前导:
或者是4个曼码‘0’(适用于FSK),或者是时间测量超过十位(用于OOK)。
前导完成后,进入下一个阶段(gu8Stage=ID),可以开始译码(gu8StartDecoding=1)。
2.ID:
现在MDTimeMeasurement()函数会获得中断的结果;如果时间测量结果是一个有效的值(1位,1.5位,或者2位),然后MDDecode()函数将会被调用(gu8FlowControl==1)。
MDDecode()函数将会把译码值写进寄存器gau8Buffer-TemporalId中并且与ID默认缓冲区比较。
如果存在差异,MDIdlePorcess()函数将会被调用来重新初始化全局变量值。
如果没有错误并且ID被接收完好(当guDecodeIndex达到极限),然后就会进入下一阶段(gu8stage=HEADER)并且最终的ID缓冲区将会被填充。
3.前导码(报头):
gu8StartDecoding再次被取消,因此中断会再次到达MDStartListening()函数,它会寻找新的前导码。
这使得译码过程可以继续进行(gu8StartDecoding=1)。
4.报头:
这与ID阶段非常相似;唯一的不同是gau8BufferTemporalHeader缓冲区被填满。
它也会与默认的缓冲区值进行比较。
如果存在差异,会调用MDIdlePosition()函数;如果没有错误并且报头被接收完好(gu8DecodeIndex达到报头的极限),将会进入下一阶段(gu8Stage=DATA)。
5.数据:
这一阶段,时间缓冲区将会被译码的数据填充,当缓冲区gu8DecodeIndex达到缓冲极限时,数据阶段完成,并且最终的数据缓冲区将会接收存储在gau8BufferTemporalData中的译码数据。
下一步是重新初始化变量来重新开始这一译码过程。
在这一阶段,当一个完整的被接收,计数器会加1(gu16CompleteFramesCnt++)。
6.EOM:
如果该阶段被启用或实施,变量gu16FinishFrameInd会被设置。
这会使gu16CompleteFramesCn中的值和gua8bufferFinalData中的十位数据通过SCI显示在超级终端上。
3.4.2OOK和FSK的不同
OOK和FSK之间在其前导码上有区别。
对于OOK,为了获取前导码,会在检测到一个上升沿之后开始执行测量函数;而对于FSK,必须等待4个上升沿。
OOK不使用像gu8PreambleCnt这样的前导码变量,而FSK使用。
这个变量被用于MDStartListening()函数来计数上升沿的数量,达到计数值才允许进入前导码阶段。
4曼彻斯特编码器
这一部分介绍了用于测试曼彻斯特译码的装置及元件
4.1使用的装置
4.1.1曼彻斯特编码器
曼彻斯特编码器是在一个拥有M68EVB908Q,Rev.1.1板子的MC68HC908QY4上开发的。
通用8位控制器的定时器被配置在输出比较工作模式。
这个编码器思路非常简单:
信号为9600波特,计数器必须到达时间位的一半,当计数器到达,通用的输出会转变它的值,这意味着在时间位的中间会发生一次跳变,如果要求一个为0的曼码值,这个通用的输出会初始化为低,当计数器到达时间位的中间时,它会跳变位高,并且保持半个位时间段。
这个编码器包括定义和用于发送帧结构每一部分的功能函数,这个函数适用于那两种调节模式。
所有的定义和更高级别的函数都是基于简单的MESendZero(uchartimes)和MESendOne(uchartimes)程序上,它们在曼彻斯特译码中发送一个‘0’或一个‘1’的次数由一个次数参数说明。
这个编码器完美的证明了这个实现不受噪声干扰。
4.1.1.1步骤
这个测试过程的步骤包括把通用输出和HCS12X的定时器通道0的管脚连接起来,这个管脚作为输入端,检测上升沿并且当有中断时产生中断。
调节方式的选择被定义在main.h文件中。
为了传送数据,当按下连接到PTA0的按钮确定连接后,微控制器会发送帧。
曼彻斯特编码软件会设置好QY4的KBI模块的配置,以及中断的按钮活动。
当帧被发送到HCS12X后,接下来的过程会由XGATE/H-CS12XCPU来完成。
4.1.2射频装置
射频装置已经被多次提到了。
本节讨论每个装置的应用说明,这个说明描述的是串行监视器的使用。
为了能够以这种方式工作,必须有一个微控制器帮助射频装置进行串行通信接口与计算机之间的通信。
Tango3的应用说明书AN2777和Romeo2的应用说明书AN2818解释了这个过程,并且给出了如何使用这些监视器的例子。
Tango3被集成到含有RG60微控制器的DEMO9S08RG60板上。
Romeo2被集成在含有AP64的DEMO908AP64板上。
这两个射频装置使用各自的微控制器通过串行外部接口(SPI)进行通信。
微控制器使用PC通过SCI进行通信。
Tango3和Romeo2两个监视器允许用户通过超级终端配置这些装置和执行传输。
传输结果也被显示在接收显示器上。
图表10Romeo监视器
在Tango3的基础上做了一些改变,添加了一些代码来实现这一应用:
•前导码和信息结束符做了重定义:
信息结束符从两个‘0’变为两个‘1’,OOK调节方式下前导码变为两个‘1’,接着是一个为0的曼码时钟恢复位。
•新指令:
─APF1:
发送的数据为十位完整模式帧(0011111111)。
─APF2:
发送的数据为十位完整模式帧(1111100000)。
这些指令被添加在SCI1Rx里。
添加新的指令导致显示数据的变化。
•发送信息的修正:
在Tango监视器上,有一个功能函数,负责设置定时器和发送正确的前导信号、信息结束位、曼彻斯特编码数据、和NRZ数据。
这个函数叫做SendMessage()。
在这个函数中,重定义了前导码和信息结束符。
同时,添加了条件分支结构决定是否执行曼彻斯特译码测试或者监视器照常工作。
4.1.2.1步骤
定义在监视器Tango里的帧是由Tango3通过射频发送的,是由Romeo2负责接收。
这个数据被传送到与在SPI里的Romeo2板相连接的8位微控制器(AP64)。
在AP64板上的MOSI管脚与定时器通道0(PT0)管脚相连。
Tango3监视器的设置说明在AN2777里,Romeo2的设置说明在AN2828里。
Romeo2(接收器):
1.CF1(载波频率434-MHz)<有返回值>.
2.MOD0(OOK调节方式)或者MOD1(FSK调节方式)<有返回值>.
3.SOE1(选通振荡器可用)<有返
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Using the XGATE for Manchester Decoding中文翻译 Decoding 中文翻译