Aperçu:
Je communique entre 3 cartes PCB personnalisées avec dspic33 sur eux en utilisant SPI. J'ai un maître et 2 esclaves, mais j'envoie aux deux esclaves les mêmes données (et je les laisse choisir à quoi prêter attention).
Configuration materielle:
Les deux esclaves ont des contrôleurs de moteur BLDC intégrés et le maître contrôle ces contrôleurs de moteur via SPI. Les fils sont acheminés à environ 3 pieds du maître à chaque esclave et les en-têtes sont des en-têtes SAMTECH de pas standard de 1 ". Chaque contrôleur de moteur a son propre régulateur de 3,3 volts qui exécute l'électronique dsPIC / LV. J'utilise un régulateur de contrôleur de moteur (permet de l'appeler A) pour alimenter également le SPI maître DSPIC. Pour l'autre contrôleur de moteur (permet de l'appeler B), je lance simplement les lignes SPI et la masse du maître. Le SPI clk fonctionne à 100 KHz
Arriver au point (enfin):
Sans aucun moteur en marche, tout fonctionne bien, toutes les données transitent comme prévu pour les deux esclaves. Cependant, lorsque je démarre les moteurs, Bslave n'obtient plus les données correctes. Il ramasse des horloges supplémentaires ou les fait tomber, je suppose que faire pour le bruit supplémentaire. En tout état de cause, ses sommes de contrôle commencent à échouer. Aslave fonctionne comme un champion quoi qu'il arrive.
1) Vous attendriez-vous à ce que tous ces appareils doivent fonctionner avec la même source de 3,3 volts? Si oui, pouvez-vous me convaincre en parlant de la boucle d'inductance plus longue et de la magie noire comme celle-ci.
2) Avez-vous une sorte de règle générale sur la vitesse à laquelle je peux m'attendre à pouvoir exécuter le SPI clk et à réussir avec une configuration matérielle telle que ci-dessus?
Réponses:
J'ai exécuté SPI (horloge 2 MHz) à environ 5 m d'une boîte à une autre et je n'ai pas hésité à concevoir l'horloge et les données pour qu'elles soient une sortie équilibrée. Le câble (personnalisé) entre les deux utilisait également une paire torsadée et un écran sur les données et l'horloge.
J'ai également envoyé une alimentation isolée à la boîte distante via des convertisseurs cc-cc. Je n'ai pas eu assez de temps pour me tromper, donc ma solution était peut-être exagérée mais bon, ça a marché. Mon raisonnement derrière cette décision est que je ne voulais pas que des pics de «consommation actuelle» descendent les écrans de la paire torsadée. Les écrans n'étaient pas connectés à la masse à l'extrémité d'envoi du PC. Traitez les signaux numériques comme de précieux signaux analogiques pour obtenir les meilleures performances - ayez toujours votre écran terminé à l'extrémité de réception et si vous devez (pour une raison quelconque) terminer à contrecœur (également) à l'extrémité d'envoi.
Il s'agissait de transmettre 128 canaux de signaux analogiques à faible vitesse à une boîte de dérivation à partir d'un PC. Je soupçonne que si j'en avais besoin, je pourrais le faire fonctionner à une horloge de 20 MHz.
la source
SPI n'est pas différent de toute autre interface électrique. Faites attention aux problèmes d'intégrité du signal habituels (blindage, zone de boucle, impédance, terminaison du signal, etc.) et vous pouvez l'exécuter à une distance raisonnable. Quelle est une distance raisonnable, cela dépend de ce que vous en faites et de la façon dont vous pouvez contrôler les différents facteurs.
Pouvez-vous l'exécuter sur 3 pieds? Certainement. Devrais-tu? Eh bien, il y a de meilleures choses à utiliser. Comme d'autres l'ont souligné, il existe un RS-4xx qui pourrait bien fonctionner. Vous pouvez également exécuter SPI, mais utilisez la signalisation différentielle sur le câble comme RS-4xx. Cela consommera plus de fils, mais ce sont les ruptures. Vous pouvez également faire un RS-485 normal, en utilisant un UART et similaire.
Personnellement, j'ai couru SPI sur des câbles de 1 pied, à l'intérieur d'un châssis, à des taux allant jusqu'à 32 MHz sans aucun problème. J'ai également exécuté I2C sur 4 pieds à 100 KHz dans un environnement EMI élevé et SPI est bien meilleur que I2C - donc cela peut être fait. Mais si vous ne faites pas attention aux détails, vous pouvez facilement rencontrer des problèmes. Mais honnêtement, vous devez faire attention aux détails indépendamment de ce que vous utilisez.
la source
Considérez soigneusement votre schéma de mise à la terre. Protégez les lignes de données, si cela vous aide, et mettez correctement le blindage à la terre. N'exécutez pas de données et d'horloge sur la même paire torsadée. Utilisez une isolation galvanique si nécessaire. À part cela, il n'y a pas de règles générales que je connaisse.
SPI a été conçu pour (1) la communication à courte portée, généralement dans un PCB et (2) dans l'environnement avec peu d'EMI. Peut-être, les seuls bus qui fonctionnent moins bien que SPI en présence d'EMI sont I 2 C et 1 fil. Il existe des bus, qui ont été conçus pour la communication à longue portée en présence d'EMI (RS-485, CAN, Ethernet).
Il est possible d'étendre et de durcir le SPI. Voici une note d'application , qui montre un bus SPI avec des lignes différentielles.
la source
Il existe plusieurs façons de minimiser les effets du bruit sur vos lignes de signal. Le moyen le plus simple consiste à acheminer un plan de cuivre ou une trace de cuivre adjacente à vos traces de signal. Cela minimise l'inductance des traces et de la zone de boucle.
À haute fréquence, les courants de retour aiment parcourir un chemin de moindre impédance adjacent aux lignes de signaux elles-mêmes. Je suppose que vous avez une mise à la terre commune entre vos circuits, mais cela peut causer des problèmes de signalisation à haute fréquence si votre mise à la terre commune est simplement une connexion de mise à la terre "d'alimentation" entre les circuits. Cela provoquera une très grande zone de boucle pour les courants de signal qui peut permettre une grande injection de bruit en raison du couplage magnétique parasite.
Si vous le pouvez, connectez une connexion de terre supplémentaire entre les terres adjacentes aux lignes de signal SPI en plus de garder un plan de masse en cuivre ou une trace acheminée à côté des lignes à l'intérieur des cartes. Cela peut faire toute la différence dans la sensibilité de votre circuit aux moteurs.
la source