chien de garde Arduino

Insérez la description de l'image ici

Présentation

  La minuterie de surveillance fait partie intégrante du micro-ordinateur monopuce et a une importance importante dans le débogage et l'exécution du programme de micro-ordinateur monopuce.
La minuterie du chien de garde (WDT, Watch Dog Timer) est en fait un compteur. En général, le chien de garde reçoit un grand nombre. Après le démarrage du programme, le chien de garde commence à décompter. Si le programme s'exécute normalement, le processeur doit émettre une instruction pour réinitialiser le chien de garde après un certain temps et redémarrer le compte à rebours. Si le chien de garde est réduit à 0, il est considéré que le programme ne fonctionne pas correctement, forçant l'ensemble du système à se réinitialiser.
Insérez la description de l'image ici

Fonctionnement du minuteur de surveillance

  Lorsqu'il est activé, le WDT augmentera jusqu'à ce qu'il déborde, ou «expire». Sauf en mode Veille ou Inactif, une temporisation WDT forcera l'appareil à se réinitialiser. Pour éviter la réinitialisation du délai d'expiration WDT, l'utilisateur doit effacer périodiquement le temporisateur du chien de garde avec l'instruction PWRSAV ou CLRWDT. Si le WDT arrive à expiration en mode veille ou inactif, l'appareil se réveille et continue l'exécution du code à partir de l'endroit où l'instruction PWRSAV a été exécutée. Dans les deux cas ci-dessus, le bit WDTO (RCON <4>) sera défini, indiquant que l'événement de réinitialisation ou de réveil de l'appareil est provoqué par un délai d'expiration WDT. Si le WDT sort le CPU du mode Veille ou Inactif, le bit d'état "Veille" (RCON <3>) ou le bit d'état "Inactif" (RCON <2>) sera également défini, indiquant que l'appareil était auparavant en mode économie d'énergie.
Insérez la description de l'image ici

Fonction

  En outre, WatchDog peut également réinitialiser le microcontrôleur sans éteindre l'ensemble du système lorsque votre programme est bloqué dans une boucle sans fin, protégeant ainsi votre circuit matériel. Le temporisateur du chien de garde fournit un système de protection indépendant pour le microcontrôleur. En cas de défaillance du système, après une période de temporisation facultative, le chien de garde répond avec un signal RESET. Par exemple, la période de temporisation facultative pour x25045 est de 1,4 seconde. , 600 millisecondes, 200 millisecondes. Lorsque votre programme plante, x25045 réinitialise le microcontrôleur.
  La plupart des CI de temporisation de chien de garde produisent une durée d'impulsion de sortie unique et limitée lorsque le chien de garde arrive à expiration. Cela convient pour déclencher une réinitialisation ou interrompre le microprocesseur, mais certaines applications nécessitent un verrou de sortie (indicateur de panne).
  Compte tenu des problèmes de sécurité, les systèmes électroniques automobiles nécessitent des circuits de surveillance pour surveiller la tolérance aux pannes ou la sécurité. La minuterie du chien de garde peut idéalement répondre à ces besoins. En détectant les impulsions périodiques générées dans les conditions normales de fonctionnement du microcontrôleur, l'état de défaillance du circuit ou du circuit intégré est détecté, et une fois qu'une défaillance se produit, elle peut être immédiatement commutée vers le système de sauvegarde / redondant.
Insérez la description de l'image ici

