Skip to main content

USB interface

The SMD3 appears as a virtual COM port when plugged into a PC. Configuration and control may be performed via the provided SMD3 software, your own application or any terminal program.

This section is only relevant if you are using terminal software or writing your own application. The provided SMD3 software interacts with the SMD3 in the same way and requires no specialist knowledge to use. A C# API is also provided, allowing you to easily integrate communication with the SMD3 into your own C# .NET application. This is available from our website, at https://arunmicro.com/products/smd3-stepper-motor-drive/.

Configuration

The SMD3 uses a USB Type-C connector, which is both robust and reversible (it may be inserted either way up). The device appears as a virtual COM port on your PC. Configure the serial port as follows:

  • 115200 baud
  • 1 Stop bit
  • No parity
  • No flow control

Protocol

A simple text-based protocol is used. Commands are sent to the SMD3, checked and executed, and a response returned. Wait for a response to the previous command before sending the next to avoid buffer overflow in the SMD3. Commands are in the form (Note that angle brackets are shown for clarity only, they are not part of the protocol):

<mnemonic>,<argument 1>,<argument 2>,<argument n>…<CR><LF>

And responses are in the form:

<SFLAGS>,<EFLAGS>,<data 1>,<data 2>,<data n>…<CR><LF>

If the command executed successfully, or:

<SFLAGS>,<EFLAGS>,<error code><CR><LF>

If the command failed to execute correctly.

Where:

Item

Description

<mnemonic>

Short sequence of characters representing a command, case insensitive

<argument n>

Zero or more command arguments

<data n>

Zero or more response data items

<error code>

An error code, see section Error Codes. This includes both a number and text description of the error to aid when using the SMD3 via a terminal program.

<SFLAGS>

Set of flags representing the status of the SMD3, such as the state of the limit inputs or whether the joystick is connected. See section Status Flags

<EFLAGS>

Set of flags representing the error state of the SMD3, such as invalid mnemonic, or motor over-temperature fault. See 0

<CR><LF>

Message terminator; carriage return followed by line-feed (0x07,0x0D)

Comma separation
All elements are comma-separated, except for the message terminator which immediately follows the last item. A response is always sent on receipt of a message terminator. If an argument was supplied with a command, for example, to set a value, the value set will be returned in the response and serves as an additional confirmation of the command having executed as expected.

Many commands accept a real number argument when the underlying quantity is an integer, or finite set of real numbers. In this case, the supplied value being otherwise acceptable is rounded to the closest integer or real number from the allowed set, and it is this value that is returned in the response.

White space
Additional white space (tabs and spaces) are ignored except where they are surrounded by characters comprising the data item, in which case they will be considered as part of the data item itself.

No data items to return
If there are no data items as part of a response, only the SFLAGS and EFLAGS are returned. If an error occurred, then this will be reflected in the EFLAGS.

Argument types

Arguments may be one or a mix of the following types, depending on the command. Data returned by the SMD3 uses the same types, which are always presented as indicated in the “SMD3 response” column.

Type

Name

Description

Example argument values

SMD3 response

INT

Integer

Integer value, with or without sign

100, -10, +7

Sign included for negative values only.

E.g. 100, -10

UINT

Unsigned integer

Unsigned integer value, no sign. Hexadecimal representation may also be used, case insensitive

99, 1000, 0xA74F, 0xd7

Numeric format

E.g. 100, 200

Except for status and error flags which are returned in upper case 2-byte hexadecimal format,

E.g. 0x1234, 0xA4DE

FLOAT

Real number

Real number, with or without sign. Scientific format may also be used, case insensitive

10.23, 100e-3, 100E4, 10

Scientific format, with 5 places after the decimal point and a
2-digit exponent

E.g. 1.23000E+04, 5.76159E-10

STRING

ASCII string

ASCII string, consisting of characters 0x20 to 0x7E inclusive

Abc123

78-%^A

ASCII string,

E.g. “1234 abc”, “10%”

BOOL

Boolean

Binary, true/false value

0, 1

E.g. 0, 1

Flags

Error flags are reported by the SMD3 in hexadecimal format as explained above. E.g. a value of 0x0002 means bit 1 is set (TOPEN), indicating that the SMD3 has been disabled due to an open circuit temperature sensor.

