मैं एक स्विच प्रोग्रामिंग के बारे में कैसे जा सकता हूं (ठोस-राज्य रिले या एक triac पर आधारित) जो शून्य-क्रॉसिंग पावर पर ट्रिगर करता है?
विषय से परिचित नहीं होने के लिए: 230V बिजली चालू करें, जब बिजली लाइन की साइन लहर शून्य को पार कर जाती है - परिणाम वर्तमान में तेजी से स्पाइक से उत्पन्न विद्युत चुम्बकीय गड़बड़ी को कम कर रहा है।
विशेष रूप से, मैं जितना संभव हो उतना सॉफ़्टवेयर में जाना पसंद करूंगा। डिटेक्शन सर्किट में एक छोटे ट्रांसफॉर्मर, एक डायोड और कुछ प्रतिरोधों को रखा जाता है, जो कि स्तर और धाराओं को बनाए रखने के लिए "1" प्रदान करता है, जब एसी इनपुट पॉवर पॉजिटिव हाफ में "0" होता है, जो इनपुट GPIO पिन से जुड़ा होता है। आउटपुट में कुछ ठोस राज्य रिले और नंगे आवश्यक होते हैं जो उन्हें चालू रखने के लिए (पुल-अप आदि), आउटपुट GPIO पिन से जुड़े होते हैं।
समस्या का समय है: 50 हर्ट्ज एसी के साथ हम एक सेकंड में 100 शून्य-क्रॉसिंग प्राप्त करते हैं, एक आधा चक्र 10ms का होता है। शून्य-क्रॉसिंग से उचित दूरी प्राप्त करने के लिए ईएमआई को कम रखने के लिए हम शून्य-क्रॉसिंग की घटना का उत्पादन 10% से अधिक अतीत (या इससे पहले) को सक्रिय नहीं करना चाहिए, इसका मतलब है कि + -1ms सहिष्णुता। इसका मतलब यह नहीं है कि 1ms प्रतिक्रिया समय - हम अगले शून्य-पार की उम्मीद कर सकते हैं कि पहले एक के बाद ठीक 10ms या चौथे - 40ms। यह ग्रैन्युलैरिटी के बारे में है - अगर हम प्रतिक्रिया के लिए 20ms की अनुमति देते हैं, तो यह 19 और 21ms के बीच होना चाहिए, 18 या 22 के बीच नहीं।
मैं इस तरह के टाइमर को कैसे लागू कर सकता हूं - आउटपुट आउटपुट GPIO या तो 1ms के भीतर चूंकि इनपुट एक किनारे का पता लगाता है, या तब से 10ms के एक निश्चित कई के भीतर - अधिमानतः कुछ नकारात्मक पूर्वाग्रह के लिए भत्ते के साथ (कहते हैं, ट्रांसफार्मर और रिले 1.6ms देरी का परिचय देते हैं; इसलिए मैं चाहता हूं कि इनपुट पल्स के बाद से ट्रिगर 8.4+ (n * 10) एमएस से बाहर हो जाए, इस तरह से पूर्वाग्रह सर्किट द्वारा शुरू की गई देरी का प्रतिकार करता है।) - बेशक "उपयोगकर्ता की मांग पर", उपयोगकर्ता लिखते हैं "1" "a / sys / class / ... फ़ाइल और निकटतम (मोटे तौर पर) अवसर पर आउटपुट" चालू "हो जाता है। उपयोगकर्ता "0" लिखता है, और जब शून्य-क्रॉसिंग आता है, तो विशिष्ट रिले डिसेंगेज होता है।
मेरा मानना है कि इसके लिए कर्नेल मॉड्यूल लिखने या हैक करने की आवश्यकता होगी। क्या आप मुझे इंगित कर सकते हैं कि कर्नेल में रास्पबेरी पाई के जीपीओ पिन को क्या संभालता है, और इस तरह की कार्यक्षमता प्राप्त करने के लिए मैं किस तरह की टाइमर संलग्न कर सकता हूं (जब तक कि कुछ जगह पहले से ही हैं)?