59 lines
3.3 KiB
C
59 lines
3.3 KiB
C
#ifndef ARM_H
|
|
#define ARM_H
|
|
|
|
#include <xc.h>
|
|
#include <stdint.h>
|
|
#include <macros.h>
|
|
|
|
// ─────────────────────────────────────────────
|
|
// 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)
|
|
|
|
// ─────────────────────────────────────────────
|
|
// Mécanique
|
|
// 1 tour ARM = 40mm = 1600 micropas
|
|
// 1 micropas ARM = 25µm
|
|
// ─────────────────────────────────────────────
|
|
|
|
#define ARM_UM_PER_USTEP 25U // µm par micropas
|
|
#define ARM_USTEP_PER_REV 1600U // 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
|
|
|
|
// ─────────────────────────────────────────────
|
|
// Valeurs par défaut positions (1/10 mm)
|
|
// ─────────────────────────────────────────────
|
|
|
|
#define ARM_LEFT_DEFAULT 500 // 50.0mm
|
|
#define ARM_RIGHT_DEFAULT 4500 // 450.0mm
|
|
|
|
// ─────────────────────────────────────────────
|
|
// API publique
|
|
// ─────────────────────────────────────────────
|
|
|
|
void ARM_Init(void);
|
|
void ARM_Step(void); // appelé depuis l'ISR SPOOL à chaque step
|
|
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)
|
|
uint16_t ARM_GetLeft(void);
|
|
uint16_t ARM_GetRight(void);
|
|
|
|
#endif // ARM_H
|