Error flags (EFLAGS)

These indicate error conditions and are latching (i.e. remain set even after the error condition that caused them no longer persists). Clear using the CLR command or by using the reset fault input. The motor is disabled if one or more error flags are set.

Bit

Name

Description

0

TSHORT

Selected temperature sensor is short-circuited (Not applicable to Thermocouple)

1

TOPEN

Selected temperature sensor is open circuit

2

TOVR

Selected temperature sensor is reporting temperature > 190 °C and power has been removed from the motor to protect the windings

3

MOTOR SHORT

Motor phase to phase or phase to ground short has been detected

4

EXTERNAL DISABLE

Motor disabled via external input

5

EMERGENCY STOP

Motor disabled via software

6

CONFIGURATION ERROR

Motor configuration is corrupted

7-15

Reserved

Reserved, read as ‘0’

Status flags (SFLAGS)

Bit

Name

Description

0

JSCON

Joystick is connected

1

LIMIT NEGATIVE

Limit input is active (Note that the polarity is configurable, so active can mean high or low signal level)

2

LIMIT POSITIVE

3

EXTEN

External enable input state

4

IDENT

Ident mode is active, green status indicator is flashing to aid in identifying SMD3

5

Reserved

Reserved, read as ‘0’

6

STANDBY

Motor stationary. Check this bit before performing a function that requires the motor to be stopped first, such as changing mode

7

BAKE

Bake mode running

8

ATSPEED

Set when the motor is at target velocity

9-15

Reserved

Reserved, read as ‘0’

Error codes

Error

Description

-1 (Stop motor first)

Several actions, such as changing resolution or operating mode require that the motor is stopped first. Trying to run such a command before the motor has come to a stop and the standby flag in the status register is set will result in this error.

-2 (Argument validation)

An argument supplied to the command is invalid, for example, it is outside the allowable range.

-3 (Unable to get)

The command is write-only, read is not valid. This applies to commands such as RUNV where a read would have no meaning.

-5 (Action failed)

The command failed to execute due to an internal error, for example, the internal flash in which settings are stored has reached the end of life and data cannot be reliably written to it.

-6 (Not possible in mode)

The command is not applicable to this mode, for example, trying to start bake using RUNB when not in bake mode.

-7 (Not possible when motor disabled)

The motor is disabled (due to a fault, or external enable) and the command is one that starts motion, for example RUNV.

-101 (Argument type)

The argument is of the wrong type, for example a non-integer value was given where an integer value was required.

-102 (Argument count)

The argument count is incorrect, either too few or too many arguments have been supplied.

Quick reference

General

Mnemonic

Description

R

W

Arguments

SER

Read the serial number

 

 

FW

Read the firmware version number

 

 

CLR

Clear error flags

 

 

LOAD

Load saved configuration

 

 

STORE

Store configuration

 

 

LOADFD

Load factory defaults

 

 

IDENT

Identify SMD3 by blinking the status indicator

 

BOOL

MODE

Mode of operation

UINT

JSMODE

Joystick mode

UINT

AUTOJS

Auto switch to Joystick mode on JS connect

BOOL

EXTEN

External enable used

BOOL

FLAGS

Returns ascii table of status and error flag states

 

 

Command movement

Mnemonic

Description

R

W

Arguments

RUNV

Move motor velocity mode

 

STRING

RUNA

Move motor absolute positioning mode

 

INT

RUNR

Move motor relative positioning mode

 

INT

RUNB

Activate bake mode

 

 

RUNH

Start home mode procedure

 

STRING

STOP

Bring motor to a stop according to the current profile

 

 

SSTOP

Stop motor in 1 second on full step position independently of the current motion profile

 

 

ESTOP

Emergency stop. Stops the motor immediately

 

 

Motor

Mnemonic

Description

R

W

Arguments

TSEL

Temperature sensor selection, T/C or RTD

UINT

TMOT

Temperature in °C

 

 

IR

Run current in amps

FLOAT

IA

Acceleration current in amps

FLOAT

IH

Hold current in amps

FLOAT

PDDEL

Power down delay in milliseconds

FLOAT

IHD

Power down ramp delay in milliseconds

FLOAT

F

Freewheel mode

