Etend la trame telemetrie avec FAULT=0-5 (court-circuit, surintensite I1/I2, temperature critique T1/T2) : le TMS320 signale le defaut apres coup (la protection materielle elle-meme est independante de l'UART), l'ESP32 l'affiche (DEFAUT clignotant, icone danger masquee) sans deviner de seuils. Documente le protocole complet dans doc/ESP32-UART.md pour le firmware TMS320. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
56 lines
2.0 KiB
C
56 lines
2.0 KiB
C
#pragma once
|
|
|
|
#include <Arduino.h>
|
|
|
|
// Protocole ASCII de type NMEA entre l'ESP32-C3 et le TMS320.
|
|
//
|
|
// Telemetrie TMS320 -> ESP32, periodique :
|
|
// $T,FREQ1=100000,FREQ2=100000,DUTY1=45.2,DUTY2=50.0,VIN=400.5,IIN=1.20,
|
|
// V1=200.3,I1=2.50,T1=45.2,VOUT=200.1,I2=2.48,T2=44.8,IOUT=1.05,
|
|
// FAULT=0*XX\n
|
|
//
|
|
// Commande ESP32 -> TMS320, a chaque changement (et rafraichissement
|
|
// periodique) :
|
|
// $C,HT=1,PWM1=1,PWM2=0*XX\n
|
|
//
|
|
// XX = XOR de tous les octets entre '$' et '*', en hexadecimal majuscule.
|
|
//
|
|
// FAULT (entier, 0-5) : code de defaut courant, transmis par le TMS320
|
|
// des qu'il coupe lui-meme les sorties PWM par securite. Rester a
|
|
// FAULT=0 tant qu'aucun defaut n'est actif -- le TMS320 doit remettre
|
|
// 0 automatiquement une fois la cause du defaut disparue (pas de "latch"
|
|
// cote protocole ; si un verrouillage manuel est necessaire, il doit
|
|
// etre gere cote TMS320, pas suppose par l'ESP32).
|
|
enum TmsFault : uint8_t {
|
|
FAULT_NONE = 0,
|
|
FAULT_SHORT_CIRCUIT = 1,
|
|
FAULT_OVERCURRENT_I1 = 2,
|
|
FAULT_OVERCURRENT_I2 = 3,
|
|
FAULT_OVERTEMP_T1 = 4, // T1 > 80 C
|
|
FAULT_OVERTEMP_T2 = 5, // T2 > 80 C
|
|
};
|
|
|
|
struct Telemetry {
|
|
float freq1 = 0; // Hz, frequence etage 1
|
|
float freq2 = 0; // Hz, frequence etage 2
|
|
float duty1 = 0; // %, duty cycle etage 1
|
|
float duty2 = 0; // %, duty cycle etage 2
|
|
float vin = 0; // V, tension entree
|
|
float iin = 0; // A, courant entree
|
|
float v1 = 0; // V, tension etage 1
|
|
float i1 = 0; // A, courant shunt mosfet 1
|
|
float t1 = 0; // C, temperature NTC etage 1
|
|
float vout = 0; // V, tension etage 2 (sortie boost)
|
|
float i2 = 0; // A, courant shunt mosfet 2
|
|
float t2 = 0; // C, temperature NTC etage 2
|
|
float iout = 0; // A, courant sortie
|
|
uint8_t fault = FAULT_NONE; // voir enum TmsFault
|
|
uint32_t lastUpdateMs = 0;
|
|
};
|
|
|
|
struct CommandState {
|
|
bool ht = false; // sortie HT activee/desactivee
|
|
bool pwm1 = false; // PWM etage 1 activee/desactivee
|
|
bool pwm2 = false; // PWM etage 2 activee/desactivee
|
|
};
|