ON4CRD ATU-V2 — COMMANDE R1 — CŒUR C++17 ORIGINAL

STATUT EXACT
Le cœur indépendant du matériel est compilé et testé sur ordinateur. Il ne
constitue pas un firmware d’ATU terminé ni une qualification de l’appareil RF.
Les interfaces logicielles des étages bistables et des axes motorisés ne sont
pas intégrées. La carte impulsionnelle du dossier matériel est un prototype
électronique : elle ne fournit ni la preuve de position des contacts, ni le HAL
qualifié autorisant une émission. L’adaptateur Pico 2 est un squelette SDK expérimental :
compilation SDK, programmation et essais sur carte NON effectués. Il refuse
les trois profils bistables primaires et les six profils motorisés. Aucun
fichier UF2 compatible avec les matériels primaires n’est prétendu disponible.

FICHIERS
atu_control.hpp/.cpp : calculs LC, mesure calibrée, recherche, mémoire et
séquenceur abstrait. atu_control_test.cpp : tests du vrai C++, pas un modèle JS.
commissioning.hpp : tables de calibration volontairement vides et blocage.
pico2_adapter.cpp/CMakeLists.txt : squelette pour SDK Raspberry Pi Pico.
test-atu-control.mjs : compilation et exécution des tests sur hôte.
manifest.json : capacités, limites, résultats et empreintes des sources testées.

FAMILLES ET PROFILS
20 / 50 / 150 W : banc primaire de relais BISTABLES, 11 inductances et 11
capacités calibrées ; aucun courant permanent de maintien n’est présumé.
500 / 1000 / 1500 / 2000 / 2500 / 3000 W : LC motorisé, interface non livrée.
Objectifs de porteuse de réglage du cœur : 0,2–2 W pour20W ; 0,2–3 W pour50W ;
0,5–5 W pour150W ; 0,5–10 W pour les profils motorisés non pris en charge.
Ces limites sont des paramètres logiciels à qualifier avec la sensibilité du
coupleur réel ; elles ne prouvent ni précision ni admissibilité RF des pièces.

BANCS CALIBRÉS ET MOTS D’ÉTAT
L : 11 éléments nominaux de20nH ×2^n, somme40,94µH.
C : 11 éléments nominaux de2pF ×2^n, somme4094pF.
Bits0..10=contacts KL de shunt,11..21=C,22=C entrée,23=C sortie,
24=isolement entrée réseau,25=bypass,26=isolement sortie réseau.
Network::l décrit les inductances INSÉRÉES ; fermer KL court-circuite sa self.
output_word inverse donc les11bitsL pour exprimer les contacts physiques.
En bypass, seul K_BYP est fermé et les deux isolateurs du réseau sont ouverts.
Les deux sélecteurs C sont exclusifs ; les voies réseau et bypass aussi.
Le mot de sortie indique l’ÉTAT DES CONTACTS VOULU, jamais les niveaux GPIO
des bobines. Un zéro ne prouve pas l’ouverture d’un relais bistable et une
coupure d’alimentation ne remet pas les contacts à zéro. Un pilote externe
bidirectionnel doit produire ses impulsions spécifiées, vérifier les états et
acquitter applied_state_word avec applied_state_known=true et actuator_idle.
Un retour du registre GPIO MCP23017 n’est PAS cet acquittement mécanique.

COMMUTATION ET INTERVERROUILLAGE
1. Retirer l’autorisation du PA et la demande de porteuse.
2. Obtenir le retour matériel d’inhibition. Mesurer absence de RF dans les
   DEUX sens : directe et réfléchie sous le seuil configuré, par défaut0,05W.
3. Garder cette condition pendant50ms par défaut, puis demander tous les
   contacts ouverts. Attendre leur acquittement réel et le temps de relâchement.
4. Demander la cible, attendre son acquittement et sa stabilisation.
5. Demander une porteuse externe matériellement limitée à faible puissance.
   Acquérir au moins3 scores stables, espacés de20ms par défaut.
6. Retirer la porteuse et attendre de nouveau RF froide + inhibition confirmée.
7. Autoriser un armement MANUEL seulement si les états sont toujours connus,
   les protections saines et le ROS mesuré inférieur ou égal à1,3.
Un défaut coupe autorisation PA et demande RF, annule les nouveaux mouvements
et impose un réarmement manuel à froid. L’absence d’acquittement, la perte de
retour d’état, une puissance excessive, un capot ouvert, une température anormale,
une mesure invalide ou un délai dépassé interdisent la suite. Le cœur n’ordonne
pas arbitrairement une remise à zéro des contacts en présence de RF.
Le pilote de puissance et un verrouillage indépendant doivent appliquer ces
conditions physiquement, y compris au démarrage, à l’arrêt et en cas de panne.

MESURES ET PRÉCISION
La calibration est une table monotone MESURÉE code ADC→watts par voie, avec
version commune. Aucune pente fictive ni précision absolue n’est introduite.
Le cœur refuse tables absentes, saturation ADC, extrapolation, puissance sous
le plancher utile et puissances incohérentes. Gamma=sqrt(Pr/Pd), puis
ROS=(1+Gamma)/(1-Gamma) uniquement lorsque la mesure est exploitable.
Deux puissances scalaires ne donnent ni signe de réactance ni phase. La mesure
complexe, sa calibration en fréquence/température, la directivité du coupleur,
les erreurs ADC et les protections crête restent des travaux matériels.