UINT

RES

Resolution

UINT

Limit inputs

Mnemonic

Description

R

W

Arguments

L

Global enable

BOOL

L+

Limit positive (Limit 1) enable

BOOL

L-

Limit negative (Limit 2) enable

BOOL

LP+

Limit n polarity (0 for active high, 1 for active low)

BOOL

LP-

BOOL

LP

Limit polarity for both Limit positive (Limit 1) and negative (Limit 2), (0 for active high, 1 for active low)

 

BOOL

LSM

How to stop on limit being triggered

BOOL

Profile

Mnemonic

Description

R

W

Arguments

AMAX

Acceleration in Hz/s

FLOAT

DMAX

Deceleration in Hz/s

FLOAT

VSTART

Start frequency in Hz

FLOAT

VSTOP

Stop frequency in Hz

FLOAT

VMAX

Target step frequency in Hz

FLOAT

VACT

Actual frequency in Hz

 

 

PACT

Actual position in steps

FLOAT

PREL

Relative position in steps

FLOAT

TZW

Time to stop before moving again in seconds

FLOAT

THIGH

Full step – micro stepping transition

FLOAT

Step/Direction

Mnemonic

Description

R

W

Arguments

EDGE

Which edges of step input to generate a step on

UINT

INTERP

Interpolate step input to 256 micro steps

UINT

Bake

Mnemonic

Description

R

W

Arguments

BAKET

Bake temperature setpoint

UINT

Command reference

General


Set or query enable blinking of that status indicator to aid in identifying the SMD3 among others.

Command:

IDENT, Enable<CR><LF>

Query:

IDENT<CR><LF>

Arguments

Enable  

BOOL

The enable state.

[0:

Disable]

1:

Enable

Returns

The enable state, as above.

Examples

Tx: IDENT,1<CR><LF>

Rx: 0x0000,0x0000,1<CR><LF>

Tx: IDENT<CR><LF>

Rx: 0x0000,0x0000,1<CR><LF>

// Set ident function on

 

// Query state of ident function

 

 MODE - Choose mode of operation 

Set or query the operating mode. See section Operating Modes for an explanation of each mode.

Command:

MODE, Value<CR><LF>

Query:

MODE<CR><LF>

Arguments

Value

UINT

The operating mode.

0:

Step/direction

1:

Step/direction triggered velocity

[2:

Remote]

3:

Joystick

4:

Bake

5:

Home

Returns

The mode, as above, followed by a space and the name of the mode in brackets.

Remarks

If the motor is moving when attempting to change the mode, a stop motor first error is returned and the mode is unchanged.

Examples

Tx: MODE,2<CR><LF>

Rx: 0x0000,0x0000,2 (Remote)<CR><LF>

Tx: MODE<CR><LF>

Rx: 0x0000,0x0000,1 (Remote)<CR><LF>

// Set mode to remote

 

// Query state of mode

 

JSMODE – Joystick mode

Set or query the joystick mode. Choose between single step, which allows precise single steps or continuous rotation, or continuous which requires only a single button press to make the motor move.

Command:

JSMODE, Mode<CR><LF>

Query:

JSMODE<CR><LF>

Arguments

Mode

UINT

The joystick mode.

[0:

Single step]

1:

Continuous

Returns

The mode, as above.

Remarks

Set requires the motor to be in standby, otherwise, a stop motor first error will be returned.

In single step mode, a brief button press (< 0.5 s) will execute one step in that direction, while pressing the button for > 0.5 s will cause the motor to accelerate up to slewing speed and continue to rotate in that direction until the button is released, at which point the motor will decelerate to a stop.

In continuous mode, a brief button press will trigger the motor to accelerate up to slewing speed. A subsequent press of the same button causes it to decelerate to a stop. If, for example, the clockwise button is pressed while the motor is rotating anti-clockwise, the motor will first decelerate to a stop before changing direction.

Examples

Tx: JSMODE,1<CR><LF>

Rx: 0x0000,0x0000,1<CR><LF>

Tx: JSMODE<CR><LF>

Rx: 0x0000,0x0000,1<CR><LF>

// Set JSMODE to continuous

 

// Query state of JSMDOE

 

AUTOJS – Auto switch to joystick mode