Komunikasi saluran listrik. Bagian 1 - Transmisi data dasar melalui saluran listrik

Belum lama ini, saya dihadapkan pada tugas yang tidak sepele - merakit perangkat yang dapat mengirimkan beberapa informasi melalui saluran listrik (0,4 kV), di jaringan konsumen rumah tangga biasa, atau lebih tepatnya, pembacaan meter listrik.







Sebelum mengerjakan perangkat ini, saya memiliki sedikit pemahaman tentang pemrosesan sinyal digital dan bagaimana jaringan komputer bekerja pada tingkat fisik. Itu perlu untuk segera menyelami pertanyaan dan membangun rencana untuk membuat prototipe yang berfungsi.

Dalam proses belajar, saya menemukan banyak literatur khusus tentang elektronik, mikrokontroler, dan pemrosesan sinyal digital, yang banyak membantu saya dalam hal ini. Namun di awal perjalanan, artikel review seperti ini akan berguna bagi saya untuk memilih bidang studi.



Materi lebih lanjut adalah ekstrak dari pengalaman profesional dalam bentuk yang ingin saya ceritakan kepada diri saya sendiri dari masa lalu. Banyak fakta telah sangat disederhanakan agar lebih mudah dibaca.






Komunikasi



Mari kita mulai dengan abstraksi. Bayangkan Anda perlu mentransfer informasi dari satu orang ke orang lain. Dalam gambar: orang merah adalah pemancar, dan biru adalah penerima.







Kami akan menggunakan suara untuk mengirimkan informasi. Informasi adalah semacam teks di kepala kita. Teks dapat dibagi menjadi beberapa huruf dan setiap huruf dapat direpresentasikan sebagai sinyal suara. Dengan cara ini, setiap huruf dapat dikodekan dengan beberapa sinyal suara yang sesuai.







Konduktor



Suara, seperti yang Anda ketahui, merambat dalam bentuk gelombang - fluktuasi massa jenis udara atau media lain. Dalam kasus kami, media untuk perambatan sinyal adalah udara. Dari orang merah, gelombang suara menyebar di udara ke segala arah.



Sinyal yang berguna







Untungnya, kita tidak dapat secara mental mengirimkan informasi dari kepala kita langsung ke kepala lawan bicara. Oleh karena itu, huruf-huruf dari kepala kita pada “tingkat perangkat keras” kita ubah (disandikan) menjadi sinyal suara (kumpulan gelombang suara). Kami akan menyebutnya sebagai "sinyal yang berguna".

Penting: setiap huruf dikodekan oleh serangkaian gelombang suara yang stabil. Dari gelombang ini kita bisa mengenali huruf tertentu (kalau kita mengetahuinya tentunya). Ada konversi dari huruf ke suara dan kembali dari suara ke huruf.



Kebisingan





Kebisingan adalah sinyal yang sama, tetapi tidak membawa informasi yang berguna. Kebisingan mendistorsi sinyal yang diinginkan dan mengurangi jangkauan penerimaan yang dapat diandalkan. Ini bisa berupa kerumunan orang yang dengan lantang membicarakan sesuatu tentang mereka sendiri, atau mungkin bahkan gema atau suara asing lainnya yang bercampur dengan sinyal yang berguna. Kebisingan biasanya mengganggu sinyal yang diinginkan untuk mencapai penerima.



Protokol





Dalam bentuk ini, sinyal mencapai penerima. Penerima mengenali (menerjemahkan) huruf dari satu set gelombang suara dan mengumpulkan kata-kata darinya. Jika menurutnya ini adalah kumpulan suara yang tidak berarti, maka dia membuangnya atau mencoba mengembalikan sinyal asli menggunakan algoritme yang rumit. Sebagian, karena ini, terkadang kita pertama kali bertanya "Apa?", Dan baru kemudian kita menyadari bahwa kita telah mendengar semuanya.



Faktanya, protokol adalah sekumpulan aturan dan algoritma yang dengannya kita dapat mengekstrak informasi dari sinyal yang berguna. Dalam contoh ini, ini adalah bahasa kita di mana kita berkomunikasi dengan lawan bicara. Dari situ kita belajar arti dari suara yang ditransmisikan. Semua ini terjadi tanpa disadari, kita dapat mengatakan "di tingkat perangkat keras".



Semua yang dijelaskan di atas dalam bentuk yang sangat sederhana menunjukkan bagaimana transfer data bekerja tidak hanya antar orang, tetapi juga antar perangkat elektronik. Mereka hanya akan mempunyai pengaruh fisik, misalnya tegangan listrik, dan kabel tembaga sebagai konduktor. Informasi yang disimpan di perangkat dapat dikirim menggunakan berbagai media dan protokol transmisi fisik, tetapi intinya kurang lebih sama: konduktor, dampak fisik, protokol.




