J'ai dû me poser cette question il y a une dizaine d'années ou plus. Le travail qui devait être fait était de donner une seconde vie à la régie. C'est une telle chose dans tout le mur, composé d'ampoules et d'interrupteurs avec interrupteurs. Je pense que je ne me tromperai pas en supposant que les boucliers fonctionnent depuis l'apparition des ampoules, car les interrupteurs à cette époque étaient probablement déjà connus. Et l'envie de beauté, en général, est venue aux gens de l'antiquité lointaine.
Maintenant, beaucoup préféreront les panneaux d'affichage aux boucliers. Mais s'il y aura une majorité de fans d'affichage dépend de beaucoup de choses qui nous sont inconnues. Mais maintenant, ce n'est pas ça.
Quiconque peut parler de câblage électrique pendant cinq minutes me dira immédiatement que le bouclier est composé d'écrans plats sur lesquels sont placés des interrupteurs et des ampoules, ainsi que d'une boîte avec de nombreux fils. Après tout, une ampoule sans fil ne convient que pour la casser stupidement ou, si vous montez de manière créative et excitez votre imagination, placez-la au plus curieux dans votre bouche et découvrez rapidement où se trouve la salle d'urgence.
C'était tout, un tas de fils laissant la boîte aux interrupteurs et aux ampoules, seules les ampoules étaient petites. Apparemment, la petite-fille de la célèbre ampoule Ilyich.
Et maintenant, je me souviens, j'ai regardé par la fenêtre, et il y a le 21e siècle. Par conséquent, il est nécessaire de tout recommencer et d'une manière différente. Au lieu des ampoules - LED économiques. Au lieu de fils - câblage. Au lieu d'un seul tiroir - beaucoup, beaucoup de petits tiroirs, des contrôleurs, donc.
Il s'est avéré que si chaque contrôleur peut desservir quatre LED et deux commutateurs, cela semblera optimal. Je veux dire, pas si terrifiant. Et si le bus d'alimentation et le bus d'informations passent par tous les contrôleurs, il n'y a que quatre fils, alors une certaine grâce apparaîtra. Il s'est également avéré que les contrôleurs auraient besoin de 104 pièces. De manière amicale, il faudrait ici poser et résoudre le problème du voyageur de commerce. Et puis, peut-être, les contrôleurs auraient dépensé moins. Mais ce n'était pas à la hauteur.
À ce moment-là, je savais déjà ce qu'est le CAN et le niveau de mon respect pour Bosch était beaucoup plus élevé que celui d'un chef de restaurant décent ou d'une femme au foyer bien rangée. Et les constructeurs automobiles BMW, je suis sûr, sont même allés voir les ingénieurs Bosch.
Le Controller Area Network, comme diraient les étrangers, à mon avis, comme solution technique, est né du désir de faire enfin quelque chose de bien. Je ne me cacherai pas, vous ne ressentirez pas tout de suite les charmes des résultats du travail des ingénieurs lorsque vous maîtriserez deux volumes de la norme, mais bien plus tard. Lorsque vous parlez à des témoins oculaires, interrogez des témoins. Maintenant, il y a plus de volumes, mais vous pouvez peut-être commencer immédiatement à partir du troisième, car maintenant il s'appelle CAN_FD. Mais permettez-moi de continuer.
Même avant la collision avec le bouclier, j'ai dû rencontrer des décisions d'ingénierie d'autres personnes sur l'utilisation du CAN, ainsi que commettre mes erreurs. Des erreurs apparaissent généralement entre la lecture des instructions et l'étude des descriptions. Eh bien, c'est seulement la deuxième fois qu'ils ressemblent à un râteau.
Maintenant quelques milliers de mots pour le lecteur, qui tolère les nerds et ne les considère pas comme des ennemis.
CAN peut être installé là où RS485 fonctionnait auparavant sur un câble à paire torsadée. La paire torsadée n'est pas une condition indispensable, elle est simplement pratique à comparer. À l'aide d'un câble à paire torsadée, via CAN, ainsi que via RS485, vous pouvez envoyer des messages du contrôleur de commande à l'esclave et recevoir une réponse. La similitude est frappante, mais concentrons-nous davantage sur les différences. Certaines des différences peuvent porter un signe moins pour certains lecteurs. Mais je leur conseillerais de ne pas être contrarié, mais de rappeler la loi de Lomonosov.
Grâce à l'organisation synchrone du protocole, la résolution des collisions sur le bus est implémentée en hardware, à la volée, pour ainsi dire. Il est noté ci-dessous à quoi cela conduit et ce qui donne à l'ingénieur agité.
Vous pouvez recevoir un message sans demande.
Pas besoin d'attendre que la réponse soit prête, vous pouvez demander à quelqu'un d'autre à ce moment.
Le contrôleur esclave peut également demander et obtenir une réponse.
En raison du fonctionnement synchrone, la longueur du bus CAN est inversement proportionnelle à la vitesse de transmission ou quelque chose du genre.
La vitesse maximale est de 1 MBaud (10 - en cours de route).
L'expéditeur sait que le message n'a pas été déformé pendant la transmission immédiatement après le dernier bit. Plus précisément, tout le monde dans le bus le sait.
Si le message est déformé pour un, la tentative n'est pas comptée par tous.
Si le message a été envoyé au bus, l'abonné ne le recevra pas à condition qu'il soit rompu.
Le nombre de contrôleurs sur le bus ne doit pas dépasser 127.
La durée des messages est limitée. Ils sont constitués d'un identifiant, d'un indicateur de longueur en octets et d'un bloc de données, avec exactement autant d'octets qu'indiqué. Il y a quelques bits de service supplémentaires, mais restons silencieux à leur sujet, car le service doit être discret. L'identifiant peut avoir une taille de 11 ou 29 bits. Un bloc de données peut contenir de 0 à 8 octets (64 - en cours de route).
Pour plus de détails, je vais donner quelques chiffres. Si vous voulez travailler à une vitesse de 1Mbaud, la longueur du bus ne doit pas dépasser 35 mètres (certains préfèrent 40, c'est-à-dire plus chaud). Si vous devez transmettre quelque chose sur une distance de 8 km, la vitesse ne doit pas dépasser 5 kbaud. Soit dit en passant, le lecteur a le droit de demander pourquoi kilobod, et non kilobit? Parce que tous les bauds ne deviennent pas des bits. Quelque chose comme ça.
Comment puis-je disposer de tous ces ingrédients top secrets? Ceux qui voient le jeu de dés dans tout se souviendront immédiatement qu'il existe une chose aussi merveilleuse que CANopen et bien d'autres combinaisons et abréviations magnifiques et qu'il n'y a rien pour réinventer la roue. Je veux donc souvent répondre: «Cet œuf au plat de deux œufs, que beaucoup cuisinent pour le petit-déjeuner, ne ressemble-t-il pas à un vélo? Pourquoi ne pas aller à la restauration et prendre une omelette? » Mais je ferais mieux de garder le silence et de continuer sans être distrait par les cris du public.
À cette époque, alors que les identifiants 29 bits n'avaient pas encore été inventés, il n'y avait que 11 bits. Certains ont commencé à l'utiliser pour y entasser le nom (numéro) du type de données souhaité. D'autres sont utilisées comme adresse du contrôleur auquel vous accédez. Les deux avaient du sens. Par exemple, vous pourriez demander ceci:
- Et donnez-nous, ma chère, un château de la treizième année dans un litre de papier d'emballage.
Ou alors:
Enveloppez-moi, s'il vous plaît, de ce qui est caché dans votre étagère du bas à droite.
Soit dit en passant, dans CAN, cette conception peut également fonctionner:
Mentez à tout le monde! Et tu as rapidement tout mis des étagères dans mon sac.
Mais cette conception n'est souvent pas utilisée, car après il faut attendre un peu.
Attendez que toutes les réponses soient alignées une par une et disponibles pour le contrôleur demandeur. Nous avons déjà quitté le film, si cela.
Dans mon cas, je serais satisfait de la variante de l'identifiant comme adresse. Sur les 11 bits, 7 étaient nécessaires, et 4 autres restaient pour rendre certains messages plus urgents que d'autres, ainsi que pour marquer certains des contrôleurs comme étant les principaux.
Certains inconvénients ont migré ici à partir de RS485, à savoir que les adresses devaient être définies manuellement sur chaque contrôleur. Ensuite, vérifiez et réinstallez. Et peut-être revenir à l'étape précédente et répéter.
Heureusement, à cette époque, deux circonstances existaient déjà.
Tout d'abord, un identifiant 29 bits est déjà apparu. Et le second est que de nombreux fabricants de microcontrôleurs ont commencé à considérer la condition que chaque puce a son propre numéro unique et plutôt long comme une bonne forme.
Désormais, dans un identifiant long, 24 bits peuvent être alloués en toute sécurité pour une adresse unique. Il en restait 5 autres, pour s'assurer que les trains différaient en urgence, en direction (là, en arrière), en présence d'un wagon-restaurant et de voitures avec un confort accru.
Si vous cessez de vous amuser et que vous devenez sérieux, appelez les agents des contrôleurs subordonnés et les autres patrons, alors vous pouvez créer une table. Elle sera montrée un peu plus tard.
Un peu plus sur l'adressage. Un numéro de puce unique, en règle générale, occupe un nombre de bits bien supérieur à 24, par exemple 96 avec STM32FXXX. Par conséquent, vous devez en quelque sorte obtenir 24 sur 96. J'ai choisi l'opération XOR. Vous pouvez choisir autre chose, mais un petit problème subsistera. Ce sont des correspondances d'adresses après réduction.
La probabilité de ce problème est extrêmement faible, mais elle l'est. Il est résoluble, mais ajoute du travail aux installateurs. Ici, il faut se rappeler que les messages CAN peuvent ne pas contenir du tout de données. Cela nous est utile pour décider. Il se compose des actions suivantes.
Le contrôleur de contrôle (patron) envoie une demande de diffusion à laquelle tous les agents doivent répondre (il s'agit d'une demande avec une adresse nulle). Les messages de réponse avec une longueur de données nulle et des adresses correspondantes ne se gâteront pas, mais atteindront le patron sous la forme d'un.
Il reste maintenant à calculer combien de réponses ont été reçues et combien elles devraient être. Si ces deux nombres coïncident, alors tout est en ordre. S'il y a moins de réponses que de contrôleurs, alors il y a une coïncidence d'adresses et il y a du travail pour les ajusteurs. Et s'il y a plus de réponses que de contrôleurs, alors vous devez penser à une thèse, car vous êtes sur le point de découvrir.
Si le changement dans la longueur du message est considéré comme une variation de sa signification, vous pouvez obtenir des fonctionnalités supplémentaires, dont je parlerai plus tard si ma mère n'appelle pas à manger.
Un autre point intéressant est que si vous utilisez des identifiants courts et longs en même temps, vous pouvez obtenir, par exemple, un adressage de groupe ou des requêtes partiellement diffusées. Mais nous n'irons pas encore loin.
Revenons au codage de l'identifiant.
À des fins d'adressage, 24 bits sont alloués dans l'identifiant étendu et six dans l'identifiant standard. Une adresse avec une valeur de 0x000000 est diffusée pour l'identifiant étendu. Pour un identifiant standard, une adresse nulle (ses 6 bits) est également considérée comme diffusée. Les cinq bits de tête (hauts) des identificateurs long et court sont appelés en-tête, affectent la signification du message et sont désignés par les lettres NVADR:

Bien sûr, pour le panneau de contrôle, il était nécessaire de ne mettre en œuvre qu'une partie de ce schéma. Dans le premier projet avec un bouclier (ou sur le bouclier, à quel point?) Des puces Cortex de NXP ont été utilisées, et dans les projets suivants (il y en avait), M0 de STMicroelectronics était déjà utilisé.
Quelques mots sur l'utilisation des identifiants courts. Ces six bits qui sont alloués pour l'adressage ne s'adressent pas au contrôleur, mais au groupe. Au début, ce groupe a zéro pour tout le monde. Ensuite, les agents sont configurés, après quoi certains ou tous deviennent des membres de leur groupe. Maintenant une demande au groupe, nous obtenons les réponses des agents que nous avons collectés dans ce groupe.
Maintenant, un peu sur ce qui est ajouté si vous interprétez les messages avec différentes longueurs de données différemment. Par exemple, une requête de longueur nulle aide beaucoup lors du débogage, comme mentionné ci-dessus. Une demande d'une longueur de 3 dessert l'espace variable de 1 638 octets. Une demande d'une longueur de 4 fait de même, mais est destinée à un agent de passerelle qui dessert un bus CAN de deuxième niveau. Ce bus peut être composé d'un ou deux agents, mais à quelques kilomètres de là.
Les requêtes de longueur 5 et 6 sont également destinées à un espace de variables à deux octets de taille 4194304. Deux bits ne sont pas utilisés pour l'adressage. Un bit contrôle l'écriture-lecture. Un autre signale une erreur.
Ensuite, 7 et 8 servent des mots de quatre octets. Il y en a également 4 194 304.
Ces espaces sont communs à tous les agents. Chacun d'eux, selon le but, n'utilise qu'un segment de l'espace des variables. Le contrôleur pour mesurer la température en deux points est montré sur la photo. C'est pour le débogage et les tests.

Les contrôleurs sont connectés avec un câble plat pour 6 cœurs. Dual sont utilisés pour la nourriture. La puce de vingt pieds est le STM32F042.
Au dos se trouve le MAX3051, un pilote CAN dans le package SOT23-8.
Eh bien, maman appelle pour manger.