HF-TMC9660 Driver
Hardware Agnostic C++ Driver for the TMC9660
Loading...
Searching...
No Matches
TMC9660 Class Reference

Main class representing a TMC9660 motor driver in Parameter Mode. Provides high-level functions to configure and control the TMC9660's features. The class uses a TMC9660CommInterface for communication, making it agnostic to the physical layer. More...

#include <TMC9660.hpp>

Collaboration diagram for TMC9660:

Public Types

enum class  BootloaderInitResult { Success , NoConfig , Failure }
 Bootloader initialization result codes. More...
 
using GlobalParamBankVariant = std::variant< uint8_t, tmc9660::tmcl::GlobalParamBank0, tmc9660::tmcl::GlobalParamBank2, tmc9660::tmcl::GlobalParamBank3 >
 

Public Member Functions

 TMC9660 (TMC9660CommInterface &comm, uint8_t address=0, const tmc9660::BootloaderConfig *bootCfg=nullptr) noexcept
 Construct a TMC9660 driver instance.
 
 ~TMC9660 () noexcept
 Destructor for TMC9660, cleans up resources.
 
TMC9660CommInterfacecomm () noexcept
 Get the communication interface used by this TMC9660 instance.
 
TMC9660::BootloaderInitResult bootloaderInit (const tmc9660::BootloaderConfig *cfg=nullptr) noexcept
 Bootloader initialization.
 
bool writeParameter (tmc9660::tmcl::Parameters id, uint32_t value, uint8_t motorIndex=0) noexcept
 Set (write) an axis (motor-specific) parameter on the TMC9660.
 
bool readParameter (tmc9660::tmcl::Parameters id, uint32_t &value, uint8_t motorIndex=0) noexcept
 Read an axis (motor-specific) parameter from the TMC9660.
 
bool writeGlobalParameter (GlobalParamBankVariant id, uint8_t bank, uint32_t value) noexcept
 Set (write) a global parameter on the TMC9660.
 
bool readGlobalParameter (GlobalParamBankVariant id, uint8_t bank, uint32_t &value) noexcept
 Read a global parameter from the TMC9660.
 
bool sendCommand (tmc9660::tmcl::Op opcode, uint16_t type=0, uint8_t motor=0, uint32_t value=0, uint32_t *reply=nullptr) noexcept
 Send a TMCL command. Optionally return the 32-bit reply value.
 

Public Attributes

struct TMC9660::MotorConfigthis
 
struct TMC9660::CurrentSensingthis
 
struct TMC9660::GateDriverthis
 
struct TMC9660::FeedbackSensethis
 
struct TMC9660::FOCControlthis
 
struct TMC9660::Rampthis
 
struct TMC9660::StepDirthis
 
struct TMC9660::ReferenceSearchthis
 
struct TMC9660::Brakethis
 
struct TMC9660::IITthis
 
struct TMC9660::Telemetrythis
 
struct TMC9660::StopEventsthis
 
struct TMC9660::Protectionthis
 
struct TMC9660::Scriptthis
 
struct TMC9660::RamDebugthis
 
struct TMC9660::NvmStoragethis
 
struct TMC9660::Heartbeatthis
 
struct TMC9660::Globalsthis
 
struct TMC9660::GPIOthis
 
struct TMC9660::Powerthis
 

Private Attributes

TMC9660CommInterfacecomm_
 
uint8_t address_
 
tmc9660::TMC9660Bootloader bootloader_
 Bootloader helper.
 
const tmc9660::BootloaderConfigbootCfg_
 
const uint8_t tmcCRCTable_Poly7Reflected [256]
 

Detailed Description

Main class representing a TMC9660 motor driver in Parameter Mode. Provides high-level functions to configure and control the TMC9660's features. The class uses a TMC9660CommInterface for communication, making it agnostic to the physical layer.

All configuration and control is done by sending TMCL commands (Set/Get Parameter, etc.) and reading/writing parameter values. The library covers motor type setup, FOC control tuning, gate driver settings, sensor feedback configuration, protection (voltage, temperature, current) settings, executing scripts on the device's microcontroller, and reading telemetry data like temperature, current, and voltage.

Member Typedef Documentation

◆ GlobalParamBankVariant

using TMC9660::GlobalParamBankVariant = std::variant<uint8_t, tmc9660::tmcl::GlobalParamBank0, tmc9660::tmcl::GlobalParamBank2, tmc9660::tmcl::GlobalParamBank3>

Member Enumeration Documentation

◆ BootloaderInitResult

enum class TMC9660::BootloaderInitResult
strong

Bootloader initialization result codes.

These indicate the outcome of the bootloaderInit() method.

