Làm thế nào tôi có thể đi về lập trình một công tắc (dựa trên rơle trạng thái rắn hoặc triac) kích hoạt năng lượng xuyên không?
Đối với những người không quen thuộc với chủ đề này: Bật nguồn 230V, khi sóng hình sin của đường dây điện bằng 0 - kết quả là giảm thiểu các nhiễu điện từ do dòng điện tăng đột biến.
Cụ thể, tôi muốn chuyển càng nhiều vào phần mềm càng tốt. Mạch phát hiện bao gồm một máy biến áp nhỏ, một diode và một vài điện trở để kiểm tra mức và dòng điện cung cấp "1" khi công suất đầu vào AC ở một nửa dương, "0" âm, được gắn vào chân GPIO đầu vào. Đầu ra bao gồm một vài rơle trạng thái rắn và các yếu tố cần thiết để giữ cho chúng chạy (pull-up, v.v.), được gắn vào các chân GPIO đầu ra.
Vấn đề là thời gian: với 50Hz AC, chúng ta có được 100 điểm giao nhau trong một giây, một nửa chu kỳ là 10ms. Để có được khoảng cách hợp lý từ giao nhau bằng 0 để giữ EMI ở mức thấp, chúng ta không nên kích hoạt đầu ra quá 10% (hoặc trước đó) sự kiện giao nhau bằng 0, nghĩa là dung sai + -1ms. Điều đó không có nghĩa là thời gian phản ứng 1ms - chúng ta có thể mong đợi một cách hợp lý việc vượt 0 tiếp theo xảy ra chính xác là 10ms sau lần đầu tiên hoặc lần thứ tư - 40ms. Đó là về độ chi tiết - nếu chúng ta cho phép 20ms cho phản ứng, thì nó phải nằm trong khoảng từ 19 đến 21ms chứ không phải 18 hoặc 22.
Làm cách nào tôi có thể triển khai GPIO đầu ra kích hoạt bộ hẹn giờ như vậy trong vòng 1ms kể từ khi đầu vào phát hiện ra một cạnh hoặc trong bội số cố định 10ms kể từ đó - tốt nhất là với trợ cấp cho một số sai lệch âm (giả sử, biến áp và rơle giới thiệu độ trễ 1.6ms; vì vậy tôi muốn kích hoạt tắt 8.4+ (n * 10) ms kể từ xung đầu vào, theo cách đó, độ lệch sẽ chống lại độ trễ do mạch giới thiệu.) - tất nhiên là "theo yêu cầu của người dùng", giả sử, người dùng viết "1 "đến tệp / sys / class / ... và trong cơ hội (gần nhất) gần nhất, đầu ra sẽ" bật ". Người dùng viết "0" và khi giao nhau bằng 0 xuất hiện, ngắt tiếp sức cụ thể.
Tôi tin rằng điều này sẽ yêu cầu viết hoặc hack một mô-đun hạt nhân. Bạn có thể chỉ cho tôi cách xử lý các chân GPIO của Raspberry Pi trong kernel không, và tôi có thể gắn loại bộ hẹn giờ nào cho nó (trừ khi đã có sẵn một số chức năng) để có được loại chức năng này?