Comment pourrais-je procéder à la programmation d'un commutateur (basé sur un relais à semi-conducteurs ou un triac) qui se déclenche sur une puissance de passage à zéro?
Pour ceux qui ne connaissent pas le sujet: Mettez le 230V sous tension, lorsque l'onde sinusoïdale de la ligne électrique passe à zéro - le résultat est de minimiser les perturbations électromagnétiques résultant d'un pic rapide de courant.
Plus précisément, je préférerais passer autant de logiciels que possible. Le circuit de détection composé d'un petit transformateur, d'une diode et de quelques résistances pour contrôler les niveaux et les courants fournit "1" lorsque la puissance d'entrée CA est dans la moitié positive, "0" dans le négatif, attaché à une broche GPIO d'entrée. La sortie se compose de quelques relais statiques et de l'essentiel pour les faire fonctionner (pull-ups, etc.), attachés aux broches de sortie GPIO.
The problem is timing: with 50Hz AC we get 100 zero-crossings in a second, one half-cycle is 10ms. To get within reasonable distance from zero-crossing to keep said EMI low we shouldn't activate the output more than 10% past (or before) the event of zero-crossing, that means +-1ms tolerance. That doesn't mean 1ms reaction time - we can reasonably expect the next zero-crossing to occur precisely 10ms after the first one, or the fourth - 40ms. It's about granularity - if we allow 20ms for reaction, it must be between 19 and 21ms, not 18 or 22.
Comment puis-je implémenter un tel temporisateur - déclencher la sortie GPIO soit dans 1 ms car l'entrée détecte un front, soit dans un multiple fixe de 10 ms depuis - de préférence en tenant compte d'une polarisation négative (par exemple, le transformateur et le relais introduisent un retard de 1,6 ms; donc je veux que le déclencheur se déclenche 8,4+ (n * 10) ms depuis l'impulsion d'entrée, de cette façon la polarisation contrecarre le retard introduit par le circuit.) - tout bien sûr "à la demande de l'utilisateur", par exemple, l'utilisateur écrit "1 msgstr "vers un fichier / sys / class / ... et à l 'occasion (grossièrement) la plus proche, la sortie passe" on ". L'utilisateur écrit «0» et lorsque le passage à zéro arrive, le relais spécifique se désengage.
Je crois que cela nécessiterait d'écrire ou de pirater un module du noyau. Pourriez-vous m'indiquer ce qui gère les broches GPIO de Raspberry Pi dans le noyau, et quel type de minuteries pourrais-je y attacher (à moins qu'il y en ait déjà en place) pour obtenir ce type de fonctionnalité?