Enumerator
Success 
NoConfig 
Failure 

Constructor & Destructor Documentation

◆ TMC9660()

TMC9660::TMC9660 ( TMC9660CommInterface comm,
uint8_t  address = 0,
const tmc9660::BootloaderConfig bootCfg = nullptr 
)
noexcept

Construct a TMC9660 driver instance.

Parameters
commReference to a user-implemented communication interface (SPI, UART, etc).
address(Optional) Module address if multiple TMC9660 devices are on one bus. For SPI, this is typically 0.

◆ ~TMC9660()

TMC9660::~TMC9660 ( )
noexcept

Destructor for TMC9660, cleans up resources.

Member Function Documentation

◆ bootloaderInit()

TMC9660::BootloaderInitResult TMC9660::bootloaderInit ( const tmc9660::BootloaderConfig cfg = nullptr)
noexcept

Bootloader initialization.

This method initializes the bootloader mode of the TMC9660 device, allowing firmware updates or configuration changes.

Parameters
cfgOptional configuration for the bootloader. If not provided, \ default settings will be used.
Returns
BootloaderInitResult indicating success, no config, or failure.
Note
This method should be called before any other operations.

◆ comm()

TMC9660CommInterface & TMC9660::comm ( )
inlinenoexcept

Get the communication interface used by this TMC9660 instance.

Returns
Reference to the communication interface (SPI, UART, etc).

◆ readGlobalParameter()

bool TMC9660::readGlobalParameter ( GlobalParamBankVariant  id,
uint8_t  bank,
uint32_t &  value 
)
noexcept

Read a global parameter from the TMC9660.

Parameters
idGlobal parameter ID number.
bankBank number or index associated with the parameter (can be Bank1, Bank2, or Bank3 enum).
[out]valueReference to store the read 32-bit value.
Returns
true if read successfully, false on error.

◆ readParameter()

bool TMC9660::readParameter ( tmc9660::tmcl::Parameters  id,
uint32_t &  value,
uint8_t  motorIndex = 0 
)
noexcept

Read an axis (motor-specific) parameter from the TMC9660.

Parameters
idParameter ID number to read.
[out]valueReference to store the 32-bit parameter value read.
motorIndexIndex of the motor/axis (0 or 1).
Returns
true if the parameter was successfully read (device responded), false on error.

◆ sendCommand()

bool TMC9660::sendCommand ( tmc9660::tmcl::Op  opcode,
uint16_t  type = 0,
uint8_t  motor = 0,
uint32_t  value = 0,
uint32_t *  reply = nullptr 
)
noexcept

Send a TMCL command. Optionally return the 32-bit reply value.

◆ writeGlobalParameter()

bool TMC9660::writeGlobalParameter ( GlobalParamBankVariant  id,
uint8_t  bank,
uint32_t  value 
)
noexcept

Set (write) a global parameter on the TMC9660.

Parameters
idGlobal parameter ID number.
bankBank number for global parameter (can be Bank1, Bank2, or Bank3 enum).
value32-bit value to write.
Returns
true if successfully written, false if an error occurred.

◆ writeParameter()

bool TMC9660::writeParameter ( tmc9660::tmcl::Parameters  id,
uint32_t  value,
uint8_t  motorIndex = 0 
)
noexcept

Set (write) an axis (motor-specific) parameter on the TMC9660.

Parameters
idParameter ID number (see TMC9660 documentation for the full list).
value32-bit value to write to the parameter.
motorIndexIndex of the motor/axis (0 or 1). Typically 0 unless the device controls multiple axes.
Returns
true if the parameter was successfully written (acknowledged by the device), false if an error occurred.

Member Data Documentation

◆ address_

uint8_t TMC9660::address_
private

Module address (0-127). Used primarily for UART multi-drop addressing.

◆ bootCfg_

const tmc9660::BootloaderConfig* TMC9660::bootCfg_
private

◆ bootloader_

tmc9660::TMC9660Bootloader TMC9660::bootloader_
private

Bootloader helper.

◆ comm_

TMC9660CommInterface& TMC9660::comm_
private

Communication interface (transport) for sending/receiving data.

◆ this [1/20]

struct TMC9660::MotorConfig* TMC9660::this

◆ this [2/20]

struct TMC9660::CurrentSensing* TMC9660::this

◆ this [3/20]

struct TMC9660::GateDriver* TMC9660::this

◆ this [4/20]

struct TMC9660::FeedbackSense* TMC9660::this

◆ this [5/20]

struct TMC9660::FOCControl* TMC9660::this

◆ this [6/20]

struct TMC9660::Ramp* TMC9660::this

◆ this [7/20]

struct TMC9660::StepDir* TMC9660::this

