OSCProtocol ADDR ADE

From IntRoLab

LOGICIELS À INSTALLER

Fichiers PureData

DÉMONSTRATEUR ADE

Figure 1  : Démonstrateur de l'actionneur ADE

La Figure 1 montre les composants du démonstrateur ADE. Les parties importantes sont présentées dans les quatre prochaines sections :

1) Actionneur ADE

2) Carte d'interface Ethernet vers CAN

  • Responsable de faire la transformation OSC vers CAN nécessaire à communiquer avec la carte moteur (3).
  • La communication se fait directement par Ethernet en utilisant le protocole OSC par socket UDP.

3) Carte moteur

  • La carte est responsable de faire l'asservissement en impédance du système.
  • Le moteur sans brosse (brushless) est connecté sur cette carte.
  • Les capteurs de position et de couple sont branchés sur cette carte.

4) Bouton d'urgence

  • Le bouton coupe l'alimentation au moteur. Si le bouton est enclenché, aucun mouvement n'est possible.
  • Même si le bouton d'urgence est enclenché, le reste du système fonctionne (réseau, état).
  • Le bouton est connecté à la carte moteur (3) par un câble.

Alimentation (non montrée sur la Figure 1)

  • La carte moteur (2) est alimentée par une source DC 24V / 6.5A.
  • La carte d'interface Ethernet vers CAN est alimentée par USB (5V, 500mA).

PureData

Il est possible de communiquer facilement avec la carte moteur en utilisant PureData ou MAX/MSP. Il s'agit d'utiliser les objets "OSC" pour communiquer via le réseau Ethernet. La Figure 2 montre un exemple d'intégration avec OSC pour la démonstration de l'actionneur ADE :

  • La communication se fait sur le port 9001 par UDP
  • Les paramètres d'élasticité (admittanceK), d'amortissement (admittanceB) et de consigne (SetPoint) sont facilement modifiables par des "sliders".
  • Les valeurs "Position, Torque, Speed" sont obtenues périodiquement.
  • La valeur du SetPoint actuel est disponible sur requête en lecture. Voir exemple d'utilisation plus bas.
Figure 2 : Contrôle du démonstrateur ADE en utilisant PureData

Protocole OSC

Toutes les variables sont accessibles en utilisant le descripteur (OSC Address Pattern) suivant :

/UniDrivev2/21/<Nom de la variable>

  • 21 = ID de la carte moteur sur le bus CAN.
  • <Nom de variable>. Voir le TABLEAU 1 pour les variables disponibles (avec le format).
  • Si aucune donnée n'est envoyée avec le descripteur, la requête sera interprétée comme une requête en lecture d'une variable et le système retournera un message avec la valeur demandée.

Variables OSC

Les variables qui doivent être utilisées sont mises en gras. Les autres variables sont importantes, mais de devraient pas être modifiées. Elle sont chargées automatiquement aux bonnes valeurs au démarrage de la carte moteur. Il est tout de même possible d'obtenir et de changer leurs valeurs. Contactez Dominic Létourneau pour du support.

