このデバイスで作業する前は、デジタル信号処理と、コンピューターネットワークが物理レベルでどのように機能するかについてほとんど理解していませんでした。すぐに質問に飛び込み、実用的なプロトタイプを作成するための計画を立てる必要がありました。
勉強の過程で、エレクトロニクス、マイクロコンピューター、デジタル信号処理に関する専門的な文献をたくさん見つけました。これは私を大いに助けてくれました。しかし、旅の最初の段階で、このようなレビュー記事は私が研究分野を選択するのに役立ちます。
さらなる資料は、私が過去から自分自身に伝えたい形での専門的な経験からの抜粋です。読みやすくするために、多くの事実が大幅に簡略化されています。
コミュニケーション
抽象化から始めましょう。ある人から別の人に情報を転送する必要があると想像してみてください。画像では、赤人が送信者、青人が受信者です。

音声で情報を発信します。情報は私たちの頭の中のある種のテキストです。テキストは文字に分割でき、各文字は音声信号として表すことができます。このようにして、各文字を適切な音声信号でエンコードできます。

導体
ご存知のように、音は波の形で伝播します-空気または他の媒体の密度の変動。私たちの場合、信号伝搬の媒体は空気です。赤い男から、音波が空中を四方八方に広がりました。
有用な信号

幸いなことに、頭から直接対話者の頭に情報を精神的に伝えることはできません。したがって、「ハードウェアレベル」での頭からの文字は、音声信号(音波のセット)に変換(エンコード)されます。これを「有用な信号」と呼びます。
重要:各文字は、安定した音波のセットによってエンコードされます。これらの波から、特定の文字を認識することができます(もちろん、それを知っている場合)。文字から音への変換と音から文字への変換があります。
ノイズ

ノイズは同じ信号ですが、有用な情報は含まれていません。ノイズは目的の信号を歪め、信頼できる受信範囲を狭めます。それは、自分の何かについて大声で話している人々の群衆、あるいは有用な信号と混合されたエコーまたは他の無関係な音でさえあり得ます。ノイズは通常、受信機への必要な信号の通過を妨げます。
プロトコル

この形式では、信号は受信機に到達します。受信機は、一連の音波から文字を認識(デコード)し、それらから単語を収集します。これが無意味な音のセットであると彼に思われる場合、彼はそれらを破棄するか、複雑なアルゴリズムを使用して元の信号を復元しようとします。そのため、最初に「なに?」と聞くこともありますが、そうして初めて、すべてを聞いたことに気づきます。
実際、プロトコルは、有用な信号から情報を抽出するための一連のルールとアルゴリズムです。この例では、これは対話者と通信するための言語です。それから、送信された音の意味を学びます。これはすべて無意識のうちに起こります。「ハードウェアレベルで」と言えます。
上記のすべてを非常に簡略化した形式で示しているのは、人の間だけでなく、電子デバイス間でもデータ転送がどのように機能するかを示しています。それらは、例えば、電圧、および導体としての銅ケーブルなどの物理的効果のみを持ちます。デバイスに保存されている情報は、さまざまな物理的な伝送メディアとプロトコルを使用して送信できますが、本質はほぼ同じです。導体、物理的な影響、プロトコルです。
通信チャネルとしての電力線
次に、電力線を介してデータを転送する方法を段階的に理解し、その過程で、
電力線を通信チャネルとして使用するには、電力線がどのように機能するか、および電力線でどのような物理プロセスが発生するかを理解する必要があります。
変電所から住宅に電力を供給するためのスキームを見てみましょう。電気ネットワークは3相であり、変電所からは3つの「相」(A、B、C)があり、互いに電気的に絶縁されています。

簡単にするために、各フェーズが個別の通信チャネルであることに同意しましょう。異なるフェーズに接続されたデバイスは、相互に聞くことができません。
現在、フェーズ間で通信できるデバイスが市場に出回っています。それらのデバイスでは、変電所全体が1つの通信チャネルです。しかし、これまでのところ、これは理解のために特別な役割を果たしていません。
さらに、図ではフェーズ「A」のみを考慮します(他の図ではすべてが類似しています)。

複数のトランシーバーが1つのフェーズに接続されると、「共通バス」タイプのネットワークトポロジが形成されます。デバイスの1つによって送信された信号は、信号伝搬範囲内の他のすべてのデバイスによって受信されます。

導体
信号伝送媒体をさらに詳しく調べてみましょう。これを行うには、電気エネルギーが送信される形式を検討し、このフローを通じて有用な信号を送信する方法を見つけます。
電気は交流の形で送られます。導体は通常、アルミニウムまたは銅のケーブルです。電気ネットワークの電圧は、周期が20ミリ秒(周波数50 Hz)の正弦波の形をしています。

