Bagaimana saya bisa memprogram saklar (berdasarkan pada solid-state relay atau triac) yang memicu pada zero-crossing power?
Untuk yang tidak terbiasa dengan subjek: Nyalakan daya 230V, ketika gelombang sinus dari kabel listrik melintasi nol - hasilnya adalah meminimalkan gangguan elektromagnetik yang dihasilkan dari lonjakan arus yang cepat.
Secara khusus, saya lebih suka pindah ke perangkat lunak sebanyak mungkin. Sirkuit deteksi yang terdiri dari transformator kecil, dioda, dan beberapa pasangan untuk menjaga level dan arus tetap memberikan "1" ketika daya input AC berada di setengah positif, "0" negatif, melekat pada pin GPIO input. Output terdiri dari beberapa relay solid state dan bare esensial agar tetap berjalan (pull-up dll), melekat pada pin GPIO keluaran.
Masalahnya adalah waktu: dengan 50Hz AC kita mendapatkan 100 zero-crossing dalam satu detik, satu setengah siklus adalah 10 ms. Untuk mendapatkan dalam jarak yang wajar dari zero-crossing untuk menjaga kata EMI rendah kita tidak harus mengaktifkan output lebih dari 10% melewati (atau sebelumnya) peristiwa zero-crossing, yang berarti toleransi -1 -1ms. Itu tidak berarti waktu reaksi 1 ms - kita dapat berharap bahwa zero-crossing berikutnya terjadi tepat 10 ms setelah yang pertama, atau yang keempat - 40 ms. Ini tentang granularitas - jika kita membiarkan 20 ms untuk bereaksi, itu harus antara 19 dan 21 ms, bukan 18 atau 22.
Bagaimana saya dapat mengimplementasikan timer seperti itu - memicu keluaran GPIO baik dalam 1ms karena input mendeteksi suatu sisi, atau dalam kelipatan tetap 10ms sejak itu - lebih disukai dengan penyisihan untuk beberapa bias negatif (katakanlah, transformator dan relai memperkenalkan penundaan 1,6ms; jadi saya ingin pemicu mati 8,4+ (n * 10) ms sejak pulsa input, dengan cara itu bias melawan penundaan yang diperkenalkan oleh rangkaian.) - semua tentu saja "sesuai permintaan pengguna", katakanlah, pengguna menulis "1 "ke file / sys / class / ... dan pada kesempatan terdekat (secara kasar) hasilnya berjalan" pada ". Pengguna menulis "0", dan ketika zero-crossing tiba, relay spesifik dilepaskan.
Saya percaya ini membutuhkan penulisan atau peretasan modul kernel. Bisakah Anda mengarahkan saya ke apa yang menangani pin GPIO Raspberry Pi di kernel, dan timer seperti apa yang bisa saya lampirkan (kecuali ada beberapa yang sudah ada) untuk mendapatkan fungsionalitas seperti ini?