Je cherche un multiplexeur IC avec 128: 1 ou plusieurs entrées (256 serait plutôt bien). J'aurais pensé qu'un tel appareil serait assez courant, mais j'ai du mal à le localiser. Il se peut que je regarde au mauvais endroit, mais je pense qu'il me manque quelque chose - peut-être que les grands multiplexeurs d'entrée ne sont pas souvent utilisés? Si oui, quelle est l'alternative?
Le max. J'ai pu trouver le fidèle ol '74150 avec 16 entrées.
Je comprends que je peux construire un grand multiplexeur en combinant plusieurs multiplexeurs 16 entrées - mais j'espère une solution plus intégrée.
Je conçois un circuit capable de tester les circuits ouverts et les courts-circuits dans un faisceau de câbles automobile. Un harnais typique peut contenir environ 200 fils. Actuellement, le circuit utilise 16 multiplexeurs pour gérer 128 fils.
Les multiplexeurs sont connectés à un seul multiplexeur à 16 entrées et celui-ci est à son tour connecté à un uC. De même, à l'autre extrémité, il y a 16 démultiplexeurs. Les démultiplexeurs commutent les fils sur une tension. En même temps, ce fil est commuté sur l'une des entrées uC via le multiplexeur.
Si le fil est OK, le uC devrait voir un haut à son entrée. L'uC vérifie ensuite tous les autres fils. Si l'un d'eux est élevé, cela signifie qu'il y a un court-circuit entre ces deux fils.
Remarque: ce circuit n'a pas été conçu par moi. Cela a été fait en 2003. Je cherche juste à améliorer ce circuit. Notez également qu'aucun des faisceaux de câbles ne contient de bus de données CAN ou tout autre type de bus. Ses fils simples pour l'alimentation et les signaux.
Voici un schéma de principe très approximatif que j'ai fait rapidement juste pour ce post. J'espère que cela rend le problème plus clair car l'anglais n'est pas ma langue maternelle et j'ai du mal à expliquer les choses via le texte. Même si le diagramme n'est pas très bon, j'espère qu'il améliore les choses. Les lignes allant latéralement dans le demux et le mux du MCU sont les lignes d'adresse.
Notez que l'un des fils est divisé en 3. J'ai fait cela intentionnellement pour montrer que certaines connexions sont un-à-plusieurs et pas seulement un-à-un. Le plus complexe que j'ai vu est un fil divisé en 60 jonctions. C'est pourquoi le demux et le mux ont des lignes d'adresse distinctes. Le demux pourrait être à l'entrée no. 20 tandis que le multiplexeur peut basculer entre 20,21,22, etc. Vérifiez toutes les lignes qui sont connectées à la ligne 20.
Si vous pensez qu'il existe une meilleure façon de concevoir cela, faites-le moi savoir.
la source
Réponses:
Bien qu'un énorme multiplexeur / démultiplexeur fonctionnera certainement, la connexion d'un groupe de multiplexeurs 16: 1 représente beaucoup de travail et présente certaines limitations qui peuvent ou non être un problème. L'approche la plus conventionnelle consisterait à utiliser des registres à décalage. Utilisez un registre d'entrée série / parallèle pour l'extrémité "pilote" et un registre d'entrée parallèle / série pour l'extrémité réceptrice. La bonne chose à propos des registres à décalage est qu'ils peuvent facilement être connectés en guirlande pour créer un registre à décalage plus long. Un registre à décalage 256 bits ou même 1024 bits n'est pas du tout un problème. Avec une mise en mémoire tampon, le flux série peut même être passé sur un câble vers un autre PCB (si cela vous facilite la tâche).
Il existe de nombreuses puces de registre à décalage 8 bits comme le 74xx597, mais un CPLD est BEAUCOUP mieux pour cela. Mais vous n'avez pas besoin d'un CPLD géant 256+ broches. Au lieu de cela, vous pouvez utiliser plusieurs CPLD plus petits et les chaîner ensemble. Bien que je n'aie pas fait le calcul, je suis assez sûr que l'utilisation de plus de CPLD de petite à moyenne taille serait moins cher qu'un grand CPLD - et vous n'avez pas à vous soucier des BGA.
Ce CPLD serait assez intensif Flip-Flop. Cela signifie qu'une architecture CPLD normale (comme celle utilisée par Xilinx) n'est pas aussi bonne que quelque chose de plus FPGA. Altera et Lattice ont toutes deux des CPLD avec beaucoup plus de tongs par dollar que ce que Xilinx a.
Bien que vous n'ayez peut-être pas beaucoup d'expérience avec les CPLD, cette conception est très simple et les avantages de l'utilisation d'un CPLD sont énormes. Il serait très utile de votre temps pour apprendre à programmer les CPLD pour cela.
De plus, les avantages de l'utilisation d'un registre à décalage au lieu d'un multiplexeur ne sont pas faciles à voir au départ. Surtout, vous obtenez beaucoup de flexibilité dans la façon dont vous conduisez et détectez les fils. Vous pouvez même tester plusieurs faisceaux en même temps (si vous avez suffisamment de registres à décalage). Tout ce que vous pouvez tester avec des multiplexeurs peut être fait avec des registres à décalage, mais les registres à décalage peuvent faire plus. Le seul inconvénient des registres à décalage est qu'il est plus lent, bien qu'il soit toujours plus rapide que ce dont vous avez besoin (IE, le gars qui connecte et déconnecte le faisceau sera beaucoup plus lent que le temps de tester avec des registres à décalage).
Je dois également dire que même si vous utilisez des CPLD, les registres à décalage sont toujours plus faciles que les multiplexeurs. L'essentiel est qu'ils sont plus petits - bien que pour voir l'avantage / inconvénient réel, vous devez réellement faire la conception dans les deux et voir de quelle taille de CPLD vous avez besoin. Cela dépendra assez du type d'architecture CPLD utilisé, donc toutes les généralisations faites avec Xilinx ne s'appliqueront pas à Altera.
Edit: Vous trouverez ci-dessous un peu plus de détails sur la façon d'effectuer le test à l'aide de registres à décalage ...
Pour effectuer le test, vous pouvez ignorer le fait que vous utilisez des registres à décalage et considérer uniquement que les données sont pilotées sur le "côté entraînement" et, espérons-le, lues sur le "côté réception". La façon dont vous avez obtenu les données sur place et en arrière (via la série) est largement hors de propos. Ce qui est important, c'est que les données que vous pouvez conduire soient complètement arbitraires.
Les données avec lesquelles vous conduisez sont appelées "vecteurs de test". Les données que vous ATTENDEZ LIRE font également partie des vecteurs de test. Si le câble est câblé avec une relation 1: 1, vous vous attendez à ce que les données de conduite et les données de réception soient les mêmes que celles que vous conduisez. Si le câble n'est pas 1: 1, alors ce serait évidemment différent.
Si vous avez utilisé une approche basée sur MUX, vous utilisez toujours des vecteurs de test, mais vous n'avez aucun contrôle sur le type de vecteur de test. Avec les multiplexeurs, le motif est appelé "Walking Ones" ou "Walking Zeros". Disons que vous avez un câble à 4 broches. Avec ceux qui marchent, vous conduiriez le modèle suivant: 0001, 0010, 0100, 1000. Les zéros de marche sont les mêmes, mais inversés.
Pour un test de continuité simple, marcher des zéros / fonctionne assez bien. Selon la façon dont votre câble est connecté, il existe d'autres modèles qui pourraient être effectués pour accélérer le test ou pour tester des choses spécifiques. Par exemple, si certaines broches ne peuvent jamais être court-circuitées avec d'autres broches, vous pouvez optimiser le motif de test pour ne pas regarder ces cas et ainsi courir plus rapidement. Traiter avec autre chose qu'un marcher-uns / zéros peut devenir compliqué du côté logiciel des choses à gérer.
La méthode ultime de génération de vecteurs de test est effectuée pour les tests JTAG. JTAG, également appelé balayage des limites, est un schéma similaire pour tester les connexions entre les puces sur un PCB (et entre les PCB). La plupart des puces BGA utilisent JTAG. JTAG a des registres à décalage dans chaque puce qui peuvent être utilisés pour piloter / lire chaque broche. Un logiciel compliqué et coûteux examine la netlist du PCB et générera les vecteurs de test. Un testeur de câbles sophistiqué pourrait faire la même chose, mais ce serait beaucoup de travail.
Heureusement, pour vous, il existe un moyen BEAUCOUP PLUS FACILE de générer les vecteurs de test. Voici ce que vous faites ... Connectez un bon câble connu aux registres à décalage. Exécutez un modèle de marche zéros / uns à travers le côté conducteur. Pendant que vous faites cela, enregistrez ce qui est vu du côté récepteur. Au niveau simple, vous pouvez simplement l'utiliser comme vecteurs de test. Lorsque vous connectez un mauvais câble et effectuez les mêmes marches / zéros, les données que vous recevez ne correspondront pas aux données que vous avez enregistrées précédemment - et donc vous savez que le câble est mauvais. Cela passe par plusieurs noms, mais tous les noms sont une variante du terme «apprentissage», comme l'auto-apprentissage ou l'auto-apprentissage.
Jusqu'à présent, cela gère facilement le cas où une broche de l'extrémité d'entraînement va à plus d'une broche de l'extrémité de réception, mais ne gère pas l'autre cas où plusieurs broches de l'extrémité d'entraînement sont connectées ensemble. Pour cela, vous avez besoin de choses spéciales pour éviter les dommages causés par les conflits de bus, et toutes vos broches de registre à décalage doivent être bidirectionnelles (IE, fonctionnent à la fois comme pilote et récepteur). Voici ce que vous faites:
Mettez une résistance de rappel sur chaque broche. Quelque chose autour de 20K à 50k ohms devrait convenir.
Mettez une résistance série entre le CPLD et le câble. Quelque chose autour de 100 ohms. Cela permet d'éviter les dommages causés par les décharges électrostatiques et autres. Un capuchon de 2700 pF à la terre (du côté de la broche CPLD de la résistance de 100 ohms) aidera également à l'ESD.
Programmez le CPLD de manière à ce qu'il ne fasse que conduire le signal haut, jamais bas. Si vos données de sortie sont un «0», le CPLD trisignera cette broche et permettra à la résistance de rappel d'abaisser la ligne. De cette façon, si plusieurs broches CPLD entraînent le même fil sur le câble haut, aucun dommage ne se produira (car le CPLD ne conduira pas également le même fil bas).
Chaque broche est à la fois un pilote et un récepteur. Donc, si vous avez un câble à 256 broches, vos registres à décalage seront 512 bits pour le pilote et 512 bits pour le récepteur. La conduite et la réception peuvent être effectuées dans le même CPLD, donc la complexité du PCB ne change pas vraiment à cause de cela. Vous aurez 3 ou 4 bascules par broche de câble dans ce CPLD, alors planifiez en conséquence.
Vous effectuez ensuite le même motif de marche / zéro en comparant les données reçues avec ce qui a été enregistré précédemment. Mais maintenant, il gérera toutes sortes de connexions arbitraires dans le faisceau de câbles.
la source
Je ne pense pas qu'il existe de solutions monopuce. Ils seraient coûteux en raison du grand nombre d'E / S et probablement aussi en raison de la faible demande. La plupart des conceptions mettent en cascade 8 ou 16 multiplexeurs d'entrée.
Si vous voulez vraiment une solution plus intégrée, vous devrez chercher un CPLD . Il existe des CPLD avec plus de 256 E / S, comme le Xilinx CoolRunner XC2C512 , qui est disponible dans une version BGA avec 270 E / S utilisateur. Gardez à l'esprit que pour un multiplexeur 256 entrées, vous avez besoin de 8 entrées supplémentaires pour les signaux sélectionnés, une sortie bien sûr et peut-être aussi une activation, de sorte que les 270 E / S ne seront pas trop nombreuses.
Vous devez également garder à l'esprit que votre emballage sera très probablement du BGA ; Je ne sais pas si ça vous plaira. Je n'ai pas encore vu de QFP avec environ 300 broches ...
la source
Bien que CPLD / FPGA semble la bonne idée pour un nombre de broches élevé, un faisceau automobile sera généralement assez étendu physiquement et les connecteurs modérément grands.Par conséquent, au lieu de s'étendre d'un appareil à nombre de broches élevé à un grand nombre de connecteurs, un un système modulaire avec, par exemple, 16 entrées / sorties sur des registres à décalage, interconnectés par le faible nombre de lignes d'horloge / à décalage peut être plus approprié et également très évolutif.
Quelque chose d'autre à considérer est pour les tests de câbles, vous pouvez utiliser une chaîne de résistances pour appliquer, disons, 16 tensions à 16 lignes, et un multiplexeur analogique pour vérifier la tension de chacune à l'autre extrémité. Cela permettrait de détecter les ouvertures et les courts-circuits, et serait bon marché.
la source
L'utilisation d'un registre à décalage pour lire de nombreuses entrées est un bon modèle. Puisque David Kessner a suggéré d'utiliser un CPLD, cependant, je suggérerais un autre modèle. Supposons que vous vouliez que chaque CPLD gère 32 entrées. Donnez à chaque CPLD une entrée d'horloge partagée, une entrée d'activation individuelle, une sortie d'activation (qui est liée à l'entrée d'activation de la puce suivante) et une sortie de données partagée. Chaque puce a un compteur à cinq bits et un indicateur de débordement. Lorsque l'entrée de validation est désactivée, effacez le compteur et l'indicateur de débordement. Lorsque l'entrée d'activation est confirmée mais que l'indicateur de débordement n'est pas défini, sortez l'état du bit d'entrée indiqué par le compteur. Lorsqu'une impulsion d'horloge est reçue et que la puce est activée et que le compteur n'a pas débordé, augmentez le compteur. Le bit de débordement alimenterait la sortie "enable". L'effet net de toute cette logique est que l'on peut obtenir en n'ayant besoin que d'environ 8 macrocellules pour gérer 32 entrées. On peut ainsi être en mesure d'intégrer dans le CPLD d'autres fonctions qui sont plus intensives en calcul ou en registre mais qui n'ont pas besoin de beaucoup d'E / S.
Si l'on a un CPLD avec des circuits de maintien de broches, on peut être en mesure d'utiliser une approche similaire pour la sortie, surtout s'il existe un moyen de sortir la sortie d'une macrocellule sur plusieurs broches (sans avoir à dépenser une macrocellule pour chaque broche). La puce aurait partagé des entrées d'horloge et de données, une entrée d'activation et une sortie d'activation. En interne, il aurait besoin d'un compteur à cinq bits, d'une copie supplémentaire du bit de compteur inférieur verrouillé sur le bord d'horloge opposé aux cinq premiers, d'un bit de débordement et d'un signal de données partagé qui alimenterait toutes les broches. Sept macrocellules, mais aussi beaucoup étaient nécessaires pour copier le signal de données d'entrée sur toutes les broches (les commandes d'activation de sortie pour les broches serviraient d'activation de verrouillage).
Une belle caractéristique de cette approche (qui, en fait, est fréquemment utilisée dans les pilotes LCD) est que l'on peut avoir plusieurs lignes de données déplaçant les données en parallèle et ne nécessiter qu'un seul câble en guirlande entre les puces. Il permet également d'éliminer un circuit de verrouillage de chaque entrée ou sortie.
la source
Comment cela semble-t-il pour une idée, en supposant que le plus grand groupe de broches qui sont censées être connectées soit par exemple 20 broches: utilisez un tas de puces de pilote de LED à registre à décalage à collecteur ouvert (une sortie par broche), chacune pouvant absorber au moins 2mA; connectez une résistance 1K de chaque broche à un point commun et utilisez un circuit qui fournit un volt à 20,1mA (c'est bien si la tension est plus élevée lorsque le courant est plus faible, à condition que ce soit un volt à 20,1mA) et indiquez si une tentative est fait pour tirer plus que ce montant. Pour certaines configurations de câble, il peut être nécessaire d'avoir un petit nombre de broches "de rechange" qui ont les résistances 1K, mais ne sont pas connectées au câble. Il peut être souhaitable d'avoir une broche de rechange avec une résistance 1K, une avec une résistance de 500 ohms (ou deux 2K en parallèle), une avec une résistance de 250 ohms (quatre 1K '
Pour tester le câble, formulez des scénarios qui devraient aboutir à exactement vingt broches tirées vers le bas, et des scénarios qui devraient entraîner exactement vingt et une à tirer vers le bas (les broches de rechange peuvent être utiles pour cela) et confirmez que les scénarios à vingt broches sont n'est pas signalé comme utilisant plus de 20,5 mA, mais les scénarios à 21 broches le sont.
Supposons, par exemple, que l'on dispose d'un faisceau de câbles qui est censé se connecter 1-2, 3-4, 5-6, etc. jusqu'à 39-40. Vérifiez les shorts en choisissant différentes combinaisons de dix paires de broches et enfoncez les deux paires de chaque broche. Vous conduirez à 20 broches à un niveau bas, et aucune broche ne devrait descendre à l'exception de celles que vous conduisez, donc le courant doit toujours être inférieur à 20 mA. Si cela se termine, quelque chose est en court-circuit. Si l'on peut trouver une combinaison de dix paires qui ne lit pas la surintensité, alors une à la fois, désactivez une paire active et activez une autre paire, jusqu'à ce que quelque chose devienne surintensité; la dernière paire allumée est court-circuitée à quelque chose qu'elle ne devrait pas être.
Vérifiez les ouvertures en enfonçant une broche de rechange à un niveau bas, puis en sélectionnant diverses combinaisons de dix paires, en entraînant une broche de chaque paire (parfois la paire et parfois la paire). S'il y a des ouvertures, une telle action se traduira par moins de 21 broches entraînées à un niveau bas, et donc lira sous-courant. Si cela se produit, puis une à la fois, prenez chaque paire où un fil est conduit et conduisez plutôt les deux. Si cela pousse la lecture actuelle à plus de 20,1 mA, cette paire est ouverte.
On pourrait utiliser un CPLD pour cette application, mais un système comme je l'ai décrit pourrait être mieux. Il pourrait être encore amélioré en ajoutant des circuits pour mesurer réellement le courant (plutôt que de simplement produire un indicateur de sur / sous). Une telle mesure permettrait de définir des valeurs de tolérance pour la résistance.
la source
C'est ce que vous cherchez?
Maxwell 81840 - Multiplexeur 128 canaux
la source