Dedicated Motor I/O
These dedicated I/O bits have specific motion related functions. Many of the dedicated I/O signals are directly connected to pins on external connectors (Home, HW Limit+) but some are connected to internal functions on the node (Amp Active, Feedback Fault Primary) and do not have direct external connections.
The dedicated input bits are
Input Bit |
Description |
IN0 |
Amp Fault |
IN1 |
Brake Applied |
IN2 |
Home |
IN3 |
HW Limit + |
IN4 |
HW Limit – |
IN5 |
Index Primary |
IN6 |
Feedback Fault |
IN7 |
Captured |
IN8 |
Hall A |
IN9 |
Hall B |
IN10 |
Hall C |
IN11 |
Amp Active |
IN12 |
Index Secondary |
IN13 |
Amp Warning |
IN14 |
Autonomous Drive Action
(Drive Status Bit 9) |
IN15 |
Drive Specific
(Drive Status Bit 10) |
IN16 |
Primary position feedback fault
|
IN17 |
Secondary position feedback fault
|
There are two dedicated output bits. Because the function of these bits are dedicated the state of the output can only be monitored and not directly set. These bits are autonomously being controlled by the motion controller.
Output Bit |
Description |
OUT0 |
Amp Enable |
OUT1 |
Brake Release |
Each type of SynqNet node does not support all these dedicated I/O bits. For example the RMB-10V2 node from MEI supports the following set of dedicated I/O.
Input Bit |
Description |
Supported |
Motor 0 External Pins on J0_1 |
IN0 |
Amp Enable |
Y |
12 & 46 |
IN1 |
Brake Applied |
Y |
Internal* |
IN2 |
Home |
Y |
7 & 43 |
IN3 |
HW Limit + |
Y |
8& 43 |
IN4 |
HW Limit – |
Y |
9& 43 |
IN5 |
Index Primary |
Y |
Internal |
IN6 |
Feedback Fault |
Y |
Internal |
IN7 |
Captured |
N |
|
IN8 |
Hall A |
N |
|
IN9 |
Hall B |
N |
|
IN10 |
Hall C |
N |
|
IN11 |
Amp Active |
N |
|
IN12 |
Index Secondary |
Y |
|
IN13 |
Warning |
N |
|
IN14 |
Autonomous Drive Action
(Drive Status Bit 9) |
N |
|
IN15 |
Drive Specific
(Drive Status Bit 10) |
N |
|
OUT0 |
Amp Enable |
Y |
13 & 47 |
OUT1 |
Brake Release |
Y |
Internal* |
* On the RMB nodes from MEI, both the Brake Applied and Brake Release signals do not have a dedicated I/O pins available, but some of the general purpose I/O pins can be configured to input / output signals. See the next section on general purpose I/O.
What Dedicated I/O is Supported?
The MPIMotorInfo structure returned from the mpiMotorInfo function can be used to report which of the dedicated I/O bits are supported by the current nodes connected to the system
|
typedef struct MPIMotorInfoDedicatedIn {
long supported;
} MPIMotorInfoDedicatedIn;
typedef struct MPIMotorInfoDedicatedOut {
long supported;
} MPIMotorInfoDedicatedOut;
typedef struct MPIMotorInfo {
...
MPIMotorInfoDedicatedIn dedicatedIn[MPIMotorDedicatedInLAST];
MPIMotorInfoDedicatedOut dedicatedOut[MPIMotorDedicatedOutLAST];
} MPIMotorInfo;
|
|
The following two enumerations are provided to give descriptive names when accessing this structure.
|
typedef enum {
MPIMotorDedicatedInINVALID = -1,
MPIMotorDedicatedInAMP_FAULT = 0,
MPIMotorDedicatedInBRAKE_APPLIED = 1,
MPIMotorDedicatedInHOME = 2,
MPIMotorDedicatedInLIMIT_HW_POS = 3,
MPIMotorDedicatedInLIMIT_HW_NEG = 4,
MPIMotorDedicatedInINDEX_PRIMARY = 5,
MPIMotorDedicatedInFEEDBACK_FAULT = 6,
MPIMotorDedicatedInCAPTURED = 7,
MPIMotorDedicatedInHALL_A = 8,
MPIMotorDedicatedInHALL_B = 9,
MPIMotorDedicatedInHALL_C = 10,
MPIMotorDedicatedInAMP_ACTIVE = 11,
MPIMotorDedicatedInINDEX_SECONDARY = 12,
MPIMotorDedicatedInWARNING = 13,
MPIMotorDedicatedInDRIVE_STATUS_9 = 14,
MPIMotorDedicatedInDRIVE_STATUS_10 = 15,
MPIMotorDedicatedInLAST,
MPIMotorDedicatedInFIRST = MPIMotorDedicatedInINVALID + 1,
} MPIMotorDedicatedIn;
|
|
|
typedef enum {
MPIMotorDedicatedOutINVALID = -1,
MPIMotorDedicatedOutAMP_ENABLE = 0,
MPIMotorDedicatedOutBRAKE_RELEASE = 1,
MPIMotorDedicatedOutLAST,
MPIMotorDedicatedOutFIRST = MPIMotorDedicatedOutINVALID + 1,
} MPIMotorDedicatedOut;
|
|
The following code shows how to read the motor information can be used to check if a node supports the positive hardware limit input.
|
MPIMotorInfo motorInfo;
mpiMotorInfo( motor0, &motorInfo );
long supported = motorInfo.dedicatedIn[MPIMotorDedicatedInLIMIT_HW_POS].supported;
|
|
The following table shows what would be returned if motor 0 were connected to a standard RMB-10V.
Input/Output Bit |
Return |
motorInfo.dedicatedIn[0].supported |
1 |
motorInfo.dedicatedIn[1].supported |
1 |
motorInfo.dedicatedIn[2].supported |
1 |
motorInfo.dedicatedIn[3].supported |
1 |
motorInfo.dedicatedIn[4].supported |
1 |
motorInfo.dedicatedIn[5].supported |
1 |
motorInfo.dedicatedIn[6].supported |
1 |
motorInfo.dedicatedIn[7].supported |
0 |
motorInfo.dedicatedIn[8].supported |
0 |
motorInfo.dedicatedIn[09].supported |
0 |
motorInfo.dedicatedIn[10].supported |
0 |
motorInfo.dedicatedIn[11].supported |
0 |
motorInfo.dedicatedIn[12].supported |
1 |
motorInfo.dedicatedIn[13].supported |
0 |
motorInfo.dedicatedIn[14].supported |
0 |
motorInfo.dedicatedIn[15].supported |
0 |
motorInfo.dedicatedOut[0].supported |
1 |
motorInfo.dedicatedOut[1].supported |
1 |
Accessing Dedicated I/O
The dedicated I/O bits can be accessed using the following two MPI functions:
- mpiMotorDedicatedIn
- mpiMotorDedicatedOutGet
There is no MPI function to directly control the dedicated outputs: these dedicated outputs are being automomously controlled by the controller. The amp enable and brake dedicated outputs are both indirectly controlled by the mpiMotorAmpEnableGet / mpiMotorAmpEnableSet functions.
The MPIMotorDedicatedIn and MPIMotorDedicatedOut enumeration can also be used with these functions to provide help the readability of the code.
These functions take two arguments, bitStart and bitCount, which allow either a single bit to be accessed (when bitCount equals one) or multiple adjacent bits to be accessed (bitCount greater than one).
The following code shows how to get the state of the positive hardware limit input.
The next piece of code shows how to get the state of all the dedicated inputs:
|