TABLEAU 1 - Les variables de la carte moteur (UniDrivev2, module = 21)
Variable Name OSC Format (Types) Variable Description
CtrlMode i (unsigned int8) Drive Control Mode : 0=CONFIG, 1=NORMAL, 2=ERROR, 3=RESET
CtrlType i (unsigned int8) Drive Control Type: 0=OPEN LOOP, 1=POSITION, 2=POSITION + SPEED PROFILE, 3=SPEED, 4=TORQUE, 5=ADMIT, 6=IMPED
PosMesSource i (unsigned int8) Position Sensor Source : 0=CURRENT(I_LOAD/AD0), 1=TORQUE(AD1), 2=Ext AnalogInput1, 3=Ext. AnalogInput2, 4=Quad Encoder(QEI), 5=INPUT_CAPTURE, 6=EXT_SSI, 7=POSITION_DERIVATIVE
SpeedMesSource i (unsigned int8) Velocity Sensor Source : 0=CURRENT(I_LOAD/AD0), 1=TORQUE(AD1),2=Ext AnalogInput1, 3=Ext. AnalogInput2, 4=Quad Encoder(QEI), 5=INPUT_CAPTURE, 6=EXT_SSI, 7=POSITION_DERIVATIVE
TorqueMesSource i (unsigned int8) Torque Sensor Source : 0=CURRENT(I_LOAD/AD0), 1=TORQUE(AD1), 2=Ext AnalogInput1, 3=Ext. AnalogInput2, 4=Quad Encoder(QEI), 5=INPUT_CAPTURE, 6=EXT_SSI, 7=POSITION_DERIVATIVE
SetPointSource i (unsigned int8) 0=CAN
SensorBias i (unsigned int8) 0=NO BIAS, 1=INVERT QEI COUNTER SIGN
MotorBias i (unsigned int8) 0=NO BIAS, 1=INVERT MOTOR ROTATION
State i (unsigned int16) Drive State :
SetPoint i (signed int32) Drive SetPoint (Depends on Control Type)
SetPointMax i (signed int32) Maximum SetPoint Allowed
SetPointMin i (signed int32) Minimum SetPoint Allowd
Current i (signed int32) Drive Current (mA)
CurrentOffset i (signed int32) Current Bias (mA)
TorqueSensor i (signed int32) Direct Torque Sensor Value
TorqueSensorOffset i (signed int32) Torque Sensor Bias
AD0Value i (signed int32) External Analog Input 1 (16 bits)
AD0Offset i (signed int32) External Analog Input 1 bias (16 bits)
AD1Value i (signed int32) External Analog Input 2 (16 bits)
AD1Offset i (signed int32) External Analog Input 2 bias (16 bits)
ICValue i (signed int32) Input Capture Value
ICOffset i (signed int32) Input Capture Bias
QEI i (signed int32) Quadrature Encoder Counter (16 bits)
Speed i (signed int32) Current Speed / Velocity
SpeedMax i (signed int32) Maximum Speed Allowed
Position i (signed int32) Current Position
Acceleration i (signed int32) Current Acceleration
AccelerationMax i (signed int32) Maximum Acceleration Allowed
Torque i (signed int32) Current Torque
RefPoint i (signed int32) PID Reference Point
MesPoint i (signed int32) PID Measured Point
pid_kp f (floating point) PID Kp
pid_ki f (floating point) PID Ki
pid_kd f (floating point) PID Kd
pid_error f (floating point) PID Error
pid_error_accum f (floating point) PID Error Accumulator
pid_error_derivative f (floating point) PID Error Derivative
pid_error_accum_max f (floating point) PID Error Accumulator Saturation
PIDOut i (signed int32) PID Output
InitPoint i (signed int32) Trapezoid Profile Initial Point
DestPoint i (signed int32) Trapezoid Profile Destination Point
NextPoint i (signed int32) Trapezoid Profile Next Point
CurrentLimit i (signed int32) Current Limit
PWM_CurrentLimit i (signed int32) Actual PWM calculated by current limiter
PWM_CurrentStep i (signed int32) Current Limiter PWM increment
Temperature i (signed int32) Temperature (Celcius)
admittanceM f (floating point) Inertia Coef
admittanceB f (floating point) Damping Coef
admittanceK f (floating point) Elasticity Coef
admittanceCoeff_0 f (floating point) A
admittanceCoeff_1 f (floating point) B
admittanceCoeff_2 f (floating point) C
admittanceCoeff_3 f (floating point) E
admittanceCoeff_4 f (floating point) F
admittanceState_0 f (floating point) torque[0]
admittanceState_1 f (floating point) torque[-1]
admittanceState_2 f (floating point) torque[-2]
admittanceState_3 f (floating point) output[-1]
admittanceState_4 f (floating point) output[-2]
TorqueOffset f (floating point) Torque Bias
PositionOffset i (signed int32) Position Bias
DeadZone f (floating point) Dead Zone for Impedance Control
computeCoeffFlag i (unsigned int16) 0=Normal, 1=Recalculate Imped Coefs
sector i (unsigned int16) Test Variable
PositionToRad f (floating point) Position (steps) to radians conversion
TorqueToNm f (floating point) Torque (ADC Units) to Nm conversion
SSINumBits i (unsigned int8) Ext SSI sensor, number of bits
ESTOPEnabled i (unsigned int8) 0=Normal 1=EESTOP Enabled
WriteEEPROM i (unsigned int8) 0=Normal 1=Write configuration to EEPROM
CtrlTimeBase i (unsigned int16) Time base x 1.28E-5 (second)
loopTime i (signed int16) Loop time x 1.28E-5 (second)
InitValue i (signed int32) Init value when in position mode and InitType != 0
InitType i (unsigned int8) Init Type 0=NONE, 1=QEI
Initialized i (unsigned int8) Initialized 0=FALSE 1=TRUE
FeedbackScalerPosition i (unsigned int8) Feedback Position at every n cycles, 0 = no feedback
FeedbackScalerSpeed i (unsigned int8) Feedback Speed at every n cycles, 0 = no feedback
FeedbackScalerTorque i (unsigned int8) Feedback Torque at every n cycles, 0 = no feedback
TorqueLimit i (signed int16) TorqueLimit
startupProfile i (unsigned int8) Should be always 0
startupMode i (unsigned int8) 0=Start in Config Mode, 1=Start in Normal Mode

