Étape 3: Le logiciel, un peu de théorie
La façon d’utiliser un variateur AC/fader est assez simple une fois que vous comprenez les bases :
Dans AC la puissance nourris à la lampe est directement lié à la superficie totale de la sinuswave, la lampe peut être réglée en n’autorisant une partie prévisible de cette sinuswave s’écouler à travers la lampe.
Comme tels nous besoin d’un point de référence sur ce sinus d’où nous calculons alors la lampe doit s’allumer.
Le point de référence plus facile à utiliser est la ce qu’on appelle « passage par zéro »: dès que la lumière passe par zéro.
Après chaque passage par zéro, il y a un demi plein de la sinuswave disponible pour envoyer par le biais de la lampe.
Ce que le logiciel doit faire est donc de détecter le zerocrossing et d’attendre pendant un certain temps sur ce sinuswave pour allumer le TRIAC.
Il y a 2 grandes fréquences nets dans le monde : 100 Hz en Europe et d’Asie, d’Afrique et de 120 Hz dans la plupart de l’Amérique (et certaines parties de la Caraïbe). Il y a 2 grandes tensions dans le monde : 110-120V et 220-240 v, mais ils ne sont pas importants pour les mathématiques ici.
Par souci de simplicité, je prendrai la fréquence de 50Hz à titre d’exemple :
50Hz est 50 vagues par seconde.
Chaque sinuswave prend donc 1000ms/50 = 20 ms (millisecondes)
Qu’il y a 2 sinuspeaks en une vague cela signifie qu’après chaque détection du zéro il y a une période de 10 ms que nous pouvons réglementer.
Devrions nous allumez la lampe directement au début de cette période, la lampe recevra toute la puissance, devrions nous le faisons à la fin de cette période de 10 ms, que la lampe ne recevra aucun ower et devons-nous à mi-chemin, la lampe vous recevrez demi-puissance.
Comme nous utilisons des TRIACs, ce que le logiciel doit faire est d’attendre le point zéro à la sinuscurve, prendre note de cela et puis attendre un laps de temps, durant cette période de 10 ms pour envoyer une impulsion pour le TRIAC.
Si elle envoie cette impulsion à 5ms, le feu brûlera seulement à mi-puissance.
Dans le Circuit, zéro la détection se faite par l’optocoupleur biphasiques et est disponible en tant que le signal X sur la carte.
Fondamentalement, il y a 2 façons pour un microcontrôleur détecter ce signal :
1-a continu 'interrogation"de la broche zéro Crossing
2-utiliser une interruption à raconter le programme qu’il y avait un passage par zéro
La principale différence entre les deux est que dans « interrogation » chaque fois que l’ordinateur passe par le biais de sa boucle principale qu'il faut vérifier le code pin. Si votre programme est occupé à faire un tas d’autres choses, il pourrait être trop tard pour le contrôle de l’axe de passage zéro, tandis que lorsque vous utilisez une interruption, il n’importe pas ce que le programme est occupé avec. L’interruption est sorte de "tapant sur l’épaule" disant « Hey regarde, quelque chose est venu que vous deviez assister à présent ».
Après que le passage par zéro est détecté, que le programme doit attendre un certain temps et puis allumez le TRIAC.
Aussi ici, cette attente peut être fait de deux manières différentes
1 - en émettant une commande de « attendre »
2-à l’aide d’une interruption de la minuterie
Encore une fois, ces deux méthodes ont leur pro et de con La commande « d’attente » (« retard » dans la langue de l’Arduino) littéralement l’ordinateur attendons le temps nécessaire et il ne peut pas faire autre chose en attendant. Si la lampe brûle à faible puissance en laissant l’ordinateur à attendre dire 9ms, cela signifie que chaque 10ms l’ordinateur est dit d’attendre 9ms : ergo il sera inactif 90 % du temps. C’est très bien si votre contrôleur est seulement utilisé pour contrôler la lampe, mais s’il doit faire d’autres choses puis le temps est compté.
À l’aide d’une interruption de minuterie résout que. Fondamentalement ce que cela fait est que le programme indique la minuterie : ¨Hey, j’ai juste entendu nous avons un passage par zéro, je dois faire autre chose, mais vous attendez 4.5ms et allumez ensuite le Triac "donc le programme s’allume c’est joyeux façon et 4.5ms (par exemple) après il a été donné avis il y a un passage à 0, la minuterie allume le TRIAC.
Interrogation: (noter que c’est un exemple approximatif pour l’illustration des bureaux de vote, évidemment il a besoin de quelques améliorations)
Interrompre le moteur:
Pour utiliser une interruption, tout d’abord nous devons mettre en place que. Sur l’Arduino qui se présente comme suit :
Ce que cela dit, c’est que l’interruption est attachée pour interrompre les 0, il va vers une fonction appelée « zero_crosss_int » et il réagit à un flanc montante sur la cheville.
Dans la fonction Zero_cross_int qui le programme grimpe à après l’interruption, nous déterminons le temps qu'il faut attendre avant de déclencher le TRIAC. Nous allons également ajouter un peu de fonctionnalités. Nous ne voulons pas seulement un ensemble de niveau qui la lampe brûle sur, nous allons ajouter quelques fonctionnalités pour réguler le niveau de luminosité en étapes.
Pour cela j’ai choisi le montant totalement arbitraire de 128 pas. Cela signifie que chaque étape est 10ms/128 = 10000us/128 = 75us (en fait c’est 78, mais arriver à cela plus tard). Le total dimtime puis est calculée à partir de 75 x (1 à 128). Le numéro entre 1-128, ce qui détermine notre niveau de gradation, nous affectons à la variable integer « gradation »
Ce qui se passe ici est que le programme calcule d’abord la dimtime (= durée d’attente avant le triac est tiré)
Puis attend cette quantité de temps, par la suite attend cette quantité de temps et elle se déclenche le Triac. Le Triac s’éteint à nouveau à ce qui suit, passage par zéro, mais nous allons déjà écrire un peu sur la broche TRIAC pour éviter l’allumage accidentel dans le prochain cycle. Il faut attendre un peu mais de savoir à coup sûr le TRIAC est activé, donc nous attendre 10us. Maintenant (10000-10) / 128 est encore 78 mais j’ai trouvé 75 fonctionne bien. N’hésitez pas à utiliser 78 bien.
La seule chose qui reste alors à faire dans le programme principal est de définir le niveau auquel nous voulons que la lampe à brûler :
Ce qui se passe ici est une simple boucle qui régule la lampe vers le haut dans une 128 pas. J’ai choisi de ne pas démarrer à 1 mais à 5 car à ce niveau, il pourrait y avoir quelques problèmes de minutage qui pourraient causer la lampe ne clignote.
Le programme ci-dessus est seulement un exemple de comment contrôler la lampe, évidemment vous voulez ajouter quelques autres fonctionnalités plutôt que d’avoir juste une lampe monter et descendre en luminosité.
À l’aide d’une minuterie :
Si vous souhaitez que votre programme à la fois efficace, vous devrez utiliser une interruption pour la détection de passage à zéro et une minuterie pour déterminer la quantité de temps à attendre.
À peu près un programme se présente comme suit :
Initialiser
Mettre en place les différentes constantes et variables, vous avez besoin et inclure les bibliothèques utilisées (par exemple, la bibliothèque de TimerOne)
Programme d’installation
SETP les broches et les 2 interruptions
Les points d’interruption de zéro-crosssing à une fonction et ainsi fait l’interruption timer
Zéro-Croix functie
Définissez une valeur booléenne indiquant si un zéro incident s’est produit
Fonction Timer
Si nous réglementons la luminosité en 128 étapes, alors la fonction de minuterie sont configurés pour être appelé chaque fois que le temps d’une étape a passé (p. ex. 75us) et vérifie ensuite si le nombre d’étapes passé est égal au nombre d’étapes ensemble. Si tel est le cas, le Triac est allumé