Skip to content

Meow motor protocol

Node-IDs 100 and 101 are prohibited

Do not assign decimal Node-ID 100 (0x64) or 101 (0x65) to motors or other CANopen devices. Motor firmware-update requests use 0x780 + Node-ID; these values produce 0x7E4 and 0x7E5, which collide with the LSS response/request IDs. LSS scanning or configuration can therefore interfere with motor-update traffic.

Device Settings rejects these new IDs. Motor Control and firmware update report an error and refuse operations on motors using them. If an existing device uses one, change it to another valid, unused ID in Device Settings, save and power-cycle it before control or update. Recovery probing also skips these IDs.

中文 | English

Meow uses CANopen CiA301 NMT, heartbeat, SDO and PDO communication with its own motor states and object dictionary. Motion control uses 0x4401/0x4402, with Profile Position, Profile Velocity, Torque and MIT modes.

Use the quick start and GUI guide for connection and a first low-speed test, or the API and PDO guide to develop a controller.

Identify the motor

Read 0x1018:01 (Vendor ID) and 0x1018:02 (Product Code) and match both values. The GUI opens the Meow panel from this identity. The optional 0x1008 product name may be absent and does not identify the model.

Meow model Vendor ID Product Code Nominal gear ratio
hexmeow 4310 0x00686578 0x6C64BC78 10:1
hexmeow 4342 (HEX 4342P) 0x00686578 0x6C64BCAA 42:1
hexmeow 3525 (also supported by the driver) 0x00686578 0x6C64AE8D 25:1

0x1018:03 is the firmware revision and :04 is the serial number. Resolve unknown identities before sending control commands. Hardware ratings and dimensions are in the 4310 and 4342P data centers.

CAN bus

Use a linear bus with one termination at each end. Count the USB-CANFD-HUB's built-in termination as one end. See the unpacking guide and CAN connector reference for wiring.

The normal GUI motor connection uses these profiles. The host and all devices must agree:

Item Configuration
Nominal phase 1 Mbit/s, sample point 0.8
Data phase 1 / 2 / 4 / 5 Mbit/s; GUI default 5 Mbit/s
Data sample point 0.8 at 1 / 2 / 4 Mbit/s; 0.75 at 5 Mbit/s
Node-ID Protocol range 1–127; unique among devices and the host
GUI host Node-ID Default 0x0A (decimal 10)

Avoid the host ID and system-reserved IDs 100, 101 and 127 when allocating motors. The motor settings object also accepts nominal rates of 125 / 250 / 500 / 800 kbit/s, but the normal GUI motor connection checks for 1 Mbit/s.

Frame type and BRS

NMT, heartbeat and SDO use Classic CAN with standard 11-bit IDs. PDO frame type depends on 0x2001:04 and payload length:

PDO BRS PDO payload ≤ 8 bytes PDO payload > 8 bytes
0 Classic CAN CAN FD without BRS
1 CAN FD + BRS CAN FD + BRS

Even the 8-byte TPDO1 and 7-byte TPDO2 must be received as FD+BRS when BRS is enabled. Do not filter out FD frames merely because the payload is short. SDO requests use 0x600 + Node-ID, responses use 0x580 + Node-ID, and heartbeat uses 0x700 + Node-ID.

States and modes

Motor state is Disabled, Enabled in a particular mode, or Error. NMT state and motor mode are independent: NMT Operational does not mean torque is enabled. A disabled motor can continue sending PDO feedback while Operational.

Write to 0x4401:00 (U8) Action Normal 0x4402:00 feedback
0x00 Disable 0x00
0x01 Profile Position (PP) 0x01
0x02 Profile Velocity (PV) 0x02
0x03 Torque 0x03
0x04 MIT 0x04
0xFF Clear error Disabled 0x00 on success

Write the target before the mode command and wait for fresh feedback confirming the mode. Modes can change while enabled. 0x4401 is change-of-value triggered: to retry error clearing, write 0x00 before another 0xFF. The GUI and driver handle this rearming sequence.

Units and encoding

All motion commands and feedback use output-shaft units. Do not apply the gear ratio again.

Quantity Wire encoding and unit
PP target / position feedback Signed I32 Q8.24, Rev (revolutions)
PV target / velocity readback REAL32, Rev/s
Torque target / feedback I16, permille (‰) of peak torque
Maximum torque U16, 0–1000 ‰
Peak torque REAL32, N·m
Uncompressed MIT position / velocity / feedforward torque REAL32, Rev / Rev/s / N·m
Temperature I16, 0.1 °C per unit
TPDO1 timestamp U16, µs, wraps every 65536 µs

