🛠 Watchdog et conception faille-sûre en environnement industriel
Objetivos
Hacer que un programa Opta sea robusto en producción: un watchdog de hardware (IWDG del STM32H747) reinicia la placa si el bucle de control se bloquea, y el diseño a prueba de fallos garantiza que, al reiniciar, los relés recuperen un estado seguro (contactos abiertos). También cubrirá las restricciones del entorno: −20…+50 °C, IP20, grado de contaminación 2, MTBF 766 205 h.
Material
- Arduino Opta alimentada a 24 VDC (prever relé externo para cualquier carga de seguridad)
- IDE Arduino, core mbed_opta (acceso a los registros mediante el ejemplo a continuación)
- Cronómetro o analizador lógico para medir el tiempo de reinicio
- Carga de prueba en OUTPUT1
Código completo
// 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/unite)
while (IWDG_SR);
IWDG_KR = IWDG_KEY_ENABLE; // demarre 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); // etat sur : contact ouvert au demarrage
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.
}
Verificación esperada
En funcionamiento normal, el ciclo se ejecuta indefinidamente. Al comentar watchdog_refresh (o al crear un bucle infinito), la placa se reinicia en ~2 s y los relés vuelven a la posición abierta. >
Errores frecuentes
- Creer que un watchdog reemplaza una parada de emergencia: el Opta no es un PLD; las funciones de seguridad (ISO 13849) requieren relés de seguridad certificados antes de las salidas.
- Olvidar el refresh en todas las ramas: cualquier espera bloqueante (espera de red, Modbus) más larga que el tiempo de espera provoca un reinicio legítimo — cadencie el refresh o aumente el tiempo de espera.
- Estado seguro no definido al arrancar: sin un digitalWrite(LOW) explícito desde setup, el estado de las salidas durante la descarga del sketch queda al azar del firmware.
- Entorno fuera de rango: por encima de 50 °C en un armario cargado, la electrónica se desvía; el derating y la ventilación son obligatorios.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
relais_securise.inoArduinoentrees_numeriques.inoArduinoanalogique_0_10v.inoArduinomodbus_tcp_esclave.inoArduinomodbus_rtu_maitre.inoArduinomqtt_telemetrie.inoArduino