Saluran listrik sebagai saluran komunikasi





Selanjutnya, kita akan mencari tahu langkah demi langkah cara mentransfer data melalui kabel listrik, dan di sepanjang jalan, kita akan menemukan protokol untuk sepeda kita . Ide-ide kunci dari standar industri terbuka X10.



Untuk menggunakan kabel listrik sebagai saluran komunikasi, Anda perlu memahami cara kerjanya, dan proses fisik apa yang terjadi di dalamnya.

Mari kita lihat skema penyaluran listrik dari gardu induk ke bangunan tempat tinggal. Jaringan listrik terdiri dari tiga fase, dan ada tiga "fase" (A, B dan C) dari gardu induk, yang diisolasi secara elektrik satu sama lain.







Untuk kesederhanaan, mari kita sepakati bahwa setiap fase adalah saluran komunikasi yang terpisah. Perangkat yang terhubung ke fase berbeda tidak dapat mendengar satu sama lain.



Sekarang ada perangkat di pasar yang dapat berkomunikasi antar fase, bagi mereka seluruh gardu induk adalah satu saluran komunikasi. Namun sejauh ini hal ini tidak memainkan peran khusus untuk pemahaman.



Selanjutnya, dalam diagram, kita hanya akan mempertimbangkan fase "A" (di lain, semuanya serupa).







Ketika beberapa transceiver dihubungkan ke satu fase, topologi jaringan dari jenis "bus umum" akan terbentuk. Sinyal yang dikirim oleh salah satu perangkat akan diterima oleh semua perangkat lain dalam jangkauan propagasi sinyal.





Konduktor



Mari kita pelajari media transmisi sinyal secara lebih rinci. Untuk melakukan ini, pertimbangkan bentuk di mana energi listrik disalurkan, dan cari tahu bagaimana melalui aliran ini kita dapat mengirimkan sinyal yang berguna.

Listrik ditransmisikan dalam bentuk arus bolak-balik. Konduktor biasanya kabel aluminium atau tembaga. Tegangan dalam jaringan listrik berbentuk sinusoid dengan jangka waktu 20 milidetik (frekuensi 50 Hz).





Karena arus bolak-balik, secara berkala mengubah arah "aliran", dan pada saat perubahan arah, daya praktis tidak ditransmisikan (jika Anda tidak memperhitungkan pergeseran karena beban kapasitif atau induktif yang kuat). Ada saat-saat tenang. Ini disebut "salib nol" (selanjutnya ZC ) - momen di mana tegangan adalah nol.





Pada titik ini, jaringan juga memiliki tingkat kebisingan paling rendah. Ini adalah momen paling menguntungkan untuk menghasilkan sinyal yang berguna.



Dalam jaringan listrik dengan frekuensi 50 Hz (seperti di Rusia), momen ZC terjadi 100 kali per detik. Dan jika Anda mengirimkan satu karakter pada satu waktu melalui satu persilangan nol, maka kecepatan koneksi akan menjadi 100 baud. Kecepatan transmisi dalam byte sudah tergantung pada format frame, pada berapa banyak bit layanan, selain datanya sendiri, akan berada dalam frame (tentang format frame di bawah dalam teks).



Sinkronisasi



Poin penting lainnya adalah sinkronisasi momen transmisi dan penerimaan antar perangkat.



Untuk protokol baru kami, kami akan menggunakan "transfer data sinkron" karena lebih mudah diimplementasikan.



Pemancar perlu mengetahui pada saat tertentu DAC perlu dihidupkan untuk menghasilkan sinyal. Penerima perlu memahami pada saat tertentu apa yang diperlukan untuk menyalakan ADC untuk mengukur dan mendigitalkan sinyal yang masuk. Untuk melakukan ini, seseorang harus memberi sinyal pada prosesor.



Ini akan ditangani oleh bagian terpisah dari sirkuit Zero Cross Detector. Dia hanya menunggu tegangan saluran menjadi 0 volt, dan memberi sinyal tentang itu. Pada jaringan dengan frekuensi 50 Hz, sinyal akan sampai setiap 10 milidetik.





Tegangan listrik merambat dengan kecepatan cahaya, dan oleh karena itu kita dapat secara kondisional mengasumsikan bahwa momen ZC terjadi di semua titik jaringan secara bersamaan.



Di Internet Anda dapat menemukan contoh rangkaian detektor yang disebut "Zero Cross Detector" atau "Zero Cross Detector".


Sinyal yang berguna



