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 =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.