OSCProtocol ADDR ADE
LOGICIELS À INSTALLER
Fichiers PureData
DÉMONSTRATEUR 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
- L'actionneur peut fournir jusqu'à 15 Nm.
- Il est possible de fixer facilement des pièces (pour application) à la sortie de l'actionneur.
- L'actionneur peut être facilement démonté de la boîte de support.
- https://introlab.3it.usherbrooke.ca/mediawiki-introlab/index.php/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.
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.
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
- S'assurer que l'alimentation est bien branchée! Il devrait y avoir des leds allumées sur la carte de moteur.
- S'assurer que le réseau est connecté. La carte d'interface CAN/Ethernet obtiendra une adresse par DHCP.
- Changer l'adresse dans l'objet connect selon vos configurations réseau, conserver le port 9001.
- Cliquer sur connect pour vous connecter
- S'assurer que le bouton d'urgence n'est pas enclenché.
- Cliquer sur bouton "bang" du centre sert à faire un "reset" du système aux valeurs sécuritaires (arrêt).
- Cliquer sur le bouton "Activate" pour activer le système.
- Ajuster SetPoint, Elasticity et Damping.
- (Facultatif) Ajuster SetPointMin et SetPointMax pour contrôler le nombre de pulses maximum et minimum que l'actionneur peut parcourir.
- Les valeurs SetPoint, Position, Speed, Torque et CtrlMode sont obtenues automatiquement par des requêtes périodiques.
- (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
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
- L'actionneur peut fournir jusqu'à 10 Nm.
- Une manivelle est prévue pour l'interaction avec l'actionneur. Il serait possible de fixer autre chose au bout de l'actionneur.
- L'actionneur doit demeurer sur sa structure qui contient l'électronique de contrôle.
- https://introlab.3it.usherbrooke.ca/mediawiki-introlab/index.php/DDRA
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 :
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.
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.
Variable Name | OSC Type | Variable Description |
---|---|---|
VitesseConsigne | i (unsigned int16) | Vitesse de consigne |
VitesseMesuree | i (unsigned int16) | Vitesse mesuree |
Opération avec PureData
- S'assurer que l'alimentation est bien branchée! Il devrait y avoir des leds allumées sur la carte de contrôle.
- S'assurer que le réseau est connecté. La carte d'interface CAN/Ethernet obtiendra une adresse par DHCP.
- Changer l'adresse dans l'objet connect selon vos configurations réseau, conserver le port 9001.
- Cliquer sur connect pour vous connecter
- S'assurer que le bouton d'urgence n'est pas enclenché.
- Cliquer sur bouton "bang" du centre sert à faire un "reset" du système aux valeurs sécuritaires (arrêt).
- Choisir le mode de fonctionnement en Impedance en cliquant sur le message "3", ou en Torque en cliquant sur le message "2".
- Ajuster Position SetPoint, Elasticity et Damping en mode Impedance.
- Ajuster Torque Command en mode Torque.
- Ajuster Motor Speed selon la vitesse désirée.
- Les variables ADDR_Position et ADDR_Vitesse sont automatiquement demandées à chaque 100ms.
- (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)