Skip to content

File syn_cia402.c

FileList > proto > syn_cia402.c

Go to the source code of this file

CANopen CiA 402 Device Profile for Drives and Motion Control implementation.

  • #include "../util/syn_assert.h"
  • #include "syn_cia402.h"
  • #include <stdlib.h>
  • #include <string.h>

Public Functions

Type Name
SYN_Status syn_cia402_feed_feedback (SYN_CIA402_Axis * axis, int32_t pos_actual, int32_t vel_actual, int16_t torque_actual)
Feed measured actual values (encoder position, velocity, torque) to axis.
uint16_t syn_cia402_get_controlword (const SYN_CIA402_Axis * axis)
Read current Controlword (Index 0x6040).
int8_t syn_cia402_get_mode (const SYN_CIA402_Axis * axis)
Get requested Mode of Operation (Index 0x6060).
int8_t syn_cia402_get_mode_display (const SYN_CIA402_Axis * axis)
Get active Mode of Operation Display (Index 0x6061).
SYN_CIA402_State syn_cia402_get_state (const SYN_CIA402_Axis * axis)
Get current FSM state.
uint16_t syn_cia402_get_statusword (const SYN_CIA402_Axis * axis)
Read current Statusword (Index 0x6041).
SYN_Status syn_cia402_init (SYN_CIA402_Axis * axis, const SYN_CIA402_Config * cfg)
Initialize CiA 402 Axis controller.
size_t syn_cia402_populate_od (SYN_CANOpenODEntry * od_table, size_t max_entries, SYN_CIA402_Axis * axis)
Populate a CANopen Object Dictionary table with standard CiA 402 objects.
SYN_Status syn_cia402_report_actuals (SYN_CIA402_Axis * axis, int32_t pos_actual, int32_t vel_actual, int16_t torque_actual)
Feed measured actual values alias for compatibility.
SYN_Status syn_cia402_set_controlword (SYN_CIA402_Axis * axis, uint16_t cw)
Set Controlword (Index 0x6040) from master / RPDO / SDO.
SYN_Status syn_cia402_set_mode (SYN_CIA402_Axis * axis, int8_t mode)
Request Mode of Operation (Index 0x6060).
SYN_Status syn_cia402_set_target_position (SYN_CIA402_Axis * axis, int32_t pos)
Set target position (Index 0x607A).
SYN_Status syn_cia402_set_target_torque (SYN_CIA402_Axis * axis, int16_t torque)
Set target torque (Index 0x6071).
SYN_Status syn_cia402_set_target_velocity (SYN_CIA402_Axis * axis, int32_t vel)
Set target velocity (Index 0x60FF).
SYN_Status syn_cia402_step (SYN_CIA402_Axis * axis, uint32_t dt_us, SYN_CIA402_Setpoints * out_setpoints)
Execute periodic CiA 402 control loop step in microseconds.
SYN_Status syn_cia402_trigger_fault (SYN_CIA402_Axis * axis, uint16_t error_code)
Trigger a drive fault and enter FAULT_REACTION_ACTIVE / FAULT state.
SYN_Status syn_cia402_update (SYN_CIA402_Axis * axis, uint32_t dt_ms)
Periodic motion update in milliseconds.

Public Static Functions

Type Name
void syn_cia402_eval_fsm (SYN_CIA402_Axis * axis)
Evaluate CiA 402 Device Control State Machine transitions.
void syn_cia402_update_statusword (SYN_CIA402_Axis * axis)
Construct CANopen Statusword (0x6041) from current drive state.

Public Functions Documentation

function syn_cia402_feed_feedback

Feed measured actual values (encoder position, velocity, torque) to axis.

SYN_Status syn_cia402_feed_feedback (
    SYN_CIA402_Axis * axis,
    int32_t pos_actual,
    int32_t vel_actual,
    int16_t torque_actual
) 

Parameters:

  • axis Axis instance.
  • pos_actual Actual position (counts).
  • vel_actual Actual velocity (counts/s).
  • torque_actual Actual torque (0.1% rated).

Returns:

SYN_OK on success, SYN_INVALID_PARAM on NULL.


function syn_cia402_get_controlword

Read current Controlword (Index 0x6040).

uint16_t syn_cia402_get_controlword (
    const SYN_CIA402_Axis * axis
) 

Parameters:

  • axis Axis instance.

Returns:

Controlword value (0 on NULL).


function syn_cia402_get_mode

Get requested Mode of Operation (Index 0x6060).

int8_t syn_cia402_get_mode (
    const SYN_CIA402_Axis * axis
) 

Parameters:

  • axis Axis instance.

Returns:

Mode of operation.


function syn_cia402_get_mode_display

Get active Mode of Operation Display (Index 0x6061).

int8_t syn_cia402_get_mode_display (
    const SYN_CIA402_Axis * axis
) 

Parameters:

  • axis Axis instance.

Returns:

Mode of operation display.


function syn_cia402_get_state

Get current FSM state.

SYN_CIA402_State syn_cia402_get_state (
    const SYN_CIA402_Axis * axis
) 

Parameters:

  • axis Axis instance.

Returns:

Current FSM state.


function syn_cia402_get_statusword

Read current Statusword (Index 0x6041).

