2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Ce contenu est basé surVidéo STM32 de la technologie JiangxieContenu, organisé.
taper | numéro de série | bus | Fonction |
---|---|---|---|
Minuterie avancée | TIM1, TIM8 | APB2 | Il possède toutes les fonctions d'un temporisateur général, et possède en outre les fonctions de compteur de répétition, de génération de zone morte, de sortie complémentaire, d'entrée de freinage, etc. |
Minuterie universelle | TIM2, TIM3, TIM4, TIM5 | APB1 | Il possède toutes les fonctions d'une minuterie de base et dispose de fonctions supplémentaires telles que la sélection de source d'horloge interne et externe, la capture d'entrée, la comparaison de sortie, l'interface d'encodeur, le mode de déclenchement maître-esclave, etc. |
minuterie de base | TIM6, TIM7 | APB1 | Possède les fonctions d'interruption programmée et de déclenchement du mode maître DAC |
La fonction principale :
Préscaleur PSC
L'entrée de l'horloge de comptage de référence est connectée avant le pré-échelonneur. Puisque le temporisateur de base ne peut sélectionner que l'horloge interne, la ligne d'entrée du prescaler peut être considérée comme connectée à l'horloge interne (CK_INT).
La source de l'horloge interne est le TIMxCLK de RCC. La valeur de fréquence ici est généralement la fréquence principale du système, soit 72 MHz.
Écrire 0 dans le préscaler signifie pas de division de fréquence ; écrire 1 signifie diviser la fréquence par 2, et la fréquence de sortie = fréquence d'entrée/2 = 36 MHz.
Écrire 2 signifie diviser par 3 et sortie = entrée/3. Par conséquent, la valeur du pré-échelonneur diffère du coefficient de division de fréquence réel de 1, et le coefficient de division de fréquence réel = la valeur du pré-échelonneur 1. Le préscaler est de 16 bits, donc la valeur maximale peut être écrite sous la forme 65535, qui est divisée par 65536.
Compteur CNT
Le compteur peut compter l'horloge de comptage pré-divisée. Chaque fois que l'horloge de comptage atteint un front montant, la valeur du compteur augmente de 1. Le compteur est également de 16 bits, donc la valeur à l'intérieur peut être ajoutée de 0 à 65535. Si d’autres sont ajoutés, le compteur reviendra à 0 et recommencera. Par conséquent, la valeur du compteur continuera à augmenter pendant le processus de comptage. Lorsque l'incrément atteint la valeur cible, une interruption sera générée et la tâche planifiée sera terminée. Par conséquent, un registre est nécessaire pour stocker la valeur cible, qui est le registre de rechargement automatique.
Registre de rechargement automatique
Le registre de rechargement automatique est également de 16 bits et stocke la cible de comptage à écrire. Pendant le processus en cours, la valeur de comptage continue d'augmenter et la valeur de rechargement automatique est une cible fixe. Lorsque la valeur de comptage est égale à la valeur de rechargement automatique, le temps de synchronisation est écoulé. Ensuite, il générera un signal d'interruption, effacera le compteur et le compteur démarrera automatiquement le prochain temps de comptage.
Flèches U et UI
Une flèche de remise vers le haut dessinée sur l'image signifie qu'un signal d'interruption sera généré ici. Une interruption comme celle-ci dont la valeur de comptage est égale à la valeur de rechargement automatique est généralement appelée « interruption de mise à jour ». Cette interruption de mise à jour conduira au NVIC. Une fois que nous aurons configuré le canal de minuterie du NVIC, le CPU répondra à l'interruption de mise à jour du temporisateur. La flèche vers le bas représente qu'un événement sera généré, et l'événement correspondant est ici appelé « événement de mise à jour ». Les événements de mise à jour ne déclenchent pas d'interruptions, mais peuvent déclencher le travail d'autres circuits internes.
La fonction principale :
Compteur d'accumulateur à rechargement automatique 16 bits haut, bas, haut/haut
Pré-échelle programmable 16 bits, utilisé pour diviser l'horloge d'entrée par n'importe quelle valeur comprise entre 1 et 65536
4 chaînes indépendantes :
Circuits de synchronisation qui contrôlent les minuteries et les interconnexions de minuterie à l'aide de signaux externes
Une interruption/DMA est générée lorsque les événements suivants se produisent :
Prend en charge les circuits d'encodeur incrémental (quadrature) et de capteur Hall pour le positionnement
Entrée de déclenchement comme horloge externe ou gestion du courant cycle par cycle
Compteur de NTC
Le compteur CNT prend en charge le mode de comptage, le mode de décompte et le mode d'alignement central. Le mode de décompte commence à partir de la valeur de rechargement et décrémente vers le bas après avoir diminué jusqu'à 0, il revient à la valeur de rechargement et demande une interruption. Le mode aligné au centre commence à partir de 0, incrémente d'abord vers le haut, compte la valeur de rechargement et demande une interruption, puis décrémente vers le bas jusqu'à 0, puis demande une interruption.
source d'horloge
La source d'horloge de la minuterie générale peut non seulement choisir l'horloge interne de 72 MHz, mais également choisir une horloge externe.
(1)La première horloge externe vient deHorloge externe sur la broche TIMx_ETR , c'est-à-dire que vous pouvez connecter une horloge à onde carrée externe à la broche ETR de TIM2, PA0, puis configurer le circuit de sélection de polarité interne, de détection de bord et de pré-échelle, ainsi que le circuit de filtre d'entrée que ces deux circuits peuvent subir. certaine mise en forme. Comme il s'agit d'une horloge à broche externe, il y aura inévitablement des problèmes, de sorte que ces circuits peuvent filtrer la forme d'onde d'entrée. Le signal filtré est divisé en deux canaux. Le canal ETRF supérieur entre dans le contrôleur de déclenchement, puis l'horloge peut être sélectionnée comme unité de base de temps. Cette route est aussi appelée "Mode horloge externe 2”。
(2) TRGI peut également fournir une horloge externe , principalement utilisée comme entrée de déclenchement. Cette entrée de déclenchement peut déclencher le mode esclave de la minuterie. Lorsque TRGI est utilisé comme horloge externe, ce chemin est appelé "Mode horloge externe 1". Quelles sont les horloges externes qui passent par ce chemin ? La première est le signal de la broche ETR. La seconde est le signal ITR. Cette partie du signal d'horloge provient d'autres timers. Le TRGO en mode maître peut conduire à d'autres timers. Lors de la connexion à d'autres timers, il est connecté aux broches ITR des autres timers. ITR0 à ITR3 proviennent des sorties TRGO des quatre autres timers. Vous pouvez également choisir TI1F_ED, qui est connecté ici à l'unité de capture d'entrée. Broche CH1, c'est-à-dire que l'horloge est obtenue à partir de la broche CH1. Le suffixe ED (Edge) signifie ici bord. Il peut également être obtenu via TI1FP1 et TI2FP2 est l'horloge connectée à la broche CH1, et TI2FP2 est connecté à. la broche CH2.
Résumé : L'entrée du mode d'horloge externe 1 peut être la broche ETR, d'autres minuteries, le bord de la broche CH1, la broche CH1 et la broche CH2.
Circuit de comparaison de sortie
La partie droite ci-dessous est le circuit de comparaison de sortie. Il y a quatre canaux au total, correspondant aux broches de CH1 à CH4, qui peuvent être utilisées pour produire des formes d'onde PWM et piloter des moteurs.
Circuit de capture d'entrée
Sur la gauche se trouve le circuit de capture d'entrée, qui comporte également quatre canaux, correspondant aux broches CH1 à CH4, qui peuvent être utilisés pour mesurer la fréquence de l'onde carrée d'entrée, etc.
capturer/comparer le registre
Le registre du milieu est le registre de capture/comparaison, qui est partagé par les circuits de capture d'entrée et de comparaison de sortie. Étant donné que la capture d'entrée et la comparaison de sortie ne peuvent pas être utilisées en même temps, les registres ici sont partagés et les broches sont également partagées.
La fonction principale :
Répéter le compteur
La différence avec un temporisateur général : la première est d'ajouter un compteur de répétitions là où l'interruption est appliquée. Avec ce compteur, il est possible de réaliser que les événements de mise à jour et les interruptions de mise à jour ne se produisent que tous les quelques cycles de comptage. La structure originale est qu'une mise à jour se produira après la fin de chaque cycle de comptage, ce qui équivaut à diviser à nouveau le signal de mise à jour de sortie.
Générateur de zone morte DTG et sortie complémentaire
Ce qui suit est la mise à niveau du module de comparaison de sortie par la minuterie avancée DTG (génération de temps mort) est un circuit de génération de zone morte. La broche de sortie à droite a été modifiée de celle d'origine à deux sorties complémentaires, qui peuvent produire une paire d'ondes PWM complémentaires. Ces circuits sont utilisés pour piloter des moteurs triphasés sans balais, tels que les avions quadricoptères, les roues arrière des appareils électriques. véhicules et perceuses électriques. Attendez, il peut s'agir d'un moteur triphasé sans balais. Étant donné que le circuit d'entraînement d'un moteur sans balai triphasé nécessite généralement 3 bras de pont, chaque bras de pont est contrôlé par 2 tubes de commutation haute puissance, donc un total de 6 tubes de commutation haute puissance sont nécessaires. Par conséquent, les trois premières broches de sortie PWM deviennent ici des sorties complémentaires. De plus, afin d'éviter le phénomène de traversée à court terme provoqué par les imperfections du dispositif au moment de la commutation lorsque la sortie complémentaire PWM pilote le bras de pont, un circuit de génération de zone morte est ajouté en face. Au moment où l'interrupteur est commuté, une zone morte d'une certaine durée est générée, permettant aux tubes supérieur et inférieur du bras de pont d'être éteints pour empêcher toute transmission.
entrée de frein
La dernière partie est la fonction d'entrée de frein, qui doit fournir une garantie de sécurité pour l'entraînement du moteur. Si la broche externe BKIN (Break IN) génère un signal de freinage, ou si l'horloge interne tombe en panne et qu'un défaut se produit, le circuit de commande coupe automatiquement la sortie du moteur pour éviter les accidents.
Contrôle des opérations : contrôlez certains bits du registre, tels que le démarrage et l'arrêt, le compte croissant ou décroissant, etc.
Le côté droit est l'endroit où le signal est envoyé une fois le temps de synchronisation écoulé et l'interruption de mise à jour est générée. S'il s'agit d'une minuterie avancée, il y aura un compteur de répétition supplémentaire. Le signal d'interruption définira d'abord un bit d'indicateur d'interruption dans le registre d'état. Ce bit d'indicateur sera contrôlé via la sortie d'interruption et appliquera une interruption au NVIC. Le contrôle de sortie d'interruption est un bit d'activation pour la sortie d'interruption. Si vous avez besoin d'une interruption, n'oubliez pas de l'autoriser.
Le registre de chargement automatique est passé de FF à 36, et la valeur cible de la valeur de comptage est passée de FF à 36, donc après avoir compté 36 ici, il sera directement mis à jour pour démarrer le prochain tour de comptage.
Au milieu du comptage, modifiez la valeur cible de comptage de F5 à 36. Il y a un registre fantôme en dessous. Ce registre fantôme est vraiment efficace, c'est toujours F5, donc maintenant la cible de comptage compte toujours jusqu'à F5, générant un événement de mise à jour en même temps, le 36 à modifier est transmis au fantôme. registre, et dans le décompte suivant Ce changement n'est valide que si le cycle est de 36, donc le but de l'introduction du registre fantôme est en fait pour la synchronisation, c'est-à-dire pour permettre aux changements de valeur et aux événements de mise à jour de se produire de manière synchrone pour éviter les erreurs causées par les changements pendant le fonctionnement.
source d'horloge
Dans le circuit de génération d'horloge, il y a quatre sources d'oscillations :
(1) HSI : oscillateur RC interne haute vitesse de 8 MHz ;
(2) HSE : l'oscillateur externe à cristal de quartz haute vitesse de 4 à 16 MHz, également connu sous le nom d'oscillateur à cristal, est généralement connecté à 8 MHz ;
(3) LSE : oscillateur à cristal externe à basse vitesse de 32,768 KHz, qui fournit généralement l'horloge pour le RTC ;
(4) LSI : Enfin, il existe l'oscillateur RC interne à basse vitesse de 40 KHz, qui peut fournir l'horloge au chien de garde.
Les deux oscillateurs à cristal haute vitesse ci-dessus sont utilisés pour fournir l'horloge système. Les horloges de AHB, APB2 et APB1 sont toutes dérivées de ces deux oscillateurs à cristal haute vitesse. C'est juste que l'oscillateur à quartz externe est plus stable que le. Oscillateur RC interne, il est donc généralement utilisé un oscillateur à cristal externe.
Horloge de configuration ST
Dans la fonction SystemInit, ST configure l'horloge : il démarre d'abord l'horloge interne HSI, sélectionne l'horloge interne de 8 MHz comme horloge système et s'exécute temporairement avec l'horloge interne de 8 MHz. Ensuite, démarrez l'horloge externe, configurez l'horloge externe pour entrer dans la boucle à verrouillage de phase PLL pour la multiplication de fréquence, 8 MHz est multiplié par 9 fois et vous obtenez 72 MHz. Une fois la sortie de la boucle à verrouillage de phase stable, sélectionnez la boucle à verrouillage de phase. sortie comme horloge système, de sorte que l'horloge système passe de 8 MHz à 72 MHz.
Système de sécurité d'horloge CSS
CSS (système de sécurité de l'horloge) : le système de sécurité de l'horloge est également responsable de la commutation des horloges. Il peut surveiller l'état de fonctionnement de l'horloge externe en cas de panne, il rebasculera automatiquement l'horloge externe sur l'horloge interne pour assurer le fonctionnement. de l'horloge système et éviter le blocage du programme. Mort causée par accident.
circuit de distribution d'horloge
*2
, puis sur le côté droit, il est ouvert séparément pour les minuteries 2 à 7, car le coefficient de pré-échelle ici est de 2, donc la fréquence ici doit être*2
, donc l'horloge menant aux minuteries 2 ~ 7 est de 72 MHz. Ainsi, qu'il s'agisse d'un timer avancé, d'un timer général ou d'un timer de base, leur horloge de référence interne est de 72 MHz.*2
. Le coefficient de division de fréquence étant de 1, les horloges des temporisateurs 1 et 8 sont à 72 MHz.// 恢复缺省配置
void TIM_DeInit(TIM_TypeDef* TIMx);
// 时基单元初始化
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
// 结构体变量赋一个默认值
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
// 使能计数器---运行控制
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
// 使能中断输出---中断输出控制
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
/*-----------------时基单元的时钟选择---------*/
// 选择内部时钟
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);
// 选择ITRx其他定时器的时钟
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
// 选择TIx捕获通道的时钟
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
uint16_t TIM_ICPolarity, uint16_t ICFilter);
// 选择ETR通过外部时钟模式1输入的时钟
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
uint16_t ExtTRGFilter);
// 选择ETR通过外部时钟模式2输入的时钟
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler,
uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
/*--------------------------------------------------------*/
// 不是用来选择时钟的,单独用来配置ETR引脚的预分频器、极性、滤波参数的
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
uint16_t ExtTRGFilter);
// 用来单独写预分频值的
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);
// 用来改变计数器的计数模式
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);
// 自动重装器预装功能配置
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
// 给计数器写入一个值
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);
// 给自动重装器写入一个值
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);
// 获取当前计数器的值
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);
// 获取当前的预分频器的值
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);
/*-------------获取标志位和清除标志位的------------*/
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);