Oui, la situation a été inversée, mais ne sentez-vous pas que quelque chose ne va pas ? Trop lent ? Ne vous inquiétez pas, nous continuerons. Selon le principe expliqué à la fin de ce chapitre, en mode huit temps, il faut 64 rythmes pour que le moteur pas à pas tourne une fois. Dans notre programme, chaque rythme dure 2 ms, donc un tour devrait faire 128 ms, soit 1 seconde. . Il y a plus de 7 révolutions, mais pourquoi semble-t-il qu'il faut plus de 7 secondes pour effectuer une révolution ?
Il est donc temps de comprendre le concept d’« accélération » dans le « moteur pas à pas accéléré à aimant permanent ». La figure 9-7 est un schéma de démontage de ce moteur pas à pas 28BYJ-48. Comme vous pouvez le voir sur la photo, le pignon blanc au milieu est l'entrée du rotor du moteur pas à pas. Les 64 rythmes font simplement que ce pignon tourne dans un sens. cercle, puis il entraîne le grand engrenage bleu clair. C'est le premier niveau d'accélération. Jetons un coup d'œil à la structure de l'engrenage rouge en haut à droite. À l'exception du rotor du moteur et de l'arbre d'entrée final, les trois engrenages de transmission peuvent avoir une telle structure, constituée d'une couche de plusieurs dents et d'une couche de petites dents. , et chaque engrenage utilise son propre. La petite couche de dents de l'engrenage suivant entraîne la couche multi-dents de l'engrenage suivant. De cette façon, tous les deux engrenages forment un niveau d'accélération, et il y a 4 niveaux d'accélération au total. quel est le taux d'accélération total ? Autrement dit, combien de tours faut-il au rotor pour tourner avant que l'arbre d'entrée ne tourne une fois ?
Figure 9-7 Représentation de l'engrenage externe du moteur pas à pas
Regardez le paramètre de rapport d'accélération dans le tableau des paramètres du moteur - 1:64, le rotor tourne 64 fois et l'arbre d'entrée tournera finalement une fois, c'est-à-dire , il faut 64*64=4096 arbres d'entrée de rythme pour tourner une fois, 2 ms*4096=8192 ms, et il faut plus de 8 secondes pour tourner une fois. Est-ce cohérent avec les résultats expérimentaux de tout à l'heure ? 4096 rythmes tournent sur un cercle, donc l'angle de rotation d'un rythme - l'angle de pas est de 360/4096. Jetez un œil au paramètre d'angle de pas 5,625/64 dans le tableau, et vous saurez que ces deux valeurs. sont égaux. Tout a cliqué.
La compréhension de base des principes aurait dû être complétée ici. Cependant, nous espérons que chacun pourra cultiver une façon de penser que « la pratique est le seul critère pour tester la vérité » ! Rappelez-vous, quelle est la plus grande caractéristique des moteurs pas à pas ? Saisissez avec précision le volume de migration ! Alors devrions-nous tester si c’est exact ? Quelle est sa précision ? Comment pratiquer ? Tournez-le à 90 degrés et mesurez-le pour voir si c'est interdit ? Ce n'est pas grave, mais s'il n'y a qu'un degré d'écart, voire moins de 1 degré, pouvez-vous le mesurer avec précision ? C'est difficile sans instruments sophistiqués. Laissons-le tourner encore quelques cercles complets pour voir si la position où il s'est finalement arrêté n'est toujours pas la position d'origine. En conséquence, nous modifions le programme pour faciliter le contrôle du moteur tournant sur un nombre quelconque de tours.
#include <reg52.h> void TurnMotor(unsigned long angle); void main(){ TurnMotor(360*25); //360 度*25,即 25 圈 while (1); } /* 软件延时函数,延时约 2ms */ void delay(){ unsigned int i = 200; while (i--); } /* 步进电机迁移转变函数,angle-需转过的角度 */ void TurnMotor(unsigned long angle){ unsigned char tmp; //暂时变量 unsigned char index = 0; //节奏输入索引 unsigned long beats = 0; //所需节奏总数 //步进电机节奏对应的 IO 掌握代码 unsigned char code BeatCode[8] = { 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6 }; //盘算需求的节奏总数,4096 拍对应一圈 beats = (angle*4096) / 360; //判别 beats 不为 0 时履行轮回,然后自减 1 while (beats--){ tmp = P1; //用 tmp 把 P1 口以后值暂存 tmp = tmp & 0xF0; //用&操作清零低 4 位 tmp = tmp | BeatCode[index]; //用|操作把节奏代码写到低 4 位 P1 = tmp; //把低 4 位的节奏代码和高 4 位的原值送回 P1 index++; //节奏输入索引递增 index = index & 0x07; //用&操作完成到 8 归零 delay(); //延时 2ms,即 2ms 履行一拍 } P1 = P1 | 0x0F; //封闭电机一切的相 }
Dans le programme ci-dessus, nous avons d'abord écrit une fonction qui contrôle la rotation du moteur selon un angle spécifié. Cette valeur d'angle est donnée par le paramètre de méthode de la fonction. Ensuite, dans la fonction principale, elle peut être facilement contrôlée en la modifiant. Les paramètres réels lors de l'appel. Le moteur tourne à n'importe quel angle. Nous avons utilisé 360*25, soit 25 cercles. Bien sûr, vous pouvez également le modifier par d'autres valeurs pour voir quelles sont les conséquences. Notre programme s'exécutera pendant 25*8=200 secondes. Notez d'abord la position initiale de l'arbre d'entrée, puis allumez-le et attendez patiemment qu'il se termine. Y a-t-il une erreur ? Que se passe-t-il ? Qu'est-ce qui ne va pas ? N'est-il pas possible de contrôler avec précision le volume de transfert ?
Ce résultat est en fait dû au rapport d'accélération. Regardons à nouveau. Le rapport d'accélération donné par le constructeur est de 1:64. Quel que soit le fabricant qui produit le moteur, tant que le modèle est 28BYJ-48, son accélération nominale. le rapport est principalement de 1:64. Mais qu’en est-il en pratique ? Grâce à nos calculs de démontage, nous avons constaté que le rapport d'accélération réel et précis n'est pas cette valeur de 1:64, mais 1:63,684 ! La méthode pour obtenir ces données est également très compliquée. Il suffit de compter le nombre de dents de chaque engrenage puis de multiplier les rapports d'accélération à chaque niveau pour obtenir le résultat. Le rapport d'accélération mesuré est (32/9)*(22/11). *(26/9)*(31/10)≈63,684, donc l'erreur réelle est de 0,0049, soit environ 0,5 %. Si vous tournez 100 fois, la différence sera d'un demi-tour. Nous venons donc de tourner 25 fois. S'agit-il seulement d'un huitième de virage, ce qui correspond à 45 degrés ? Voyons si l'erreur est de 45 degrés ? Ensuite, d'après le rapport d'accélération réel de 1:63,684, on peut conclure que le nombre de rythmes requis pour effectuer un tour est de 64*63,684≈4076. Remplacez ensuite 4096 dans la fonction d'entraînement moteur dans le programme ci-dessous par 4076 et réessayez. Vous ne voyez pas la moindre erreur ? Mais en fait, des erreurs existent toujours, car les résultats des calculs ci-dessous sont pour la plupart approximatifs. L'erreur réelle est d'environ 0,000056, soit 0,56 dix millièmes. La différence sera d'un demi-tour après 10 000 tours, elle peut donc être ignorée.
Alors pourquoi les paramètres du fabricant comportent-ils des erreurs ? Les constructeurs ne le savent pas ? Pour expliquer ce problème, nous devons revenir à l'utilisation pratique. L'objectif le plus courant d'un moteur pas à pas est de contrôler la rotation de la cible selon un certain angle, généralement dans les 360 degrés. L'objectif final de la conception de ce 28BYJ-48 est de. utilisation Pour contrôler les pales du ventilateur du climatiseur, la plage de mouvement des pales du ventilateur ne dépassera pas 180 degrés, donc dans ce cas d'utilisation, le fabricant donne un rapport d'accélération entier approximatif de 1:64, ce qui est suffisamment précis et raisonnable. . Cependant, tout comme notre programme, nous n'avons pas nécessairement besoin de l'utiliser pour entraîner les pales du ventilateur de climatisation. Nous pouvons le laisser tourner plusieurs fois pour faire autre chose. Pour le moment, des données plus précises sont nécessaires, ce que nous espérons. Les étudiants feront ce que tout le monde peut comprendre et maîtriser, c'est-à-dire que nous devons être capables de « concevoir » le système nous-mêmes et de résoudre les problèmes qui s'y trouvent, et ne pas être limités par les soi-disant « plans tout faits ». .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!