電流は交流しているため、周期的に「流れ」の方向を変え、方向転換時には電力はほとんど伝達されません(強い容量性または誘導性負荷によるシフトを考慮しない場合)。落ち着いた瞬間があります。これは「ゼロクロス」(以下、ZC)と呼ばれ、電圧がゼロになる瞬間です。

この時点で、ネットワークのノイズレベルも最低になります。これは、有用な信号を生成するための最も好ましい瞬間です。
(ロシアのように)周波数が50 Hzの電気ネットワークでは、ZCモーメントは1秒間に100回発生します。また、1つのゼロクロッシングを介して一度に1つの文字を送信すると、接続速度は100ボーになります。バイト単位の伝送速度は、フレーム形式、データ自体に加えて、フレーム内に含まれるサービスビット数によってすでに異なります(以下のテキストのフレーム形式について)。
同期
もう1つの重要なポイントは、デバイス間の送信と受信の瞬間の同期です。
新しいプロトコルでは、実装が簡単な「同期データ転送」を使用します。
送信機は、信号を生成するためにDACをオンにする必要がある特定の瞬間を知る必要があります。受信機は、着信信号を測定およびデジタル化するためにADCをオンにする必要がある特定の瞬間を理解する必要があります。これを行うには、誰かがプロセッサに信号を送る必要があります。
これは、ゼロクロスディテクタ回路の別の部分によって行われます。彼はライン電圧が0ボルトになるのを待って、それについての信号を出します。周波数が50Hzのネットワークでは、信号は10ミリ秒ごとに到着します。

電圧は光の速度で伝播するため、条件付きで、ZCがネットワークのすべてのポイントで同時に発生すると想定できます。
インターネットでは、「ゼロクロスディテクタ」または「ゼロクロスディテクタ」と呼ばれる検出器回路の例を見つけることができます。
有用な信号
電力線を 介して送信するための情報をコーディングするためのさまざまなオプションがあります。狭帯域周波数シフトキーイングを使用するのは 理解しやすく、信頼性が高くなります。欠点はデータ転送速度が遅いことですが、私たちにとってこれはまだ特別な役割を果たしていません。
必要な信号は、固定振幅の通常の正弦波です。信号の周波数のみが変化します。周波数のペアを選び、ある周波数の信号が「0」で、異なる周波数の信号が「1」であるとしましょう。

あるいは、「X10」規格のように、信号の存在は「1」を意味し、信号の不在は「0」を意味します。
注意。有用な信号の周波数は35〜91kHzのオーダーです。すべての下位信号成分(50 Hzおよび高調波)は、デバイスへの入力で遮断されます。残っているのは、有用な信号と混合された高周波ノイズだけです。
物理的には、この信号は、ほとんどすべての最新のマイクロプロセッサに見られるDACモジュールを使用して生成できます。DACは、入力でソフトウェアによって数値(信号レベル)を取得し、この数値に対応する電圧レベルを出力に出力します。このような簡単な方法で、タイマーによってDACモジュールに数値の配列を提供でき、出力で必要な周波数の正弦波を取得できます。

次の記事で、正弦波を効率的に生成する方法について詳しく説明します。
ノイズ
かなり強力な信号が最初に送電線に存在 します-これは変電所から住宅の建物に伝達される電気エネルギーです。また、負荷がかかると、広い帯域幅で多くのノイズが発生します。家庭用電化製品、コンピューター電源、充電器-それらは電気ネットワークに広範囲の周波数を放出します。
理解のために、専用のデータラインと電力伝送ラインを比較してみましょう。
専用線は、多数のデバイスが通信するための別個のワイヤーです。それはあなたが快適にコミュニケーションをとることができる空の部屋に例えることができます。

送電線は、ワークを穿孔して行われ、列車が中央(非常に騒々しい)で走行している廊下と比較することができます。このような状況では、情報を伝えることは困難ですが、それは現実です。

プロトコル
コーディングは非常に簡単です。いくつかのシンボルを選択し、それぞれに特定の信号周波数を割り当てます。簡単にするために3つのシンボルを作成しましょう。
- 「開始」-この記号により、デバイスはフレーム送信が開始されたことを認識します。
- 「0」はビット0の文字です。
- 「1」はビット1の文字です。

ZC検出器 からの信号に基づいて、送信機は短時間で目的の周波数の正弦波を生成します。したがって、1文字(「S」、「0」、または「1」)は、主電源電圧がゼロを通過する1回の遷移(10ミリ秒ごと)に対して送信されます。受信機はこの信号を測定し、その周波数を見つけて、この周波数に対応する記号( "S"、 "0"または "1")をバッファーに書き込みます。

