#ifndef ARM_H #define ARM_H #include #include #include // ───────────────────────────────────────────── // Registres Modbus // ───────────────────────────────────────────── #define ARM_REG_GEAR 0x0802 // déplacement en µm par tour SPOOL #define ARM_REG_OFFSET 0x0803 // distance capteur home → origine (µm) #define ARM_REG_LEFT 0x0804 // position limite gauche (1/10 mm) #define ARM_REG_RIGHT 0x0805 // position limite droite (1/10 mm) // ───────────────────────────────────────────── // Valeurs par défaut LEFT/RIGHT // ───────────────────────────────────────────── #define ARM_LEFT_DEFAULT 500U // 50.0 mm en dixièmes #define ARM_RIGHT_DEFAULT 4500U // 450.0 mm en dixièmes // ───────────────────────────────────────────── // Mécanique // 1 tour ARM = 40mm = 1600 micropas // 1 micropas ARM = 25µm // ───────────────────────────────────────────── // 8 microsteps // #define ARM_UM_PER_USTEP 25U // µm par micropas // #define ARM_USTEP_PER_REV 1600U // micropas par tour // 4 microsteps #define ARM_UM_PER_USTEP 50U // µm par micropas #define ARM_USTEP_PER_REV 800U // micropas par tour #define ARM_UM_PER_REV ((uint32_t)ARM_UM_PER_USTEP * ARM_USTEP_PER_REV) // 40000µm // ───────────────────────────────────────────── // Limites gear // ───────────────────────────────────────────── #define ARM_GEAR_MIN 0 // µm (arrêt vgear) #define ARM_GEAR_MAX 65535 // µm = 65.535mm par tour SPOOL // ───────────────────────────────────────────── // API publique // ───────────────────────────────────────────── void ARM_Init(void); void ARM_UpdateTarget(void); // appelé depuis l'ISR SPOOL — met à jour arm_target_position void ARM_Enable(uint8_t state); // ENABLE moteur ARM void ARM_SetDir(uint8_t dir); // sens de rotation ARM void ARM_SetFree(uint8_t state); // free ARM + désactive vgear (REG_CTRL bit1) void ARM_GoToZero(void); // retour à LEFT, nouvelle bobine (REG_CTRL bit12) void ARM_SetGear(uint16_t um); // écriture registre 0x0802 void ARM_SetOffset(uint16_t um); // écriture registre 0x0803 + sauvegarde EEPROM uint16_t ARM_GetOffset(void); // lecture offset courant void ARM_SetLeft(uint16_t dmm); // écriture registre 0x0804 (1/10 mm) void ARM_SetRight(uint16_t dmm); // écriture registre 0x0805 (1/10 mm) void ARM_SetLeft(uint16_t pos); // écriture registre 0x0804 (1/10 mm) void ARM_SetRight(uint16_t pos); // écriture registre 0x0805 (1/10 mm) uint16_t ARM_GetLeft(void); // lecture position gauche courante uint16_t ARM_GetRight(void); // lecture position droite courante void ARM_SetLeft(uint16_t dmm); // écriture registre 0x0804 (1/10 mm) void ARM_SetRight(uint16_t dmm); // écriture registre 0x0805 (1/10 mm) uint16_t ARM_GetLeft(void); uint16_t ARM_GetRight(void); #endif // ARM_H