Ada berbagai pilihan untuk pengkodean informasi untuk transmisi melalui saluran listrik . Kami akan menggunakan penguncian pergeseran frekuensi pita sempit karena lebih mudah dipahami dan lebih dapat diandalkan. Sisi negatifnya adalah kecepatan transfer data yang rendah, tetapi bagi kami ini belum memainkan peran khusus.



Sinyal yang diinginkan adalah gelombang sinus biasa dengan amplitudo tetap. Hanya frekuensi sinyal yang berubah. Mari kita pilih sepasang frekuensi dan katakan bahwa sinyal dengan satu frekuensi adalah "0" dan sinyal dengan frekuensi berbeda adalah "1".







Sebagai alternatif, seperti pada standar "X10", keberadaan sinyal berarti "1" dan ketidakhadirannya berarti "0".



Catatan. Frekuensi sinyal yang berguna berada pada urutan 35-91 kHz. Semua komponen sinyal yang lebih rendah (50 Hz dan harmonisa) terputus pada input ke perangkat. Yang tersisa hanyalah gangguan frekuensi tinggi yang bercampur dengan sinyal yang berguna.


Secara fisik, sinyal ini dapat dibangkitkan menggunakan modul DAC , yang ditemukan di hampir semua mikrokontroler modern. The digital-to-analog converter menerima digit (level sinyal) pada masukan, dan output tingkat tegangan yang sesuai dengan angka ini pada output. Sederhananya, Anda dapat menyediakan serangkaian angka ke modul DAC dengan timer , dan pada output Anda bisa mendapatkan sinusoid dengan frekuensi yang kami butuhkan.





Lebih lanjut tentang cara menghasilkan bentuk gelombang sinus secara efisien di artikel berikutnya.



Kebisingan



Sinyal yang agak kuat awalnya ada di saluran listrik - ini adalah energi listrik yang ditransmisikan dari gardu induk ke bangunan tempat tinggal. Dan saat sedang dimuat, ada banyak gangguan pada bandwidth yang lebar. Peralatan rumah tangga, catu daya komputer, pengisi daya - mereka memancarkan berbagai frekuensi ke jaringan listrik.



Untuk pemahaman, mari bandingkan jalur data khusus dengan jalur transmisi listrik .



Saluran khusus adalah kabel terpisah yang digunakan sejumlah perangkat untuk berkomunikasi. Ini dapat dibandingkan dengan sebuah ruangan kosong di mana Anda dapat berkomunikasi dengan nyaman.







Sebuah saluran transmisi listrik dapat dibandingkan dengan sebuah koridor di mana pekerjaan dilakukan dengan sebuah alat pons, dan kereta api sedang berjalan di tengah (sangat bising). Dalam kondisi seperti ini sulit untuk menyampaikan informasi, tetapi nyata.







Protokol



Pengkodeannya sangat sederhana - kami memilih beberapa simbol dan menetapkan frekuensi sinyal tertentu untuk masing-masing simbol. Mari buat tiga simbol untuk kesederhanaan:



  • "Start" - dengan simbol ini perangkat akan memahami bahwa transmisi frame telah dimulai;
  • "0" adalah karakter untuk bit 0;
  • "1" adalah karakter untuk bit 1.




Berdasarkan sinyal dari detektor ZC , pemancar menghasilkan sinusoid frekuensi yang diinginkan untuk waktu yang singkat. Dan dengan demikian, satu karakter ("S", "0" atau "1") ditransmisikan untuk satu transisi tegangan listrik melalui nol (setiap 10 milidetik). Penerima mengukur sinyal ini, mencari tahu frekuensinya dan menulis simbol yang sesuai dengan frekuensi ini ("S", "0" atau "1") di buffer.





Sekarang kita dapat melaporkan awal frame dan mengirimkan satu set angka satu dan nol. Selanjutnya, kami akan menambahkan kata atau "bingkai" dari mereka. Bagian informasi yang tidak terpisahkan.



Format bingkai



Kami juga perlu membuat format bingkai yang akan kami kirimkan menggunakan simbol-simbol ini. Ada beberapa poin penting yang akan mempengaruhi format data: panjang frame, pengalamatan, pemeriksaan integritas.



Panjang frame

Semakin besar porsi data, semakin sedikit overhead transfer data, karena selain datanya sendiri, frame berisi informasi overhead seperti checksum dan alamat tujuan. Tetapi semakin kecil bagian data, semakin besar kemungkinan transfer berhasil. Penting untuk menemukan jalan tengah di sini. Ini biasanya ditentukan secara empiris. Untuk mengambil contoh dari jaringan komputer, frame Ethernet dibatasi hingga 1500 byte data (meskipun angka ini dengan cepat ketinggalan zaman, masih digunakan sampai sekarang).