Opération avec PureData

  1. S'assurer que l'alimentation est bien branchée! Il devrait y avoir des leds allumées sur la carte de moteur.
  2. S'assurer que le réseau est connecté. La carte d'interface CAN/Ethernet obtiendra une adresse par DHCP.
  3. Changer l'adresse dans l'objet connect selon vos configurations réseau, conserver le port 9001.
    1. Cliquer sur connect pour vous connecter
  4. S'assurer que le bouton d'urgence n'est pas enclenché.
  5. Cliquer sur bouton "bang" du centre sert à faire un "reset" du système aux valeurs sécuritaires (arrêt).
  6. Cliquer sur le bouton "Activate" pour activer le système.
  7. Ajuster SetPoint, Elasticity et Damping.
    1. (Facultatif) Ajuster SetPointMin et SetPointMax pour contrôler le nombre de pulses maximum et minimum que l'actionneur peut parcourir.
  8. Les valeurs SetPoint, Position, Speed, Torque et CtrlMode sont obtenues automatiquement par des requêtes périodiques.
    1. (Facultatif) Ajuster la période de rafraichissement des variables d'état en changeant la période dans le métronome.
Note : Si l'actionneur devient instable, cliquez sur "reset" ou appuyez sur le bouton d'urgence

DÉMONSTRATEUR ADDR

Figure 3 : Démonstrateur ADDR

La Figure 3 montre les composants du démonstrateur ADDR. Les parties importantes sont présentées dans les quatre prochaines sections :

1) Carte moteur et carte de contrôle

  • La carte moteur est responsable du contrôle du moteur (source de couple et de vitesse). Le moteur sans brosse (brushless) est connecté sur cette carte.
  • La carte de contrôle est responsable de faire l'asservissement en impédance du système et le contrôle en couple des freins.
  • Les deux cartes sont connectées par le bus CAN.
  • La carte responsable des freins est intégrée dans l'actionneur. Le capteur de position est branché sur cette carte.

2) Actionneur ADDR

3) Carte d'interface Ethernet vers CAN

  • Responsable de faire la transformation OSC vers CAN nécessaire à communiquer avec la carte moteur intégrée dans le montage.
  • La communication se fait directement par Ethernet en utilisant le protocole OSC par socket UDP.

4) Bouton d'urgence

  • Le bouton coupe l'alimentation au moteur. Si le bouton est enclenché, aucun mouvement n'est possible.
  • Même si le bouton d'urgence est enclenché, le reste du système fonctionne (réseau, état).
  • Le bouton est connecté à la carte moteur (1) par un câble.

Alimentation (non montrée sur la Figure 1)

  • La carte moteur (1) est alimentée par une source DC 24V / 6.5A [5A minimum].
  • La carte d'interface Ethernet vers CAN est alimentée par USB (5V, 500mA).

PureData

Il est possible de communiquer facilement avec la carte moteur en utilisant PureData ou MAX/MSP. Il s'agit d'utiliser les objets "OSC" pour communiquer via le réseau Ethernet. La Figure 4 montre un exemple d'intégration avec OSC pour la démonstration de l'actionneur ADDR :

Figure 4: Contrôle de l'actionneur ADDR avec PureData / OSC


Protocole OSC

Toutes les variables sont accessibles en utilisant le descripteur (OSC Address Pattern) suivant :

  • /ADDR1/31/<Nom de la variable>
  • /ADDR1_moteur/32/<Nom de la variable>

Description :

  • 31 = ID de la carte de contrôle sur le bus CAN
  • 32 = ID de la carte moteur sur le bus CAN.
  • <Nom de variable>. Voir les TABLEAU 2 et TABLEAU 3 pour les variables disponibles (avec le format).
  • Si aucune donnée n'est envoyée avec le descripteur, la requête sera interprétée comme une requête en lecture d'une variable et le système retournera un message avec la valeur demandée.

Variables de la carte de contrôle (module 31 sur le bus CAN)

Les variables qui doivent être utilisées sont mises en gras. Les autres variables sont importantes, mais de devraient pas être modifiées. Elle sont chargées automatiquement aux bonnes valeurs au démarrage de la carte de contrôle. Contactez Benoît Heintz pour du support.

