Question

J'ai une question concernant le contrôle du moteur pas à pas en utilisant la pile TCP / IP Microchip.

Dans le passé, j'ai utilisé une minuterie pour ma commande de moteur pas à pas. Je régler la période d'une horloge au temps nécessaire entre les impulsions, puis-je modifier les sorties de phase du moteur en fonction des besoins dans la graduation de minuterie ISR. Dans les cas où je l'ai fait mon stepper se déplaçait à une vitesse maximale d'environ 400 impulsions par seconde, ce qui signifie que l'interruption a été toutes les 2,5 millisecondes qui se produisent. Et j'utilisais USB pour la communication à l'hôte.

Je travaille maintenant sur un nouveau produit qui utilisera la pile TCP / IP pour communiquer avec un PC via Ethernet. Il sera également communiquer avec d'autres appareils via des modules SPI et UART. Ce nouveau dispositif doit être capable de fonctionner un moteur pas jusqu'à 2000 impulsions par seconde, ce qui signifie l'interruption peut être mise à feu toutes .5 millisecondes si j'utilise la même minuterie / approche ISR pour conduire le pas à pas. Le pas est activé et désactivé basé sur les commandes reçues de l'hôte, de sorte que la communication avec l'hôte et le fonctionnement du moteur doivent se produire harmonieusement et en même temps. Si la vitesse à pas varie légèrement ce ne serait pas un problème, mais ce n'est pas idéal. De plus, si le stepper était de faire une pause pour dire 30ms au milieu de celui-ci de mouvement qui ne serait pas acceptable.

J'envisage d'utiliser un PIC24F avec la vitesse d'horloge d'instruction de 16MHz (32MHz / 2 en utilisant le + FRC PLL interne) pour ce projet. Pensez-vous que les interruptions pour le stepper va perturber la communication Ethernet ou vice-versa? Existe-t-il une meilleure façon de le faire?

Je l'ai envisagé d'utiliser un PIC distinct pour le contrôle pas et je pouvais envoyer que les commandes de position cible pic ou des commandes halt pour démarrer et arrêter le mouvement, mais qui ajouterait un autre firmware dans les choses mix et compliquent tout autour.

Était-ce utile?

La solution

Il dépend du matériel, et la meilleure réponse est de donner un coup de feu et essayer.

Vos autres options sont soit d'utiliser un PIC séparé pour le contrôle pas à pas comme vous mentionnez, utilisez pseudo-filetage (filetage userland, mais qui est généralement pas disponible dans la plupart des compilateurs pour la plate-forme PIC).

Mais peut-être ce qui fonctionnera le mieux pour vous est d'avoir la boucle principale de votre commande logicielle du moteur pas à pas (pour .... déplacer, dormir, continuer), puis utiliser les interruptions pour traiter les requêtes TCP / IP à venir avec que vous modifierez les registres / état des variables.

L'utilisation des interruptions est une bonne idée, mais quand vous avez quelque chose de cette haute priorité, les sondages et en boucle sont meilleures options. Pour vous assurer que tout est lisse, vous devez être en mesure de garantir que vos interruptions TCP / IP ne dépassera pas les cycles xxx (ou millisecondes, même chose sur un PIC, vraiment), ou bien l'ajout de code de commande de pas à pas le protocole TCP / gestionnaire d'interruption IP.

Rien de tout cela serait nécessaire si votre contrôleur PIC a donné la priorité des interruptions. Dans ce cas, il suffit de mettre l'interruption à pas sur une priorité plus élevée que l'interruption de TCP et vous serez bon d'aller. Cependant, je ne crois pas que PIC a pour les fonctions utilisateur, mais je peux me tromper. Il peut aussi être une bonne idée de migrer vers une autre plate-forme que Finalité soutien des interruptions prioritaires, parce que nous assurerons le code bien plus propre et de rendre votre vie plus facile en général.

Autres conseils

J'ai eu le même problème qui allait gérer le temps de cpu Microcontroller entre contrôlez un moteur pas à pas et recevoir des données à partir du PC et des capteurs mais je résolus par diviser le programme de commande (impulsions) en morceaux d'1 koctet et de les envoyer à la mémoire microcontrôleur . alors j'ai pu libérer son temps cpu.

Est-ce que la nécessité hôte pour démarrer et arrêter le pas à pas sur une limite .5 ms? Je n'ai pas de chiffres pour étayer cette thèse, mais mon sentiment est que la latence variable de la liaison Ethernet peut dominer votre réactivité aux commandes, surtout s'il y a d'autres appareils sur le même réseau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top