Dengan peningkatan yang kuat dalam panjang frame, probabilitas untuk mentransmisikan setidaknya beberapa data cenderung nol.



Pengalamatan

Kita tidak boleh lupa bahwa kita memiliki topologi jaringan "bus umum". Semua perangkat akan menerima informasi yang dikirim ke bus ini. Dan agar komunikasi mereka berhasil, mereka harus memiliki alamat.



Kami akan menambahkan alamat ke awal frame sehingga sisi penerima, yang tidak dimaksudkan untuk data ini, tidak membuang waktu untuk mendengarkan dan menunggu keseluruhan frame, jadi kami akan membebaskan prosesor dari pekerjaan yang tidak berguna.





Panjang alamat dipilih berdasarkan jumlah maksimum perangkat yang dapat berada dalam lingkup yang sama secara bersamaan. Misalnya, 8 bit adalah maksimum 255 perangkat (jika Anda membiarkan 0 sebagai siaran).



Pemeriksaan integritas

Saat mengirimkan informasi melalui saluran listrik, ada kemungkinan besar kehilangan sebagian data. Oleh karena itu, harus ada pemeriksaan integritas. Untuk tujuan ini, "saklar batas" ditambahkan ke bingkai. Ini adalah beberapa informasi yang berlebihan yang dapat digunakan penerima untuk memastikan bahwa data tidak rusak.



Mari kita lihat tampilan akhir bingkai. Biarkan panjang alamat menjadi 8 bit (255 perangkat di saluran + 1 alamat siaran). Kemudian muncul data 8 bit (1 byte).



Kami akan memiliki trailer hanya hasil dari menambahkan alamat dan byte. Namun ada satu peringatan: perangkat dapat menangkap derau kuat secara stabil pada frekuensi simbol "0" atau "1" kami dan menganggap bahwa ini adalah sinyal yang berguna. Dan ada kemungkinan besar pembacaan salah untuk nilai ekstrim seperti "0x00" atau "0xFF". Untuk melindungi dari ini, saat menghitung sakelar batas, kami hanya akan menambahkan angka "42".



Sesuatu seperti ini akan terlihat seperti satu bingkai data: kirim nomor "110" ke perangkat dengan alamat "17", sakelar batas "169" (110 + 17 + 42).





Seluruh bingkai akan dirakit sepotong demi sepotong dari simbol masuk "0" dan "1" setelah simbol "Mulai".



Mari kita gambarkan algoritma untuk menerima bingkai.



Awalnya, perangkat sedang menunggu simbol "Start". Buffer dinonaktifkan, kami tidak menulis apa pun padanya.

Ketika simbol "Start" muncul, untuk kenyamanan kita menghapus buffer penerima dan memulai penghitung bit (kita akan menentukan keseluruhan frame dengan penghitung bit).







Setiap karakter berikutnya ("0" atau "1") ditulis secara berurutan ke buffer penerima dan penghitung bit bertambah.





Ketika jumlah bit yang dibutuhkan dikumpulkan (full frame), kami memeriksa integritasnya. Pilih dari bingkai "Alamat" dan "Data". Kami menghitungnya menggunakan algoritme "Batas" dan membandingkannya dengan yang ada di bingkai.





Jika nilainya setuju, kami mengekstrak data dari bingkai dan mengirimkannya ke protokol yang lebih tinggi.





Jika nilainya tidak sesuai, kami terus menunggu simbol "Mulai". Dan lagi.



Ini adalah bagaimana kita perlahan tapi pasti dapat mentransfer byte demi byte dari satu perangkat ke perangkat lainnya. Penerima akan menambahkan byte ini ke buffer penerima dari protokol pada level yang lebih tinggi daripada yang fisik, dan di sana ia akan memutuskan apa yang harus dilakukan: menjalankan perintah yang masuk atau mengembalikan beberapa data sebagai tanggapan.



Hasil



Pada artikel ini, saya mencoba memperkenalkan pembaca pada topik transmisi data melalui saluran listrik dalam bahasa yang umum dan dapat dimengerti. Saya berharap seseorang akan menemukan informasi ini berguna, mungkin tidak hanya di bidang PLC .



Pada bagian selanjutnya saya ingin berbicara tentang algoritma generasi sinus cepat yang saya gunakan. Dan cara mengetahui frekuensinya ( DFT ) dari deretan bilangan sinyal digital tersebut . Saya akan ceritakan sedikit tentang kelenjar untuk semua ini.



Mungkin seseorang di komentar akan memberikan lebih banyak ide. Saya akan senang menerima umpan balik!






Tautan dan materi tentang topik:






All Articles