ฉันจะไปเกี่ยวกับการเขียนโปรแกรมสวิตช์ (ตามโซลิดสเตตรีเลย์หรือ triac) ที่ก่อให้เกิดพลังงานข้ามศูนย์ได้อย่างไร
สำหรับสิ่งที่ไม่คุ้นเคยกับเรื่องนี้: เปิดสวิตช์ไฟ 230V เมื่อคลื่นไซน์ของสายไฟข้ามศูนย์ - ผลลัพธ์คือการลดการรบกวนทางแม่เหล็กไฟฟ้าที่เกิดจากกระแสไฟฟ้าที่พุ่งสูงอย่างรวดเร็ว
โดยเฉพาะฉันต้องการย้ายซอฟต์แวร์ให้มากที่สุดเท่าที่จะทำได้ วงจรตรวจจับประกอบด้วยหม้อแปลงขนาดเล็กไดโอดและตัวต้านทานสองตัวเพื่อรักษาระดับและกระแสในการตรวจสอบให้ "1" เมื่อกำลังไฟ AC อินพุตอยู่ในครึ่งบวก "0" ในเชิงลบติดกับขา GPIO อินพุต เอาท์พุทประกอบด้วยโซลิดสเตตรีเลย์สองสามตัวและอุปกรณ์สำคัญที่เปลือยเปล่าเพื่อให้พวกเขาทำงาน (ดึงขึ้นและอื่น ๆ ) ติดกับขา GPIO เอาท์พุท
ปัญหาคือเวลา: ด้วย 50Hz AC เราได้รับ 100 ศูนย์ข้ามในวินาทีหนึ่งครึ่งรอบคือ 10ms เพื่อให้ได้ระยะทางที่เหมาะสมจากการข้ามศูนย์เพื่อให้ EMI ต่ำกล่าวว่าเราไม่ควรเปิดใช้งานเอาต์พุตมากกว่า 10% ที่ผ่านมา (หรือก่อนหน้านี้) เหตุการณ์การข้ามศูนย์ซึ่งหมายถึงความอดทน + -1ms นั่นไม่ได้หมายความว่าเวลาตอบสนอง 1ms - เราสามารถคาดหวังว่าการข้ามศูนย์ครั้งต่อไปจะเกิดขึ้นอย่างแม่นยำ 10ms หลังจากครั้งแรกหรือครั้งที่สี่ - 40ms มันเกี่ยวกับความละเอียด - ถ้าเราอนุญาตให้ทำปฏิกิริยา 20ms มันจะต้องอยู่ระหว่าง 19 ถึง 21ms ไม่ใช่ 18 หรือ 22
ฉันจะใช้งานตัวจับเวลาดังกล่าว - ทริกเกอร์เอาท์พุท GPIO ได้อย่างไรภายใน 1 มิลลิวินาทีเนื่องจากอินพุตตรวจจับขอบหรือภายในหลาย ๆ ค่าคงที่ 10ms ตั้งแต่นั้นมา - ควรมีค่าเผื่ออคติเชิงลบบางอย่าง (เช่นหม้อแปลงและรีเลย์ ดังนั้นฉันจึงต้องการให้ทริกเกอร์ปิด 8.4+ (n * 10) ms ตั้งแต่พัลซ์อินพุทด้วยวิธีการที่อคติตอบโต้การหน่วงเวลาที่วงจรแนะนำ) - แน่นอนว่า "ตามความต้องการของผู้ใช้" แน่นอนว่าผู้ใช้เขียน "1 "เป็นไฟล์ / sys / class / ... และในโอกาสที่ใกล้เคียงที่สุด (โดยประมาณ) เอาต์พุตจะเป็น" เปิด " ผู้ใช้เขียน "0" และเมื่อถึงศูนย์ข้ามมาถึงการถ่ายทอดรีเลย์ที่เฉพาะเจาะจง
ฉันเชื่อว่านี่จะต้องมีการเขียนหรือแฮ็คโมดูลเคอร์เนล คุณช่วยชี้ให้ฉันเห็นสิ่งที่จัดการกับพิน GPIO ของ Raspberry Pi ในเคอร์เนลและตัวจับเวลาชนิดใดที่ฉันสามารถแนบกับมันได้