Electronique > Réalisations > Générateurs > Générateur impulsions 004

Dernière mise à jour : 22/04/2009

Présentation

Ce générateur produit un train d'impulsions sur commande (par exemple lors de l'appui sur un bouton poussoir), dont le nombre précis peut être ajusté entre 1 et 65535 par le biais de microswitches ou d'un bus 16 bits quelconque, et utilise des compteurs binaires, des portes NAND et une bascule D. Pour un montage similaire mais où le nombre d'impulsions peut être spécifié directement en valeur décimale (avec roues codeuses), merci de vous reporter à la page Générateur d'impulsions 003.

Le schéma

Il est certe possible d'obtenir la même chose avec un seul composant programmable, mais où serait alors le plaisir des combinaisons logiques "en dur" dont vous raffolez ?

gene_imp_004

Principe général
L'idée de base est de procéder à un comptage d'impulsions en partant de zéro et en allant jusqu'à une valeur comprise entre 1 et 65535 et choisie par l'utilisateur. Une fois la valeur choisie atteinte, le compteur est remis à zéro et se bloque, prêt à repartir pour un tour lors d'une prochaine demande.

Le comptage
Le comptage doit pouvoir aller jusqu'à 65535, ce qui impose une largeur binaire de 16 bits (2 puissance 16 = 65536). Comme je n'ai pas trouvé de compteur binaire possédant de base 16 bits de sorties, je me suis rabattu sur deux compteurs de type CD4040 mis en cascade, la dernière sortie du premier compteur (Q11) aboutissant sur l'entrée horloge du second. Ici, pas d'utilisation possible de CD4020 ou CD4060, auxquels il manque quelques sorties intermédiaires. Les deux compteurs utilisés ici permettraient d'aller jusqu'à 24 bits, mais il ne faut tout de même pas trop exagérer...

Détection fin de comptage
Le but consiste à détecter quand le nombre diviseur que l'on a spécifié est atteint. Par exemple, si on programme le nombre 5 (4 + 1 vu du côté binaire), il nous faut une information qui revienne toutes les 5 impulsions d'horloge (signal d'entrée à diviser). Cette information doit en même temps remettre à zéro les compteurs. La solution la plus logique consiste à employer une porte AND dont le nombre d'entrées est au moins égale au nombre de bits qui sont actifs (à l'état logique haut) pour le nombre choisi. Pour le nombre 1, un seul bit est nécessaire, alors que pour le nombre 7, trois bits sont nécessaires. Comme le nombre de bits activés dépend du nombre diviseur choisi et qu'il peut varier entre 1 bit (comptage jusqu'à 1) et 16 bits (comptage jusqu'à 65535), il nous faut une porte AND dont le nombre d'entrées est variable, ce qui n'existe pas. En revanche, on peut prendre une porte AND à 16 entrées et n'en utiliser que certaines, celles qui ne sont pas utilisées étant alors forcées à l'état logique haut. A priori rien de bien compliqué, si ce n'est que l'on travaille sur une largeur de "bus" de 16 bits et qu'il n'existe pas (à ma connaissance tout du moins) de porte AND possédant autant d'entrées. Il nous faut donc créer cette porte AND avec plusieurs portes logiques "plus petites". Ici, j'ai choisi d'utiliser deux portes NAND à 8 entrées (car je n'ai pas trouvé de porte AND à 8 entrées), suivies de portes NAND à deux entrées destinées à former un tout comparable à une unique grosse porte AND à 16 entrées. Notez bien que j'ai employé les deux termes AND et NAND, il n'y a pas d'erreur dans le texte...

Remarque : si vous souhaitez réduire le comptage (et donc le facteur de division) à la valeur maximale de 255, un bus de 8 bits suffit et vous pouvez alors vous contenter d'un seul compteur CD4040, d'une seule porte AND à 8 entrées et d'un seul ensemble de 8 microswitches.

Démarrage et Arrêt du compteur
Le démarrage du compteur s'effectue en appuyant sur le bouton poussoir SW1 / Start, qui impose à la sortie Q de la bascule D U5:A de passer à l'état haut. Dans ces conditions, la porte NAND U6:D laisse passer les impulsions d'entrée appliquées sur Fin, vers la sortie Out. Au même instant, la sortie Q barre de la même bascule U5:A, qui était à l'état haut et bloquait les compteurs U1 et U2 via leur broches de remise à zéro (MR), passe à l'état bas et autorise ainsi les deux compteur à compter. Une fois que le nombre d'impulsions appliquées à l'entrée des compteurs a atteint le nombre programmé par l'utilisateur (513 sur le schéma, 512 + 1 vu côté binaire), la sortie des deux portes NAND U3 et U4 passe à l'état bas, ce qui, après passage dans les portes NAND U6:A, U6:B et U6:C, conduit à obtenir une impulsion négative en sortie de U6:C (borne 10). Cette impulsion, qui doit servir pour bloquer les compteurs, n'est pas dans la bonne polarité pour attaquer l'entrée de remise à zéro de la bascule D U5:A. C'est pourquoi le transistor Q1 y est intercallé, en tant qu'inverseur logique simple. La bascule D peut maintenant recevoir son impulsion positive de remise à zéro, ce qui pousse sa sortie Q à repasser à zéro : plus aucune impulsion ne peut passer en sortie finale Out, et les compteurs sont à nouveau bloqués. Le nombre d'impulsions transmises sur la sortie Out correspond bien au nombre programmé par l'utilisateur.

Remarque : la sortie Out est de type "négative", ce qui signifie qu'au repos elle est à l'état logique bas. Si vous souhaitez disposer d'une sortie de type "logique positive", il suffit d'y ajouter un inverseur. Dans ce cas, pourquoi ne pas envisager l'emploi d'un autre circuit intégré de type CD4011, dont une porte serait cablée en inverseur pour la sortie, et une autre porte également câblée en inverseur pour remplacer le transistor Q1 et sa résistance R4 ?