在使用此设备之前,我几乎不了解数字信号处理以及计算机网络在物理级别上的工作方式。有必要快速深入研究问题并制定计划以创建可行的原型。
在学习过程中,我发现了许多有关电子,微控制器和数字信号处理的专业文献,这对我有很大帮助。但是,在旅程的一开始,这样的评论文章对我选择学习领域很有用。
进一步的材料是从专业经验中摘录的,我想从过去的经历中告诉自己。为了简化可读性,许多事实已经大大简化。
通讯
让我们从抽象开始。想象一下,您需要将一条信息从一个人转移到另一个人。在图像中:红人是发送方,蓝色是接收方。
我们将使用语音来传输信息。信息是我们头脑中的某种文本。文本可以分为字母,每个字母可以表示为声音信号。以这种方式,每个字母可以用一些适当的声音信号编码。
导体
如您所知,声音以波的形式传播-空气或其他介质密度的波动。在我们的情况下,信号传播的媒介是空气。声波从那个红人到空中传播。
有用的信号
幸运的是,我们无法从头脑中直接将信息传递给对话者的头部。因此,我们从头到尾在“硬件级别”将字母转换(编码)为声音信号(声波集)。我们将其称为“有用信号”。
重要提示:每个字母都由一组稳定的声波编码。从这些波中,我们可以识别出某个字母(当然,如果我们知道的话)。从字母转换为声音,然后从声音转换为字母。
噪声
噪声是相同的信号,但是它不携带有用的信息。噪声会使所需信号失真,并减小可靠接收的范围。可能是一群人大声谈论自己的事情,或者甚至是回声或其他无关声音与有用信号混合在一起。噪声通常会干扰所需信号到接收器的传递。
协议
以这种形式,信号到达接收器。接收器从一组声波中识别(解码)字母并从中收集单词。如果在他看来这是毫无意义的声音集,则他将其丢弃或尝试使用复杂的算法恢复原始信号。在某种程度上,因此,我们有时会先问“什么?”,然后才意识到自己已经听到了一切。
协议实际上是一组规则和算法,通过它们我们可以从有用的信号中提取信息。在此示例中,这是我们与对话者交流的语言。从中我们了解所传输声音的含义。所有这些都无意识地发生,我们可以说“在硬件级别”。
上面以非常简化的形式描述的所有内容都显示了数据传输不仅在人与人之间而且在电子设备之间如何进行。它们只会产生物理作用,例如电压和铜电缆作为导体。可以使用各种物理传输介质和协议来传输设备中存储的信息,但本质上是相同的:导体,物理影响,协议。
电力线作为沟通渠道
接下来,我们将逐步弄清楚如何通过电源线传输数据,并且在此过程中,我们将为
要将电源线用作通信通道,您需要了解它们的工作方式以及其中发生的物理过程。
让我们看一下从变电站向住宅建筑物供电的方案。电网是三相的,并且变电站有三个“相”(A,B和C),它们彼此电气隔离。
为简单起见,我们同意每个阶段都是一个单独的通信通道。连接到不同相位的设备无法互相听见。
现在市场上有可以在各个阶段之间进行通信的设备,对于它们而言,整个变电站是一个通信通道。但是到目前为止,这对于理解没有特殊作用。
此外,在图中,我们将仅考虑阶段“ A”(在其他阶段,一切都相似)。
当多个收发器连接到一个相时,就会形成“公共总线”类型的网络拓扑。由设备之一发送的信号将在信号传播范围内被所有其他设备接收。
导体
让我们更详细地研究信号传输介质。为此,请考虑电能的传输形式,并找出如何通过此流传输有用的信号。
电以交流电的形式传输。导体通常是铝或铜电缆。电网中的电压为正弦波形式,周期为20毫秒(频率为50 Hz)。
由于电流是交变的,因此会定期更改“流”的方向,并且在更改方向时,实际上不会传输功率(如果您不考虑由于强大的电容性或电感性负载引起的偏移)。有片刻的平静。这称为“零交叉”(以下称为ZC)-电压为零的时刻。
在这一点上,网络也具有最低的噪声水平。这是产生有用信号的最有利时刻。
在频率为50 Hz的电网中(例如在俄罗斯),ZC力矩每秒发生100次。如果您一次通过一个零交叉传输一个字符,则连接速度将为100波特。以字节为单位的传输速率已经取决于帧格式,取决于帧中除了数据本身以外还有多少个服务位(大约在下文中为帧格式)。
同步化
另一个重要点是设备之间的发送和接收时刻的同步。
对于我们的新协议,我们将使用“同步数据传输”,因为它更易于实现。
发送器需要知道在什么时候需要打开DAC来产生信号。接收器需要了解在什么时候需要打开ADC来测量和数字化输入信号。为此,必须有人通知处理器。
这将由过零检测器电路的单独部分处理。他只是等待线路电压为0伏,然后给出一个信号。在频率为50 Hz的网络中,信号将每10毫秒到达一次。
电压以光速传播,因此我们可以有条件地假设ZC瞬间同时出现在网络的所有点上。
在Internet上,您可以找到称为“零交叉检测器”或“零交叉检测器”的检测器电路示例。
有用的信号
有多种用于编码信息以通过电力线传输的选项。我们将使用窄带频移键控,因为 更容易理解,更可靠。缺点是数据传输率低,但是对我们而言,这还没有发挥特殊作用。
有用信号是固定振幅的普通正弦波。仅信号的频率改变。让我们选择一对频率,并说一个频率的信号为“ 0”,而另一个频率的信号为“ 1”。
或者,如“ X10”标准中一样,信号的存在表示“ 1”,信号的不存在表示“ 0”。
注意。有用信号的频率约为35-91 kHz。所有较低的信号分量(50 Hz和谐波)都在设备的输入处被切断。剩下的只是高频噪声与有用信号的混合。
从物理上讲,可以使用几乎在任何现代微控制器中都能找到的DAC模块生成该信号。在输入端,DAC通过软件获取数字(信号电平),并在输出端输出与此数字相对应的电压电平。通过这种简单的方法,您可以通过计时器向DAC模块提供数字数组,并且在输出处可以得到具有所需频率的正弦曲线。
下一篇文章中将详细介绍如何有效地生成正弦波形。
噪声
电力线中最初会出现 一个相当强大的信号-这是从变电站到住宅建筑的电能传输。在负载下,很宽的带宽会产生很多噪声。家用电器,计算机电源,充电器-它们向电网发出各种各样的频率。
为了理解,让我们比较一下专用数据线和电力传输线。
专用线是许多设备通过其进行通信的独立电线。可以将它比作一个空旷的房间,您可以在其中轻松地进行交流。
甲输电线可以与其中的工作与穿孔器执行的走廊和火车站在中间(非常嘈杂)行进。在这种情况下,很难传达信息,但这是真实的。
协议
编码非常简单-我们选择几个符号,并为每个符号分配一定的信号频率。为了简单起见,我们制作三个符号:
- “开始”-通过此符号,设备将了解帧传输已开始;
- “ 0”是位0的字符;
- “ 1”是位1的字符。
根据来自ZC检测器的信号,发送器会在短时间内生成所需频率的正弦波。因此,对于市电电压经过零的转换(每10毫秒),将传输一个字符(“ S”,“ 0”或“ 1”)。接收器测量该信号,找出其频率并将与该频率相对应的符号(“ S”,“ 0”或“ 1”)写入缓冲区。
现在我们可以报告帧的开始并传输一组1和0。此外,我们将添加单词或“框架”。信息的整体部分。
影格格式
我们还需要提出一种将使用这些符号传输的帧格式。有几个重要点将影响数据格式:帧长,寻址,完整性检查。
帧长度
数据部分越大,数据传输开销就越小,因为帧除了包含数据本身之外,还包含开销信息,例如校验和和目标地址。但是,数据越小,成功传输的可能性就越大。在这里找到中间立场很重要。这通常根据经验确定。如果以计算机网络为例,则在以太网帧中选择了1500字节的数据限制(尽管该数字很快过时,但今天仍在使用)。
随着帧长的增加,传输至少一些数据的可能性趋于零。
寻址
我们一定不能忘记我们拥有“公共总线”网络拓扑。所有设备将接收发送到该总线的信息。为了使他们的交流以某种方式进行,他们必须有地址。
我们将地址添加到帧的最开始,以使接收端(不打算接收该数据)不会浪费时间监听和等待整个帧,因此我们将使处理器从无用的工作中解放出来。
根据可在同一范围内同时使用的最大设备数来选择地址长度。例如,8位最大为255个设备(如果将0保留为广播)。
完整性检查
通过电力线传输信息时,丢失部分数据的可能性很高。因此,必须进行完整性检查。为此,将“限位开关”添加到框架。这是一些冗余信息,接收者可以使用这些信息来确保数据没有损坏。
让我们提出框架的最终外观。假定地址长度为8位(通道上255个设备+ 1个广播地址)。然后是数据8位(1字节)。
我们将添加一个地址和一个字节作为结果的预告片。但是有一个警告:该设备可以稳定地捕获我们的符号“ 0”或“ 1”的频率上的强噪声,并认为这是有用的信号。并且极有可能错误读取极高的值,例如``0x00''或``0xFF''。为了防止这种情况,在计算限位开关时,我们只需添加数字“ 42”。
这样的数据看起来就像一个数据帧:将数字“ 110”发送到地址为“ 17”的设备,将结束开关“ 169”发送给设备(110 + 17 + 42)。
整个框架将在符号“开始”之后的输入符号“ 0”和“ 1”中逐个组装。
让我们描述接收帧的算法。
最初,设备正在等待“开始”符号。缓冲区已禁用,我们不向其写入任何内容。
当出现“开始”符号时,为方便起见,我们清除接收缓冲区并启动位计数器(我们将由位计数器确定整个帧)。
每个下一个字符(“ 0”或“ 1”)顺序写入接收缓冲区,并且位计数器递增。
收集到所需位数(全帧)后,我们将检查完整性。从“地址”和“数据”框中选择。我们使用“限制”算法对其进行计数,并将其与框架中的内容进行比较。
如果值一致,我们从帧中提取数据并将其发送到高级协议。
如果值不一致,我们将继续等待``开始''符号。再来一遍。
这就是我们如何缓慢但确定地将字节从一个设备传输到另一设备的方式。接收器会将这些字节添加到协议的接收缓冲区,其级别要高于物理接收器的级别,并且该接收器已经在这里决定要执行的操作:执行传入命令或返回一些数据作为响应。
结果
在本文中,我试图向读者介绍一种以通用且易于理解的语言通过电力线进行数据传输的主题。我希望有人会发现此信息有用,也许不仅在PLC领域。
在下一部分中,我想向您介绍我使用的快速正弦生成算法。以及如何从数字信号的数字数组中找出其频率(DFT)。我会告诉您有关这一切的腺体的一些信息。
也许有人在评论中会提出更多的想法。我很高兴收到反馈!
关于该主题的链接和材料:
- 关于网络噪音
- 有关网络噪音的更多信息
- “零检测器”的变体之一
- Wiki:电力线通信
- Wiki:三相电源系统
- 51317.3.8-99 ( 61000-3-8-97) . .