これで、フレームの開始についてレポートし、1と0のセットを送信できるようになりました。さらに、それらから単語または「フレーム」を追加します。情報の不可欠な部分。
フレームフォーマット
また、これらのシンボルを使用して送信するフレーム形式を考え出す必要があります。データ形式に影響を与えるいくつかの重要なポイントがあります:フレーム長、アドレス指定、整合性チェック。
フレーム長
データ部分が大きいほど、データ自体に加えて、チェックサムや宛先アドレスなどのオーバーヘッド情報がフレームに含まれるため、データ転送のオーバーヘッドは低くなります。ただし、データが小さいほど、転送が成功する可能性が高くなります。ここで中間点を見つけることが重要です。これは通常、経験的に決定されます。コンピューターネットワークの例をとると、イーサネットフレームでは、1500バイトのデータの制限が選択されました(この数字はすぐに時代遅れになったにもかかわらず、今日でも使用されています)。

フレーム長が大幅に長くなると、少なくとも一部のデータを送信する確率はゼロになる傾向があります。
アドレス指定
「共通バス」ネットワークトポロジがあることを忘れてはなりません。すべてのデバイスは、このバスに送信された情報を受信します。そして、彼らのコミュニケーションがどういうわけかうまくいくために、彼らはアドレスを持っていなければなりません。
このデータが意図されていない受信側がフレーム全体を聞いて待つ時間を無駄にしないように、フレームの最初にアドレスを追加します。これにより、プロセッサを無駄な作業から少し解放します。

アドレスの長さは、同じスコープに同時に存在できるデバイスの最大数に基づいて選択されます。たとえば、8ビットは最大255デバイスです(0をブロードキャストのままにした場合)。
整合性チェック電力線を
介して情報を送信する場合、データの一部が失われる可能性が非常に高くなります。したがって、整合性チェックが必要です。これらの目的のために、「制限スイッチ」がフレームに追加されます。これは、受信者がデータが破損していないことを確認できる冗長な情報です。 フレームの最終的な外観を考えてみましょう。アドレスの長さを8ビットとします(チャネル上の255デバイス+ 1ブロードキャストアドレス)。次に、データが8ビット(1バイト)になります。
アドレスとバイトを追加した結果だけのトレーラーがあります。ただし、注意点が1つあります。デバイスは、シンボル「0」または「1」の周波数で強いノイズを安定してキャッチでき、これが有用な信号であると考えています。また、「0x00」や「0xFF」などの極端な値が誤って読み取られる可能性が高くなります。これを防ぐために、制限スイッチを計算するときに、単に数値「42」を追加します。
このようなものは、1つのデータフレームのように見えます。アドレス「17」、制限スイッチ「169」(110 + 17 + 42)のデバイスに番号「110」を送信します。

フレーム全体は、シンボル「開始」の後に入力されるシンボル「0」と「1」から1つずつ組み立てられます。
フレームを受信するためのアルゴリズムを説明しましょう。
最初、デバイスは「開始」シンボルを待機しています。バッファは無効になっています。何も書き込みません。
「開始」記号が来ると、便宜上、受信バッファーをクリアしてビットカウンターを開始します(フレーム全体をビットカウンターで決定します)。

次の各文字(「0」または「1」)が受信バッファーに順次書き込まれ、ビットカウンターがインクリメントされます。

必要なビット数が収集されると(フルフレーム)、整合性がチェックされます。フレーム「アドレス」と「データ」から選択します。「制限」アルゴリズムを使用してカウントし、フレーム内にあるものと比較します。

値が一致する場合、フレームからデータを抽出し、それをより高いプロトコルに送信します。

値が一致しない場合は、「開始」記号を待ち続けます。そして、もう一度。
これが、あるデバイスから別のデバイスにバイトごとにゆっくりと、しかし確実に転送できる方法です。受信者は、これらのバイトを物理的なレベルよりも高いレベルでプロトコルの受信バッファーに追加します。そこで、受信コマンドを実行するか、応答としてデータを返すかを決定します。
結果
この記事では、一般的で理解しやすい言語での電力線を介したデータ送信のトピックを読者に紹介しようとしました。おそらくPLCの分野だけでなく、誰かがこの情報が役立つことを願っています。
次のパートでは、私が使用した高速正弦生成アルゴリズムについて説明します。そして、デジタル化された信号の番号の配列からその周波数(DFT)を見つける方法。これらすべての腺について少しお話します。
おそらくコメントの誰かがより多くのアイデアを投げるでしょう。フィードバックをいただければ幸いです。
トピックに関するリンクと資料:
- ネットワークノイズについて
- ネットワークノイズの詳細
- 「ゼロ検出器」のバリエーションの1つ
- Wiki:電力線通信
- Wiki:三相電源システム
- 51317.3.8-99 ( 61000-3-8-97) . .