Electronique > Réalisations > Temporisateur 006a

Dernière mise à jour : 18/12/2011

Présentation

Ce temporisateur, qui permet une durée de temporisation comprise entre 100 millisecondes et 56 heures, est le premier que je conçois à partir d'un microcontrôleur de la famille PIC (un 16F628A pour ne rien vous cacher).

temporisateur_006a_pcb_3d_a

Jusqu'à présent, tous les temporisateurs que j'avais réalisés étaient plutôt de type "analogiques" et basés sur la charge d'un condensateur ou sur le comptage d'impulsions issues d'un oscillateur. En réalité, le temporisateur que voici est lui aussi basé sur le comptage d'impulsions issues d'un oscillateur; la différence réside d'une part dans le fait qu'on ne voit pas l'oscillateur car il est intégré dans le PIC, et d'autre part que la durée de la temporisation est plus précise et plus simple à programmer. En contrepartie (on ne peut pas tout avoir), il faut programmer un composant... 

Schéma

Seule la partie "commande" est montrée sur ce schéma. Il faut encore y ajouter la section "puissance" qui correspond à votre besoin (transistor, relais, optotriac, etc). Mais avouez tout de même qu'il n'y a pas grand chose...

temporisateur_006a

L'oscillateur de référence
On ne le voit pas, car on exploite l'oscillateur 4 MHz intégré au PIC. L'avantage de cette approche est qu'on n'a besoin d'aucun composant externe (ni résistance, ni condensateur, ni quartz) pour assurer la fonction d'horloge interne du PIC. En contrepartie, la fréquence d'oscillation ne peut pas être ajustée très précisement, et on n'a aucun recours si la fréquence d'oscillation n'est pas pile poil de 4,000000 MHz. Mais soyons un peu sérieux, a-t-on vraiment besoin d'une si grande précision ici ? Il ne s'agit que d'un simple temporisateur, et non d'un oscillateur de référence servant à calibrer d'autres appareils. La précision de l'oscillateur interne est largement suffisante pour notre cas. A titre de vérification, un signal de contrôle de fréquence 5 Hz est disponible en sortie RA4, qui est pour rappel, une sortie en drain ouvert et nécessite donc une résistance de rappel vers le +5 V (c'est la raison de la présence de R1). La led D1, avec sa résistance série R2, est facultative mais permet de voir rapidement si le système fonctionne, puisque sa fréquence de clignotement est visible. Si vous souhaitez vérifier la précision de cette fréquence de 5 Hz, mesurez plutôt la période qui sépare deux fronts montant, ou adoptez une fenêtre de mesure de plus d'une seconde sur votre fréquencemètre.

Durée de la temporisation
La durée de la temporisation nominale correspond à l'espace de temps qui sépare le moment de la mise en route de l'appareil et le moment où la sortie principale Out1 change d'état. Cette durée est déterminée par le positionnement de cavaliers (straps) au nombre de 10 : un bloc de 2 cavaliers pour définir la durée de la base de temps, et un bloc de 8 cavaliers pour définir le nombre d'impulsions de la base de temps au bout duquel la sortie sera activée (ou désactivée, comme on le verra plus loin). La durée minimale de la temporisation nominale est de 100 ms (en réalité 0 ms, mais là, pas grand interêt je pense), et sa durée maximale est de 7 heures. Une version plus récente de ce temporisateur et dotée d'une base de temps de 1 ms est proposée à la page Temporisateur 006b.

Les différentes sorties
Vous pouvez noter qu'il y a quatre sorties (Out1 à Out4) et non une seule. La durée de la temporisation nominale est valable pour la sortie principale Out1. La sortie Out2 s'active après une durée égale à deux fois la durée de la temporisation nominale, la sortie Out3 s'active après une durée égale à quatre fois sa durée, et la sortie Out4 s'active après une durée égale à huit fois sa durée. Ainsi, si la temporisation nominale est de 1 minute, la sortie Out3 s'active au bout de 4 minutes et la sortie Out4 s'active au bout de 8 minutes. Pour une durée nominale de 7 heures sur la sortie principale Out1, cela donne une durée de temporisation de plus de 56 heures sur la sortie Out4, ce qui fait plus de deux jours ! Je trouvais bête en effet de laisser des pattes libres sur le circuit intégré, et ai donc décidé de leur donner un petit rôle.

Configuration de la base de temps
La base de temps initiale correspond au temps qui sépare deux impulsions d'horloge. Quand je dis impulsions d'horloge, je parle de celles qui sont prises en compte par le compteur du temporisateur (fréquence faible), et non de celles qui cadencent le programme du PIC (fréquence élevée). Ces impulsions sont comptées dès la mise sous tension du système, et quand leur nombre correspond à une valeur bien précise (déterminée par l'utilisateur), la sortie principale du temporisateur change d'état. Il existe quatre valeurs possibles de base de temps (TB0 à TB3, TB pour TimeBase), celle sélectionnée parmi les quatre dépend de la position des cavaliers cablés sur les entrées RA6 et RA7 du PIC.
TB0 - Base de temps = 100 ms
Cavaliers RA6/JP1 = 0 et RA7/JP2 = 0
Avec cette base de temps TB0, la durée de la temporisation peut être fixée :
- pour la sortie Out1 : entre 100 ms et 25.5 s, par pas de 100 ms
- pour la sortie Out2 : entre 200 ms et 51.0 s, par pas de 200 ms
- pour la sortie Out3 : entre 400 ms et 1 min 42 s, par pas de 400 ms
- pour la sortie Out4 : entre 800 ms et 3 min 24 s, par pas de 800 ms
TB1 - Base de temps = 1 s
Cavaliers RA6/JP1 = 1 et RA7/JP2 = 0
Avec cette base de temps TB1, la durée de la temporisation peut être fixée :
- pour la sortie Out1 : entre 1 s et 4 min 15 s, par pas de 1 s
- pour la sortie Out2 : entre 2 s et 8 min 30 s, par pas de 2 s
- pour la sortie Out3 : entre 4 s et 17 min, par pas de 4 s
- pour la sortie Out4 : entre 8 s et 34 min, par pas de 8 s
TB2 - Base de temps = 10 s
Cavaliers RA6/JP1 = 0 et RA7/JP2 = 1
Avec cette base de temps TB2, la durée de la temporisation peut être fixée :
- pour la sortie Out1 : entre 10 s et 42 min 30 s, par pas de 10 s
- pour la sortie Out2 : entre 20 s et 1 h 25 min, par pas de 20 s
- pour la sortie Out3 : entre 40 s et 2 h 50 min, par pas de 40 s
- pour la sortie Out4 : entre 1 min 20 s et 5 h 40 min, par pas de 1 min 20 s
TB3 - Base de temps = 100 s
Cavaliers RA6/JP1 = 1 et RA7/JP2 = 1
Avec cette base de temps TB3, la durée de la temporisation peut être fixée :
- pour la sortie Out1 : entre 1 min 40 s et 7 h 05 min, par pas de 1 min 40 s
- pour la sortie Out2 : entre 3 min 20 s et 14 h 10 min, par pas de 3 min 20 s
- pour la sortie Out3 : entre 6 min 40 s et 28 h 20 min, par pas de 6 min 40 s
- pour la sortie Out4 : entre 13 min 20 s et 56 h 40 min, par pas de 13 min 20 s

Configuration du compteur d'impulsions
Là, il faut savoir lire en binaire ;-)
La configuration du compteur d'impulsions permet de spécifier le nombre d'unité de temps de la base de temps TBx, au bout duquel la temporisation est terminée. Le principe de fonctionnement est très simple. Le compteur du temporisateur démarre avec la valeur 0 et s'incrémente d'une unité à chaque fois que le temps correspondant à la base de temps TBx spécifiée est écoulé. Par exemple, si la base de temps spécifiée est TB0 / 100 ms, au temps T0 (démarrage) le compteur vaut 0. Au bout de 100 ms, le compteur vaut 1, au bout de 200 ms le compteur vaut 2, etc. Pour spécifier la durée de la temporisation, il suffit donc de diviser le temps total désiré par la valeur de la base de temps. Si vous voulez par exemple obtenir une durée de temporisation de 7 secondes avec la base de temps TB0 / 100 ms, le nombre d'arrivée du compteur devra être de
7 / 0.1 = 70
En configurant les huit cavaliers SW1 du port B du PIC sur la valeur décimale 70, vous obtiendrez donc une temporisation de 7 secondes avec la base de temps TB0 / 100 ms. Et vous obtiendrez une temporisation de 70 secondes avec la base de temps TB1 / 1 s. Ou encore une temporisation de 700 secondes avec la base de temps TB2 / 10 s.
Exemple 1 : si le diviseur est configuré sur 5 et que la base de temps est 100 ms, alors la temporisation se terminera au bout de 500 ms.
Exemple 2 : si le diviseur est configuré sur 120 et que la base de temps est 1 s, alors la temporisation se terminera au bout de 120 s, soit 2 minutes.
Exemple 3 : si le diviseur est configuré sur 36 et que la base de temps est 100 s, alors la temporisation se terminera au bout de 3600 s, soit une heure.
Simple, non ? Oui, mais comment configurer une valeur décimale avec des cavaliers (ou microswitches) codés en binaire ? Simple là aussi, il suffit d'attribuer un nombre à chaque cavalier, de la façon suivante :
- Cavalier N° 1 (borne RB0) = valeur 1
- Cavalier N° 2 (borne RB1) = valeur 2
- Cavalier N° 3 (borne RB2) = valeur 4
- Cavalier N° 4 (borne RB3) = valeur 8
- Cavalier N° 5 (borne RB4) = valeur 16
- Cavalier N° 6 (borne RB5) = valeur 32
- Cavalier N° 7 (borne RB6) = valeur 64
- Cavalier N° 8 (borne RB7) = valeur 128
Sachant cela, il vous reste à trouver les cavaliers dont les valeurs additionnées donnent la valeur recherchée, en partant du cavalier représentant la valeur la plus grande. Exemple avec la valeur de 70 citée ci-avant. D'office, on voit que le cavalier N° 8 ne peut entrer dans le jeu puisque si on le sélectionne, la valeur sera au moins égale à 128, donc bien trop grande par rapport à 70. Le cavalier N° 7 en revanche doit être sélectionné, car sa valeur de 64 est inférieur à 70. Mais si on ne sélectionne que ce cavalier N° 7, la valeur obtenue (64) est trop petite. On continue avec le cavalier N° 6 : ce dernier à une valeur de 32, et si on l'ajoute à la valeur actuelle de 64, on dépasse 70. Le cavalier N° 6 doit donc être rejeté. Procédons de même pour les cavaliers restants : les valeurs 16 (cavalier N° 5) et 8 (cavalier N° 4) ne peuvent être ajoutées car elles donneraient elles aussi une somme supérieure à 70. En revanche, le cavalier N° 3 doit être sélectionné car l'ajout de sa valeur de 4 à la valeur actuelle de 64 donne un résultat de 68, qui reste inférieur à 70. A ce stade, pas besoin d'aller chercher midi à quatorze heure, on voit bien qu'il manque 2 à la valeur 68 pour obtenir 70. On doit donc aussi activer le cavalier N° 2. En résumé, il faut activer les cavaliers N° 7 (valeur 64), N° 3 (valeur 4) et N°2 (valeur 2) pour obtenir la valeur décimale 70.

temporisateur_006a_compteur_70

Ah, j'allais oublier un détail qui a son importance... Quand je parle d'activation des cavaliers, il faut en fait comprendre activation des entrées du port B du PIC. La raison en est simple : pour économiser huit résistances externes, j'utilise les résistances de rappel au +5 V intégrées sur chaque entrées du port B (pullup). Ce qui signifie que si on ne branche rien sur ces entrées, elles sont lues comme ayant un état logique haut. Pour donner à ces entrées un état logique bas, il faut les relier à la masse, et c'est ce que permettent les cavaliers N° 1 à N° 8. Le terme "activer un cavalier", dans le cas présent, correspond donc à son retrait (position OFF) pour permettre à l'entrée correspondante du PIC de voir son entrée monter à l'état logique haut. Bien sûr, cette façon de faire est redoutable pour les débutants, et c'est pourquoi je l'adopte parfois.
Remarque : il est tout à fait possible d'inverser l'état logique de chaque entrée de façon logicielle (dans le programme du PIC), pour obtenir une "activation" des entrées du PIC avec la mise en place des cavaliers (position ON). Cela aurait sans doute plu à certains, mais en même temps, il faut lire à l'envers sur les entrées du PIC, une tension nulle correspondant alors à une entrée activée. A chacun sa méthode, n'est-ce pas ?

Configuration de l'état logique de départ et d'arrivée
Par le biais du cavalier JP3, il est possible de définir l'état logique que doivent avoir les sorties Out1 à Out4 pendant la durée de la temporisation et à la fin de celle-ci. Cette fonction permet donc de disposer de sortie actives pendant un certain temps, ou de sorties actives au bout d'un certain temps. Pour des raisons de "sécurité", la broche RA5, qui définit l'état logique initial, est uniquement lue au démarrage du système, et tout changement de son statut en cours de route est ignoré.
Si RA5/JP3 = 0 : état logique bas au départ et état logique haut à la fin de la temporisation
Si RA5/JP3 = 1 : état logique haut au départ et état logique bas à la fin de la temporisation

Prototype

Je n'ai pas réalisé moi-même de prototype, mais Vincent l'a fait pour moi et je l'en remercie.

temporisateur_006a_proto_vsa_001a temporisateur_006a_proto_vsa_001b

Il a utilisé ce temporisateur en association avec un clône du compresseur de dynamique SSL de Gyraf Audio, et pour ce faire lui a adjoint deux relais électromécaniques.

Circuit imprimé

Non réalisé, vue 3D uniquement là pour donner un aperçu des composants utilisés.

Fichier binaire compilé et code source

Code source (format MikroPascal Pro V3.80) et fichier binaire compilé *.hex disponible dans l'archive suivante.
Temporisateur 006a - 16F628 - (25/07/2010)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Corrections et remarques diverses

18/12/2011
- Ajout photos prototype de Vincent.
25/07/2010
- Portage du code de MP V8.3 vers MP Pro V3.80