首页 资讯 应用 高压 设计 行业 低压 电路图 关于

通信网络

旗下栏目: 电力电子 通信网络 RFID LED

FSK通信协议

通信网络 | 发布时间:2017-09-27 | 人气: | #评论# |本文关键字:FSK,协议,通信
摘要:FSK(Freqency -shift keing)频移键控,它利用频率的变化来传递数字信息。可以使用FSK调制音频信号,定义两个频率来表示一个位信号,一个频率代表‘0’(LOW)信号,另一个频率代表‘1’(HI

FSK(Freqency -shift keing)频移键控,它利用频率的变化来传递数字信息。可以使用FSK调制音频信号,定义两个频率来表示一个位信号,一个频率代表‘0’(LOW)信号,另一个频率代表‘1’(HIGH)信号。如下:

FSK通信协议

 

就上图所示,使用高电平表示位‘0’,使用低电平表示位'1'。

这里其实两种配置方案:

(1)、高频率   <===>   '0' (LOW)       低频率  <===>   '1'(HIGH)

(2)、高频率   <===>   '1' (HIGH)       低频率  <===>   '0'(LOW)

下面都采用方案(1),高频率表示位'0',低频率表示位'1'。

FSK通信可以采用标准的串口协议:1位的起始信号,一串数据位,1位停止位。一个LOW位表示一个字节传输的起始,接着跟着8位的数据,加一位的可选的校验位,最后1位的HIGH位表示一个字节传输的结束。

在开始传输数据之前,需要按标准串口协议发送一个初始字节0xFF来初始化传输。比如说,要传输字符串“Hello”,则需要先传输0xFF,接着才再发送'H','e','l','l','o'。

接下去可以定义高频与低频值。定2种传输速度模式:高速与低速。如下:

低速模式:

LOW频率: 800Hz

HIGH频率: 1600Hz

传输速率: 100波特率

高度模式:

LOW频率: 2666Hz

HIGH频率: 4000Hz

传输速率: 600波特率

主要的传输格式如下:

1位起始位(LOW)

8位数据位,LSB first

1位校验位

1位停止位(HIGH)

对于高频与定频的值跟传输速率是有一定的关系的。以低速模式说,传输速率为100波特率,在1/100的周期里可以检测到8个LOW频率周期以及16个HIGH频率周期,这样就允许连续多次采样,保证采样到的频率正确无误。以高速模式说,传输速率为600波特率,在1/600的周期中,可以检测到4个左右的LOW频率周期以及7个左右的HIGH频率周期。根据检测到的LOW频率周期数与HIGH频率周期数来判断信息位是'0'还是'1'。


FSK接收数据

要接收FSK发送过来的数据,首先需要将接收到FSK信号进行解调。有很多种方法可以实现。一种最快、最简单,最偷懒的方式就是记录过零点数,然后根据两个过零点的时间差计算出信号的频率。这种方法适合那些处理能力不强的处理器,如单片机等。然而,对于处理能力极强的处理器,比如手机、电脑,上面的方法就显得比较笨拙了,对于它们,最好的方式是使用  DFT(快速傅里叶变换),或则使用FFT(快速傅里叶变换)。这些技术,对于从事图形处理的研究的人可以说是信手拈来的事情。使用DFT或FFT可以给出信号完整的频谱,而你需要的只是其中的两个频率(HIGH频率与LOW频率)。然而,对于实际的信号来说,总是带着噪音,所以如何排除这些噪音的干扰,检测出真实有效的频率,也是要处理的重要一环。在读取特定频率信号时,要读出准确的频率,排除背景噪声或者一些偶然因素造成的影响,可以使用下面几种方法:(定义读出的频率与原定义的传输频率的差值为波动值)

(1)、如果波动值超出一定范围的偏差,比如说超过1/10的偏差,则可以认为读取到的频率值可能是噪音频率。

(2)、如果波动值的平方根大于平均波动值的平方根,则可以认为读取到的频可能是噪音频率。

一旦完成了频率的分析,接着就可以读出频率承载的数据位了。以传输速率为周期,周期的地采样信号。比如说,传输速率为100baud,则以1/100s为周期采样,每1/100s读取一个位的信号。在每个采用周期中,需要对信号进行多次采样,然后进行分析处理,这样才能保证接收到正确的频率。

在读取FSK传输的串口数据时,需要观察信号承载的信息。如果信号长期处于HIGH状态(一直接收到HIGH频率信号),则表示处于空闲状态。当接收到一个起始位(1个周期的LOW频率信号),则表示准备开始接收8位的数据位,1位校验位,然后再接收到一位停止位(一个周期的HIGH频率信号)表示一个字节数据接收完毕。

很有可能在传输的过程中,由于噪音等干扰,而造成数据的1位或多位被篡改,校验位的存在就是为了排除这种情况。偶检验的过程是:检测收到的8位数据中'1'(HIGH)的个数,如果是偶数个,表示接收到正确的数据;如果检测到奇数个'1'(HIGH)个数,则表示接收到错误的数据,需要将接收到的这一字节数据摈弃掉。

在文章的最前就提过,FSK会先传输初始化字节0xFF信号来建立初始化传输,所以,接收FSK数据过程中,必须要忽略这个字节,然后才开始接收数据。

FSK发送数据

发送数据数据的过程起始就是频率调试的过程。FSk发送过程相比接收过程简单地多。

第一件事考虑的是如何生成频率信号。对于手机电脑等,可以直接调用相应系统的正弦波发生器的库函数,生成指定频率的正弦波。而对于单片机等比较低端处理器来说,可以使用它的外设(如定时器、DAC等)产生正弦波;如果,无法产生正弦波,则也可以用PWM波(只需带PWM模式的定时器,或者定时器加IO口模拟)替代,只不过会增加一些杂波而已。

调制的频率最好还是正弦波信号,因为在切换两种频率的正弦波时,可以保证波形的连续顺滑,否则就会在且频率切换出徒生杂波。设置两种不同频率的正弦波,高频率的表示'0'(LOW)信号,低频率的表示'1'(HIGH)信号。在传输之前,需要不断地产生HIGH频率同步信号。在开始传输数据时,产生一个周期时间的LOW频率信号(1位起始位),然后再传输8位数据位对应的频率信号,每一位持续一个周期,跟着传输计算出来的检验数据应的频率信号,最后再传输一个周期的HIGH频率信号(1位停止位),结束一个字节的传输。

校验位的计算方法如下:记录一个字节中'1'HIGH位的个数,如果是奇数,则设置检验为为'1';如果是偶数,则设置检验位为'0'。

同样的,在传输数据之前,需要先调制发送一个初始化字节0xFF信号,初始化传输。


责任编辑:电气自动化网
首页 | 资讯 | 应用 | 高压 | 设计 | 行业 | 低压 | 电路图 | 关于

Copyright 2017-2018 电气自动化网 版权所有 辽ICP备17010593号-1

电脑版 | 移动版

Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。