Conception de minuterie de chien de garde à verrouillage simple

  Dans le chien de garde (le chien de garde, également appelé minuterie de chien de garde, est un circuit de minuterie, a généralement une entrée, appelée alimentation du chien (donner un coup de pied au chien ou entretenir le chien), une sortie à l'extrémité RST du MCU, le MCU fonctionne normalement À ce moment, un signal est envoyé à l'extrémité d'alimentation du chien à toutes les autres extrémités pour effacer le WDT. , Le MCU est-il réinitialisé. Pour éviter que le MCU ne plante. Le rôle du chien de garde est d'empêcher le programme de se mettre en boucle ou de s'enfuir. En dehors de la surveillance en temps réel de l'état de fonctionnement du microcontrôleur, un programme spécial a été développé pour surveiller le fonctionnement du programme du microcontrôleur. La puce de pointe, communément appelée circuit intégré "chien de garde" (MAX 9
) (MAX 9), fournit une indication de défaut de verrouillage de la perte de courant d'impulsion d'entrée en réponse. Le circuit peut surveiller le ventilateur (calcul de la vitesse de sortie du ventilateur supérieur), un circuit d'oscillation ou une implémentation logicielle de microprocesseur.   La plupart des CI de temporisation de chien de garde produisent une durée d'impulsion de sortie unique et limitée lorsque le chien de garde arrive à expiration. Cela convient pour déclencher une réinitialisation ou interrompre le microprocesseur, mais certaines applications nécessitent un verrou de sortie (indicateur de panne). Un circuit simple (figure 1) fournit une indication de la réponse à une défaillance du verrou de perte de débit d'impulsion d'entrée. Basé sur le circuit intégré μP-superviseur / chien de garde (MAX 9), ce circuit est utilisé pour surveiller le ventilateur (calculé à la sortie de vitesse du ventilateur), un circuit oscillateur ou un logiciel de microprocesseur approprié à exécuter.
  Pendant la mise sous tension, la réinitialisation basse active reste faible jusqu'à ce que le VCC se stabilise et que le délai de réinitialisation expire. Le condensateur C passe par R jusqu'à ce que la tension de grille du FET atteigne le seuil (tension VTH), ce qui active le transistor à effet de champ pour permettre la capacité de verrouillage. Pour éviter un faux déclenchement, vous devez régler le
temps de retard RC pour dépasser de loin le délai de réinitialisation.
  L'entrée WDI (broche 6) doit être réglée au taux le plus bas par le condensateur de commutation CSWT. Si cela ne se produit pas, la réinitialisation basse active devient faible et l'indicateur LED est réinitialisé pendant la connexion et la traction basse, verrouillant ainsi la réinitialisation basse. Le circuit reste actif jusqu'à ce que vous effectuiez un cycle VCC ou que vous appuyiez sur l'interrupteur dans cette condition. Soit désactivez l'action FET et laissez la réinitialisation passer à l'état haut.
  Afin de surveiller le signal de mesure de la vitesse de vidange du ventilateur ouvert, connectez une résistance de rappel de 10 kΩ de l'indicateur de développement mondial 10 kΩ à VCC (broche 8). Étant donné que le ventilateur a besoin d'un certain temps pour tourner, le circuit de surveillance doit être désactivé pendant un court délai. Vous pouvez réinitialiser ce condensateur de retard (C2) à la terre. Veuillez noter que ce délai doit être inférieur au délai RC ci-dessus, ou le verrou de réinitialisation basse actif sera plus court trop tôt.
Pour un moniteur de ventilateur, définissez la période d'impulsion de vitesse maximale pour la valeur CSWT selon la formule 5,06 × 106 × CSWT, où CSWT est en quelques secondes. Si la vitesse est inférieure à ce seuil, le niveau bas réinitialise efficacement la sortie basse et le verrouillage.
Fonctionnement de la minuterie du chien de garde
  Pendant le fonctionnement normal, une temporisation WDT génère une réinitialisation de l'appareil. Lorsque l'appareil est en veille, une temporisation WDT réveille l'appareil pour continuer son fonctionnement normal (appelé réveil WDT). La suppression du bit de réglage WDTE peut désactiver définitivement le WDT.
  L'affectation postscaler est entièrement contrôlée par un logiciel, c'est-à-dire qu'elle peut être modifiée à tout moment pendant l'exécution du programme.
  Pour éviter des réinitialisations imprévisibles du périphérique, lors du passage de l'affectation de pré-échelle Timer0 à l'affectation de post-échelle WDT, la séquence d'instructions suivante doit être exécutée. Même si WDT est désactivé, cette séquence d'instructions doit être exécutée.
Insérez la description de l'image ici

Exemple de code de chien de garde


#include <avr/wdt.h>
void setup()
{
   pinMode(13,OUTPUT);
   wdt_enable(WDTO_2S); //开启看门狗,并设置溢出时间为两秒
}
 
void loop()
{
   digitalWrite(13,HIGH);
   delay(100);
   digitalWrite(13,LOW);
   delay(100);
   wdt_reset(); //喂狗操作,使看门狗定时器复位
}

Enfin
, le manuel d' AVRGCC est joint : http://www.arduino.cn/avrgcc/
Source d'apprentissage: communauté chinoise arduino https://www.arduino.cn/thread-2638-1-1.html

Insérez la description de l'image ici

Publié 153 articles originaux · Comme 248 · Visites 330 000+

Je suppose que tu aimes

Origine blog.csdn.net/qq_45172832/article/details/105430013
conseillé
Classement