RECHERCHE ET RAPIDITÉ
La recherche scalaire essaye une grille grossière dans les deux orientations,
puis des voisins à pas décroissants autour du meilleur score réellement reçu.
Elle est bornée à180 propositions par défaut, jamais assimilée à une preuve
d’accord universel. Le rappel de16 mémoires RAM est indexé par fréquence,
antenne, puissance et version de calibration ; il est TOUJOURS remesuré avant
armement. Il n’existe pas de persistance flash ni de raccourci mémoire→PA.
Le solveur analytique séparé propose des états quantifiés à partir d’une
impédance complexe fournie explicitement ; le firmware ne l’invente pas depuis
Pd/Pr. Un filtre d’états externes doit exclure résonances, pertes, tensions et
courants hors limites. Le calcul idéal seul ne valide pas un composant RF.
Avec les délais conservateurs par défaut, le test d’un seul état exige déjà
plusieurs centaines de millisecondes, hors délais réels du poste. Une recherche
aveugle peut être longue. Les objectifs de rapidité restent à mesurer ; aucun
temps d’accord sur appareil ni amélioration mesurée n’est annoncé.

CONTRAT MOTORISÉ — NON IMPLÉMENTÉ
L’étude retient L0,05–40µH ; C fin15–1000pF et3 capacités grossières
1000/2000/4000pF. Une gamme optionnelle30pF en série abaisse le C effectif ;
la position physique, les capacités parasites et la calibration en fréquence
doivent être modélisées. MotorTarget décrit une cible, pas un déplacement.
motor_at_target exige référencement, encodeurs valides, axes immobiles, absence
de défaut de fin de course, retour récent, bonne version et bonne fréquence de
calibration et erreurs de position dans les tolérances fournies. Cette fonction
ne pilote pas les moteurs, ne référence pas les axes et n’autorise jamais le PA.

ADAPTATEUR PICO 2 — PROTOTYPE DÉSACTIVÉ
GP4=SDA I2C0 ; GP5=SCL I2C0 ; MCP23017 aux adresses0x20 et0x21, logique3,3V.
GP8=demande d’autorisation PA vers une interface isolée, inactive au repos.
GP9=retour matériel PA inhibé ; GP10=chaîne de protections saine, actif haut.
GP11=demande de porteuse de réglage vers interface isolée et limitée en puissance.
GP26/ADC0=voie directe ; GP27/ADC1=voie réfléchie, déjà conditionnées/calibrées.
Entrées analogiques0..3,0V proposées ; ne jamais connecter RF ou5V sur les GPIO.
Le matériel doit forcer les demandes inactives sans alimentation/avec fil coupé,
superviser indépendamment le PA et le watchdog et limiter la porteuse de test.
Le readback OLAT vérifie seulement le transport I2C, sans retour des contacts RF.
La séquence de mise à zéro du prototype non bistable n’est pas un pilote K41P.
Le SDK adapter annonce donc UnsupportedActuator pour TOUS les profils primaires.
USB série seulement : T=recherche, B=bypass vérifié, A=armement manuel,
R=réarmement, F <Hz>=fréquence de mémoire, S=état. Ces commandes restent bloquées
sur le matériel primaire sans ses pilotes et la calibration. Aucun pilote de
face avant graphique, radio CAT, codeur de façade, moteur ou flash n’est livré.

TESTS ET CONSTRUCTION
Depuis le dépôt : node scripts/test-atu-control.mjs
Depuis ce dossier extrait : node test-atu-control.mjs
Windows : le script peut utiliser LLVM déjà installé dans le NDK Android pour
compiler le vrai C++ en DLL autonome, puis l’exécuter par P/Invoke PowerShell.
Sinon fournir ATU_CXX=g++ (ou compilateur C++ hôte compatible). Un compilateur
absent produit un échec explicite ; les tests ne deviennent pas silencieusement
valides. Les artefacts de test sont écrits dans.phpunit.cache/atu-control.
Les tests couvrent notamment topologies/bypass, RF dans les deux sens, retours
d’état bistables et timeout, réarmement, saturation/calibration, scores/cache,
contrat encodeur et refus des adaptateurs non compatibles. Aucune RF appliquée.
Pour le squelette SDK : installer soi-même le SDK officiel, définir PICO_SDK_PATH,
puis cmake -S . -B build -DPICO_BOARD=pico2 -DATU_POWER_W=20 ; cmake --build build.
Cette procédure n’a pas été exécutée ici ; aucun binaire de programmation n’est
inclus. Ne pas lever les blocages pour remplacer des essais manquants.

SOURCES OFFICIELLES D’INTERFACE
Pico 2 : https://datasheets.raspberrypi.com/pico/pico-2-datasheet.pdf
SDK : https://www.raspberrypi.com/documentation/microcontrollers/c_sdk.html
MCP23017 : https://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf
N7DDC/UR3IQH servent au dossier RF de référence ; ce code de commande est original.