uint16_t syn_cia402_get_statusword (
    const SYN_CIA402_Axis * axis
) 

Parameters:

  • axis Axis instance.

Returns:

Statusword value (0 on NULL).


function syn_cia402_init

Initialize CiA 402 Axis controller.

SYN_Status syn_cia402_init (
    SYN_CIA402_Axis * axis,
    const SYN_CIA402_Config * cfg
) 

Parameters:

  • axis Axis instance.
  • cfg Initial configuration parameters.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on NULL parameters.


function syn_cia402_populate_od

Populate a CANopen Object Dictionary table with standard CiA 402 objects.

size_t syn_cia402_populate_od (
    SYN_CANOpenODEntry * od_table,
    size_t max_entries,
    SYN_CIA402_Axis * axis
) 

Binds 0x6040 (Controlword), 0x6041 (Statusword), 0x6060..0x60FF objects directly to the live fields of the given axis instance.

Parameters:

  • od_table Destination array of Object Dictionary entries.
  • max_entries Size of od_table.
  • axis Axis instance to bind.

Returns:

Number of entries populated (0 on error or insufficient capacity).


function syn_cia402_report_actuals

Feed measured actual values alias for compatibility.

SYN_Status syn_cia402_report_actuals (
    SYN_CIA402_Axis * axis,
    int32_t pos_actual,
    int32_t vel_actual,
    int16_t torque_actual
) 

Parameters:

  • axis Axis instance.
  • pos_actual Actual position (counts).
  • vel_actual Actual velocity (counts/s).
  • torque_actual Actual torque (0.1% rated).

Returns:

SYN_OK on success, SYN_INVALID_PARAM on NULL.


function syn_cia402_set_controlword

Set Controlword (Index 0x6040) from master / RPDO / SDO.

SYN_Status syn_cia402_set_controlword (
    SYN_CIA402_Axis * axis,
    uint16_t cw
) 

Parameters:

  • axis Axis instance.
  • cw Controlword value.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on NULL.


function syn_cia402_set_mode

Request Mode of Operation (Index 0x6060).

SYN_Status syn_cia402_set_mode (
    SYN_CIA402_Axis * axis,
    int8_t mode
) 

Parameters:

  • axis Axis instance.
  • mode Requested mode (SYN_CIA402_MODE_*).

Returns:

SYN_OK on success, SYN_INVALID_PARAM on invalid mode.


function syn_cia402_set_target_position

Set target position (Index 0x607A).

SYN_Status syn_cia402_set_target_position (
    SYN_CIA402_Axis * axis,
    int32_t pos
) 

Parameters:

  • axis Axis instance.
  • pos Target position in counts.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on NULL.


function syn_cia402_set_target_torque

Set target torque (Index 0x6071).

SYN_Status syn_cia402_set_target_torque (
    SYN_CIA402_Axis * axis,
    int16_t torque
) 

Parameters:

  • axis Axis instance.
  • torque Target torque in 0.1% rated torque.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on NULL.


function syn_cia402_set_target_velocity

Set target velocity (Index 0x60FF).

SYN_Status syn_cia402_set_target_velocity (
    SYN_CIA402_Axis * axis,
    int32_t vel
) 

Parameters:

  • axis Axis instance.
  • vel Target velocity in counts/s.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on NULL.


function syn_cia402_step

Execute periodic CiA 402 control loop step in microseconds.

SYN_Status syn_cia402_step (
    SYN_CIA402_Axis * axis,
    uint32_t dt_us,
    SYN_CIA402_Setpoints * out_setpoints
) 

Evaluates state machine transitions, computes motion ramps, performs following error supervision, updates Statusword, and outputs motor setpoints.

Parameters:

  • axis Axis instance.
  • dt_us Time elapsed since last step in microseconds.
  • out_setpoints Output setpoint commands (may be NULL if not needed).

Returns:

SYN_OK on success, error code on failure.


function syn_cia402_trigger_fault

Trigger a drive fault and enter FAULT_REACTION_ACTIVE / FAULT state.

SYN_Status syn_cia402_trigger_fault (
    SYN_CIA402_Axis * axis,
    uint16_t error_code
) 

Parameters:

  • axis Axis instance.
  • error_code Fault error code (e.g. overcurrent, limit tripped, tracking error).

Returns:

SYN_OK on success, SYN_INVALID_PARAM on NULL.


function syn_cia402_update

Periodic motion update in milliseconds.

SYN_Status syn_cia402_update (
    SYN_CIA402_Axis * axis,
    uint32_t dt_ms
) 

Parameters:

  • axis Axis instance.
  • dt_ms Time delta in milliseconds.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on NULL.


Public Static Functions Documentation

function syn_cia402_eval_fsm

Evaluate CiA 402 Device Control State Machine transitions.

static void syn_cia402_eval_fsm (
    SYN_CIA402_Axis * axis
) 

Parameters:

  • axis CiA 402 axis instance.

function syn_cia402_update_statusword

Construct CANopen Statusword (0x6041) from current drive state.

static void syn_cia402_update_statusword (
    SYN_CIA402_Axis * axis
) 

Parameters:

  • axis CiA 402 axis instance.


The documentation for this class was generated from the following file src/syntropic/proto/syn_cia402.c