◆ this [8/20]

struct TMC9660::ReferenceSearch* TMC9660::this

◆ this [9/20]

struct TMC9660::Brake* TMC9660::this

◆ this [10/20]

struct TMC9660::IIT* TMC9660::this

◆ this [11/20]

struct TMC9660::Telemetry* TMC9660::this

◆ this [12/20]

struct TMC9660::StopEvents* TMC9660::this

◆ this [13/20]

struct TMC9660::Protection* TMC9660::this

◆ this [14/20]

struct TMC9660::Script* TMC9660::this

◆ this [15/20]

struct TMC9660::RamDebug* TMC9660::this

◆ this [16/20]

struct TMC9660::NvmStorage* TMC9660::this

◆ this [17/20]

struct TMC9660::Heartbeat* TMC9660::this

◆ this [18/20]

struct TMC9660::Globals* TMC9660::this

◆ this [19/20]

struct TMC9660::GPIO* TMC9660::this

◆ this [20/20]

struct TMC9660::Power* TMC9660::this

◆ tmcCRCTable_Poly7Reflected

const uint8_t TMC9660::tmcCRCTable_Poly7Reflected[256]
private
Initial value:
= {
0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75, 0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA,
0x7B, 0x1C, 0x8D, 0xFF, 0x6E, 0x1B, 0x8A, 0xF8, 0x69, 0x12, 0x83, 0xF1, 0x60, 0x15, 0x84,
0xF6, 0x67, 0x38, 0xA9, 0xDB, 0x4A, 0x3F, 0xAE, 0xDC, 0x4D, 0x36, 0xA7, 0xD5, 0x44, 0x31,
0xA0, 0xD2, 0x43, 0x24, 0xB5, 0xC7, 0x56, 0x23, 0xB2, 0xC0, 0x51, 0x2A, 0xBB, 0xC9, 0x58,
0x2D, 0xBC, 0xCE, 0x5F, 0x70, 0xE1, 0x93, 0x02, 0x77, 0xE6, 0x94, 0x05, 0x7E, 0xEF, 0x9D,
0x0C, 0x79, 0xE8, 0x9A, 0x0B, 0x6C, 0xFD, 0x8F, 0x1E, 0x6B, 0xFA, 0x88, 0x19, 0x62, 0xF3,
0x81, 0x10, 0x65, 0xF4, 0x86, 0x17, 0x48, 0xD9, 0xAB, 0x3A, 0x4F, 0xDE, 0xAC, 0x3D, 0x46,
0xD7, 0xA5, 0x34, 0x41, 0xD0, 0xA2, 0x33, 0x54, 0xC5, 0xB7, 0x26, 0x53, 0xC2, 0xB0, 0x21,
0x5A, 0xCB, 0xB9, 0x28, 0x5D, 0xCC, 0xBE, 0x2F, 0xE0, 0x71, 0x03, 0x92, 0xE7, 0x76, 0x04,
0x95, 0xEE, 0x7F, 0x0D, 0x9C, 0xE9, 0x78, 0x0A, 0x9B, 0xFC, 0x6D, 0x1F, 0x8E, 0xFB, 0x6A,
0x18, 0x89, 0xF2, 0x63, 0x11, 0x80, 0xF5, 0x64, 0x16, 0x87, 0xD8, 0x49, 0x3B, 0xAA, 0xDF,
0x4E, 0x3C, 0xAD, 0xD6, 0x47, 0x35, 0xA4, 0xD1, 0x40, 0x32, 0xA3, 0xC4, 0x55, 0x27, 0xB6,
0xC3, 0x52, 0x20, 0xB1, 0xCA, 0x5B, 0x29, 0xB8, 0xCD, 0x5C, 0x2E, 0xBF, 0x90, 0x01, 0x73,
0xE2, 0x97, 0x06, 0x74, 0xE5, 0x9E, 0x0F, 0x7D, 0xEC, 0x99, 0x08, 0x7A, 0xEB, 0x8C, 0x1D,
0x6F, 0xFE, 0x8B, 0x1A, 0x68, 0xF9, 0x82, 0x13, 0x61, 0xF0, 0x85, 0x14, 0x66, 0xF7, 0xA8,
0x39, 0x4B, 0xDA, 0xAF, 0x3E, 0x4C, 0xDD, 0xA6, 0x37, 0x45, 0xD4, 0xA1, 0x30, 0x42, 0xD3,
0xB4, 0x25, 0x57, 0xC6, 0xB3, 0x22, 0x50, 0xC1, 0xBA, 0x2B, 0x59, 0xC8, 0xBD, 0x2C, 0x5E,
0xCF,
}

The documentation for this class was generated from the following files: