🛠 Watchdog et conception faille-sûre en environnement industriel
Objectifs
Rendre un programme Opta robuste en production : un watchdog matériel (IWDG du STM32H747) redémarre la carte si la boucle de contrôle se fige, et la conception faille-sûre garantit qu'au redémarrage les relais reprennent un état sûr (contacts ouverts). Vous couvrirez aussi les contraintes d'environnement : −20…+50 °C, IP20, pollution degré 2, MTBF 766 205 h.
Matériel
- Arduino Opta alimentée en 24 VDC (prévoir relais externe pour toute charge de sécurité)
- IDE Arduino, core mbed_opta (accès aux registres via l'exemple ci-dessous)
- Chronomètre ou analyseur logique pour mesurer le délai de reset
- Charge test sur OUTPUT1
Code complet
// opta_watchdog.ino — IWDG STM32H7 : reset si la boucle gelle
// Registres IWDG (RM0399) ; API Arduino standardisee non exposee sur ce core.
#define IWDG_KR (*(volatile uint32_t*)0x58004800)
#define IWDG_PR (*(volatile uint32_t*)0x58004804)
#define IWDG_RLR (*(volatile uint32_t*)0x58004808)
#define IWDG_SR (*(volatile uint32_t*)0x5800480C)
#define IWDG_KEY_RELOAD 0xAAAAu
#define IWDG_KEY_ENABLE 0xCCCCu
#define IWDG_KEY_ACCESS 0x5555u
void watchdog_init(uint32_t delai_ms) {
IWDG_PR = 4; // diviseur /64 => 32 kHz/64 = 500 Hz
IWDG_RLR = delai_ms / 2; // rechargement en ms (500 Hz -> 2 ms/unité)
while (IWDG_SR);
IWDG_KR = IWDG_KEY_ENABLE; // démarre le watchdog : ne s'arrete plus
}
void watchdog_refresh { IWDG_KR = IWDG_KEY_RELOAD; }
void setup {
Serial.begin(9600);
pinMode(RELAY1, OUTPUT);
digitalWrite(RELAY1, LOW); // état sur : contact ouvert au démarrage
watchdog_init(2000); // reset si inactif > 2 s
}
void loop {
digitalWrite(RELAY1, HIGH);
delay(500);
digitalWrite(RELAY1, LOW);
watchdog_refresh; // « je suis vivant »
// Test : remplacez refresh par delay(5000) -> la carte redemarre.
}
Vérification attendue
En fonctionnement normal, le cycle tourne indéfiniment. En commentant watchdog_refresh (ou en bouclant à l'infini), la carte se réinitialise sous ~2 s et les relais retombent ouverts. >
Erreurs fréquentes
- Croire qu'un watchdog remplace un arrêt d'urgence : l'Opta n'est pas un PAL ; les fonctions de sécurité (ISO 13849) exigent des relais de sécurité certifiés en amont des sorties.
- Oublier le refresh dans toutes les branches : toute attente bloquante (attente réseau, Modbus) plus longue que le délai déclenche un reset légitime — cadencez le refresh ou allongez le délai.
- État sûr non défini au boot : sans digitalWrite(LOW) explicite dès setup, l'état des sorties pendant le téléchargement du sketch est laissé au hasard du firmware.
- Environnement hors plage : au-delà de 50 °C dans une armoire chargée, l'électronique dérive ; derating et ventilation obligatoires.
Autres tutoriels pour cette carte
- Premier sketch : faire clignoter une LED sur Arduino Opta
- Lire une entrée numérique 24 V (capteur de proximité)
- Commander une charge 230 V avec un relais de sortie
- Server Modbus TCP : exposer les relais sur Ethernet
- Lire un capteur analogique 0–10 V sur les entrées Opta
- Remonter des données machine en MQTT via Ethernet
Exemples de code pour cette carte
relais_securise.inoArduinoentrees_numeriques.inoArduinoanalogique_0_10v.inoArduinomodbus_tcp_esclave.inoArduinomodbus_rtu_maitre.inoArduinomqtt_telemetrie.inoArduino