TABLEAU 2 : ADDR1 (module 31)
Variable Name OSC Type Variable Description
Defauts i (unsigned int16) Defauts
Init i (unsigned int16) Init
ADDR_TypeControle i (signed int16) Type de controle
ADDR_Position i (signed int16) Position de l'ADDR
ADDR_Vitesse i (signed int16) Vitesse de l'ADDR
Impedance_PositionEquilibre i (signed int16) Impedance: Position desiree
Impedance_Raideur f (floating point) Impedance: Raideur
Impedance_Amortissement f (floating point) Impedance: Amortissement
Impedance_Type i (unsigned int16) Impedance: Type
Moteur_VitesseConsigne i (unsigned int16) Moteur: Consigne de vitesse
Moteur_Vitesse i (unsigned int16) Moteur: Vitesse mesuree
Frein1_ADCConsigne i (unsigned int16) Frein 1: Consigne d'ADC1
Frein1_ADC i (unsigned int16) Frein 1: ADC
Frein2_ADCConsigne i (unsigned int16) Frein 2: Consigne d'ADC2
Frein2_ADC i (unsigned int16) Frein 2: ADC mesure
Haptique_Type i (unsigned int16) Type de controle du mode Haptique
Haptique_Offset i (signed int16) Offset pour centrer dans l'ecran
Haptique_PositionEquilibre i (signed int16) Position d'equilibre
BoucleOuverte_PWM_Frien1 i (unsigned int16) PWM Frein 1
BoucleOuverte_PWM_Frien2 i (unsigned int16) PWM Frein 2
BoucleOuverte_CoupleConsigne f (floating point) Couple consigne

Variables de la carte moteur (module 32 sur le bus CAN)

Les variables qui doivent être utilisées sont mises en gras. Les autres variables sont importantes, mais de devraient pas être modifiées. Elle sont chargées automatiquement aux bonnes valeurs au démarrage de la carte moteur. Contactez Benoît Heintz pour du support.

TABLEAU 3 : ADDR1_moteur (module 32)
Variable Name OSC Type Variable Description
VitesseConsigne i (unsigned int16) Vitesse de consigne
VitesseMesuree i (unsigned int16) Vitesse mesuree

Opération avec PureData

  1. S'assurer que l'alimentation est bien branchée! Il devrait y avoir des leds allumées sur la carte de contrôle.
  2. S'assurer que le réseau est connecté. La carte d'interface CAN/Ethernet obtiendra une adresse par DHCP.
  3. Changer l'adresse dans l'objet connect selon vos configurations réseau, conserver le port 9001.
    1. Cliquer sur connect pour vous connecter
  4. S'assurer que le bouton d'urgence n'est pas enclenché.
  5. Cliquer sur bouton "bang" du centre sert à faire un "reset" du système aux valeurs sécuritaires (arrêt).
  6. Choisir le mode de fonctionnement en Impedance en cliquant sur le message "3", ou en Torque en cliquant sur le message "2".
    1. Ajuster Position SetPoint, Elasticity et Damping en mode Impedance.
    2. Ajuster Torque Command en mode Torque.
  7. Ajuster Motor Speed selon la vitesse désirée.
  8. Les variables ADDR_Position et ADDR_Vitesse sont automatiquement demandées à chaque 100ms.
    1. (Facultatif) Ajuster le métronome pour une période de rafraichissement différente.
Notes : Utiliser une source d'alimentation pouvant fournir au moins 5 ampères. 
Appuyez sur le bouton d'urgence en cas de baisse de tension suite à un trop fort appel de courant pour la source utilisée.
Si l'actionneur devient instable, cliquez sur "reset" ou appuyez sur le bouton d'urgence.

Unités pour les consignes

  • La vitesse du moteur est spécifiée duty cycle de 0 (0%) à 4096 (100%). Il n'y a pas de rétroaction de vitesse précise. DAC 12 bits + drive open loop.
    • 01/05/2013. Vérification avec Benoît à faire.
  • La position est spécifiée en pulses (65535 pulses = 1 tour = encodeur 16 bits).
  • Raideur * 10430.2192 donnera des Nm / rad
  • Amortissement * 10430.2192 donnera des Nm / rad / sec
  • Couple = Nm

Exemple typique d'opération

Mur

  • Raideur = 100.0 (Nm/rad) / 10430.2192 = 0.0096
  • Amortissement = 50.0 (Nm/rad/sec) / 10430.2192 = 0.0048
  • Vitesse du moteur = 25 % = 1024 (ajuster la vitesse au besoin)

Ressort

  • Raideur = 10 (Nm/rad) / 10430.2192 = 0.00096
  • Amortissement = 0
  • Vitesse du moteur = Vitesse du moteur = 25 % = 1024 (ajuster la vitesse au besoin)