Multibyte values are little-endian. Q8.24 converts as Rev = raw_i32 / 2^24, with a range of [-128, 128 - 2^-24] Rev and a step of about 5.96 × 10^-8 Rev. The driver rejects PP targets outside that range. Use PV for continuous rotation and accumulate wrapped position on the host. Gaps, disconnects or reinitialization can invalidate continuity; this is not a persistent absolute multi-turn encoder.

GUI PP / PV inputs use Rev / Rev/s. The MIT card uses rad, rad/s, N·m, N·m/rad and N·m·s/rad, converting them to protocol values. Direct Rust callers must perform this conversion themselves; see MIT units.

Common objects

This is the object subset used by the current GUI and driver. R and W indicate the operations described here, without asserting unverified defaults or other access capabilities.

Communication and position preset

Address Type Used here Meaning
0x1018:01..04 U32 R Vendor, product, firmware revision, serial
0x1016:01 U32 R/W Consumer heartbeat: (host Node-ID << 16) \| timeout_ms
0x1017:00 U16 R Device heartbeat period, ms
0x2001:00 U8 R Highest communication-settings subindex; 4 for this variant
0x2001:01 U8 R/W Stored Node-ID; may differ from the active ID before restart
0x2001:02 U32 R/W Nominal bitrate, bit/s
0x2001:03 U32 R/W Data bitrate, bit/s
0x2001:04 U8 R/W PDO BRS, 0 or 1
0x1010:04 U32 R/W Save these settings with 0x65766173 (little-endian ASCII save)
0x1010:02 U32 W Explicit PDO communication persistence with save; ordinary initialization does not save
0x3001:01 REAL32 W Position preset, -0.5 to 0.5 Rev
0x3001:02 U32 W Commit and save the preset with 0x73657270 (little-endian ASCII pres)

Communication changes require an identified, online node before initialization, with NMT Pre-Operational or Stopped. The driver writes and reads back 0x2001:01..04, saves only after they match, and then requires a manual power cycle. Do not use another device's 0x2100/0x2101 configuration scheme for this motor.

The position preset is a separate transaction: confirm Disabled, write the value and pres, then remain Disabled. It changes the reference assigned to the current physical position; it does not command a move.

Motion and feedback

Address Type Used here Meaning
0x4401:00 U8 W Mode command
0x4402:00 U8 R Mode / error state
0x453F:00 U16 R Detailed error
0x4564:00 I32 Q8.24 R Output position
0x456C:00 REAL32 R Output velocity, Rev/s
0x4577:00 I16 R Torque feedback, ‰
0x457A:00 I32 Q8.24 W PP target position
0x45FF:00 REAL32 W PV target velocity, Rev/s
0x4571:00 I16 W Torque target, -1000 to 1000 ‰
0x4572:00 U16 R/W Maximum torque, 0–1000 ‰
0x4576:00 REAL32 R Peak torque, N·m; use the device's value
0x4581:00 REAL32 R/W Profile velocity, Rev/s, positive
0x4583:00 / 0x4584:00 REAL32 R/W Profile acceleration / deceleration, Rev/s², positive
0x4102:01..03 REAL32 W MIT target position, velocity, feedforward torque
0x4102:04..05 U16 W MIT raw Kp / Kd
0x4102:06 U16 W Limit on each Kp / Kd term's resulting torque, 0–1000 ‰
0x4102:07 REAL32 R MIT Kp / Kd scale factor
0x4103 RECORD R/W Compressed MIT parameters; see shared PDOs
0x4104:01..02 I16 R Driver / motor temperature, 0.1 °C
0x4713:00 U16 R TPDO timestamp, µs
0x4001:01..07 U32 R Factory calibration data; GUI reads the torque factor

Errors and recovery

Error displays in 0x4402 are 0xA1 overcurrent, 0xA2 overvoltage, 0xA3 undervoltage, 0xA4 heartbeat error, 0xA5 driver overtemperature, 0xA6 motor overtemperature and 0xAF other error. Read 0x453F for details:

Detailed code Meaning
0x0000 No error
0x2310 Phase overcurrent
0x3210 / 0x3220 Bus overvoltage / undervoltage
0x4210 / 0x7124 Driver / motor overtemperature
0x7121 Motor stall
0x7340 Encoder error
0x8130 Heartbeat error
0x8140 Bus recovery error

Resolve the supply, temperature, load or heartbeat issue before clearing the error. Successful clearing leaves the motor Disabled and does not restore its previous mode. Default host heartbeat is every 50 ms and initialization sets a 250 ms consumer timeout. Closing the host or switching tools affects heartbeat; check state and reinitialize as needed before motion.

Some tested older firmware lacks 0x4102. The presence of 0x4103 does not imply uncompressed MIT SDO support. On 0x06020000 ObjectDoesNotExist, record identity and firmware revision and contact the firmware provider. The current GUI does not automatically fall back to a different MIT protocol.