Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 16 additions & 6 deletions damiao_motor/core/motor.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,14 @@ class RegisterInfo:
4: 1000000, # 1M
}

# CAN_FD baud rate codes
CAN_FD_BAUD_RATE_CODES = {
5: 2000000, # 2M
6: 2500000, # 2.5M
7: 3200000, # 3.2M
8: 4000000, # 4M
9: 5000000, # 5M
}

# -----------------------
# Helper functions
Expand Down Expand Up @@ -1156,20 +1164,22 @@ def set_speed_loop_enhancement(self, value: float) -> None:
"""Set speed loop enhancement coefficient (register 34)."""
self.write_register(34, value)

def set_can_baud_rate(self, baud_rate_code: int) -> None:
def set_can_baud_rate(self, baud_rate_code: int, persist: bool = True) -> None:
"""
Set CAN baud rate using register 35 (can_br).

Args:
baud_rate_code: Baud rate code (0=125K, 1=200K, 2=250K, 3=500K, 4=1M)
baud_rate_code: Baud rate code (0=125K, 1=200K, 2=250K, 3=500K, 4=1M, 5=2M, 6=2.5M, 7=3.2M, 8=4M, 9=5M)
persist: Store all current parameters to flash. The motor need to be in disabled Mode for this to work.

Raises:
ValueError: If baud_rate_code is not in valid range [0, 4]
ValueError: If baud_rate_code is not in valid range [0, 9]
"""
if baud_rate_code not in CAN_BAUD_RATE_CODES:
if baud_rate_code not in CAN_BAUD_RATE_CODES and baud_rate_code not in CAN_FD_BAUD_RATE_CODES:
raise ValueError(
f"Invalid baud rate code: {baud_rate_code}. Must be in {list(CAN_BAUD_RATE_CODES.keys())}"
f"Invalid baud rate code: {baud_rate_code}. Must be in {list(CAN_BAUD_RATE_CODES.keys())} or {list(CAN_FD_BAUD_RATE_CODES.keys())}"
)

self.write_register(35, baud_rate_code) # Register 35 is can_br
self.store_parameters() # Store to flash so it persists
if persist:
self.store_parameters() # Store to flash so it persists