Roboteq Controllers User Manual V18

Roboteq%20Controllers%20User%20Manual%20v18

Roboteq%20Controllers%20User%20Manual%20v18

Roboteq%20Controllers%20User%20Manual%20v18

Roboteq%20Controllers%20User%20Manual%20v18

Roboteq%20Controllers%20User%20Manual%20v18

User Manual: Pdf

Open the PDF directly: View PDF PDF.
Page Count: 384

DownloadRoboteq Controllers User Manual V18
Open PDF In BrowserView PDF
Advanced Brushed
and Brushless
Digital Motor
Controllers

User Manual
V1.8, August 28, 2017
visit www.roboteq.com to download the latest revision of this manual
©Copyright 2017 Roboteq, Inc



1

Brushless Motor Connections and Operation

Revision History
Date

Version

Changes

August 29, 2017

1.8

Added AC Induction Sections

1.7

Extended command set
Added Speed Position Mode

October 15, 2016

Major Additions to Brushless Motor Section
Added RoboCAN protocol
May 10, 2012

1.2

Miscellaneous updates
Added CAN Networking
Added Closed Loop Count Position mode,
Closed Loop Torque mode

January 8, 2011

1.2

Extended command set
Added Brushless Motor Connections and Operation

July 15, 2010

1.2

Extended command set

May 15, 2010

1.1

Improved position mode
Added Scripting

January 1, 2010

1.0

Initial release

September 15, 2008

1.9d

Created Brushless DC version

June 1, 2007

1.9b

Added Output C active when Motors On
Fixed Encoder Limit Switches
Protection in case of Encoder failure in Closed Loop Speed
Added Short Circuit Protection (with supporting hardware)
Added Analog 3 and 4 Inputs (with supporting hardware)
Added Operating Mode Change on-the-fly
Changeable PWM frequency
Selectable polarity for Dead Man Switch
Modified Flashing Pattern
Separate PID Gains for Ch1 and C2, changeable on-the-fly
Miscellaneous additions and correction
Added Amps Calibration option

January 10, 2007

1.9

Changed Amps Limit Algorithm
Miscellaneous additions and correction
Console Mode in Roborun

March 7, 2005

1.7b

Updated Encoder section.

February 1, 2005

1.7

Added Position mode support with Optical Encoder
Miscellaneous additions and corrections

April 17, 2004

2

1.6

Added Optical Encoder support

Advanced Digital Motor Controllers User Manual

V1.8, August 28, 2017

Revision History

Date

Version

Changes

March 15, 2004

1.5

Added finer Amps limit settings
Enhanced Roborun utility

August 25, 2003

1.3

Added Closed Loop Speed mode
Added Data Logging support
Removed RC monitoring

August 15, 2003

1.2

April 15, 2003

1.1

Modified to cover XDC24xx - XBL16xx - XSX18xx controller
design
Changed Power Connection section
Added analog mode section
Added position mode section
Added RCRC monitoring feature
Updated Roborun utility section
Modified RS232 watchdog

March 15, 2003

1.0

Initial Release

The information contained in this manual is believed to be accurate and reliable. However,
it may contain errors that were not noticed at time of publication. User’s are expected to
perform their own product validation and not rely solely on data contained in this manual.

Advanced Digital Motor Controllers User Manual

3

Revision History.......................................................................................... 2
Introduction............................................................................................... 19
Refer to the Datasheet for Hardware-Specific Issues............................... 19
User Manual Structure and Use................................................................ 19
SECTION 1 Connecting Power and Motors to the Controller................... 19
SECTION 2 Safety Recommendations..................................................... 19
SECTION 3 Connecting Sensors and Actuators to Input/Outputs ........... 19
SECTION 4 I/O Configuration and Operation............................................ 20
SECTION 5 Magentic Sensor................................................................... 20
SECTION 6 Command Modes ................................................................. 20
SECTION 7 Motor Operating Features and Options................................. 20
SECTION 8 Brushless Motor Connections and Operation........................ 20
SECTION 9 AC Induction MotorOperation................................................ 20
SECTION 10 Closed Loop Speed and Speed Position Modes.................. 20
SECTION 11 Closed Loop Relative and Tracking Position Modes.............. 20
SECTION 12 Closed Loop Count Position Mode...................................... 20
SECTION 13 Closed Loop Torque Mode................................................... 21
SECTION 14 Serial (RS232/USB) Operation............................................. 21
SECTION 15 CAN Networking on Roboteq Controllers............................ 21
SECTION 16 RoboCAN Networking......................................................... 21
SECTION 17 CANopen Interface.............................................................. 21
SECTION 18 MicroBasic Scripting............................................................ 21
SECTION 19 Commands Reference......................................................... 21
SECTION 20 Using the Roborun Configuration Utility.............................. 21

4

SECTION 1

Connecting Power and Motors to the Controller....................................................23
Power Connections................................................................................... 23
Controller Power....................................................................................... 24
Controller Powering Schemes................................................................... 25
Mandatory Connections........................................................................... 26
Connection for Safe Operation with Discharged Batteries (note 1).......... 27
Use precharge Resistor to prevent switch arcing (note 2)........................ 27
Protection against Damage due to Regeneration (notes 3 and 4)............ 27
Connect Case to Earth if connecting AC equipment (note 5)................... 27
Avoid Ground loops when connecting I/O devices (note 6)...................... 27
Connecting the Motors............................................................................. 28
Single Channel Operation......................................................................... 29
Power Fuses............................................................................................. 29
Wire Length Limits................................................................................... 29
Electrical Noise Reduction Techniques...................................................... 30
Battery Current vs. Motor Current............................................................ 30
Measured and Calculated Currents.......................................................... 31
Power Regeneration Considerations......................................................... 32
Using the Controller with a Power Supply................................................ 33

SECTION 2

Safety Recommendations........................................................................................35
Possible Failure Causes............................................................................ 35

Advanced Digital Motor Controllers User Manual

V1.8, August 28, 2017

Motor Deactivation in Normal Operation.................................................. 36
Motor Deactivation in Case of Output Stage Hardware Failure................ 36
Manual Emergency Power Disconnect..................................................... 38
Remote Emergency Power Disconnect.................................................... 39
Protection using Supervisory Microcomputer.......................................... 39
Self Protection against Power Stage Failure............................................. 40

SECTION 3

Connecting Sensors and Actuators to Input/Outputs.............................................43
Controller Connections............................................................................. 43
Controller’s Inputs and Outputs................................................................ 44
Connecting devices to Digital Outputs..................................................... 45
Connecting Resistive Loads to Outputs................................................... 45
Connecting Inductive loads to Outputs..................................................... 45
Connecting Switches or Devices to Inputs shared with Outputs............. 46
Connecting Switches or Devices to direct Digital Inputs.......................... 46
Connecting a Voltage Source to Analog Inputs......................................... 47
Reducing noise on Analog Inputs............................................................. 48
Connecting Potentiometers to Analog Inputs........................................... 48
Connecting Potentiometers for Commands with Safety band guards...... 49
Connecting Tachometer to Analog Inputs................................................. 50
Connecting External Thermistor to Analog Inputs..................................... 51
Using the Analog Inputs to Monitor External Voltages............................. 52
Connecting to RC Radios.......................................................................... 53
Connecting Optical Encoders................................................................... 53
Optical Incremental Encoders Overview.................................................. 53
Recommended Encoder Types................................................................. 54
Connecting the Encoder........................................................................... 55
Cable Length and Noise Considerations................................................... 56
Motor - Encoder Polarity Matching........................................................... 56

SECTION 4

I/O Configuration and Operation..............................................................................57
Basic Operation.......................................................................................... 57
Input Selection.......................................................................................... 58
Digital Inputs Configurations and Uses..................................................... 58
Analog Inputs Configurations and Use..................................................... 59
Analog Min/Max Detection........................................................................ 60
Min, Max and Center adjustment.............................................................. 60
Deadband Selection.................................................................................. 61
Command Correction................................................................................ 62
Use of Analog Input................................................................................... 62
Pulse Inputs Configurations and Uses....................................................... 62
Digital Outputs Configurations and Triggers.............................................. 63
Encoder Configurations and Use.............................................................. 64
Hall and other Rotor Sensor Inputs........................................................... 65

SECTION 5

Magnetic Guide Sensor Connection and Operation...............................................67
Introduction to MGS1600 Magnetic Guide Sensor................................... 67
MagSensor MultiPWM interface.............................................................. 68
Enabling MagSensor MultiPWM Communication.................................... 68

Advanced Digital Motor Controllers User Manual

5

Accessing Sensor Information.................................................................. 68
Connecting Multiple Magnetic Guide Sensor........................................... 69
Accessing Multiple Sensor Information Sequentially................................ 69
Accessing Multiple Sensor Information Simultaneously........................... 70

6

SECTION 6

Command Modes.....................................................................................................73
Input Command Modes and Priorities...................................................... 73
USB vs Serial Communication Arbitration................................................. 75
CAN Commands Arbitration...................................................................... 75
Commands issued from MicroBasic scripts............................................. 75
Operating the Controller in RC mode........................................................ 75
Input RC Channel Selection...................................................................... 76
Input RC Channel Configuration............................................................... 77
Joystick Range Calibration........................................................................ 77
Deadband Insertion................................................................................... 77
Command Correction................................................................................ 77
Reception Watchdog................................................................................. 77
Using Sensors with PWM Outputs for Commands.................................. 78
Operating the Controller In Analog Mode................................................. 78
Input Analog Channel Selection................................................................ 78
Input Analog Channel Configuration......................................................... 79
Analog Range Calibration.......................................................................... 79
Using Digital Input for Inverting direction................................................. 79
Safe Start in Analog Mode........................................................................ 79
Protecting against Loss of Command Device........................................... 79
Safety Switches........................................................................................ 79
Monitoring and Telemetry in RC or Analog Modes................................... 80
Using the Controller with a Spektrum Satellite Receiver.......................... 80
Using the Controller in Serial (USB/RS232) Mode.................................... 80

SECTION 7

Motor Operating Features and Options..................................................................81
Power Output Circuit Operation................................................................ 81
Global Power Configuration Parameters................................................... 82
PWM Frequency....................................................................................... 82
Overvoltage Protection............................................................................. 82
Undervoltage Protection........................................................................... 82
Temperature-Based Protection................................................................. 82
Short Circuit Protection............................................................................. 83
Mixed Mode Select................................................................................... 83
Motor Channel Parameters....................................................................... 84
User Selected Current Limit Settings....................................................... 84
Selectable Amps Threshold Triggering...................................................... 85
Programmable Acceleration & Deceleration............................................. 85
Forward and Reverse Power Adjustment Gain......................................... 86
Selecting the Motor Control Modes......................................................... 86
Open Loop Speed Control........................................................................ 86
Closed Loop Speed Control...................................................................... 86
Closed Loop Speed Position Control......................................................... 87

Advanced Digital Motor Controllers User Manual

V1.8, August 28, 2017

Closed Loop Position Relative Control...................................................... 87
Closed Loop Count Position...................................................................... 88
Closed Loop Position Tracking................................................................... 88
Torque Mode............................................................................................. 89

SECTION 8

Brushless Motor Connections and Operation........................................... 91
Introduction to Brushless Motors............................................................. 91
Number of Poles....................................................................................... 92
Trapezoidal Switching................................................................................ 93
Hall Sensor Wiring.................................................................................... 93
Hall Sensor Verification............................................................................. 94
Hall Sensor Alignment and Wiring Order.................................................. 95
Determining the Wiring Order Empirically................................................ 96
Sensorless Trapezoidal Commutation....................................................... 97
Setting and Operating Trapezoidal Modes................................................. 97
Sensorless Configuration and Calibration................................................. 98
Verifying Commutation Timing.................................................................. 98
Sinusoidal Commutation........................................................................... 99
Angle Feedback Sensors........................................................................... 99
Sinusoidal Configurations and Calibrations..............................................101
Setup and Test Encoder Feedback Mode................................................ 102
Setup and Test Hall Encoder Feedback Mode......................................... 102
Setup and Test the SPI Encoder Feedback Mode................................... 103
Setup and Test the Sin/Cos Encoder Feedback Mode............................. 103
Operating Brushless Motors................................................................... 107
Stall Detection........................................................................................ 107
Speed Measurement using the angle feedback Sensors....................... 107
Distance Measurement using Hall, SPI or other Sensors....................... 108
Field Oriented Control (FOC).................................................................. 108
FOC Testing and Troubleshooting.............................................................110
Field Weakening.......................................................................................110

SECTION 9

AC Induction MotorOperation..................................................................113
Introduction to AC Induction Motors........................................................113
Asynchronous Rotation and Slip..............................................................114
Connecting the Motor..............................................................................115
Selecting and Connecting the Encoder....................................................115
Testing the Encoder.................................................................................115
Open Loop Variable Frequency Drive Operation......................................116
Figuring the Motor’s Volts per Hertz........................................................116
Maintaining Slip within Safe Range.........................................................117
Closed Loop Speed Mode with Constant Slip Control............................117
Field Oriented Control (FOC) mode Operation........................................118
Configuring FOC Torque Mode................................................................119
Configuring FOC Speed Mode................................................................ 120

SECTION 10

Closed Loop Speed and Speed-Position Modes................................................. 121
Modes Description................................................................................. 121

Advanced Digital Motor Controllers User Manual

7

Closed Loop Speed Mode...................................................................... 121
Closed Loop Speed Position Control ...................................................... 121
Motor Sensors........................................................................................ 122
Tachometer or Encoder Mounting.......................................................... 122
Tachometer wiring.................................................................................. 122
Brushless Hall Sensors as Speed Sensors............................................. 123
Speed Sensor and Motor Polarity........................................................... 123
Controlling Speed in Closed Loop........................................................... 124
PID Description....................................................................................... 125
PID tuning in Closed Loop Speed Mode................................................. 126
PID Tuning in Speed Position Mode........................................................ 127
Error Detection and Protection............................................................... 128

8

SECTION 11

Closed Loop Relative and Tracking Position Modes............................................. 129
Modes Description................................................................................. 129
Position Relative Mode........................................................................... 129
Position Tracking Mode........................................................................... 129
Selecting the Position Modes................................................................. 130
Position Feedback Sensor Selection....................................................... 130
Sensor Mounting.................................................................................... 130
Feedback Sensor Range Setting............................................................. 131
Adding Safety Limit Switches................................................................. 132
Using Current Trigger as Protection........................................................ 133
Operating in Closed Loop Relative Position Mode.................................. 133
Operating in Closed Loop Tracking Mode................................................ 135
Position Mode Relative Control Loop Description.................................. 135
PID tuning in Position Mode................................................................... 136
PID Tuning Differences between Position Relative and Position Tracking.137
Loop Error Detection and Protection..................................................... 138

SECTION 12

Closed Loop Count Position Mode....................................................................... 139
Mode description.................................................................................... 139
Sensor Types and Mounting.................................................................... 140
Encoder Home reference........................................................................ 140
Preparing and Switching to Closed Loop................................................ 140
Count Position Commands..................................................................... 141
Position Command Chaining................................................................... 141
Position Accuracy Considerations........................................................... 142
PID Tunings............................................................................................. 143
Loop Error Detection and Protection...................................................... 143

SECTION 13

Closed Loop Torque Mode..................................................................................... 145
Torque Mode Description ...................................................................... 145
Torque Mode Selection, Configuration and Operation............................ 146
Torque Mode Tuning................................................................................ 146
Configuring the Loop Error Detection..................................................... 146
Torque Mode Limitations........................................................................ 146
Torque Mode Using an External Amps Sensor....................................... 147

Advanced Digital Motor Controllers User Manual

V1.8, August 28, 2017

SECTION 14

Serial (RS232/USB) Operation............................................................................... 149
Use and benefits of Serial Communication............................................ 149
Serial Port Configuration......................................................................... 150
Connector RS232 Pin Assignment.......................................................... 150
Setting Different Bit Rates...................................................................... 150
Cable configuration................................................................................. 151
Extending the RS232 Cable.................................................................... 151
Connecting to Arduino and other TTL Serial Microcomputers................ 152
USB Configuration.................................................................................. 153
Command Priorities................................................................................ 154
USB vs. Serial Communication Arbitration.............................................. 154
CAN Commands..................................................................................... 154
Script-generated Commands.................................................................. 154
Communication Protocol Description..................................................... 154
Character Echo........................................................................................ 155
Command Acknowledgment.................................................................. 155
Command Error...................................................................................... 155
Watchdog time-out................................................................................. 155
Controller Present Check........................................................................ 155

SECTION 15

CAN Networking on Roboteq Controllers............................................................ 157
Supported CAN Modes........................................................................... 157
Connecting to CAN bus.......................................................................... 158
Introduction to CAN Hardware signaling................................................. 159
CAN Bus Pinout...................................................................................... 159
CAN and USB Limitations....................................................................... 160
Basic Setup and Troubleshooting............................................................ 160
Cable polarity, integrity and termination resistor.................................... 161
Check CANbus activity using a voltmeter............................................... 161
Check CANbus activity using a CAN sniffer............................................ 161
Mode Selection and Configuration......................................................... 161
Common Configurations......................................................................... 162
MiniCAN Configurations......................................................................... 162
RawCAN Configurations......................................................................... 162
Using RawCAN Mode............................................................................. 162
Checking Received Frames..................................................................... 162
Reading Raw Received Frames.............................................................. 163
Transmitting Raw Frames........................................................................ 163
Using MiniCAN Mode............................................................................. 164
Transmitting Data.................................................................................... 164
Receiving Data........................................................................................ 164
MiniCAN Usage Example....................................................................... 165

SECTION 16

RoboCAN Networking............................................................................. 167
Network Operation................................................................................. 168
RoboCAN via Serial & USB..................................................................... 168
Runtime Commands............................................................................... 168
Broadcast Command.............................................................................. 168

Advanced Digital Motor Controllers User Manual

9

Realtime Queries.................................................................................... 169
Remote Queries restrictions................................................................... 169
Configurations Read/Writes.................................................................... 170
Remote Configurations Read restrictions............................................... 170
Remote Maintenance Commands.......................................................... 170
Self Addressed Commands and Queries................................................ 171
RoboCAN via MicroBasic Scripting......................................................... 171
Sending Commands and Configuration.................................................. 171
Reading Operating values Configurations............................................... 172
Continuous Scan..................................................................................... 173
Checking the presence of a Node........................................................... 175
Self Addressed Commands and Queries................................................ 175
Broadcast Command.............................................................................. 175
Remote MicroBasic Script Download..................................................... 175

10

SECTION 17

CANopen Interface................................................................................................. 177
Use and benefits of CANopen................................................................ 177
CAN Connection..................................................................................... 177
CAN Bus Configuration........................................................................... 178
Node ID................................................................................................... 178
Bit Rate................................................................................................... 178
Heartbeat................................................................................................ 178
Autostart................................................................................................. 178
Commands Accessible via CANopen...................................................... 179
CANopen Message Types....................................................................... 179
Service Data Object (SDO) Read/Write Messages................................. 179
Transmit Process Data Object (TPDO) Messages.................................. 179
Receive Process Data Object (RPDO) Messages................................... 180
SDO Construction Details....................................................................... 183
SDO Example 1: Set Encoder Counter 2 (C) of node 1 value 10............ 184
SDO Example 2: Activate emergency shutdown (EX) for node 12......... 184
SDO Example 3: Read Battery Volts (V) of node 1. ................................. 185

SECTION 18

MicroBasic Scripting............................................................................................... 187
Script Structure and Possibilities............................................................. 187
Source Program and Bytecodes............................................................. 188
Variables Types and Storage.................................................................... 188
Variable content after Reset.................................................................... 188
Controller Hardware Read and Write Functions...................................... 188
Timers and Wait...................................................................................... 189
Execution Time Slot and Execution Speed.............................................. 189
Protections.............................................................................................. 189
Print Command Restrictions................................................................... 189
Editing, Building, Simulating and Executing Scripts................................ 190
Editing Scripts......................................................................................... 190
Building Scripts....................................................................................... 190
Simulating Scripts................................................................................... 190
Downloading MicroBasic Scripts to the controller.................................. 191

Advanced Digital Motor Controllers User Manual

V1.8, August 28, 2017

Saving and Loading Scripts in Hex Format.............................................. 191
Executing MicroBasic Scripts................................................................. 191
Debugging Microbasic Scripts................................................................ 192
Script Command Priorities...................................................................... 192
MicroBasic Scripting Techniques............................................................. 193
Single Execution Scripts......................................................................... 193
Continuous Scripts.................................................................................. 193
Optimizing Scripts for Integer Math........................................................ 194
Script Examples...................................................................................... 195
MicroBasic Language Reference............................................................ 195
Introduction............................................................................................. 195
Comments.............................................................................................. 196
Boolean................................................................................................... 196
Numbers................................................................................................. 196
Strings..................................................................................................... 196
Blocks and Labels................................................................................... 197
Variables.................................................................................................. 198
Arrays...................................................................................................... 198
Terminology............................................................................................ 198
Keywords................................................................................................ 199
Operators................................................................................................ 199
Micro Basic Functions............................................................................. 199
Controller Configuration and Commands................................................ 200
Timers Commands................................................................................. 200
Pre-Processor Directives (#define).......................................................... 200
Option (Compilation Options)................................................................. 200
Dim (Variable Declaration)....................................................................... 200
If...Then Statement................................................................................. 201
For...Next Statement............................................................................... 202
While/Do Statements............................................................................. 203
Terminate Statement.............................................................................. 204
Exit Statement........................................................................................ 204
Continue Statement................................................................................ 204
GoTo Statement...................................................................................... 205
GoSub/Return Statements...................................................................... 205
ToBool Statement................................................................................... 206
Print Statement....................................................................................... 206
+ Operator.............................................................................................. 206
- Operator................................................................................................ 206
* Operator............................................................................................... 206
/ Operator................................................................................................ 206
Mod Operator......................................................................................... 207
And Operator.......................................................................................... 207
Or Operator............................................................................................. 207
XOr Operator........................................................................................... 207
Not Operator........................................................................................... 207

Advanced Digital Motor Controllers User Manual

11

True Literal.............................................................................................. 207
False Literal............................................................................................. 207
++ Operator............................................................................................ 207
-- Operator............................................................................................... 208
<< Operator............................................................................................ 208
>> Operator............................................................................................ 209
<> Operator............................................................................................ 209
< Operator.............................................................................................. 209
> Operator.............................................................................................. 209
<= Operator............................................................................................ 209
> Operator.............................................................................................. 209
>= Operator............................................................................................ 209
+= Operator............................................................................................ 209
-= Operator............................................................................................. 210
*= Operator............................................................................................ 210
/= Operator............................................................................................. 210
<<= Operator......................................................................................... 210
>>= Operator..........................................................................................211
[ ] Operator...............................................................................................211
Abs Function............................................................................................211
Atan Function...........................................................................................211
Cos Function............................................................................................211
GetValue................................................................................................. 212
SetCommand.......................................................................................... 212
SetConfig / GetConfig............................................................................. 213
SetTimerCount/GetTimerCount.............................................................. 213
SetTimerState/GetTimerState................................................................ 213
Sending RoboCAN Commands and Configuration.................................. 214
Reading RoboCAN Operating Values Configurations.............................. 214
RoboCAN Continuous Scan.................................................................... 215
Checking the Presence of a RoboCAN Node.......................................... 215

SECTION 19

12

Commands Reference............................................................................ 217
Commands Types.................................................................................... 217
Runtime commands............................................................................... 217
Runtime queries..................................................................................... 217
Maintenance commands........................................................................ 217
Set/Read Configuration commands........................................................ 218
Runtime Commands............................................................................... 218
AC - Set Acceleration.............................................................................. 219
AX - Next Acceleration............................................................................ 219
B - Set User Boolean Variable................................................................. 220
BND - Mutli-purpose Bind....................................................................... 221
C - Set Encoder Counters....................................................................... 221
CB - Set Brushless Counter.................................................................... 222
CG - Set Motor Command via CAN........................................................ 222
CS - CAN Send........................................................................................ 223

Advanced Digital Motor Controllers User Manual

V1.8, August 28, 2017

D0 - Reset Individual Digital Out bits...................................................... 224
D1 - Set Individual Digital Out bits.......................................................... 224
DC - Set Deceleration............................................................................. 225
DS - Set all Digital Out bits..................................................................... 226
DX - Next Decceleration.......................................................................... 226
EES - Save Configuration in EEPROM.................................................... 227
EX - Emergency Stop.............................................................................. 228
G - Go to Speed or to Relative Position................................................... 228
H - Load Home counter.......................................................................... 229
MG - Emergency Stop Release............................................................... 230
MS - Stop in all modes............................................................................ 230
P - Go to Absolute Desired Position........................................................ 230
PR - Go to Relative Desired Position....................................................... 231
PRX - Next Go to Relative Desired Position............................................ 232
PX - Next Go to Absolute Desired Position............................................. 232
R - MicroBasic Run................................................................................. 233
RC - Set Pulse Out.................................................................................. 234
S - Set Motor Speed............................................................................... 234
SX - Next Velocity.................................................................................... 235
VAR - Set User Variable........................................................................... 235
Runtime Queries..................................................................................... 236
A - Read Motor Amps............................................................................. 238
AI - Read Analog Inputs.......................................................................... 239
AIC - Read Analog Input after Conversion............................................... 239
ANG - Read Rotor Angle......................................................................... 240
ASI - Read Raw Sin/Cos sensor.............................................................. 240
B - Read User Boolean Variable............................................................... 241
BA - Read Battery Amps......................................................................... 241
BCR - Read Brushless Count Relative..................................................... 242
BS - Read BL Motor Speed in RPM........................................................ 242
BSR - Read BL Motor Speed as 1/1000 of Max RPM............................. 243
C - Read Encoder Counter Absolute....................................................... 243
CAN - Read Raw CAN frame.................................................................. 244
CB - Read Absolute Brushless Counter.................................................. 245
CF - Read Raw CAN Received Frames Count......................................... 245
CIA - Read Converted Analog Command................................................ 246
CIP - Read Internal Pulse Command....................................................... 246
CIS - Read Internal Serial Command....................................................... 247
CL - Read RoboCAN Alive Nodes Map................................................... 247
CR - Read Encoder Count Relative......................................................... 248
D - Read Digital Inputs............................................................................ 249
DI - Read Individual Digital Inputs........................................................... 249
DO - Read Digital Output Status............................................................. 250
DR - Read Destination Reached.............................................................. 250
E - Read Closed Loop Error..................................................................... 251
F - Read Feedback................................................................................... 251

Advanced Digital Motor Controllers User Manual

13

FC - Read FOC Angle Adjust................................................................... 252
FF - Read Fault Flags............................................................................... 253
FID - Read Firmware ID.......................................................................... 253
FM - Read Runtime Status Flag.............................................................. 254
FS - Read Status Flags............................................................................ 255
HS - Read Hall Sensor States................................................................. 255
ICL - Is RoboCAN Node Alive.................................................................. 256
K - Read Spektrum Receiver................................................................... 256
LK - Read Lock status............................................................................. 257
M - Read Motor Command Applied........................................................ 258
MA - Read Field Oriented Control Motor Amps...................................... 258
MGD - Read Magsensor Track Detect..................................................... 259
MGM - Read Magsensor Markers.......................................................... 260
MGS - Read Magsensor Status.............................................................. 260
MGT - Read Magsensor Track Position.................................................... 261
MGY - Read Magsensor Gyroscope....................................................... 262
P - Read Motor Power Output Applied.................................................... 262
PI - Read Pulse Inputs............................................................................. 263
PIC - Read Pulse Input after Conversion................................................. 264
S - Read Encoder Motor Speed in RPM.................................................. 264
SCC - Read Script Checksum.................................................................. 265
SR - Read Encoder Speed Relative......................................................... 265
T - Read Temperature............................................................................. 266
TM - Read Time....................................................................................... 267
TR - Read Position Relative Tracking........................................................ 267
TRN - Read Control Unit type and Controller Model............................... 268
UID - Read MCU Id................................................................................. 268
V - Read Volts.......................................................................................... 269
VAR - Read User Integer Variable............................................................ 270
SL - Read Slip Frequency........................................................................ 270
Query History Commands...................................................................... 271
# - Send Next History Item / Stop Automatic Sending............................ 271
# C - Clear Buffer History........................................................................ 272
# nn - Start Automatic Sending............................................................... 272
Maintenance Commands........................................................................ 272
CLMOD - Calibrate Sin/Cos sensors....................................................... 273
CLRST - Reset configuration to factory defaults..................................... 273
CLSAV - Save calibrations to Flash.......................................................... 273
DFU - Update Firmware via USB............................................................ 273
EELD - Load Parameters from EEPROM............................................... 274
EERST - Reset Factory Defaults............................................................. 274
EESAV - Save Configuration in EEPROM................................................ 274
LK - Lock Configuration Access.............................................................. 275
RESET - Reset Controller........................................................................ 275
SLD - Script Load.................................................................................... 275
STIME - Set Time.................................................................................... 275
UK - Unlock Configuration Access.......................................................... 276

14

Advanced Digital Motor Controllers User Manual

V1.8, August 28, 2017

Set/Read Configuration Commands ....................................................... 276
Setting Configurations............................................................................ 276
Reading Configurations........................................................................... 277
Configuration Read Protection................................................................ 278
General Configuration and Safety........................................................... 278
ACS - Analog Center Safety.................................................................... 278
AMS - Analog within Min & Max Safety................................................. 279
BEE - User Storage in Battery Backed RAM........................................... 280
BRUN - MicroBasic Auto Start................................................................ 280
CLIN - Command Linearity...................................................................... 281
CPRI - Command Priorities.................................................................... 282
DFC - Default Command value............................................................... 283
ECHOF - Enable/Disable Serial Echo...................................................... 283
EE - Store User Data in Flash.................................................................. 284
RSBR - Set RS232 bit rate...................................................................... 285
RWD - Serial Data Watchdog.................................................................. 286
SCRO - Select Print output port for scripting.......................................... 287
SKCTR - Spektrum Center...................................................................... 287
SKDB - Spektrum Deadband................................................................... 288
SKLIN - Spektrum Linearity..................................................................... 288
SKMAX - Spektrum Max......................................................................... 289
SKMIN - Spektrum Min........................................................................... 290
SKUSE - Assign Spektrum port to motor command............................... 290
TELS - Telemetry String........................................................................... 291
Analog, Digital, Pulse IO Configurations................................................. 292
ACTR - Set Analog Input Center (0) Level.............................................. 292
ADB - Analog Deadband......................................................................... 293
AINA - Analog Input Use......................................................................... 294
ALIN - Analog Linearity........................................................................... 295
AMAX - Set Analog Input Max Range..................................................... 296
AMAXA - Action at Analog Max.............................................................. 296
AMIN - Set Analog Input Min Range....................................................... 297
AMINA - Action at Analog Min................................................................ 298
AMOD - Enable and Set Analog Input Mode.......................................... 299
APOL - Analog Input Polarity................................................................... 300
DINA - Digital Input Action...................................................................... 300
DINL - Digital Input Active Level............................................................. 301
DOA - Digital Output Action.................................................................... 302
DOL - Digital Outputs Active Level........................................................ 303
PCTR - Pulse Center Range................................................................... 303
PDB - Pulse Input Deadband................................................................... 304
PINA - Pulse Input Use........................................................................... 305
PLIN - Pulse Linearity.............................................................................. 306
PMAX - Pulse Max Range....................................................................... 306
PMAXA - Action on Pulse Max.............................................................. 307
PMIN - Pulse Min Range......................................................................... 308
PMINA - Action on Pulse Min................................................................ 308

Advanced Digital Motor Controllers User Manual

15

PMOD - Pulse Mode Select.................................................................... 309
PPOL - Pulse Input Polarity......................................................................311
Motor Configurations...............................................................................311
ALIM - Amp Limit.................................................................................... 312
ATGA - Amps Trigger Action.................................................................... 313
ATGD - Amps Trigger Delay..................................................................... 314
ATRIG - Amps Trigger Level..................................................................... 315
BKD - Brake activation delay in ms......................................................... 315
BLFB - Encoder or Hall Sensor Feedback for closed loop....................... 316
BLSTD - Stall Detection.......................................................................... 317
CLERD - Close Loop Error Detection...................................................... 318
EHL - Encoder High Count Limit............................................................. 318
EHLA - Encoder High Limit Action.......................................................... 319
EHOME - Encoder Counter Load at Home Position................................ 320
ELL - Encoder Low Count Limit............................................................. 321
ELLA - Encoder Low Limit Action........................................................... 321
EMOD - Encoder Usage......................................................................... 322
EPPR - Encoder PPR Value...................................................................... 323
ICAP - PID Integral Cap........................................................................... 324
KD - PID Differential Gain........................................................................ 324
KI - PID Integral Gain............................................................................... 325
KP - PID Proportional Gain...................................................................... 326
MAC - Motor Acceleration Rate.............................................................. 327
MDEC - Motor Deceleration Rate........................................................... 327
MDIR - Motor Direction.......................................................................... 328
MMOD - Operating Mode...................................................................... 328
MVEL - Default Position Velocity............................................................. 329
MXMD - Separate or Mixed Mode Select............................................... 330
MXPF - Motor Max Power Forward........................................................ 330
MXPR - Motor Max Power Reverse....................................................... 331
MXRPM - Max RPM Value...................................................................... 332
MXTRN - Number of turns between limits............................................. 332
OVH - Overvoltage hysteresis................................................................. 333
OVL - Overvoltage Cutoff Limit............................................................... 334
PWMF - PWM Frequency....................................................................... 334
THLD - Short Circuit Detection Threshold............................................... 335
UVL - Undervoltage Limit....................................................................... 336
^UVL 100 : Set undervoltage limit to 10.0 V........................................... 336
Brushless Specific Commands............................................................... 336
BADJ - Brushless zero angle................................................................... 337
BADV - Brushless timing angle adjust..................................................... 338
BFBK - Brushless feedback sesnor......................................................... 338
BHL - Brushless Counter High Limit....................................................... 339
BHLA - Brushless Counter High Limit Action......................................... 340
BHOME - Brushless Counter Load at Home Position............................. 341
BLL - Brushless Counter Low Limit........................................................ 342

16

Advanced Digital Motor Controllers User Manual

V1.8, August 28, 2017

BLLA - Brushless Counter Low Limit Action........................................... 342
BMOD - Brushless operating mode........................................................ 343
BPOL - Number of Pole Pairs and Speed Polarity of Brushless Motor... 344
BZPW - Brushless zero seek power level............................................... 345
HPO - Hall Sensor Position..................................................................... 345
HSM - Hall Sensor Map.......................................................................... 346
KIF - FOC PID Integral Gain.................................................................... 347
KPF - FOC PID Proportional Gain............................................................ 348
SPOL - Sin/Cos or Resolver number of poles......................................... 348
SSP - Sensorless Start-Up Power.......................................................... 349
SST - Sensorless Start-Up Time.............................................................. 350
SWD - Swap Windings............................................................................ 350
TID - FOC Target Id.................................................................................. 351
ZSMC - SinCos Calibration...................................................................... 352
AC Induction Specific Command............................................................ 353
VPH - AC Induction Volts per Hertz......................................................... 353
ILM - Mutual Inductance......................................................................... 353
ILLR - Rotor Leakage Inductance............................................................ 354
IRR - Rotor Resistance............................................................................ 355
MPW - Minimum Power......................................................................... 356
MXS - Optimal Slip Frequency................................................................ 357
RFC - Rotor Flux Current......................................................................... 357
CAN Communication Commands........................................................... 358
CAS - CANOpen Auto start..................................................................... 358
CBR - CAN Bit Rate................................................................................ 359
CEN - CAN Enable.................................................................................. 359
CHB - CAN Heartbeat............................................................................. 360
CLSN - CAN Listening Node................................................................... 360
CNOD - CAN Node Address................................................................... 361
CSRT - MiniCAN SendRate..................................................................... 361
CTPS - CANOpen TPDO SendRate......................................................... 362

SECTION 20

Using the Roborun Configuration Utility................................................. 363
System Requirements............................................................................ 363
Downloading and Installing the Utility.................................................... 363
The Roborun+ Interface.......................................................................... 364
Header Content...................................................................................... 365
Status Bar Content.................................................................................. 365
Program Launch and Controller Discovery.............................................. 366
Configuration Tab.................................................................................... 366
Entering Parameter Values...................................................................... 367
Automatic Analog and Pulse input Calibration........................................ 368
Input/Output Labeling............................................................................. 369
Loading, Saving Controller Parameters................................................... 370
Locking & Unlocking Configuration Access............................................. 370
Configuration Parameters Grouping & Organization............................... 371
Startup Parameters................................................................................. 371

Advanced Digital Motor Controllers User Manual

17

Commands Parameters.......................................................................... 372
CAN Communication Parameters........................................................... 372
Encoder Parameters............................................................................... 373
Digital Input and Output Parameters...................................................... 373
Analog Input Parameters........................................................................ 374
Pulse Input Parameters........................................................................... 374
Power Output Parameters...................................................................... 375
General Settings..................................................................................... 375
Motor Parameters................................................................................... 375
Run Tab................................................................................................... 376
Status and Fault Monitoring.................................................................... 376
Applying Motor Commands.................................................................... 377
Digital, Analog and Pulse Input Monitoring............................................. 377
Digital Output Activation and Monitoring................................................ 377
Using the Chart Recorder....................................................................... 377
Console Tab............................................................................................. 378
Text-Mode Commands Communication ................................................ 378
Updating the Controller’s Firmware........................................................ 379
Updating Script....................................................................................... 381
Updating the Controller Logic................................................................. 381
Scripting Tab............................................................................................ 381
Edit Window........................................................................................... 382
Download to Device button.................................................................... 382
Download to Remote Device button....................................................... 382
Build button............................................................................................. 382
Exporting Script Object Hex Files........................................................... 382
Simulation button.................................................................................... 382
Correcting Compilation Errors................................................................. 382
Executing Scripts.................................................................................... 383
Debugging Scripts.................................................................................. 384

18

Advanced Digital Motor Controllers User Manual

V1.8, August 28, 2017

Refer to the Datasheet for Hardware-Specific Issues

Introduction

Refer to the Datasheet for Hardware-Specific Issues
This manual is the companion to your controller’s datasheet. All information that is specific
to a particular controller model is found in the datasheet. These include:
• Number and types of I/O
• Connectors pin-out
• Wiring diagrams
• Maximum voltage and operating voltage
• Thermal and environmental specifications
• Mechanical drawings and characteristics
• Available storage for scripting
• Battery or/and Motor Amps sensing
• Storage size of user variables to Flash or Battery-backed RAM

User Manual Structure and Use
The user manual discusses issues that are common to all controllers inside a given product family. Except for a few exceptions, the information contained in the manual does not
repeat the data that is provided in the datasheets.
The manual is divided in 18 sections organized as follows:

SECTION 1 Connecting Power and Motors to the Controller
This section describes the power connections to the battery and motors, the mandatory
vs. optional connections. Instructions and recommendations are provided for safe operation under all conditions.

SECTION 2 Safety Recommendations
This section lists the possible motor failure causes and provides examples of prevention
methods and possible ways to regain control over motor if such failures occur.

SECTION 3 Connecting Sensors and Actuators to Input/Outputs
This section describes all the types of inputs that are available on all controller models and
describes how to attach sensors and actuators to them. This section also describes the
connection and operation of optical encoders.

Advanced Digital Motor Controller User Manual

19

Introduction

SECTION 4 I/O Configuration and Operation
This section details the possible use of each type of Digital, Analog, Pulse or Encoder inputs, and the Digital Outputs available on the controller. It describes in detail the software
configurable options available for each I/O type.

SECTION 5 Magentic Sensor
This section discusses how to interface one or more Roboteq’s MGS1600 Magnetic Guide
Sensors to the motor controller.

SECTION 6 Command Modes
The controller can be operated using serial, analog or pulse commands. This section describes each of these modes and how the controller can switch from one command input
to another. Detailed descriptions are provided for the RC pulse and Analog command
modes and all their configurable options.

SECTION 7 Motor Operating Features and Options
This section reviews all the configurable options available to the motor driver section. It
covers global parameters such as PWM frequency, overvoltage, or temperature-based
protection, as well as motor channel-specific configurations. These include amps limiting,
acceleration/deceleration settings, or operating modes.

SECTION 8 Brushless Motor Connections and Operation
This section addresses installation and operating issues specific to brushless motors. It is
applicable only to brushless motor controller models.

SECTION 9 AC Induction MotorOperation
This section discusses the controller’s operating features and options when using three
phase AC Induction motors.

SECTION 10 Closed Loop Speed and Speed Position Modes
This section focuses on the closed loop speed mode with feedback using analog speed
sensors or encoders. Information is provided on how to setup a closed loop speed control
system, tune the PID control loop, and operate the controller.

SECTION 11 Closed Loop Relative and Tracking Position Modes
This section describes how to configure and operate the controller in position mode using
analog, pulse, or encoder feedback. In position mode, the motor can be made to smoothly
go from one position to the next. Information is provided on how to setup a closed loop
position system, tune the PID control loop, and operate the controller.

SECTION 12 Closed Loop Count Position Mode
This section describes how to configure and operate the controller in Closed Loop Count
Position mode. Position command chaining is provided to ensure seamless motor motion.

20

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

User Manual Structure and Use

SECTION 13 Closed Loop Torque Mode
This section describes how to select, configure and operate the controller in Closed Loop
Torque mode.

SECTION 14 Serial (RS232/USB) Operation
This section describes how to communicate to the controller via the RS232 or USB interface.

SECTION 15 CAN Networking on Roboteq Controllers
This section describes the RawCAN and MiniCAN operating modes available on CAN-enabled Roboteq controllers.

SECTION 16 RoboCAN Networking
This section describes the RoboCAN protocol: a simple and efficient meshed network
scheme for Roboteq devices

SECTION 17 CANopen Interface
This section describes the configuration of the CANopen communication protocol and the
commands accepted by the controller operating in the CANopen mode.

SECTION 18 MicroBasic Scripting
This section describes the MicroBasic scripting language that is built into the controller. It
describes the features and capabilities of the language and how to write custom scripts. A
Language Reference is provided.

SECTION 19 Commands Reference
This section lists and describes in detail all configuration parameters, runtime commands,
operating queries, and maintenance commands available in the controller.

SECTION 20 Using the Roborun Configuration Utility
This section describes the features and capabilities of the Roborun PC utility. The utility
can be used for setting/changing configurations, operate/monitor the motors and I/O, edit,
simulate and run Microbasic scripts, and perform various maintenance functions such as
firmware updates.

Advanced Digital Motor Controller User Manual

21

Introduction

22

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Power Connections

SECTION 1

Connecting
Power and
Motors to the
Controller

This section describes the controller’s connections to power sources and motors.
This section does not show connector pin-outs or wiring diagram. Refer to the datasheet
for these.

Important Warning
The controller is a high power electronics device. Serious damage, including fire,
may occur to the unit, motor, wiring and batteries as a result of its misuse. Please
follow the instructions in this section very carefully. Any problem due to wiring errors may have very serious consequences and will not be covered by the product’s
warranty.

Power Connections
Power connections are described in the controller model’s datasheet. Depending on the
model type, power connection is done via wires, fast-on tabs, screw terminals or copper
bars coming out of the controller.
Controllers with wires as power connections have Ground (black), VMot (red) power cables and a Power Control wire (yellow). The power cables are located at the back end of
the controller. The various power cables are identified by their position, wire thickness and
color: red is positive (+), black is negative or ground (-).
Controllers with tabs, screw terminals or copper bars have their connector identified in
print on the controller.

Advanced Digital Motor Controller User Manual

23

Connecting Power and Motors to the Controller

Controller Power
The controller uses a flexible power supply scheme that is best described in Figure 1-1.
In this diagram, it can be seen that the power for the Controller’s internal microcomputer is separate from this of the motor drivers. The microcomputer circuit is connected to
a DC/DC converter which takes power from either the Power Control input or the VMot
input. A diode circuit that is included in most controller models, is designed to automatically select one power source over the other and lets through the source that has the
highest voltage.
Mot1(-)
Mot1(+)

Microcomputer &
MOSFET Drivers

Vmot

0Vmin
Vmot

Channel 1 MOSFET Power Stage

GND

ENABLE

DC/DC

7V min
Vpwr max

Channel 2 MOSFET Power Stage

*

Power
Control
&Backup
GND

0Vmin
Vmot max

GND
Vmot
Mot2(+)
Mot2(-)

* included in high voltage models only

FIGURE 1-1. Representations of the controller’s Internal Power Circuits
When powered via the Power Control input only, the controller will turn On, but motors
will not be able to turn until power is also present on the VMot wires or Tab.
The Power Control input also serves as the Enable signal for the DC/DC converter. When
floating or pulled to above 1V, the DC/DC converter is active and supplies the controller’s
microcomputer and drivers, thus turning it On. When the Power Control input is pulled to
Ground, the DC/DC converter is stopped and the controller is turned Off.
The Power Control input MUST be connected to Ground to turn the Controller Off. For
turning the controller On, even though the Power Control may be left floating, whenever
possible pull it to a 12V or higher voltage to keep the controller logic solidly On. You may
use a separate battery to keep the controller alive as the main Motor battery discharges.
On high voltage controller that are rated above 60V, a zener diode is inserted between the
VMot supply and the DC/DC converter. This causes a voltage drop that keeps the voltage
at the converter’s input within its maximum operating range. However, this diode also

24

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Controller Powering Schemes

increases by around 20V the low voltage threshold at which the controller will start operating when powered from VMot alone.
The table below shows the state of the controller depending on the voltage applied to
Power Control and VMot.
TABLE 1-1. Controller Status depending on Power Control and VMot
Power Control input is
connected to

And Main Battery
Voltage is

Ground

Any Voltage

Controller is Off. Required Off
Configuration.

Floating

0V

Controller is Off. Not Recommended Off Configuration.

Floating

Above VMotMin (1)

Controller is On.

Action

Power Stage is Active (2)
7V to max PwrCtl (3) Volts

Any Voltage

Controller is On.
Power Stage is Active (2)

Note 1: VMotMin = 7V on all controller rated up to 60V. VMotMin = 28V on all controllers rated above
60V. See product datasheet
Note 2: Power Stage is active but turned off when overvoltage or undervoltage condition.
Note 3: 35V max on 30V controllers. 60V max on all products rated above 30V
Note: All ground terminals (-) are connected to each other inside the controller. On dual
channel controllers, the two VMot main battery wires are also connected to each other
internally. However, you must never assume that connecting one wire of a given battery
potential will eliminate the need to connect the other. When pre-charging the controller’s
capacitors, the Power Control input must be grounded. See the note on capacitor precharging on page 27. “Capacitor precharging”

Controller Powering Schemes
Roboteq controllers operate in an environment where high currents may circulate in
unexpected manners under certain condition. Please follow these instructions. Roboteq
reserves the right to void product warranty if analysis determines that damage is due to
improper controller power connection.
The example diagram on Figure 1-2 on page 26 shows how to wire the controller and
how to turn power On and Off. All Roboteq models use a similar power circuit. See the
controller datasheet for the exact wiring diagram for your controller model.

Advanced Digital Motor Controller User Manual

25

Connecting Power and Motors to the Controller

F2
1A

SW1 Main
On/Off Switch 1A
PwrCtrl/Yellow

Note 1

U

White/U

Ground/Black

Motor

Backup
Battery

Green/V

Diode
>20A

Resistor
1K, 0.5W

Note 3

V

W

Blue/W
Note 2
VMot/Red

F1

Note 4

+

HA/HB/HC
GND/+5V

SW2
Emergency
Contactor or
Cut-off Switch

Ground/Black

-

Hall
Sensors

Hall sensor
Connector

Earth Tab

Note 5

I/O Connector

Main
Battery

Note 6
Do not Connect!

FIGURE 1-2. Brushless DC Controller power wiring diagram

Mandatory Connections
It is imperative that the controller is connected as shown in the wiring diagram provided in
the datasheet in order to ensure a safe and trouble-free operation. All connections shown
as thick black lines are mandatory.
• Connect the thick black wire(s) or the ground terminal to the minus (-) terminal of
the battery that will be used to power the motors. Connect the thick red wire(s) or
VMot terminal to the plus (+) terminal of the battery. The motor battery may be of
12V up to the maximum voltage specified in the controller model datasheet.
• The controller must be powered On/Off using switch SW1on the Power Control
wire/terminal. Grounding this line powers Off the controller. Floating or pulling this
line to a voltage will power On the controller. (SW1 is a common SPDT 1 Amp or
more switch).
• Use a suitable high-current fuse F1 as a safety measure to prevent damage to the
wiring in case of major controller malfunction. (Littlefuse ATO or MAXI series).
• The battery must be connected in permanence to the controller’s Red wire(s) or
VMot terminal via a high-power emergency switch SW2 as additional safety measure. Partially discharged batteries may not blow the fuse, while still having enough
power left to cause a fire. Leave the switch SW2 closed at all times and open only
in case of an emergency. Use the main On/Off switch SW1 for normal operation.
This will prolong the life of SW2, which is subject to arcing when opening under
high current with consequent danger of contact welding.
• If installing in an electric vehicle equipped with a Key Switch where SW2 is a contactor, and the key switch energizes the SW2 coil, then implement SW1 as a relay.
Connect the Key Switch to both coils of SW1 and SW2 so cutting off the power to
the vehicle by the key switch and SW2 will set the main switch SW1 in the OFF
position as well.

26

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Controller Powering Schemes

Connection for Safe Operation with Discharged Batteries (note 1)
The controller will stop functioning when the main battery voltage drops below 7V. To ensure motor operation with weak or discharged batteries, connect a second battery to the
Power Control wire/terminal via the SW1 switch. This battery will only power the controller’s internal logic. The motors will continue to be powered by the main battery while the
main battery voltage is higher than the secondary battery voltage.

Use precharge Resistor to prevent switch arcing (note 2)
Insert a 1K, 0.5W resistor across the SW2 Emergency Switch. This will cause the controller’s internal capacitors to slowly charge and maintain the full battery voltage by the time
the SW2 switch is turned on and thus eliminate damaging arcing to take place inside the
switch. Make sure that the controller is turned Off with the Power Control wire grounded
while the SW2 switch is off. The controller’s capacitors will not charge if the Power Control
wire is left floating and arcing will then occur when the Emergency switch is turned on.

Protection against Damage due to Regeneration (notes 3 and 4)
Voltage generated by motors rotating while not powered by the controller can cause serious damage even if the controller is Off or disconnected. This protection is highly recommended in any application where high motion inertia exists or when motors can be made
to rotate by towing or pushing.
• Use the main SW1 switch on the Power Control wire/terminal to turn Off and keep
Off the controller.
• Insert a high-current diode (Digikey P/N 10A01CT-ND) to ensure a return path to the
battery in case the fuse is blown. Smaller diodes are acceptable as long as their
single pulse current rating is > 20 Amp.
• Optionally use a Single Pole, Dual Throw switch for SW2 to ground the controller
power input when OFF. If a SPDT switch cannot be used, then consider extending
the diode across the fuse and the switch SW2.

Connect Case to Earth if connecting AC equipment (note 5)
If building a system which uses rechargeable batteries, it must be assumed that periodically a user will connect an AC battery charger to the system. Being connected to the AC
main, the charger may accidentally bring AC high voltage to the system’s chassis and to
the controller’s enclosure. Similar danger exists when the controller is powered via a power supply connected to the mains.
Some controller models in metallic enclosures are supplied with an Earth tab, which permits earthing the metal case. Connect this tab to a wire connected to the Earth while the
charger is plugged in the AC main, or if the controller is powered by an AC power supply
or is being repaired using any other AC equipment (PC, Voltmeter etc.)

Avoid Ground loops when connecting I/O devices (note 6)
When connecting a PC, encoder, switch or actuators on the I/O connector, be very careful
that you do not create a path from the ground pins on the I/O connector and the battery
minus terminal. Should the controller’s main Ground wires (thick black) or terminals be
disconnected while the VMot wires (thick red) or terminals are connected, high current
would flow from the ground pins, potentially causing serious damage to the controller
and/or your external devices.

Advanced Digital Motor Controller User Manual

27

Connecting Power and Motors to the Controller

•
•
•

Do not connect a wire between the I/O connector ground pins and the battery minus terminal. Look for hidden connection and eliminate them.
Have a very firm and secure connection of the controller ground wire and the battery minus terminal.
Do not use connectors or switches on the power ground cables.

Important Warning
Do not rely on cutting power to the controller for it to turn Off if the Power Control
is left floating. If motors are spinning because the robot is pushed or because of
inertia, they will act as generators and will turn the controller On, possibly in an unsafe state. ALWAYS ground the Power Control wire terminal to turn the controller Off
and keep it Off.

Important Warning
Unless you can ensure a steady voltage that is higher than 7V (28V in controllers
rated above 60V) in all conditions, it is recommended that the battery used to power the controller’s electronics be separate from the one used to power the motors.
This is because it is very likely that the motor batteries will be subject to very large
current loads which may cause the voltage to eventually dip below 7V as the batteries’ charge drops. The separate backup power supply should be connected to the
Power Control input.

Connecting the Motors
Refer to the datasheet for information on how to wire the motor(s) to a particular motor
controller model.
After connecting the motors, apply a minimal amount of power using the Roborun PC utility with the controller configured in Open Loop speed mode. Verify that the motor spins
in the desired direction. Immediately stop and swap the motor wires if not.
In Closed Loop Speed or Position mode, beware that the motor polarity must match this
of the feedback. If it does not, the motors will runaway with no possibility to stop other
than switching Off the power. The polarity of the Motor or of the feedback device may
need to be changed.

Important Warning
Make sure that your motors have their wires isolated from the motor casing. Some
motors, particularly automotive parts, use only one wire, with the other connected
to the motor’s frame. If you are using this type of motor, make sure that it is mounted on isolators and that its casing will not cause a short circuit with other motors
and circuits which may also be inadvertently connected to the same metal chassis.

28

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Single Channel Operation

Single Channel Operation
Dual channel Brushed DC controllers may be ordered with the -S (Single Channel) suffix.
The two channel outputs must be paralleled as shown in the datasheet so that they can
drive a single load with twice the power. To perform in this manner, the controller’s Power
Transistors that are switching in each channel must be perfectly synchronized. Without
this synchronization, the current will flow from one channel to the other and cause the
destruction of the controller.
The single channel version of the controller incorporates a hardware setting inside the
controller which ensures that both channels switch in a synchronized manner and respond
to commands sent to channel 1.

Important Warning
Before pairing the outputs, attach the motor to one channel and then the other. Verify that the motor responds the same way to command changes.

Power Fuses
For low Amperage applications (below 30A per motor), it is recommended that a fuse be
inserted in series with the main battery circuit as shown in Figure 1-2 on page 26.
The fuse will be shared by the two output stages and therefore must be placed before
the Y connection to the two power wires. Fuse rating should be the sum of the expected
current on both channels. Note that automotive fuses above 40A are generally slow, will
be of limited effectiveness in protecting the controller and may be omitted in high current
application. The fuse will mostly protect the wiring and battery against after the controller
has failed.

Important Warning
Fuses are typically slow to blow and will thus allow temporary excess current to
flow through them for a time (the higher the excess current, the faster the fuse will
blow). This characteristic is desirable in most cases, as it will allow motors to draw
surges during acceleration and braking. However, it also means that the fuse may
not be able to protect the controller.

Wire Length Limits
The controller regulates the output power by switching the power to the motors On and
Off at high frequencies. At such frequencies, the wires’ inductance produces undesirable
effects such as parasitic RF emissions, ringing and overvoltage peaks. The controller has
built-in capacitors and voltage limiters that will reduce these effects. However, should the
wire inductance be increased, for example by extended wire length, these effects will be
amplified beyond the controller’s capability to correct them. This is particularly the case for
the main battery power wires.

Advanced Digital Motor Controller User Manual

29

Connecting Power and Motors to the Controller

Important Warning
Avoid long connection between the controller and power source, as the added inductance may cause damage to the controller when operating at high currents. Try
extending the motor wires instead since the added inductance is not harmful on
this side of the controller.
If the controller must be located at a long distance from the power source, the effects of
the wire inductance may be reduced by using one or more of the following techniques:
•
•
•

Twisting the power and ground wires over the full length of the wires
Use the vehicle’s metallic chassis for ground and run the positive wire along the
surface
Add a capacitor (10,000uF or higher) near the controller

Electrical Noise Reduction Techniques
As discussed in the above section, the controller uses fast switching technology to control
the amount of power applied to the motors. While the controller incorporates several circuits to keep electrical noise to a minimum, additional techniques can be used to keep the
noise low when installing the controller in an application. Below is a list of techniques you
can try to keep noise emission low:
• Keep wires as short as possible
• Loop wires through ferrite cores
• Add snubber RC circuit at motor terminals
• Keep controller, wires and battery enclosed in metallic body

Battery Current vs. Motor Current
The controller limits the current that flows through the motors and not the battery current. Current that flows through the motor is typically higher than the battery current. This
counter-intuitive phenomenon is due to the “flyback” current in the motor’s inductance. In
some cases, the motor current can be extremely high, causing heat and potentially damage while battery current appears low or reasonable.
The motor’s power is controlled by varying the On/Off duty cycle of the battery voltage
16,000 times per second to the motor from 0% (motor off) to 100 (motor on). Because
of the inductive flyback effect, during the Off time current continues to flow at nearly
the same peak - and not the average - level as during the On time. At low PWM ratios,
the peak current - and therefore motor current - can be very high as shown in Figure 1-4,
below.
The relation between Battery Current and Motor current is given in the formula below:
Motor Current = Battery Current / PWM ratio

30

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Motor
On
Measured
and Calculated Currents

Vbat

Vbat

Off

On

Motor

Motor
On

Off

FIGURE 1-3. Current flow during operation
Vbat

On

Off
I mot
Avg

On

Motor

I bat
Avg

Off

FIGURE 1-4. Instant and average current waveforms
The relation between Battery Current and Motor current is given in the formula below:

On

Off

Motor Current = Battery Current / PWM RatioI mot
Avg
Example: If the controller reports 10A of battery current while at 10% PWM, the current in
the motor is 10 / 0.1 = 100A.

Measured and Calculated Currents

I bat
Avg

All Roboteq Brushed DC motor controllers, have current sensors for measuring the battery current and estimate the motor current. At 20% PWM and above, the motor current
is computed using the formula above. Below 20%, and approaching 0%, this method
cause unstable and imprecise readings. At these levels, formula used is
Motor Current = Battery Current / 0.20
This approximation creates a more stable value but one that is increasingly inaccurate as
the PWM approaches 0%. This approximation produces usable value nevertheless.
Roboteq’s Brushless motor controllers use sensors on the motor outputs or/and on the
battery ground terminal. Controllers using sensors on the battery terminal outputs suffer
the same limitation at low PWM as discussed above.

Advanced Digital Motor Controller User Manual

31

Connecting Power and Motors to the Controller

Controllers with sensors on the motor terminals provide accurate motor current sensing in
all conditions, and provide a good estimate battery current value. Some controller models
have sensors on the motor and on the battery terminals, and provide the most accurate
current sensing as all are actually measured values.
Whether sensors are on motor or/and battery terminals can be found in the product’s
datasheet

Important Warning
Do not connect a motor that is rated at a higher current than the controller.

Power Regeneration Considerations
When a motor is spinning faster than it would normally at the applied voltage, such as
when moving downhill or decelerating, the motor acts like a generator. In such cases, the
current will flow in the opposite direction, back to the power source.
It is therefore essential that the controller be connected to rechargeable batteries. If a
power supply is used instead, the current will attempt to flow back in the power supply
during regeneration, potentially damaging it and/or the controller.
Regeneration can also cause potential problems if the battery is disconnected while
the motors are still spinning. In such a case, the energy generated by the motor will
keep the controller On, and depending on the command level applied at that time, the
regenerated current will attempt to flow back to the battery. Since none is present, the
voltage will rise to potentially unsafe levels. The controller includes an overvoltage protection circuit to prevent damage to the output transistors (see “Using the Controller
with a Power Supply” below). However, if there is a possibility that the motor could be
made to spin and generate a voltage higher than 40V, a path to the battery must be provided, even after a fuse is blown. This can be accomplished by inserting a diode across
the fuse as shown in Figure 1-2 on page 26.
Please download the Application Note “Understanding Regeneration” from the www.roboteq.com for an in-depth discussion of this complex but important topic.

Important Warning
Use the controller only with a rechargeable battery as supply to the Motor Power
wires (thick black and red wires). If a transformer or power supply is used, damage
to the controller and/or power supply may occur during regeneration. See “Using
the Controller with a Power Supply” below for details.

Important Warning
Avoid switching Off or cutting open the main power cables while the motors are
spinning. Damage to the controller may occur. Always ground the Power Control
wire to turn the controller Off.

32

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Using the Controller with a Power Supply

Using the Controller with a Power Supply
Using a transformer or a switching power supply is possible but requires special care, as the
current will want to flow back from the motors to the power supply during regeneration. As
discussed in “Power Regeneration Considerations” above, if the supply is not able to absorb
and dissipate regenerated current, the voltage will increase until the over-voltage protection
circuit cuts off the motors. While this process should not be harmful to the controller, it may
be to the power supply, unless one or more of the protective steps below is taken:
• Use a power supply that will not suffer damage in case a voltage is applied at its
output that is higher than its own output voltage. This information is seldom published in commercial power supplies, so it is not always possible to obtain positive
reassurance that the supply will survive such a condition.
• Avoid deceleration that is quicker than the natural deceleration due to the friction
in the motor assembly (motor, gears, load). Any deceleration that would be quicker
than natural friction means that braking energy will need to be taken out of the system, causing a reverse current flow and voltage rise.
• Place a battery in parallel with the power supply output. This will provide a reservoir
into which regeneration current can flow. It will also be very helpful for delivering
high current surges during motor acceleration, making it possible to use a lower
current power supply. Batteries mounted in this way should be connected for the
first time only while fully charged and should not be allowed to discharge. The power
supply will be required to output unsafe amounts of current if connected directly to a
discharged battery. Consider using a decoupling diode on the power supply’s output
to prevent battery or regeneration current to flow back into the power supply.
• Place a resistive load in parallel with the power supply, with a circuit to enable
that load during regeneration. This solution is more complex but will provide a safe
path for the braking energy into a load designed to dissipate it. The diagram below
shows an example of such a circuit. The controller must be configured so that its
digital output is activated when an overvoltage condition is detected. The MOSFET
and brake resistor value must be sized according to the expected regeneration
current that must be absorbed.
Controller
VMot

Supply +
12V Zener
G
100K

*Zener

IXTN170P10P
D

47K
Controller
DOut

S

Brake Resistor
1 to 10 Ohm, High Wattage
Depending on Braking Energy

GND

GND
*Zener:
- Not needed with supply up to 40V
- 20V with supply up to 60V

FIGURE 1-5. regen brake resistor
Note: The schematic above is provided for reference only. It may not work in all conditions.

Advanced Digital Motor Controller User Manual

33

Connecting Power and Motors to the Controller

34

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Possible Failure Causes

SECTION 2

Safety
Recommendations

In many applications, Roboteq controllers drive high power motors that move parts and
equipment at high speed and/or with very high force. In case of malfunction, potentially
enormous forces can be applied at the wrong time and/or wrong place causing serious
damage to property and/or harm to person. While Roboteq controllers operate very reliably, and failures are rare, a failure is possible as with any other electronic equipment. If
there is any danger that a loss of motor control can cause damage or injury, you must plan
on that possibility and implement methods for stopping the motor independently of the
controller operation.
Below is a list of failure categories, their effect and possible ways to regain control, or minimize the consequences. The list of possible failures is not exhaustive and the suggested
prevention methods are provided as examples for information only.

Important Safety Disclaimer
Dangerous uncontrolled motor runaway condition can occur for a number of reasons, including, but not limited to: command or feedback wiring failure, configuration error, faulty firmware, errors in user MicroBasic script or in user program, or
controller hardware failure. The user must assume that such failures can occur and
must take all measures necessary to make his/her system safe in all conditions.
The information contained in this manual, and in this section in particular, is provided for information only. Roboteq will not be liable in case of damage or injury as a
result of product misuse or failure.

Possible Failure Causes
Dangerous unintended motor operation could occur for a number of reasons, including,
but not limited to:
• Failure in Command device
• Feedback sensors malfunction
• Wiring errors or failure
• Controller configuration error

Advanced Digital Motor Controller User Manual

35

Safety Recommendations

•
•
•

Faulty firmware
Errors or oversights in user MicroBasic scripts
Controller hardware failure

Motor Deactivation in Normal Operation
In normal operation, the controller is always able to turn off the motor if it detects faults or
if instructed to do so from an external command.
In case of wiring problem, sensor malfunction, firmware failure or error in user Microbasic
scripts, the controller may be in a situation where the motors are turned on and kept on as
long as the controller is powered. A number of features discussed throughout this manual
are available to stop motor operation in case of abnormal situation. These include:
•
•
•
•
•
•
•

Watchdog on missing incoming serial/USB commands
Loss detection of Radio Pulse
Analog command outside valid range
Limit switches
Stall detection
Close Loop error detection
Other …

Additional features can easily be added using MicroBasic scripting.
Ultimately, the controller can be simply turned off by grounding the Power Control pin. Assuming there is no hardware damage in the power stage, the controller output will be off
(i.e. motor wires floating) when the controller is off.

Important Warning:
While cutting the power to the motors is generally the best thing to do in case of
major failure, it may not necessarily result in a safe situation.

Motor Deactivation in Case of Output Stage Hardware Failure
On brushed DC motor controllers, the power stage for each motor is composed of 4
MOSFETs (semiconductor switches). In some cases of MOSFET failures, it is possible
that one or both motors will remain permanently powered with no way to stop them
either via software or by turning the controller off.
On brushless motor controllers, shorted MOSFETs will not cause the motor to turn on its
own. Nevertheless, it is still advised to follow the recommendations included in this section.

36

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Motor Deactivation in Case of Output Stage Hardware Failure

+

+

The figures below show all the possible combinations of shorted MOSFETs switches in a
brushed DC motor controller.
+

+

+

+

2
+

2

1
-

+
5
+

4

-

-

1
-

5
+

+

+

7
7

4

3

6
-

+

+

3

6

+
2

FIGURE 2-1. MOSFET Failures resulting
in no motor activation
-

+

1

4

+

-

+

+

-

6

+

+

7

+

-

3

5
+

-

+

+
8
+

9
-

+

8
+

9
-

10
+

10
+ 10

8
+

9
-

12 +
+

+

12
+

+

11

13
13
- -

11 11

-

-

-

+
12
+

+

14
14
-

14
-

13
-

FIGURE 2-2. MOSFET Failures resulting in battery short circuit and no motor activation
+

+

+

+

+
15
-

+

16
-

FIGURE 2-3. MOSFET Failure resulting in motor activation
Two failure15conditions
15 (15 and 16)
16 in the motor spinning out of control re16 will result
gardless whether
the
controller
is
on
or
- off. While these failure conditions are rare, users must take them into account and provide means to cut all power to the controller’s
power stage.

Advanced Digital Motor Controller User Manual

37

Safety Recommendations

Manual Emergency Power Disconnect
In systems where the operator is within physical reach of the controller, the simplest safety device is the emergency disconnect switch that is shown in the wiring diagram inside
all controller datasheets, and in the example diagram below.
SW1 Main
On/Off Switch
PwrCtrl/Yellow

White/M1+

Ground/Black
Motor 1

Backup
Battery
Green/M1-

White/M2+
VMot/Red
VMot/Red

Motor 2

SW2
Emergency
Contactor or
Cut-off Switch

+

-

Green/M2-

Ground/Black
Ground/Black

Main
Battery

Earth Tab

I/O Connector

FIGURE 2-4. Example powering diagram (Brushed DC motor Controller)
The switch must be placed visibly and be easy to operate. Prefer “mushroom” emergency
stop push buttons. Make sure that the switches are rated at the maximum current that
can be expected to flow through all motors at the same time.

FIGURE 2-5. “Mushroom” type Emergency Disconnect Switch

38

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Remote Emergency Power Disconnect

Remote Emergency Power Disconnect
In remote controlled systems, the emergency switch must be replaced by a high power
contactor relay as shown in Figure 2-6. The relay must be normally open and be activated
using an RC switch on a separate radio channel. The receiver should preferably be powered directly from the system’s battery. If powered from the controller’s 5V output, keep
in mind that in case of a total failure of the controller, the 5V output may or may not be
interrupted.
Controller
On/Off Switch
PwrCtrl
Ground

VMot

RC Receiver

RC Switch
RC3
RC2

I/O Connector

RC1

+

-

Ground

Main
Battery

FIGURE 2-6 Example of remotely operated safety disconnect
The receiver must operate in such a way that the contactor relay will be off if the transmitter if off or out of range.
The transmitter should have a visible and easy to reach emergency switch for the operator. That switch will be used to deactivate the relay remotely. It could also be used to
shutdown entirely the transmitter, assuming it is determined for certain that this will deactivate the relay at the controller.

Protection using Supervisory Microcomputer
In applications where the controller is commanded by a PC, a microcomputer or a PLC,
that supervisory system could be used to verify that the controller is still responding and
cut the power to the controller’s power stage in case a malfunction is detected. The supervisory system would only require a digital output or other means to activate/deactivate
the contactor relay as shown in the figure below.

Advanced Digital Motor Controller User Manual

39

Safety Recommendations

Controller
On/Off Switch
PwrCtrl
Ground

PC, PLC or
Microcomputer

VMot
Digital Output

I/O Connector

RS232

+

Ground

Main
Battery

FIGURE 2-7. Example of safety disconnect via supervisory system

Self Protection against Power Stage Failure
If the controller processor is still operational, it can self detect several, although not all,
situations where a motor is running while the power stage is off. The figure below shows
a protection circuit using an external contactor relay.
Controller
On/Off Switch
PwrCtrl
Ground

VMot
Contactor

Digital Out
to +40V Max

+

Emergency
Disconnect

-

I/O Connector

Ground

Main
Battery

FIGURE 2-8. Self protection circuit using contactor
Note: Digital outputs are rated 40V max. If the battery voltage is higher than 40V, the relay
must be connected to the + of an alternate power source of lower voltage.

40

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Self Protection against Power Stage Failure

The controller must have the Power Control input wired to the battery so that it can operate and communicate independently of the power stage. The controller’s processor will
then activate the contactor coil through a digital output configured to turn on when the
“No MOSFET Failure” condition is true. The controller will automatically deactivate the coil
if the output is expected to be off and battery current is above 500mA to 2.5A (depending
on the controller model) for more than 0.5s.
The contactor must be rated high enough so that it can cut the full load current. For even
higher safety, additional precaution should be taken to prevent and to detect fused contactor blades.
This contactor circuit will only detect and protect against damaged output stage conditions. It will not protect against all other types of fault. Notice therefore, the presence of
an emergency switch in series with the contactor coil. This switch should be operated
manually or remotely, as discussed in the Manual Emergency Power Disconnect the Remote Emergency Power Disconnect and the Protection using Supervisory Microcomputer
earlier in this section of the manual.
Using this contactor circuit, turning off the controller will normally deactivate the digital
output and this will cut the power to the controller’s output stage.

Important Warning
Fully autonomous and unsupervised systems cannot depend on electronics alone to
ensure absolute safety. While a number of techniques can be used to improve safety,
they will minimize but never totally eliminate risks. Such systems must be mechanically designed so that no moving parts can ever cause harm in any circumstances.

Advanced Digital Motor Controller User Manual

41

Safety Recommendations

42

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Controller Connections

SECTION 3

Connecting
Sensors and
Actuators to
Input/Outputs

This section describes the various inputs and outputs and provides guidance on how to
connect sensors, actuators or other accessories to them.

Controller Connections
The controller uses a set of power connections DSub and plastic connectors for all necessary connections.
The power connections are used for connecting to the batteries and motor, and will typically carry large current loads. Details on the controller’s power wiring can be found at
“Connecting Power and Motors to the Controller” section of this manual.
The DSub and plastic connectors are used for all low-voltage, low-current connections to
the Radio, Microcontroller, sensors and accessories. This section covers only the connections to sensors and actuators.
For information on how to connect the RS232 port, see “Serial (RS232/USB) Operation”
section.
The remainder of this section describes how to connect sensors and actuators to the controller’s low-voltage I/O pins that are located on the DSub connectors.

Advanced Digital Motor Controller User Manual

43

Connecting Sensors and Actuators to Input/Outputs

Controller’s Inputs and Outputs
The controller includes several inputs and outputs for various sensors and actuators. Depending on the selected operating mode, some of these I/Os provide command, feedback
and/or safety information to the controller.
When the controller operates in modes that do not use these I/Os, these signals are
ignored or can become available via the USB/RS232 port for user application. Below is a
summary of the available signals and the modes in which they are used by the controller.
The actual number of signal of each type, voltage or current specification, and their position on the I/O connector is given in the controller datasheet.
TABLE 3-1. Controller’s IO signals and definitions

44

Signal

I/O type

Use/Activation

DOUT1
to
DOUTn

Digital Output

DIN1
to
DINn

Digital Input

- Activated when motor(s) is powered
- Activated when motor(s) is reversed
- Activated when overtemperature
- Activated when overvoltage
- Mirror Status LED
- Deactivates when output stage fault
- User activated (RS232/USB or via scripting)
- Safety Stop
- Emergency stop
- Motor Stop (deadman switch)
- Invert motor direction
- Forward or reverse limit switch
- Run MicroBasic Script
- Load Home counter

AIN1
to
AINn

Analog Input

- Command for motor(s)
- Speed or position feedback
- Trigger Action similar to Digital Input if under or over
user-selectable threshold

PIN1
to
PINn

Pulse Input

- Command for motor(s)
- Speed or position feedback
- Trigger Action similar to Digital Input if under or over
user selectable threshold

ENC1a/b
to
ENC2a/b

Encoder Inputs

- Speed or position feedback
- Trigger action similar to Digital Input if under or over
user-selectable count threshold

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Connecting devices to Digital Outputs

Connecting devices to Digital Outputs
Depending on the controller model, 2 to 8 Digital Outputs are available for multiple purposes. The Outputs are Open Drain MOSFET outputs capable of driving over 1A at up to
24V. See datasheet for detailed specifications.
Since the outputs are Open Drain, the output will be pulled to ground when activated.
The load must therefore be connected to the output at one end and to a positive voltage
source (e.g. a 24V battery) at the other.

Connecting Resistive Loads to Outputs
Resistive or other non-inductive loads can be connected simply as shown in the diagram
below.
Lights, LEDs, or any other
non-inductive load

+
Up to
24V
DC

DOUT

-

Internal
Transistor

Ground

FIGURE 3-1. Connecting resistive loads to Dout pins

Connecting Inductive loads to Outputs
The diagrams on Figure 3-2 show how to connect a relay, solenoid, valve, small motor, or
other inductive load to a Digital Output:
Relay, Valve
Motor, Solenoid
or other Inductive Load

+
Up to
24V
DC
-

DOUT

Internal
Transistor

Ground

FIGURE 3-2. Connecting inductive loads to Dout pins

Advanced Digital Motor Controller User Manual

45

Connecting Sensors and Actuators to Input/Outputs

Important Warning
Overvoltage spikes induced by switching inductive loads, such as solenoids or relays, will destroy the transistor unless a protection diode is used.

Connecting Switches or Devices to Inputs shared with Outputs
On HDCxxxx and HBLxxxx controllers, Digital inputs DIN12 to DIN19 share the connector pins
with digital outputs DOUT1 to DOUT8. When the digital outputs are in the Off state, these outputs can be used as inputs to read the presence or absence of a voltage at these pins.
+5V Out
1K
to
10K

50K
DIN12 to DIN19
(DOUT1 to DOUT7)

Input
Buffer

Output
Driver

GND

FIGURE 3-3. Switch wiring to inputs shared with outputs
For better noise immunity, an external pull up resistor should be installed even though one
is already present inside the controller.

Important Warning
Do not activate an output when it is used as input. If the input is connected directly
to a positive voltage when the output is activated, a short circuit will occur. Always
pull the input up via a resistor.

Connecting Switches or Devices to direct Digital Inputs
The controller Digital Inputs are high impedance lines with a pull down resistor built into
the controller. Therefore it will report an Off state if unconnected, A simple switch as
shown on Figure 3-4 can be used to activate it. When a pull up switch is used, for better
noise immunity, an external pull down resistor should be installed even though one is already present inside the controller.
5V Out

DIN
20kOhm
1K
to
10K

33kOhm
Ground

FIGURE 3-4. Pull up (Active High) switch wirings to DIN pins

46

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Connecting a Voltage Source to Analog Inputs

A pull up resistor must be installed when using a pull down switch.

5V Out
1K to
10K
Ohm

20kOhm

33kOhm

DIN
Ground
FIGURE 3-5. Pull down (Active Low) switch wirings to DIN pins

Connecting a Voltage Source to Analog Inputs
Connecting sensors with variable voltage output to the controller is simply done by making a direct connection to the controller’s analog inputs. When measuring absolute voltages, configure the input in “Absolute Mode” using the PC Utility.
+5V
Internal Resistors
and Converter
20kOhm

AIN

V

A/D

0-5V
Source

33kOhm

Ground

FIGURE 3-6. 0-5V Voltage source connected to Analog inputs
Using external resistors, it is possible to alter the input voltage range to 0V/10V or
-10V/+10V.
+5V

0-10V
4.7kOhm

Internal Resistors
and Converter
20kOhm
A/D

4.7kOhm

33kOhm

Ground

Figure 3-7. External resistor circuit for 0 to 10V capture range

Advanced Digital Motor Controller User Manual

47

Connecting Sensors and Actuators to Input/Outputs

+5V

+/-10V
10kOhm

5kOhm

Internal Resistors
and Converter
20kOhm
A/D

10kOhm

33kOhm

Ground

Figure 3-8. External resistors circuit for -10V to 10V capture range

Important Notice
On newer motor controllers models, activating the pulse mode on an input will also
enable a pull up resistor on that input. If the input is also used for analog capture,
the analog reading will be wrong. Make sure the pulse mode is disabled on that
input.

Reducing noise on Analog Inputs
The Analog inputs are very fast and have a high input resistance. They will therefore easily be disturbed by ambient electrical noise and this will cause the analog reading to be
fluctuating. Use shielded cables between the input and the analog sensor. Add a 1uF capacitor between the input pin and the GND pin. With good shielding and filtering, a signal
stable to withing +/-5V or better can generally be achieved.

Connecting Potentiometers to Analog Inputs
Potentiometers mounted on a foot pedal or inside a joystick are an effective method for
giving command to the controller. In closed loop mode, a potentiometer is typically used
to provide position feedback information to the controller.
Connecting the potentiometer to the controller is as simple as shown in the diagram on
Figure 3-9.
The potentiometer value is limited at the low end by the current that will flow through it
and which should ideally not exceed 5 or 10mA. If the potentiometer value is too high,
the analog voltage at the pot’s middle point will be distorted by the input’s resistance to
ground of 53K. A high value potentiometer also makes the input sensitive to noise, particularly if wiring is long. Potentiometers of 1K or 5K are recommended values.

48

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Connecting a Voltage Source to Analog Inputs

+5V
Internal Resistors
and Converter
20kOhm
A/D
1K to 10K
Ohm Pot

33kOhm

Ground
FIGURE 3-9. Potentiometer wiring
Because the voltage at the potentiometer output is related to the actual voltage at the
controller’s 5V output, configure the analog input in “Relative Mode”. This mode measures
the actual voltage at the 5V output in order to eliminate any imprecision due to source
voltage variations. Configure using the PC Utility.

Connecting Potentiometers for Commands with Safety band guards
When a potentiometer is used for sensing a critical command (Speed or Brake, for example) it is critically important that the controller reverts to a safe condition in case wiring is
sectioned. This can be done by adding resistors at each end of the potentiometer so that
the full 0V or the full 5V will never be present, during normal operation, when the potentiometer is moved end to end.
Using this circuit shown below, the Analog input will be pulled to 0V if the two top wires
of the pot are cut, and pulled to 5V if the bottom wire is cut. In normal operation, using
the shown resistor values, the analog voltage at the input will vary from 0.2V to 4.8V.

220 Ohm

+5V
Internal Resistors
and Converter
20kOhm

5K Ohm Pot

A/D
33kOhm
220 Ohm

Ground

FIGURE 3-10. Potentiometer wiring in Position mode

Advanced Digital Motor Controller User Manual

49

Connecting Sensors and Actuators to Input/Outputs

The controller’s analog channels are configured by default so that the min and max command range is from 0.25V to 4.75V. These values can be changed using the PC configuration utility. This ensures that the full travel of the pot is used to generate a command that
spans from full min to full max.
If the Min/Max safety is enabled for the selected analog input, the command will be considered invalid if the voltage is lower than 0.1V or higher than 4.9. These values cannot be
changed.

Connecting Tachometer to Analog Inputs
When operating in closed loop speed mode, tachometers can be connected to the controller to report the measured motor speed. The tachometer can be a good quality brushed
DC motor used as a generator. The tachometer shaft must be directly tied to that of the
motor with the least possible slack.
Since the controller only accepts a 0 to 5V positive voltage as its input, the circuit shown
in Figure 3-11 must be used between the controller and the tachometer: a 10kOhm potentiometer is used to scale the tachometer output voltage to -2.5V (max reverse speed) and
+2.5V (max forward speed). The two 1kOhm resistors form a voltage divider that sets the
idle voltage at mid-point (2.5V), which is interpreted as the zero position by the controller.
With this circuitry, the controller will see 2.5V at its input when the tachometer is
stopped, 0V when running in full reverse, and +5V in full forward.

+5V
1kOhm

Internal Resistors
and Converter

Max Speed Adjust
10kOhm pot
AIN

Tach

20KOhm
A/D
33KOhm

1kOhm
Ground
FIGURE 3-11. Tachometer wiring diagram
The tachometers can generate voltages in excess of 2.5 volts at full speed. It is important,
therefore, to set the potentiometer to the minimum value (cursor all the way down per
this drawing) during the first installation.
Since in closed loop control the measured speed is the basis for the controller’s power
output (i.e. deliver more power if slower than desired speed, less if higher), an adjustment
and calibration phase is necessary. This procedure is described in “Closed Loop Speed
Mode” section of this manual.

50

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Connecting External Thermistor to Analog Inputs

Important Warning
The tachometer’s polarity must be such that a positive voltage is generated to the
controller’s input when the motor is rotating in the forward direction. If the polarity
is inverted, this will cause the motor to run away to the maximum speed as soon
as the controller is powered and eventually trigger the closed loop error and stop.
If this protection is disabled, there will be no way of stopping it other than pressing
the emergency stop button or disconnecting the power.

Connecting External Thermistor to Analog Inputs
Using external thermistors, the controller can be made to supervise the motor’s temperature and cut the power output in case of overheating. Connecting thermistors is done according to the diagram shown in Figure 3-12. Use a 10kOhm Negative Coefficient Thermistor (NTC) with the temperature/resistance characteristics shown in the table below.
Recommended part is Vishay NTCALUG03A103GC, Digikey item BC2381-ND.
TABLE 3-1. Recommended NTC characteristics
Temp (˚C)

-25

0

25

50

75

100

Resistance (kOhm)

129

32.5

10.00

3.60

1.48

0.67

+5V

10kOhm

Internal Resistors
and Converter
20kOhm
A/D

10kOhm
NTC
Thermistor

33kOhm
Ground

FIGURE 3-12. NTC Thermistor wiring diagram
Thermistors are non-linear devices. Using the circuit described on Figure 12, the controller
will read the following values according to the temperature. For best precision, the analog
input must be configured to read in Relative Mode.
The analog input must be configured so that the minimum range voltage matches the desired temperature and that an action be triggered when that limit is reached. For example
500mV for 80oC, according to the table. The action can be any of the actions in the list. An
emergency or safety stop (i.e. stop power until operator moves command to 0) would be
a typical action to trigger.

Advanced Digital Motor Controller User Manual

51

Connecting Sensors and Actuators to Input/Outputs

Volts
4.5
4
3.5
3
2.5
2
1.5
1
0.5

0

0
15

0

14

0

0

0

13

12

11

10

90

80

70

60

50

40

30

20

0

10

0

0

0

-1

-2

-3

-4

0

0

oC

FIGURE 3-13. Voltage reading by Controller vs NTC temperature
Note: The voltage values in this chart are provided for reference only and may vary based
on the Thermistor model/brand and the resistor precision. It is recommended that you verify and calibrate your circuit if it is to be used for safety protection.

Using the Analog Inputs to Monitor External Voltages
The analog inputs may also be used to monitor the battery level or any other DC voltage.
If the voltage to measure is up to 5V, the voltage can be brought directly to the input pin.
To measure higher voltage, insert two resistors wired as voltage divider. The figure shows
a 10x divider capable of measuring voltages up to 50V.

Ext Voltage
IN

+5V
Internal Resistors
and Converter

47kOhm
20kOhm
A/D
4.7kOhm

33kOhm
Ground

FIGURE 3-14. Battery Voltage monitoring circuit

52

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Connecting Optical Encoders

Connecting Sensors to Pulse Inputs

The controller has several pulse inputs capable of capturing Pulse Length, Duty Cycle or
Frequency with excellent precision. Being a digital signal, pulses are also immune to noise
compared to analog inputs.

Important Notice
On newer motor controllers models, activating the pulse mode on an input will also
enable a pull up resistor on that input. If the input is also used for analog capture,
the analog reading will be wrong.

Connecting to RC Radios
The pulse inputs are designed to allow direct connection to an RC radio without additional
components.
Optional
Power
to
Radio

5V Out

Controller
Power

R/C Channel 1

R/C Radio

R/C Channel 2

R/C Radio Ground

MCU

Controller
Ground

FIGURE 3-15. RC Radio powered by controller electrical diagram

Connecting to PWM Joysticks and Position Sensors

The controller’s pulse inputs can also be used to connect to sensors with PWM outputs.
These sensors provide excellent noise immunity and precision. When using PWM sensors, configure the pulse input in Duty Cycle mode. Beware that the sensor should always
be pulsing and never output a steady DC voltage at its ends. The absence of pulses is considered by the controller as a loss of signal.

Connecting Optical Encoders
Optical Incremental Encoders Overview
Optical incremental encoders are a means for capturing speed and traveled distance on a
motor. Unlike absolute encoders which give out a multi-bit number (depending on the resolution), incremental encoders output pulses as they rotate. Counting the pulses tells the
application how many revolutions, or fractions of, the motor has turned. Rotation velocity
can be determined from the time interval between pulses or by the number of pulses
within a given time period. Because they are digital devices, incremental encoders will
measure distance and speed with perfect accuracy.
Since motors can move in forward and reverse directions, it is necessary to differentiate
the manner that pulses are counted so that they can increment or decrement a position

Advanced Digital Motor Controller User Manual

53

Connecting Sensors and Actuators to Input/Outputs

counter in the application. Quadrature encoders have dual channels, A and B, which are
electrically phased 90° apart. Thus, direction of rotation can be determined by monitoring
the phase relationship between the two channels. In addition, with a dual-channel encoder, a four-time multiplication of resolution is achieved by counting the rising and falling
edges of each channel (A and B). For example, an encoder that produces 250 Pulses per
Revolution (PPR) can generate 1,000 Counts per Revolution (CPR) after quadrature.
A Channel

1 Pulse
= 4 Transitions
= 4 Counts

B Channel

Quadrature
Signal
Count Up

Count Down

FIGURE 3-16.Quadrature encoder output waveform
The figure below shows the typical construction of a quadrature encoder. As the disk rotates in front of the stationary mask, it shutters light from the LED. The light that passes
through the mask is received by the photo detectors. Two photo detectors are placed side
by side at so that the light making it through the mask hits one detector after the other to
produces the 90o phased pulses.
LED light source
Rotating
encoder disk
Stationary mask

Photodetector

FIGURE 3-17. Typical quadrature encoder construction
Unlike absolute encoders, incremental encoders have no retention of absolute position
upon power loss. When used in positioning applications, the controller must move the
motor until a limit switch is reached. This position is then used as the zero reference for all
subsequent moves.

Recommended Encoder Types
The module may be used with most incremental encoder modules as long as they include
the following features:
• Two quadrature outputs (Ch A, Ch B), single ended
• 3.0V minimum swing between 0 Level and 1 Level on quadrature output
• 5VDC operation. 50mA or less current consumption per encoder
More sophisticated incremental encoders with index, and other features may be used,
however these additional capabilities will be ignored.
The choice of encoder resolution is very wide and is constrained by the module’s maximum pulse count at the high end and measurement resolution for speed at the low end.

54

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Connecting the Encoder

Specifically, the controller’s encoder interface can process 1 million counts per second,
unless otherwise specified in the product datasheet.
Commercial encoders are rated by their numbers of “Pulses per Revolution” (also sometimes referred as “Number of Lines” or “Cycles per Revolution”). Carefully read the manufacturer’s datasheet to understand whether this number represents the number of pulses
that are output by each channel during the course of a 360 degrees revolution rather than
the total number of transitions on both channels during a 360 degrees revolution. The second number is 4 times larger than the first one.
The formula below gives the pulse frequency at a given RPM and encoder resolution in
Pulses per Revolution.
				

Pulse Frequency in counts per second = RPM / 60 * PPR * 4

Example: a motor spinning at 10,000 RPM max, with an encoder with 200 Pulses per Revolution would generate:
10,000 / 60 * 200 * 4 = 133.3 kHz which is well within the 1MHz maximum supported by
the encoder input.
An encoder with a 200 Pulses per Revolutions is a good choice for most applications.
A higher resolution will cause the counter to count faster than necessary and possibly
reach the controller’s maximum frequency limit.
An encoder with a much lower resolution will cause speed to be measured with less precision.

Connecting the Encoder
Encoders connect directly to pins present on the controller’s connector. The connector
provides 5V power to the encoders and has inputs for the two quadrature signals from
each encoder. The figure below shows the connection to the encoder.
5V Out

ENC1A (ENC2A)
5V

Ch A
Encoder

GND

Controller

Ch B
ENC1B (ENC2B)

GND

FIGURE 3-18. Controller connection to typical Encoder

Advanced Digital Motor Controller User Manual

55

Connecting Sensors and Actuators to Input/Outputs

Cable Length and Noise Considerations
Cable should not exceed one 3’ (one meter) to avoid electrical noise to be captured by the
wiring. A ferrite core filter should be inserted near the controller for length beyond 2’ (60
cm). For longer cable length use an oscilloscope to verify signal integrity on each of the
pulse channels and on the power supply.

Ferrite Core

Encoder

Controller

FIGURE 3-19. Use ferrite core on cable length beyond 2’ or 60cm

Important Warning
Excessive cable length will cause electrical noise to be captured by the controller
and cause erratic functioning that may lead to failure. In such situation, stop operation immediately.

Motor - Encoder Polarity Matching
When using encoders for closed loop speed or position control, it is imperative that when
the motor is turning in the forward direction, the counter increments its value and a positive speed value is measured. The counter value can be viewed using the PC utility.
If the Encoder counts backwards when the motor moves forward, correct this by either:
1- Swapping Channel A and Channel B on the encoder connector. This will cause the encoder module to reverse the count direction,
2- Enter a negative number in the PPR configuration will also cause the counter to count
in the reverse direction
3- Swapping the leads on the motor. This will cause the motor to rotate in the opposite
direction.

56

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Basic Operation

I/O Configuration
and Operation

SECTION 4

This section discusses the controller’s digital and analog inputs and output and how they
can be used.

Basic Operation
The controller’s operation can be summarized as follows:
•
•
•
•

Receive commands from a radio receiver, joystick or a microcomputer
Activate the motor according to the received command
Perform continuous check of fault conditions and adjust actions accordingly
Report real-time operating data

The diagram below shows a simplified representation of the controller’s internal operation.
The most noticeable feature is that the controller’s serial, digital, analog, pulse and encoder inputs may be used for practically any purpose.
Configuration
RS232/USB

Analog Inputs

Script

Input Capture
and
Switchbox

Command
Priority
Selection

Commands

Configuration

Configuration

Motor
Command

Output
Driver

Motor
Outputs

Feedback

Pulse Inputs

Estop/Limit Switches
Digital Inputs
Digital
Outputs

Encoder Inputs
Configuration

Amps
Temperature
Voltages

FIGURE 4-1. Simplified representation of the controller’s internal operation

Advanced Digital Motor Controller User Manual

57

Safety Recommendations

Practically all operating configurations and parameters can be changed by the user to
meet any specific requirement. This unique architecture leads to a very high number of
possibilities. This section of the manual describes all the possible operating options.

Input Selection
As seen earlier in the controller’s simplified internal operating diagram on Figure 4-1, any
input can be used for practically any purpose. All inputs, even when they are sharing the
same pins on the connector, are captured and evaluated by the controller. Whether an input is used, and what it is used for, is set individually using the descriptions that follow.

Important Notice
On shared I/O pins, there is nothing stopping one input to be used as analog or
pulse at the same time or for two separate inputs to act identically or in conflict
with one another. While such an occurrence is normally harmless, it may cause the
controller to behave in unexpected manner and/or cause the motors not to run.
Care must be exercised in the configuration process to avoid possible redundant or
conflictual use.

Digital Inputs Configurations and Uses
Each of the controller’s digital Inputs can be configured so that they are active high or active low. Each output can also be configured to activate one of the actions from the list in
the table below. In multi-channel controller models, the action can be set to apply to any
or all motor channels.
TABLE 4-1. Digital Input Action List

58

Action

Applicable
Channel

Description

No Action

-

Input causes no action

Safety Stop

Selectable

Stops the selected motor(s) channel until command is
moved back to 0 or command direction is reversed

Emergency stop

All

Stops the controller entirely until controller is powered
down, or a special command is received via the serial
port

Motor Stop (deadman
switch)

Selectable

Stops the selected motor(s) while the input is active.
Motor resumes when input becomes inactive

Invert motor direction

Selectable

Inverts the motor direction, regardless of the command
mode in used

Forward limit switch

Selectable

Stops the motor until command is changed to reversed

Reverse limit switch

Selectable

Stops the motor until the command is changed forward

Run script

NA

Start execution of MicroBasic script

Load Home counter

Selectable

Load counter with Home value

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Analog Inputs Configurations and Use

Configuring the Digital Inputs and the Action to use can be done very simply using the PC
Utility.
Wiring instructions for the Digital Inputs can be found in “Connecting Switches or Devices
to Inputs shared with Outputs” onpage 46

Analog Inputs Configurations and Use
The controller can do extensive conditioning on the analog inputs and assign them to
different use.
Each input can be disabled or enabled. When enabled, it is possible to select the whether
capture must be as absolute voltage or relative to the controller’s 5V Output. Details on how
to wire analog inputs and the differences between the Absolute and Relative captures can
be found in “Using the Analog Inputs to Monitor External Voltages” page 47.
TABLE 4-2. Analog Capture Modes
Analog Capture Mode

Description

Disabled

Analog capture is ignored (forced to 0)

Absolute

Analog capture measures real volts at the input

Relative

Analog captured is measured relative to the 5V Output which is
typically around 4.8V to 5.1V depending on the controller model and
the load. Correction is applied so that an input voltage measured to
be the same as the 5V Output voltage is reported at 5.0V

The raw Analog capture then goes through a series of processing shown in the diagram
below.
Min/Max/Center

Deadband

Exponent

Use
Select
Command

Analog
Input

Feedback

AIn > Max

Selectable Action

AIn < Min

Selectable Action

FIGURE 4-2. Analog Input processing chain

Advanced Digital Motor Controller User Manual

59

Safety Recommendations

Analog Min/Max Detection
An analog input can be configured so that an action is triggered if the captured value is
above a user-defined Maximum value and/or under a user-defined Minimum value. The actions that can be selected are the same as these that can be triggered by the Digital Input.
See the list and description in Table 4.1, “Digital Input Action List” on page 58.

Min, Max and Center adjustment
The raw analog capture is then scaled into a number ranging from -1000 to +1000 based
on user-defined Minimum, Maximum and Center values for the input. For example, setting
the minimum to 500mV, the center to 2000mV, and the maximum to 4500mV, will produce the output to change in relation to the input as shown in the graph below

Output
+1000

min
ctr

max

Analog
Capture
Voltage

-1000
FIGURE 4-3. Analog Input processing chain
This feature allows to capture command or feedback values that match the available range
of the input sensor (typically a potentiometer).
For example, this capability is useful for modifying the active joystick travel area. The figure
below shows a transmitter whose joystick’s center position has been moved back so that the
operator has a finer control of the speed in the forward direction than in the reverse position.
New Desired
Center Position

Min
Reverse

Min
Forward

Max
Reverse

Max
Forward

FIGURE 4-4. Calibration example where more travel is dedicated to forward motion

60

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Analog Inputs Configurations and Use

Setting the center value to be the same as the min value makes the input capture only
commands in the positive direction. For example if Min = Center = 200 and Max = 4500,
the input will convert into 0 when 200 and below, and 1000 above 4500.
The Min, Max and Center values are defined individually for each input. They can be easily
entered manually using the Roborun PC Utility. The Utility also features an Auto-calibration
function for automatically capturing these values.

Deadband Selection
The adjusted analog value is then adjusted with the addition of a deadband. This parameter
selects the range of movement change near the center that should be considered as a 0
command. This value is a percentage from 0 to 50% and is useful, for example, to allow some
movement of a joystick around its center position before any power is applied to a motor. The
graph below shows output vs input changes with a deadband of approximately 40%.

Output
+1000

-1000
+1000

Input

-1000
FIGURE 4-5. Effect of deadband on the output
Note that the deadband only affects the start position at which the joystick begins to take
effect. The motor will still reach 100% when the joystick is at its full position. An illustration of the effect of the deadband on the joystick action is shown in the Figure 4-6 below.

Min
Reverse

Deadband
(no action)

Max
Reverse

Min
Forward
Max
Forward

Centered
Position

FIGURE 4-6. Effect of deadband on joystick position vs. motor command
The deadband value is set independently for each input using the PC configuration utility.

Advanced Digital Motor Controller User Manual

61

Safety Recommendations

Command Correction
An optional exponential or a logarithmic adjustment can then be applied to the signal. Exponential correction will make the commands change less at the beginning and become
stronger at the end of the joystick movement. The logarithmic correction will have a stronger effect near the start and lesser effect near the end. The linear selection causes no
change to the input. There are 3 exponential and 3 logarithmic choices: weak, medium and
strong. The graph below shows the output vs input change with exponential, logarithmic
and linear corrections.

Output
+1000
Logarithmic
Linear
Exponential

-1000
+1000

Input

-1000
FIGURE 4-7. Effect of exponential / logarithmic correction on the output
The exponential or log correction is selected separately for each input using the PC Configuration Utility.

Use of Analog Input
After the analog input has been fully processed, it can be used as a motor command or, if
the controller is configured to operate in closed loop, as a feedback value (typically speed
or position).
Each input can therefore be configured to be used as command or feedback for any motor
channel(s). The mode and channel(s) to which the analog input applies are selected using
the PC Configuration Utility.

Pulse Inputs Configurations and Uses
The controller’s Pulse Inputs can be used to capture pulsing signals of different types.
TABLE 4-3. Analog Capture Modes

62

Catpure Mode

Description

Disabled

Pulse capture is ignored (forced to 0)

Pulse

Measures the On time of the pulse

Advanced Digital Motor Controller User Manual

Typical use
RC Radio

V1.8, August 28, 2017

Digital Outputs Configurations and Triggers

TABLE 4-3. (continued)
Catpure Mode

Description

Typical use

Duty Cycle

Measures the On time relative to the
full On/Off period

Hall position sensors and joysticks with
pulse output

Frequency

Measures the repeating frequency of
pulse

Encoder wheel

The capture mode can be selected using the PC Configuration Utility.
The captured signals are then adjusted and can be used as command or feedback according to the processing chain described in the diagram below.
Capture

Min/Max/Center

Deadband

Exponent

Use
Select
Command

Pulse
Input

Feedback

FIGURE 4-8. Pulse Input processing chain
Except for the capture, all other steps are identical to these described for the Analog capture mode.

Use of Pulse Input
After the pulse input has been fully processed, it can be used as a motor command or, if
the controller is configured to operate in closed loop, as a feedback value (typically speed
or position).
Each input can therefore be configured to be used as command or feedback for any motor
channel(s). The mode and channel(s) to which the analog input applies are selected using
the PC Configuration Utility.

Digital Outputs Configurations and Triggers
The controller’s digital outputs can individually be mapped to turn On or Off based on the
status of user-selectable internal status or events. The table below lists the possible assignment for each available Digital Output.

Advanced Digital Motor Controller User Manual

63

Safety Recommendations

Action

Output activation

Typical Use

No action

Not changed by any internal controller
events.

Output may be activated using Serial commands or user scripts

Motor(s) is on

When selected motor channel(s) has power
applied to it.

Brake release

When selected motor channel(s) has power
Motor(s) is reversed applied to it in reverse direction.

Back-up warning indicator

Overvoltage

When battery voltage above over-limit

Shunt load activation

Overtemperature

When over-temperature limit exceeded

Fan activation. Warning buzzer

Status LED

When status LED is ON

Place Status indicator in visible
location.

Encoder Configurations and Use
On controller models equipped with encoder inputs, external encoders enable a range of
precision motion control features. See “Connecting Optical Encoders” page 53 for a
detailed discussion on how optical encoders work and how to physically connect them to
the controller. The diagram below shows the processing chain for each encoder input

Encoder
Input

32-bit
up/down
Counter

Count > Max

Selectable Action

Count < Min

Selectable Action

Count
Speed in RPM
Speed
Measure

Encoder PPR

Use
Select
Command

Scalling

Feedback

Max RPM

FIGURE 4-9. Encoder input processing
The encoder’s two quadrature signals are processed to generate up and down counts
depending on the rotation direction. The counts are then summed inside a 32-bit counter.
The counter can be read directly using serial commands and/or can be used as a position
feedback source for the closed loop position mode.
The counter can be compared to user-defined Min and/or Max values and trigger action
if these limits are reached. The type actions are the same as these selectable for Digital
Inputs and described in “Digital Inputs Configurations and Uses”page 58.

64

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Hall and other Rotor Sensor Inputs

The count information is also used to measure rotation speed. Using the Encoder Pulse
Per Rotation (PPR) configuration parameter, the output is a speed measurement in actual
RPM that is useful in closed loop speed modes where the desired speed is set as a numerical value, in RPM, using a serial command.
The speed information is also scaled to produce a number ranging from -1000 to +1000
relative to a user-configured arbitrary Max RPM value. For example, with the Max RPM
configured as 3000 and the a motor rotating at 1500 RPM, the measured relative speed
will be 500. Relative speed is useful for closed loop speed mode that use Analog or Pulse
inputs as speed commands.
Configuring the encoder parameters is done easily using the PC Configuration Utility.

Hall and other Rotor Sensor Inputs
On brushless motor controllers, the Hall or other Rotor position sensor that are used to
switch power around the motor windings, are also used to measure speed and distance
traveled.
Speed is evaluated by measuring the time between transition of the Hall Sensors. A 32 bit
up/down counter is also updated at each Hall Sensor transition.
Speed information picked up from the Hall Sensors can be used for closed loop speed operation without any additional hardware.

Advanced Digital Motor Controller User Manual

65

Safety Recommendations

66

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Introduction to MGS1600 Magnetic Guide Sensor

Magnetic Guide
Sensor Connection
and Operation

SECTION 5

This section discusses how to interface one or more Roboteq’s MGS1600 Magnetic Guide
Sensors to the motor controller. Details of the Sensor’s operation can be found in the
product’s datasheet.

Introduction to MGS1600 Magnetic Guide Sensor
Roboteq’s Magnetic Guide Sensor is a sensor capable of detecting and reporting the position of a magnetic field along its horizontal axis. The sensor is intended for applications in
Automatic Guided Vehicles using inexpensive adhesive magnetic tape to form a guide on
the floor. The tape creates an invisible field that is immune to dirt and unaffected by lighting conditions. The sensor can be interfaced directly to any of Roboteq’s motor controllers
in order to create an effective AGV solution with just two components.
The sensor generates the following information about the track:
•• Tape Detect
•• Position of Left Track
•• Position of Right Track
•• Presence of Left Marker
•• Presence of Right Marker

This data can be transmitted to Roboteq controller and other devices using one of the following methods

Method

To Roboteq
Controllers

To PLCs

To PC’s

MagSensor MultiPWM

Preferred

Unsuitable

Unsuitable

Serial

Not Recommended

Preferred

Suitable

CANbus

Suitable

Preferred

Suitable (1)

USB

N/A

Unsuitable

Suitable

Notes:
1: PC must be fitted with CAN adapter
Advanced Digital Motor Controller User Manual

67

Magnetic Guide Sensor Connection and Operation

MagSensor MultiPWM interface
The recommended interfacing method to Roboteq motor controller is the MagSensor
MultiPWM mode. As the name implies, this proprietary method uses a succession
of variable duty-cycle pulses to carry the Tracks, Tape Detect, Markers and Gyroscope
information.
Any of the controller’s pulse input can be configured as a MultiPWM input. The diagram
below shows how simple this one-wire interfacing is.

Motor Controller

Pulse Input
GND

5V Out or
7-30V Supply

MultiPWM

Sensor
Figure 5-1: One-wire interfacing using MultiPWM

Enabling MagSensor MultiPWM Communication
MGS1600 Sensor is set to MultiPWM mode in its factory default configuration. To enable
capture, the selected pulse input on the controller must be configured to “MagSensor”
when using the PC utility. When changing via the console use
^PMOD cc 4
To enable pulse input cc in MultiPWM mode.

Accessing Sensor Information
Once enabled, the pulses are sent continuously by the sensor 100 times per second.
The pulses are captured and parsed by the motor controller as they arrive. A real time
mirror image of sensor data is then present inside the controller. From there the sensor
information can be read using serial, USB, CAN or MicroBasic scripts like any other of the
controller’s operational parameters.

68

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Connecting Multiple Magnetic Guide Sensor

The following Motor Controller queries are available for reading the captured sensor data.
?MGD : Read tape detect
?MGT nn : Read left track when nn= 1 or right track when nn= 2
?MGM nn : Read left marker when nn=1 or right track when nn= 2
Details on these commands can be found in the Commands Reference section of this
manual

Connecting Multiple Magnetic Guide Sensor
More than one sensor can be connected to a single motor controller. This can be useful
in AGV designs that must be able to move in the forward and reverse direction along the
guide. Connecting multiple sensor can be done by connecting each sensor to one of the
available pulse input, as shown in the figure below.

GND

Pulse In n

Pulse In 2

Pulse In 1

Motor Controller

7-30V Supply

Figure 5-2: Connecting multiple sensors to a motor controller

Accessing Multiple Sensor Information Sequentially
Two methods are available for accessing each sensor’s data when multiple sensors are
connected.
The first method is to only have one sensor enabled at any one time. This is done by enabling and disabling pulse inputs via serial commands or MicroBasic scripting. Examples:
^PMOD 1 0 : Serial command to Disable Sensor on pulse input 1
Setconfig(_PMOD, 1, 0) : Microbasic instruction to disable sensor on Pulse input 1
^PMOD 2 4 : Enable Sensor on Pulse input 2
Setconfig(_PMOD, 2, 4) : Microbasic instruction to enable sensor on Pulse input 2
The sensor information can then be accessed with the ?MGD, ?MGT and ?MGM function
discussed above.

Advanced Digital Motor Controller User Manual

69

Magnetic Guide Sensor Connection and Operation

Accessing Multiple Sensor Information Simultaneously
It is possible to have all magnetic sensors enabled at the same time by having their respective pulse input set to MagSensor MultiPWM
When more than one pulse input is configured that way, the sensor data is accessible
using the ?MGD, ?MGT, ?MGM and ?MGY queries as follows, where x is the pulse input
number (1, 2, 3 etc.).

Reading Tape Detect
?MGD x or GetValue(_MGD, x)
Returns the Tape Detect state of Sensor at Pulse input x
Example:
?MGD 2 : Returns the Tape Detect state of Sensor 2

Reading Marker Detect
?MGM 2*(x-1)+1 or GetValue(_MGM, 2*(x-1)+1)
Returns the state of the Left Marker Detect state of Sensor at Pulse input x
?MGM 2*(x-1)+2 or GetValue(_MGM, 2*(x-1)+2)
Returns the state of the Right Marker Detect state of Sensor at Pulse input x
Examples:
?MGM 1 : Returns the Left Marker Detect state of Sensor at input 1
?MGM 2 : Returns the Right Marker Detect state of Sensor at input 1
?MGM 3 : Returns the Left Marker Detect state of Sensor at input 2
?MGM 4 : Returns the Right Marker Detect state of Sensor at input 2

Reading Track Positions
?MGT 3*(x-1)+1 or GetValue(_MGT, 3*(x-1)+1)
Returns the Left Track Position of Sensor at input x
?MGT 3*(x-1)+2 or GetValue(_MGT, 3*(x-1)+2)
Returns the Right Track Position of Sensor at input x

70

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Connecting Multiple Magnetic Guide Sensor

?MGT 3*(x-1)+3 or GetValue(_MGT, 3*(x-1)+3)
Returns the Active (Left or Right) Track Position of Sensor at input x
Examples:
?MGT 1 : Returns the Left Track Position of Sensor at input 1
?MGT 2 : Returns the Right Track Position of Sensor at input 1
?MGT 4 : Returns the Left Track Position of Sensor at input 2
?MGT 5 : Returns the Right Track Position of Sensor at input 2
?MGT 7 : Returns the Left Track Position of Sensor at input 3

Advanced Digital Motor Controller User Manual

71

Magnetic Guide Sensor Connection and Operation

72

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Input Command Modes and Priorities

SECTION 6

Command
Modes

This section discusses the controller’s normal operation in all its supported operating
modes.

Input Command Modes and Priorities
The controller will accept commands from one of the following sources
• Serial data (RS232, USB, MicroBasic script)
• Pulse (R/C radio, PWM, Frequency)
• Analog signal (0 to 5V)
• Spektrum Radio (on selected models)
• CAN Interface
One, many or all command modes can be enabled at the same time. When multiple
modes are enabled, the controller will select which mode to use based on a user
selectable priority scheme. Setting the priorities is done using the PC configuration
utility.
This scheme uses a priority table containing three parameters and let you select which
mode must be used in each priority order. During operation, the controller reads the first
priority parameter and switches to that command mode. If that command mode is found
to be active, that command is then used. If no valid command is detected, the controller
switches to the mode defined in the next priority parameter. If no valid command is recognized in that mode, the controller then repeats the operation with the third priority parameter. If no valid command is recognized in that last mode, the controller applies a default
command value that can be set by the user (typically 0).

Advanced Digital Motor Controller User Manual

73

Brushless Motor Connections and Operation

Pulse
tes

eR

t eS

Serial/USB
Analog

FIGURE 6-1. Controller’s possible command modes
In the Serial mode, the mode is considered as active if commands (starting with “!”)
arrive within the watchdog timeout period via the RS232 or USB ports. The mode will
be considered inactive, and the next lower priority level will be selected as soon as the
watchdog timer expires. Note that disabling the watchdog will cause the serial mode to be
always active after the first command is received, and the controller will never switch to a
lower priority mode.
In the pulse mode, the mode is considered active if a valid pulse train is found and remains present.
In analog mode, the mode is considered active at all time, unless the Center at Start
safety is enabled. In this case, the Analog mode will activate only after the joystick has
been centered. The Keep within Min/Max safety mode will also cause the analog mode to
become inactive, and thus enable the next lower priority mode, if the input is outside of a
safe range.
The example in Figure 6-1 shows the controller connected to a microcomputer, a RC radio, and an analog joystick. If the priority registers are set as in the configuration below:
1- Serial
2- Pulse
3- Analog
then the active command at any given time is given in the table below.
TABLE 6-1. Priority resolution example

74

Microcomputer
Sending commands

Valid Pulses
Received

Analog joystick
within safe Min/Max

Command mode selected

Yes

Don’t care

Don’t care

Serial

No

Yes

Don’t care

RC mode

No

No

Yes

Analog mode

No

No

No

User selectable default value

Advanced Digital Motor Controller User Manual

V1.8, August 28 2017

Operating the Controller in RC mode

Note that it is possible to set a priority level to “None”. For example, the priority table
1 - Serial
2 - RC Pulse
3 - None
will only arbitrate and use Serial or RC Pulse commands.

USB vs Serial Communication Arbitration
On controllers equipped with a USB port, commands may arrive through the RS232 or the
USB port at the same time. They are executed as they arrive in a first come first served
manner. Commands that are arriving via USB are replied on USB. Commands arriving via
the UART are replied on the UART. Redirection symbol for redirecting outputs to the other
port exists (e.g. a command can be made to respond on USB even though it arrived on
RS232).

CAN Commands Arbitration
On controllers fitted with a CAN interface, commands received via CAN are processed as
they arrive regardless if any other mode is active at the same time. Care must be taken to
avoid conflicting commands from different sources. Queries of operating parameters will
not interfere with queries from serial or USB.

Commands issued from MicroBasic scripts
When sending a Motor or Digital Output command from a MicroBasic script, it will be
interpreted by the controller the same way as a serial command (RS232 or USB). If a serial
command is received from the serial/USB port at the same time a command is sent from
the script, both will be accepted and this can cause conflicts if they are both relating to
the same channel. Care must be taken to avoid, for example, cases where the script commands one motor to go to a set level while a serial command is received to set the motor
to a different level.

Important Warning
When running a script that sends motor command, make sure you click “Mute” in
the PC utility. Otherwise, the PC will be sending motor commands continuously and
these will interfere with the script commands.
Script commands are also subject to the serial Watchdog timer and share the same
priority level as Serial commands. Use the “Command Priorities” configuration to
set the priority of commands issued from the script vs commands received from the
Pulse Inputs or Analog Inputs.

Operating the Controller in RC mode
The controller can be directly connected to an R/C receiver. In this mode, the speed or
position information is contained in pulses whose width varies proportionally with the
joysticks’ positions. The controller mode is compatible with all popular brands of RC transmitters.

Advanced Digital Motor Controller User Manual

75

Brushless Motor Connections and Operation

The RC mode provides the simplest method for remotely controlling a robotic vehicle:
little else is required other than connecting the controller to the RC receiver and powering
it On.

tes

eR

t eS

FIGURE 6-2. R/C radio control mode
The speed or position information is communicated to the controller by the width of a
pulse from the RC receiver: a pulse width of 1.0 millisecond indicates the minimum joystick position and 2.0 milliseconds indicates the maximum joystick position. When the
joystick is in the center position, the pulse should be 1.5ms.

joystick position:

min

center

max

1.05ms
0.45ms
R/C pulse timing:

0.9ms

FIGURE 6-3. Joystick position vs. pulse duration default values
The controller has a very accurate pulse capture input and is capable of detecting
changes in joystick position (and therefore pulse width) as small as 0.1%. This resolution is superior to the one usually found in most low cost RC transmitters. The
controller will therefore be able to take advantage of the better precision and better
control available from a higher quality RC radio, although it will work fine with lesser
expensive radios as well.

Input RC Channel Selection
The controllers features several inputs that can be used for pulse capture. See product
datasheet for actual number of pulse input. Any RC input can be used as command
for any motor channels. The controller’s factory default defines two channels for RC

76

Advanced Digital Motor Controller User Manual

V1.8, August 28 2017

Operating the Controller in RC mode

capture (one input on single channel products). Which channel and which pin on the input
connector depends on the controller model and can be found in the controller’s datasheet.
Changing the input assignment is done using the PC Configuration utility.

Input RC Channel Configuration
Internally, the measured pulse width is compared to the reference minimum, center and
maximum pulse width values. From this is generated a command number ranging from
-1000 (when the joystick is in the min. position), to 0 (when the joystick is in the center position) to +1000 (when the joystick is in the max position). This number is then used to set
the motor’ desired speed or position that the controller will then attempt to reach.
For best results, reliability and safety, the controller will also perform a series of corrections, adjustments and checks to the R/C commands, as described below.

Joystick Range Calibration
The Joystick min, max and center position are adjustable. For best control accuracy, the
controller can be calibrated to capture and use your radio’s specific timing characteristics
and store them into its internal Flash memory. This is done using a simple calibration procedure described page 60.

Deadband Insertion
The controller allows for a selectable amount of joystick movement to take place around
the center position before activating the motors. See the full description of this feature at
“Deadband Selection” page 61

Command Correction
The controller can also be set to translate the joystick motor commands so that the motor
responds differently depending on whether the joystick is near the center or near the
extremes. Five different exponential or logarithmic translation curves may be applied.
Since this feature applies to the R/C, Analog and RS232 modes, it is described in detail in
“Command Correction” page 62, in the General Operation section of the manual.

Reception Watchdog
Immediately after it is powered on, if in the R/C mode, the controller is ready to receive
pulses from the RC radio.
If valid pulses are received on any of the enabled Pulse input channels, the controller will
consider the RC Pulse mode as active. If no higher priority command is currently active
(See “Input Command Modes and Priorities” page 73), the captured RC pulses will
serve to activate the motors.
If no valid RC pulses reach the controller for more than 500ms, the controller no longer considers it is in the RC mode and a lower priority command type will be accepted
if present.

Advanced Digital Motor Controller User Manual

77

Brushless Motor Connections and Operation

Important Warning
Some receivers include their own supervision of the radio signals and will move
their servo outputs to a safe position in case of signal loss. Using these types of receiver, the controller will always be receiving pulses even with the transmitter off.

Using Sensors with PWM Outputs for Commands
The controller’s Pulse inputs can be used with various types of angular sensors that use
contactless Hall technology and that output a PWM signal. These type of sensors are
increasingly used inside joysticks and will perform much more reliably, and typically with
higher precision than traditional potentiometers.
The pulse shape output from these devices varies widely from one sensor model to another and is typically different than this of RC radios:
- They have a higher repeat rate, up to a couple of kHz.
- The min and max pulse width can reach the full period of the pulse
Care must therefore be exercised when selecting a sensor. The controller will accommodate any pulsing sensor as long as the pulsing frequency does not exceed 250Hz. The
sensor should not have pulses that become too narrow - or disappear altogether - at the
extremes of their travel. Select sensors with a minimum pulse width of 10us or higher.
Alternatively, limit mechanically the travel of the sensor to keep the minimum pulse width
within the acceptable range.
A minimum of pulsing must always be present. Without it, the signal will be considered as
invalid and lost.
Pulses from PWM sensors can be applied to any Pulse input on the controller’s connector.
Configure the input capture as Pulse or Duty Cycle.
A Pulse mode capture measures the On time of the pulse, regardless of the pulse period.
A Duty Cycle mode capture measures the On time of the pulse relative to the entire pulse
period. This mode is typically more precise as it compensates for the frequency drifts o
the PWM oscillator.
PWM signals are then processed exactly the same way as RC pulses. Refer to the RC
pulse paragraphs above for reference.

Operating the Controller In Analog Mode
Analog Command is the simplest and most common method when the controller is used
in a non-remote, human-operated system, such as Electric Vehicles.

Input Analog Channel Selection
The controller features 4 to 11 inputs, depending on the model type, that can be used for
analog capture. Using different configuration parameters, any Analog input can be used as
command for any motor channel. The controller’s factory default defines two channels as

78

Advanced Digital Motor Controller User Manual

V1.8, August 28 2017

Operating the Controller In Analog Mode

Analog command inputs. Which channel and which pin on the input connector depends on
the controller model and can be found in the controller’s datasheet.
Changing the input assignment is done using the PC Configuration utility. See “Analog Inputs Configurations and Use” on page 59.

Input Analog Channel Configuration
An Analog input can be Enabled or Disabled. When enabled, it can be configured to capture absolute voltage or voltage relative to the 5V output that is present on the connector.
See “Analog Inputs Configurations and Use” on page 59

Analog Range Calibration
If the joystick movement does not reach full 0V and 5V, and/or if the joystick center point
does not exactly output 2.5V, the analog inputs can be calibrated to compensate for this.
See “Min, Max and Center adjustment” on page 60 and “Deadband Selection”on
page 61.

Using Digital Input for Inverting direction
Any digital input can be configured to change the motor direction when activated. See
“Digital Inputs Configurations and Uses” on page 58. Inverting the direction has the
same effect as instantly moving the command potentiometer to the same level the opposite direction. The motor will first return to 0 at the configured deceleration rate and go to
the inverted speed using the configured acceleration rate.

Safe Start in Analog Mode
By default, the controller is configured so that in Analog command mode, no motor will
start until all command joysticks are centered. The center position is the one where the
input equals the configured Center voltage plus the deadband.
After that, the controller will respond to changes to the analog input. The safe start check
is not performed again until power is turned off.

Protecting against Loss of Command Device
By default, the controller is protected against the accidental loss of connection to the
command potentiometer. This is achieved by adding resistors in series with the potentiometer that reduce the range to a bit less than the full 0V to 5V swing. If one or more
wires to the potentiometer are cut, the voltage will actually reach 0V and 5V and be considered a fault condition, if that protection is enabled. See “Connecting Potentiometers for
Commands with Safety band guards” on page 49.

Safety Switches
Any Digital input can be used to add switch-activated protection features. For example,
the motor(s) can be made to activate only if a key switch is turned On, and a passenger
is present on the driver’s seat. This is done using by configuring the controller’s Digital inputs. See “Digital Inputs Configurations and Uses” page 58.

Advanced Digital Motor Controller User Manual

79

Brushless Motor Connections and Operation

Monitoring and Telemetry in RC or Analog Modes
The controller can be fully monitored while it is operating in RC or Analog modes. If directly connected to a PC via USB or RS232, the controller will respond to operating queries
(Amps, Volts, Temperature, Power Out, ...) without this having any effect on its response
to Analog or RC commands. The PC Utility can therefore be used to visualize in real time
all operating parameters as the controller runs. See “Run Tab” on page 363.
In case the controller is not connected via a bi-directional link, and can only send information one-way, typically to a remote host, the controller can be configured to output a
user-selectable set of operating parameters, at a user selectable repeat rate. See “Query
History Commands” on page 263.
MicroBasic scripting can also be used to generate a periodic text string containing parameters to monitor.

Using the Controller with a Spektrum Satellite Receiver
Some controller models can be connected directly to a miniature Spektrum SP9545
satellite receiver. Using only 3 wires this interface will carry the information of up to
6 command joysticks with a resolution and precision that is significantly higher than
traditional 1.5ms pulse signals.
The PC utility is used to map any of the 6 channels as a command for each motor. Binding
the receiver to the transmitter is done using the %BIND maintenance command. See
“Maintenance Commands” on page 209 for details on the binding procedure.

Using the Controller in Serial (USB/RS232) Mode
The serial mode allows full control over the controller’s entire functionality. The controller
will respond a large set of commands. These are described in detail in “Serial (RS232/
USB) Operation” on page 141.

80

Advanced Digital Motor Controller User Manual

V1.8, August 28 2017

Power Output Circuit Operation

Motor Operating
Features and
Options

SECTION 7

This section discusses the controller’s operating features and options relating to its motor
outputs.

Power Output Circuit Operation
The controller’s power stage is composed of high-current MOSFET transistors that are
rapidly pulsed on and off using Pulse Width Modulation (PWM) technique in order to deliver more or less power to the motors. The PWM ratio that is applied is the result of computation that combines the user command and safety related corrections. In closed-loop
operation, the command and feedback are processed together to produced a the adjusted
motor command. The diagram below gives a simplified representation of the controller’s
operation.

Commands

Configuration

Configuration

Configuration

Configuration

Acceleraton
Decceleration

Channel
Mixing

Motor
Command

Safety
Checks

Power
Output

PWM
Feedback

Channel
Mixing

Configuration

Short
Detect

Motor
Outs

Configuration
Estop,
Limit Switches,
...

Amps
Temperature
Voltages

FIGURE 7-1. Simplified diagram of power output operation

Advanced Digital Motor Controller User Manual

81

Motor Operating Features and Options

Global Power Configuration Parameters
PWM Frequency
The power MOSFETs are switched at 16kHz by default. This frequency can set to another
value ranging from 10 kHz to 50 kHz. Increasing the frequency reduces the efficiency due
to switching losses. Lowering the frequency eventually creates audible noise and can be
inefficient on low inductance motors.
Changing the PWM frequency typically results in no visible change in the motor operation
and should be left untouched.

Overvoltage Protection
The controller includes a battery voltage monitoring circuit that will cause the output
transistors to be turned Off if the main battery voltage rises above a preset Over Voltage
threshold. The value of that threshold is set by default and may be adjusted by the user.
The default value and settable range is given in the controller model datasheet.
This protection is designed to prevent the voltage created by the motors during regeneration to be “amplified” to unsafe levels by the switching circuit.
The controller will resume normal operation when the measured voltage drops below the
Over Voltage threshold minus an user definable hysteresis voltage.
The controller can also be configured to trigger one of its Digital Outputs when an Over
Voltage condition is detected. This Output can then be used to activate a Shunt load
across the VMot and Ground wires to absorb the excess energy if it is caused by regeneration. This protection is particularly recommended for situation where the controller is
powered from a power supply instead of batteries.

Undervoltage Protection
In order to ensure that the power MOSFET transistors are switched properly, the controller monitors the internal preset power supply that is used by the MOSFET drivers. If the
internal voltage drops below a safety level, the controller’s output stage is turned Off. The
rest of the controller’s electronics, including the microcomputer, will remain operational as
long as the power supply on VMot is above the minimum voltage specified in the product
datasheet or if Power Control is above 7V.
Additionally, the output stage will be turned off when the main battery voltage on VMot
drops below a user configurable level that is factory preset at 5V.

Temperature-Based Protection
The controller features active protection which automatically reduces power based on
measured operating temperature. This capability ensures that the controller will be able to
work safely with practically all motor types and will adjust itself automatically for the various load conditions.
When the measured temperature reaches 70oC, the controller’s maximum allowed power
output begins to drop by 20% for every degree until the temperature reaches 75oC. Above
75oC, the controller’s power stage turns itself off completely.
Note that the measured temperature is measured on the heat sink near the Power Transistors and will rise and fall faster than the outside surface.

82

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Global Power Configuration Parameters

The time it takes for the heat sink’s temperature to rise depends on the current output,
ambient temperature, and available air flow (natural or forced).

Short Circuit Protection
The controller includes a circuit that will detect very high current surges that are consistent with short circuits conditions. When such a condition occurs, the power transistor for
the related motor channel are cut off within a few microseconds. Conduction is restored
at 1ms intervals. If the short circuit is detected again for up to a quarter of a second, it is
considered as a permanent condition and the controller enters a Safety Stop condition,
meaning that it will remain off until the command is brought back to 0.
The short circuit detection can be configured with the PC utility to have one of three sensitivity levels: quick, medium, and slow.
The protection is very effective but has a few restrictions:
Only shorts between two motor outputs of the same channel are detected. Shorts between a motor wire and VMot are also detected. Shorts between a motor output and
Ground are not detected.
Wire inductance causes current to rise slowly relative to the PWM On/Off times. Short
circuit will typically not be detected at low PWM ratios, which can cause significant heat
to eventually accumulate in the wires, load and the controller, even though the controller
will typically not suffer direct damage. Increasing the short circuit sensitivity will lower the
PWM ratio at which a short circuit is detected.
Since the controller can handle very large current during its normal operation, Only direct
short circuits between wires will cause sufficiently high current for the detection to work.
Short circuits inside motors or over long motor wires may go undetected.
A simplified short circuit protection logic is implemented on some controller models.
Check with controller datasheet for details.

Mixed Mode Select
Mixed mode is available as a configuration option in dual channel controllers to create
tank-like steering when one motor is used on each side of the robot: Channel 1 is used for
moving the robot in the forward or reverse direction. Channel 2 is used for steering and
will change the balance of power on each side to cause the robot to turn. Figure 7-2 below
illustrates how the mixed mode motor arrangement.

Controller

FIGURE 7-2. Effect of commands to motor examples in mixed mode

Advanced Digital Motor Controller User Manual

83

Motor Operating Features and Options

The controller supports 3 mixing algorithms with different driving characteristics.
The table below shows how each motor output responds to the two commands
in each of these modes.
TABLE 7-1. Mixing Mode characteristics
Input

Mode 1
M1

Mode 2

M2

M1

Mode 3

Throttle

Steering

M2

M1

M2

0

0

0

0

0

0

0

0

0

300

300

-300

300

-300

300

-300

0

600

600

-600

600

-600

600

-600

0

1000

1000

-1000

1000

-1000

1000

-1000

0

-300

-300

300

-300

300

-300

300

0

-600

-600

600

-300

300

-600

600

0

-1000

-1000

1000

-1000

1000

-1000

1000

300

300

600

0

600

0

522

90

300

600

900

-300

900

-300

762

-120

300

1000

1000

-700

1000

-1000

1000

-400

300

-300

0

600

0

600

90

522

300

-600

-300

900

-300

900

-120

762

300

-1000

-700

1000

-1000

1000

-400

1000

600

300

900

300

900

300

708

480

600

600

1000

0

1000

-200

888

360

600

1000

1000

-400

1000

-1000

1000

200

600

-300

300

900

300

900

480

708

600

-600

0

1000

-200

1000

360

888

600

-1000

-400

1000

-1000

1000

200

1000

1000

300

1000

700

1000

400

900

1000

1000

600

1000

400

1000

-200

1000

1000

1000

1000

1000

0

1000

-1000

1000

1000

1000

-300

700

1000

400

1000

1000

900

1000

-600

400

1000

-200

1000

1000

1000

1000

-1000

0

1000

-1000

1000

1000

1000

Motor Channel Parameters
User Selected Current Limit Settings
The controller has current sensors at each of its output stages. Every 1 ms, this current
is measured and a correction to the output power level is applied if higher than the user
preset value.

84

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Motor Channel Parameters

The current limit may be set using the supplied PC utility. The maximum limit is dependent
on the controller model and can be found on the product datasheet.
The limitation is performed on the Motor current and not on the Battery current. See “Battery Current vs. Motor Current” on page 30 for a discussion of the differences.

Selectable Amps Threshold Triggering
The controller can be configured to detect when the Amp on a motor channel exceed a
user-defined threshold value and trigger an action if this condition persists for more than a
preset amount of time.
The list of actions that may be triggered is shown in the table below.
TABLE 7-2. Possible Action List when Amps threshold is exceeded
Action

Applicable
Channel

Description

No Action

-

Input causes no action

Safety Stop

Selectable

Stops the selected motor(s) channel until command is
moved back to 0 or command direction is reversed

Emergency stop

All

Stops the controller entirely until controller is powered
down, or a special command is received via the serial
port

This feature is very different than amps limiting. Typical uses for it are for stall detection
or “soft limit switches”. When, for example, a motor reaches an end and enters stall condition, the current will rise, and that current increase can be detected and the motor be
made to stop until the direction is reversed.

Programmable Acceleration & Deceleration
When changing speed command, the controller will go from the present speed to the desired one at a user selectable acceleration. This feature is necessary in order to minimize
the surge current and mechanical stress during abrupt speed changes.
This parameter can be changed by using the PC utility. Acceleration can be different for
each motor. A different value can also be set for the acceleration and for the deceleration.
The acceleration value is entered in RPMs per second. In open loop installation, where
speed is not actually measured, the acceleration value is relative to the Max RPM parameter. For example, if the Max RPM is set to 1000 (default value) and acceleration to 2000,
this means that the controller will go from 0 to 100% power in 0.5 seconds.

Important Warning
Depending on the load’s weight and inertia, a quick acceleration can cause considerable current surges from the batteries into the motor. A quick deceleration will cause
an equally large, or possibly larger, regeneration current surge. Always experiment
with the lowest acceleration value first and settle for the slowest acceptable value.

Advanced Digital Motor Controller User Manual

85

Motor Operating Features and Options

Forward and Reverse Power Adjustment Gain
This parameter lets you select the scaling factor for the power output as a percentage value. This feature is used to connect motors with voltage rating that is less than the battery
voltage. For example, using a factor of 50% it is possible to connect a 12V motor onto a
24V system, in which case the motor will never see more than 12V at its input even when
the maximum power is applied.

Selecting the Motor Control Modes
For each motor, the controller supports multiple motion control modes. The controller’s
factory default mode is Open Loop Speed control for each motor. The mode can be
changed using the Roborun PC utility.

Open Loop Speed Control
In this mode, the controller delivers an amount of power proportional to the command
information. The actual motor speed is not measured. Therefore the motor will slow down
if there is a change in load as when encountering an obstacle and change in slope. This
mode is adequate for most applications where the operator maintains a visual contact
with the robot.
Power Command

PWM

Motor

Figure 7-3: Open loop mode

Closed Loop Speed Control
In this mode, illustrated in Figure 7-4, optical encoder (typical) or an analog tachometer
is used to measure the actual motor speed. If the speed changes because of changes in
load, the controller automatically compensates the power output. This mode is preferred
in precision motor control and autonomous robotic applications. Details on how to wire
the tachometer can be found in “Connecting Tachometer to Analog Inputs” on page 50.
Closed Loop Speed control operation is described in “Closed Loop Speed Mode” on page
113. On brushless motors, speed may be sensed directly from the motor’s Hall or others
internal Sensors and closed loop operation is possible without additional hardware.

FIGURE 7-4. Motor with tachometer or Encoder for Closed Loop Speed operation
Position Feedback
Position Sensor

Gear box

86

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Selecting the Motor Control Modes

Closed Loop Speed Position Control
In this mode, the controller computes the position at which the motor must be at every
1ms. Then a position loop compares that expected position with the current position and
applies the necessary power level in order for the motor to reach that position. This mode
is especially effective for accurate control at very slow speeds. Details on this mode can
be found in Closed Loop Speed and Speed-Position Modes on page 113
Speed
Command

Trajectory

Expected
Position

-

PWM
PID

Motor

Position Feedback

Position Counter

Figure 7-5: Closed Loop Speed Position mode

Closed Loop Position Relative Control
In this mode, illustrated in Figure 7-6, the axle of a geared down motor is typically coupled to a position sensor that is used to compare the angular position of the axle versus
a desired position. The motor will move following a controlled acceleration up to a user
defined velocity, and decelerate to smoothly reach the desired destination. This feature of
the controller makes it possible to build ultra-high torque “jumbo servos” that can be used
to drive steering columns, robotic arms, life-size models and other heavy loads. Details on
how to wire the position sensing potentiometers and operating in this mode can be found
in “Closed Loop Relative and Tracking Position Modes” on page 121.
Position Feedback
Position Sensor

Gear box

FIGURE 7-6. Motor with potentiometer assembly for position operation

-1000 to +1000
Position Command

Trajectory

Expected
Position

-

PWM
PID

-1000 to +1000 Feedback

Motor

Position Sensor

Figure 7-7. Closed Loop Position Relative mode

Advanced Digital Motor Controller User Manual

87

Motor Operating Features and Options

Closed Loop Count Position
In this mode, an encoder is attached to the motor as for the Speed Mode of Figure
7-8. Then, the controller can be instructed to move the motor to a specific number of
counts, using a user-defined acceleration, velocity, and deceleration profile. Details
on how to configure and use this mode can be found in “Closed Loop Count Position
Mode” on page 131. On brushless motors, the hall sensors can be also be used for
position measurement.
Count
Position Command

Trajectory

Expected
Position

-

PWM
PID

Motor

Position Feedback

Position Counter

Figure 7-8: Closed Loop Count Position mode

Closed Loop Position Tracking
This modes uses the same feedback sensor mount as this of Figure 7-9. In this mode the
motor will be moved until the final position measured by the feedback sensor matches
the command. The motor will move as fast as it possibly can, using maximum physical
acceleration. This mode is best for systems where the motor can be expected to move as
fast as the command changes. Details on this operating mode can be found in “Closed
Loop Relative and Tracking Position Modes” on page 121.

-1000 to +1000
Position Command

-

PWM
PID

-1000 to +1000 Feedback

Motor

Position Sensor

Figure 7-9: Closed Loop Position Tracking mode

88

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Torque Mode

Torque Mode
In this closed loop mode, the motor is driven in a manner that it produces a desired
amount of torque regardless of speed. This is achieved by using the motor current as
the feedback. Torque mode does not require any specific wiring. Detail on this operating
mode can be found in “Closed Loop Torque Mode” on page 137.

Torque Command

-

PWM
PID

A

Motor
Current
Sensor

Current Feedback
Figure 7-10: Closed Loop Torque mode

Advanced Digital Motor Controller User Manual

89

Motor Operating Features and Options

90

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Introduction to Brushless Motors

SECTION 8

Brushless Motor
Connections
and Operation

This section addresses installation an operating issues specific to brushless motors. It is
applicable only to brushless motor controller models.

Introduction to Brushless Motors
Brushless motors, or more accurately Brushless DC Permanent Magnet Synchronous motors (since there are other types of motors without brushes) contain permanent magnets
and electromagnets. The electromagnets are arranged in groups of three and are powered
in sequence in order to create a rotating field that drives the permanent magnets. The
electromagnets are located on the non-rotating part of the motor, which is normally in the
motor casing for traditional motors, in which case the permanent magnets are on the rotor that is around the motor shaft. On hub motors, such as those found on electric bikes,
scooters and some other electric vehicles, the electromagnets are on the fixed center part
of the motor and the permanent magnets on the rotating outer part.
U

N
W

S

V

Figure 8-1. Permanent Magnet Synchronous Motor construction

Advanced Digital Motor Controller User Manual

91

Brushless Motor Connections and Operation

As the name implies, Brushless motors differ from traditional DC motors in that they do
not use brushes for commutating the electromagnets. Instead, it is up to the motor controller to apply, in sequence, current to each of the 3 motor windings in order to cause the
rotor to spin. There are fundamentally two methods of generating the rotating magnetic
field in the motor’s winding:
•
•

Trapezoidal Commutation
Sinusoidal Commutation

Within each commutation method is then a method for detecting the actual position of
the rotor in order to synchronize the generated rotating field. These are:
•
•
•

Hall sensors
Encoders (Absolute or relative)
Sensorless

All Roboteq brushless controllers support Trapezoidal with Hall sensor feedback. Sinusoidal
and alternative rotor detection techniques are available on selected models. Refer to the
controller’s datasheet to determine which modes are supported.

Number of Poles
One of the key characteristics of a brushless motor is the number of poles of permanent
magnets pairs it contains. A full 3-phase cycling of motor’s electromagnets will cause the
rotor to move to the next permanent magnet pole. A full 3-phase cycle is known as electrical turn which will be different from the physical (mechanical) turn of the shaft if the motor
number of pole pairs is greater than one: increasing the number of pole pairs will cause
the motor to rotate more slowly for a given rate of change on the winding’s phases.
The number of pole pairs is necessary for determining the number of turns a motor has
done. It can also be used to measure the motor speed. The Roboteq controllers can
measure both.
The number of pole pairs on a particular motor is usually found in the motor’s specification sheet. The number of pole pairs can also be measured by applying a low DC current
(around 1A) between any two wires of the 3 that go to the motor and then counting the
number of cogs you feel when rotating the motor by hand for a full turn. It can also be determined by rotating the motor shaft by hand a full turn. Then take the number of counts
reported by the hall counter, and divide it by 6.
The number of pole pairs is a configuration parameter that can be entered in the controller
configuration (see “BPOL” in the command reference section). This parameter is not needed for basic motor operation with Hall Sensor feedback and can be left at its default value.
It is needed if accurate speed reporting is required or to operate in Closed Loop Speed
mode. The number of pole pairs in a critical configuration in sinusoidal mode.
Entering a negative number of pole pairs will reverse the measured speed and the count
direction. It is useful when operating the motor in closed loop speed mode and if otherwise a negative speed is measured when the motor is moved in the positive direction.

92

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Trapezoidal Switching

Trapezoidal Switching
In trapezoidal switching, the controller applies current to two of the 3 motor wires, in turn
and in alternating direction. A total of 6 combination of current flow are possible, resulting
in the rotor getting a changing magnetic field every 30 degrees of electrical rotation. The
controller must therefore know where the rotor is in relation to the electromagnets so
that current can be applied to the correct winding at any given point in time. The simplest
and most reliable method is to use three Hall sensors inside the motor. The diagram below shows the direction of the current in each of the motor’s windings depending on the
state of the 3 hall sensors.

Figure 8-2. Hall sensors sequence

Hall Sensor Wiring
Hall sensors connection requires 5 wires on the motor:
•

Ground

•

Sensor1 Output

•

Sensor2 Output

•

Sensor3 Output

•

+ power supply

Sensor outputs are generally Open Collector, meaning that they require a pull up resistor
in order to create the logic level 1. Pull up resistor of 4.7K ohm to +5V are incorporated
inside all controllers. Additionally, 1nF capacitors to ground are present at the controller’s
input in order to remove high frequency spikes which may be induced by the switching at
the motor wires.

Advanced Digital Motor Controller User Manual

93

Brushless Motor Connections and Operation

Figure 8-3. Hall sensor inputs equivalent circuit
Both 60 degrees and 120 degrees Hall sensors spacing, are supported (see “HPO” in the
command reference section). Hall sensors can typically be powered over a wide voltage
range. The controller supplies 5V for powering the Hall sensors.
Unless specified otherwise in the datasheet, Hall sensor connection to the controller is
done using Molex Microfit 3.0 connectors. These high quality connectors provide a reliable
connection and include a lock tab for secure operation. The connector pinout is shown in
the controller model’s datasheet.

Important Warning
Keep the Hall sensor wires away from the motor wires. High power PWM switching
on the motor leads will induce spikes on the Hall sensor wires if located too close.
On hub motors where the Hall sensor wires are inside the same cable as the motor
power wires, separate the two sets of wires the nearest from the motor as possible.

Important Notice
Make sure that the motor sensors have a digital output with the signal either at 0
or at 1, as usually is the case. Sensors that output are slow changing analog signals
will cause the motor to run imperfectly.

Hall Sensor Verification
The following query can be used to verify that the hall sensors are seen by the controller:
?HS

94

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Trapezoidal Switching

The reply is one or two numbers depending whether the controller is a single or dual
channel. The values is between 0 and 7 with each bit representing the state of each of the
HA, HB and HC sensors.
Turn the motor slowly by hand while sending frequent ?HS queries. Verify that all valid
combinations appear at one time or the other and that none of the invalid combination
ever show.
For 60 degrees spaced Hall sensors, 0-1- 3-4- 6-7 are valid combinations, while 2 and 5
are invalid combinations. For 120 degrees spaced sensors, 1-2- 3-4- 5-6 are valid combinations, while 0 and 7 are invalid combinations.
Note that HS query does not work on the first generation HBL and VBL family of products.

Hall Sensor Alignment and Wiring Order
It is very important that the hall sensors be precisely aligned vs the electromagnets inside the motor so that commutation be done exactly at the right time. Bad alignment will
cause the motor to run inefficiently.
The order of the Hall sensors and these of the motor connections must match in order for
the motor to spin. Unfortunately, there is no standard naming and ordering convention for
brushless motors.
The Hall Sensor and Motor Phases naming convention used in Roboteq controllers is A,
B and C for the sensors and U, V and W for the motor phases. When rotating the motor
shaft clockwise by hand, the controllers expects the sensor A to be a mirror of the voltage
generated between wires U and W, sensor B between V and U, sensor C between W
and V. See figure 8-4. The sinewave voltage will be inverted when turning the motor in the
opposite direction.
Alternatively, in order to synchronize the wiring order of the motor winding and the hall
sensor wires, the HSM configuration command can be used (see “HSM” in the command reference section). For each hall sensor cable order and motor wire order, there are
6 combinations, one of which will make the motor spin smoothly and efficiently in both
direction. Try each of the 6 available values of HSM (0-5) and retain the one that will make
the motor spin in both directions while drawing the same low current.
Va

Vb

Vc

Vu-w

Vv-u

Vw-v

Figure 8-4. Relation between hall sensor and U V W windings

Advanced Digital Motor Controller User Manual

95

Brushless Motor Connections and Operation

Rotate
shaft
clockwise

Probe

W
V
U

Motor

Vw-u
GND Clip

+5V
HA

Probe

HB

Va

HC
GND

GND Clip

2-10k

5V

2-10k
2-10k

Hall Sensor Power and Pull-ups

Figure 8-5. Use an oscilloscope and the circuit in figure to place the probes and generate these signals

Determining the Wiring Order Empirically
While probing with an oscilloscope gives the definite order, a simpler and quicker way
may be to try all valid combination by trial and error. To do this, you can either connect
the motor wires permanently and then try different combination of Hall sensor wiring, or
you can connect the Hall sensors permanently and try different combinations of motor
wiring. There is a total of 6 possible combinations of wiring three sensors on three controller inputs. There are also 6 possible combinations of wiring three motor wires on three
controller outputs. Only one of the 6 combinations will work correctly and smoothly while
allowing the controller to drive the motor in both directions.
The table below show the 6 possible combinations of connecting motor wires 1, 2 and 3
to the controller’s U, V and W outputs.
Controller
Output

Motor
Wiring 1

Motor
Wiring 2

Motor
Wiring 3

Motor
Wiring 4

Motor
Wiring 5

Motor
Wiring 6

U

1

1

2

2

3

3

V

2

3

1

3

1

2

W

3

2

3

1

2

1

Try the different combinations while applying a low amount of power (5 to 10%). Applying
too high power may trigger the stall protection. Be careful not to have the motor output
wires touch each other and create a short circuit. Once a combination that make the motor spin is found, increase the power level and verify that rotation is smooth, at very slow
speed and at high speed and in both directions.

96

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Trapezoidal Switching

Important Notice
Beware that while only one combination is valid, there may be other combinations
that will cause the motor to spin. When the motor spins with the wrong wiring
combination, it will do so very inefficiently. Make sure that the motor spins equally
smoothly in both directions. Try all 6 combinations and select the best.

Sensorless Trapezoidal Commutation
Some Roboteq controller models support sensorless trapezoidal commutation. As the
name implies, the commutation is also made by applying current on two or the 3 motor
wires in alternating manner. However, no hall or other sensor is used on the motor to tell
the controller when to switch the phases. Instead, the rotor position is sensed by measure the motor’s back EMF voltage on the one wire that is not energized at any one time
(floating wire) during commutation. This technique is very effective and results in commutation characteristics and performance practically identical to switching using Hall sensors
at medium and high speed.
Since it depends on the presence of back EMF – ie the voltage that is generated inside
the motor windings as the rotor turns in the permanent magnets field – position can only
be sensed if the rotor is spinning in the first place. The rotor position cannot be known
when the motor is stopped or stalled. In Trapezoidal Sensorless, the motor is therefore
started by applying an arbitrarily rotating field to the motor windings, making the rotor turn
similarly to stepper motors. Once the motor has started to turn and achieve a speed sufficient to generate a detectable back EMF, the commutation is synchronized with the rotor
position. For all practical purposes, therefore, Sensorless Trapezoidal is not usable in any
system requiring precise control at slow speed, or high torque at stall or start.

Setting and Operating Trapezoidal Modes
Trapezoidal modes are selected via using the Switching Mode configuration menu in the
Roborun PC utility, or by sending the configuration command.
^BMOD ch 0 for hall sensor commutation
^BMOD ch 2 for sensorless commutation
No other settings are necessary for the motor to run.
In the hall sensor mode, and if the sensor vs phase wiring is correct (see “Hall Sensor
Alignment and Wiring Order” on page 95), motor will spin as soon as a power command is given.
In the sensorless mode the motor will spin regardless of the phase wiring order. If the
motor spin in the opposite direction than the one desires, swap any two of the motor
wires.
The number of poles setting is not necessary in order for the motor to run. The number
of poles is only used to measure the motor’s rotation speed. Enter a negative number of
poles in order to change the speed polarity and count direction.

Advanced Digital Motor Controller User Manual

97

Brushless Motor Connections and Operation

Sensorless Configuration and Calibration
The controller’s default configuration will typically work with any motor. However, faster and
more consistent motor startup will be achieved by performing these setup and calibration steps:
1. M
 ake sure the battery volts and if possible the maximum load on the motor is set. If
either changes the procedure will need to be repeated.
2. Configure motor channels as sensorless.
3. S
 et motor command 10 or -10 and check if the motor starts and rotates smoothly
when using the default setting. If not modify Sensorless Start-Up Power (SSP) accordingly. Higher the motor friction, the higher the value of SSP should be.
4. T
 ype on console %clmod 4 (for channels 1). This will cause the controller to enter the
sensorless calibration mode.
5. S
 et Motor Command 10 or -10 and wait until the rotation of the motor becomes
smooth and stable.
6. Wait for a couple of seconds and stop the motor.
7. M
 onitor the Hall Speed with motor command 10 and -10. Make sure the speed is the
same in both directions symmetrical. If not then choose as last the motor command
which gives the smallest speed.
8. Type on console %clmod 0 to exit the calibration mode
9. Type on console %eesav, in order to save the value on flash.
Startup should be quicker and more efficient after these steps. Calibration values can be
viewed, and manually adjusted if needed, using the SST configuration.
Sensorless brushless motors only require their 3 wires to be connected to the controller’s
U, V and W terminals. The wires can be connected in any order. If the motor spins in the
opposite direction than the desired one, simply invert any two motor wires. It is also possible to use the MDIR Motor Direction configuration parameter.

Verifying Commutation Timing
In trapezoidal modes, with an oscilloscope it is possible to verify that the commutation,
either in Hall sensors or sensorless mode, is happening at the optimal time. On a motor driven by the motor controller, place a probe between ground and any of the motor
phases. Verify that the voltage looks like the shape on the figure 8-6. Look for symmetrical
ramps on the left and right.

T/2

T

T/2

T

T/2

T

T/2

Figure 8-6. Ground to Phase voltage waveform on motor with correct commutation
An alternate method is to run the motor in the forward and then in the reverse direction.
Verify that for a give command level in open loop, the motor reaches the identical speed
and consumes the same amount of current.

98

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Sinusoidal Commutation

Sinusoidal Commutation
In sinusoidal commutation, all three wires are permanently energized with a sinusoidal
current that is 120 degrees apart on each phase as shown in figure 8-7.
V

1
11
21
31
41
51
61
71
81
91
101
111
121
131
141
151
161
171
181
191
201
211
221
231
241
251
261
271
281
291
301
311
321
331
341
351
361
371
381
391
401
411
421
431
441
451
461
471
481
491
501
511
521
531
541
551
561
571
581
591
601
611
621
631
641
651
661
671
681
691
701
711

U

W

Figure 8-7. 3 phase current
As the motor turns, the phase on each wire is changed in order for the magnetic field to
always be perpendicular, and therefore create the maximum radial force to the rotor.

90 o

90 o
Figure 8-8. Magnetic field perpendicular to rotor magnets
The principle benefit of sinusoidal commutation is the quiet, rumble-free, motor operation
resulting from the smoothly rotating and always aligned magnetic field.

Wiring Order
The angle sensing direction must match the rotating direction of the magnetic field generated by the UVW coils. If the motor does not spin and the sensors are correctly attached
and calibrated, either change the SWD configuration command (see “SWD” in the command reference section), or swap to motor wires. Note that is will typically be necessary
to adjust the angle sensor’s 0 degree reference.

Angle Feedback Sensors
In order for the proper voltage and phase to be applied to each of the 3 motor wires, the
rotor angular position must be known with precision at all times. Roboteq controllers support several techniques to achieve this.

Advanced Digital Motor Controller User Manual

99

Brushless Motor Connections and Operation

Important Notice
The number of poles is a very important configuration parameter in sinusoidal
mode. Using the wrong value will produce erratic behavior and possibly damage.

Incremental Encoder Feedback
A quadrature encoder can be used to determine the rotor position. Since encoders do not
give an absolute position, a reference search sequence is necessary before any power
is applied to the motor. The controller will automatically perform this search by applying
a fixed amount of power between the U and V outputs to pull the rotor to the known positions. This reference search is done at power up or whenever the mode is switched to
Sinusoidal with Encoder feedback. The search can also be initiated from the serial port or
from a MicroBasic script. See below.
Optimally, the encoder should have a PPR that is at least 128 x the number of pole pairs.
For example a motor with 4 pole pairs should have a 128 x 4 = 512 Pulse per revolution.
This will result in 2048 counts for a full turn of the rotor, and therefore the electrical angle
to be measured with 360 / 2048 * 4 = 0.7 degrees, resulting in a very smooth changing
sinusoidal drive to the motor. A significantly lower resolution encoder will results in a stepping sinusoid. A higher resolution encoder will not improve the waveform.

Hall + Encoder Feedback
If the motor is fitted with Hall sensors and an Incremental Encoder, the controller can be
configured to use both sensors together. In this mode, the operating mode is identical
to when an Encoder alone is used for feedback, except that there is no need for the reference search sequence described above. When first energized, the motor will operate
using the Hall sensor until the first change to the Hall pattern is detected. This will set the
angle reference for the encoder. For this mode, it is critical that both the number of Encoder PPRs and the motor number of pole pairs be entered correctly. Both counters must
count in the same direction.

Sinusoidal with Hall Sensor Feedback
In this mode, the Hall sensors are used to determine the angular position of the rotor.
Since transitions of the Hall pattern occur at every 60 degrees only, the controller will
estimate the current angle by interpolating in between two transition based on the current motor speed. This technique works well as long as speed is stable and changes are
relatively slow. It also requires that the magnets and sensors are positioned with precision
inside the motor, which is not always the case in low cost motors. Compared to Trapezoidal mode, this mode will result is quieter motor operation because of the sinusoidal
commutation.

Sine/Cosine Analog Sensor Feedback
Some controller models can be interfaced to absolute position sensors with sine/cosine
output. These sensors are usually made using Hall technology, or resolvers, and are built
into the motor. They provide two analog voltage output that are 90 degrees apart. The angle is determined by measuring the voltage ratio between the two signals. The controller
can compensate for differences in amplitudes between the two signals. Sin/cos sensors
require a one-time setup and calibration.

Important Notice
Electrical noise on the sensor output will cause wrong angle readings. Shield the
wires and keep them as far as possible from the motor wires. If noise persists, add

100

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Sinusoidal Commutation

a 0.1uF ceramic capacitor between the input pin and ground pin on the controller’s
connector

Synchro Resolver Sensor Feedback
Synchro Resolvers are a form of Sine/Cosine sensor based on transformer technology. It is
composed of a fixed primary coil, and two secondary coils that rotate with the rotor. The
two secondaries are 90o from each other. A fixed frequency excitation voltage is fed in the
primary. As the secondary coils turn, and take turn being parallel with the fixed primary,
the voltage amplitude induced in each varies as shown in the figure below.
Rotating
Secondary 1

Primary

Rotatiion

Fixed Primary

Rotating
Secondary 2

Sec 1

Sec 2

Figure 8-9. Resolver equivalent diagram and signals
Controllers models supporting resolvers use one outputs to generate the excitation. The
secondaries are then fed to two analog inputs. Exact wiring depends on the controller
model. Please consult datasheet or contact Roboteq. Resolvers require one time calibrations similar to these for the sin/cos sensors.

Digital Absolute Encoder (SPI) Feedback
Some advanced motors, like these made by Micromotor, incorporate an absolute position
sensor with a high speed serial interface based on the SPI protocol. Controllers supporting
SPI encoders with 12-bit resolution. SPI encoders give the angle’s absolute position. Nevertheless, a calibration of the zero-angle reference must be done once in order to capture
the mechanical offset of the sensor vs the actual 0 degrees position. See “Sinusoidal Zero-Angle Reference Search Process” on page 104

Sinusoidal Configurations and Calibrations
Sinusoidal mode is selected via the Switching Mode configuration menu in the Roborun
PC utility, or by sending the configuration command:
^BMOD ch 1
Then must be selected the method for capturing the angle of the rotor and the motor
spins. This is done using the Sinusoidal Angle Sensor configuration menu in the utility, or
by sending the command:
^BFBK ch mode
Where mode:
0: Encoder
1: Hall

Advanced Digital Motor Controller User Manual

101

Brushless Motor Connections and Operation

2: Hall+Encoder
3: SPI Sensor
4: Sin/Cos Sensor
5: Resolver
Each mode requires a various amount of additional setup and/or calibration as described in
the following sections.
In sinusoidal mode, on some models the controller automatically operates in Field Oriented
Control mode (see “Field Oriented Control (FOC)” on page 108) and requires additional
settings for this.

Setup and Test Encoder Feedback Mode
Since Incremental Encoders do not give and absolute position, a reference search must
be done every time the controller is powered up. This search is done by the controller under these conditions:
•
•
•

Automatically, every time after power up
When the controller switched from a different mode to sinusoidal mode with
encoder feedback
By sending the !BND ch command from the serial port or from a script

To do the reference search, the controller will energize the motor phases in a predetermined sequence in order to force the rotor to known positions. The details of this process
is described in “Sinusoidal Zero-Angle Reference Search Process” on page 104.

Important Notice
The number of motor poles and encoder PPR are critical parameter for the encoder
feedback mode to work. Make sure that these are correctly loaded in the configuration.
Before trusting that reference search will be successful at every power up, try repeatedly to send the manual bind (!BND) command from different starting position of the
motor, under real-life load conditions. After reference search is completed, verify that
the motor turns with the same efficiency in the forward and reverse direction.

Setup and Test Hall Encoder Feedback Mode
The Hall Encoder mode requires no calibration or special setup. Verify only that the correct
number of poles and encoder PPR are loaded in the configuration.
The hall sensors and encoder must be wired so that their respective counter count in the
same direction. To verify this, turn the motor by hand or run it in Trapezoidal mode with
Hall sensor feedback. Observe the count directions in the PC utility.

Important Notice
The number of motor poles and encoder PPR are critical parameter for the Hall-Encoder
feedback mode to work. Make sure that these are correctly loaded in the configuration.

102

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Sinusoidal Commutation

Setup and Test the SPI Encoder Feedback Mode
SPI encoders give an absolute angle in digital form, serially to the controller. These sensors can be trusted to give an accurate angle measurement. However, they typically are
not perfectly mechanically aligned with the motor’s zero degree reference. Therefore a
one-time reference calibration must be performed.
After enabling the Sinusoidal Mode and SPI Angle Feedback, verify first that the Hall
Counter (which is shared in this case with the SPI sensor), displays a stable number that
is different from zero. This will indicate that data is output from the sensor and captured
by the controller. Rotate the motor by hand to verify that the counter changes.
Typically, SPI encoders are single pole, meaning that they give the angle value within one
full mechanical turn. A multiple pole sensor would measure multiple full 360 degrees for
every mechanical cycles. The number of sensor poles is a critical configuration parameter
which must be set using the Sensor Poles menu. It can also be set from the console or
serial port with
^SPOL ch poles

Setup and Test the Sin/Cos Encoder Feedback Mode
Sin/Cos encoders are absolute devices. A one-time setup and calibration must be performed in order to calibrate the encoder’s voltage levels, and set the mechanical zero degree angle offset.
The first calibration step measures and stores the minimum and maximum voltages of the
encoder’s signals at of each of the controller’s inputs:
After the controller is configured in Sinusoidal mode with Sin/Cos Feedback, from the console, type:
%CLMOD 2 for motor channel 1
%CLMOD 3 for motor channel 2
This will cause the controller to enter the calibration mode. Move the shaft of the motor
slowly by hand in order to make a couple of full mechanical turns.
Then press %CLMOD 0 (for either motor channels) in order to get out of the calibration mode.
Pressing the command ~ZSMC you can see the calibration values (3 first values for motor
1 and the other 3 for motor 2). Verify that the values are different than 0.
In order to save the calibration values permanently to flash type
%CLSAV 321654987.
You can verify that the sensor works, enable the Angle capture in the Roborun chart. Then
move the shaft by hand and verify that the reported angle smoothly ramps from 0 to 511
(512 = 360 electrical degrees). For additional help, you can verify that the sensor signals
are received by the controller. Move the motor shaft by hand and check the sin/cos raw

Advanced Digital Motor Controller User Manual

103

Brushless Motor Connections and Operation

values using ASI query. Verify that these value do change as the shaft is turned and that
have a difference between the min and max values of at least 1000.
Once the sensor is verified to be working, a one-time calibration must be performed to
captures the mechanical offset of the sensor. In most cases, a small difference exists between the 0 degrees from the sensor vs the actual 0 degrees of the motor. Verify that the
motor shaft is rotating freely. Then perform a Zero Angle reference search.

Single Pole vs Multi Pole Sin/Cos sensors
Some sin/cos sensors will produce a full 360 degrees output for each full 360 mechanical
turns. These are single pole sensors. Other sensors have multiple poles, meaning that the
sine or cosine signal will perform two or more full 360 degrees cycles for every mechanical cycles. The number of sensor poles is a critical configuration parameter which must be
set using the Sensor Poles menu. It can also be set from the console or serial port with
^SPOL ch poles
You can determine the number of sensor poles by following these steps:
1 A
 fter calibrating the sensor, set Motor Poles to 1 (^BPOL 1 1) and the Set Sensor Poles
to 1 (^spol 1 1).
2 Make one full rotation of the motor shaft by hand and monitor Angle in Roborun Utility.
3 Check how many times the Angle range (0-511) rolls over. This gives the number of sensor poles.
4 Restore the correct values of motor and sensor poles

Sinusoidal Zero-Angle Reference Search Process
Most angle sensors will not give an accurate absolute position of the rotor. Incremental
encoder give relative position by their nature and must be set with a reference angle at
every power up.
Absolute sensors like SPI, resolvers or Sin/Cos are not always mounted with a precise zero-degree reference and must be calibrated at least once.
A reference search can be initiated manually by sending the serial command:
!BND 1 for channel 1
!BND 2 for channel 2
The controller will then respond by energizing the U, V and W coils with the voltages levels needed to force the rotor to move to predetermined positions. The sequence is +90,
-90, +90, -90, +90 and back to -90 electrical degrees. The reference search is considered a
success if the rotor correctly reached the last four end position.
For the reference search to work, the motor must be free to move at least a full electrical
turn (mechanical turn divided by the number of pole pairs). If a brake is present, it must be
disengaged during the search sequence.

104

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Sinusoidal Commutation

The amount of current (ie torque) that the controller will apply to the motor for the search is
set in the Reference Seek Power menu of the configuration utility, or the serial command:
^BZPW ch Amps*10
After each !BND command, if the process was successful, the response will be:
BND +
BADJ = nn *Will only return BADJ when using SPI, SSI, SinCos or resolver
The number in BADJ represents the angle adjustment that has been detected and that
must be saved in Flash for future operation
If the process was not successful, the response will be:
BND –
Followed or not by
BADJ=nn
If no BADJ value is displayed, this means that the sensor inputs are very noisy and no value could be captured.
If a BADJ value is displayed, it should not be accepted as entirely correct. You should try
the !BND command again and/or adjust play manually with the BADJ value in order to
have the optimal performance.
When the !BND fails and BND- is replied, the Bind Error LED will appear in red in the Run
screen of the PC utility. The motor will then not be energized if a command is sent.
The BND fault flag is cleared when setting the BADJ manually or reading the BADJ value
with the following commands, respectively:
^BADJ mm nn
~BADJ
Verify then that in open loop, the motor spins at the same speed in the forward or reverse
direction when the same command is given with different signs. If the motor rotates at
different speeds and/or draws a significantly different amount of current in each direction,
the zero degree reference was not captured correctly.

Multi-poles Motor Considerations
On multi-poles motor there will be several locations around the full mechanical revolution
where the rotor will settle during the reference search. Figure 8-10 below shows an example of a 2 poles pairs motor.

Advanced Digital Motor Controller User Manual

105

Brushless Motor Connections and Operation

337.5

0

22.5

315

45
270

292.5

315 0

225

45

90

67.5

135

180

180
Electrical Degrees
135
225

270

90

247.5

45

90

112.5

270
315
0
135

225
202.5

180

157.5

Mechanical Degrees

Figure 8-10. Mechanical vs electrical degrees
The reference search will settle on a given electrical angle location. This electrical angle
value exists in 2 mechanical location on this motor. After performing a first search, rotate
the motor shaft and repeat the search. On a perfectly constructed motor, the search will
settle at the same electrical angle on any of the other poles. In practice, it is expected
that the values will be off by one or two degrees from one pole to another. If the value is
consistent from one measurement to another, and difference is larger a few degrees, this
means the poles are not placed with precision in the motor and the motor will not run efficiently. If the difference is very large (20 degrees or more), it is likely that the angle sensor
is not working correctly or that the number of poles of the motor and/or sensor are not
configured correctly.

Important Notice
If the motor is loaded or if there is a lot of friction, the rotor may not be able to
reach the zero angle during the zero-position search. The motor should not be operated unless it has.
When the zero degree search is done for capturing the offset of absolute sensors (e.g.
sin/cos, resolver or SPI), the angle that is measured by the reference search can be
viewed with the console command
~BADJ ch
The reported values is 0 for 0 degrees and 512 for 360 degrees.
Perform the !BND several times in a row and verify that the same value is captured every time.
Save the offset value permanently to memory with the command
%CLSAV 321654987
This step is only necessary for absolute sensor and must be performed only once.

106

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Operating Brushless Motors

Important Warning
In version 1.5 and lower of the firmware, the Zero Adjust Offset was stored in the
configuration flash. The value will be lost, and a new calibration must be performed
when installing version 1.6 of the firmware. In version 1.6 and newer, the value is
stored in a dedicated section of Flash and will not be lost after firmware updates.

Operating Brushless Motors
Once the Hall sensors, motor power wires, and/or the Encoder are correctly connected
to the controller, a brushless motor can be operated exactly like a DC motor and all other
sections in this manual are applicable. In addition, the Hall sensors or encoders, provide
extra information about the motor’s state compared to DC motors. This information enables the additional features discussed below.

Stall Detection
The Hall sensors and the encoders can be used to detect whether the motor is spinning
or not. The controller includes a safety feature that will stop the motor power if no rotation
is detected while a given amount of power is applied for a certain time. Three combinations of power and time are available:
• 250ms at 10% power
• 500ms at 25% power
• 1s at 50% power
If the power applied is higher than the selected value and no motion is detected for the
corresponding amount of time, the power to the motor is cut until the motor command is
returned to 0. This function is controlled by the BLSTD - Brushless Stall Detection parameter (see “BLSTD - Brushless Stall Detection” in Command Reference section). Do not
disable the stall protection.
A stall condition is indicated with the “Stall” LED on the Roborun PC utility screen.
In Trapezoidal modes using Hall sensors, the Stall detection looks for changes at any of
the Hall sensors inputs. In Sinusoidal modes, the detection uses the speed measurement
from the encoders.

Important Notice
In close loop modes, it is quite possible to have the motor stopped while power is
applied to them. That could happen while stopped uphill, for example. Select the
appropriate triggering level for your application

Speed Measurement using the angle feedback Sensors
Information from Hall, SPI, sin/cos sensors, (and even Sensorless) is used by the controller to compute the motor’s rotation speed.
When Hall sensors are used, speed is determined by measuring the time between Hall
sensor transitions. This measurement method is very accurate, but requires that the motor be well constructed and that the placement between sensors be accurate. On preci-

Advanced Digital Motor Controller User Manual

107

Brushless Motor Connections and Operation

sion motors, this results in a stable speed being reported. On less elaborate motors, such
as low-cost hub motors, the reported speed may oscillate by a few percent.
Speed measurement is very precise with digital absolute sensors (SPI). Sin/Cos sensors
operating without noise also give a very precise value.
The motor’s number of poles must be entered as a controller parameter in order to produce an accurate RPM value. See discussion above. The speed information can then be
used as feedback in a closed loop system. Motor with a more precise Hall sensor positioning will work better in such a configuration than less precise motors.
If the reported speed is negative when the slider is moved in the positive direction, you
can correct this by putting a negative number of poles in the motor configuration. This will
be necessary in order to operate the motor in closed loop speed mode using hall sensor
speed capture.

Distance Measurement using Hall, SPI or other Sensors
When Hall sensors are used, the controller automatically detects the direction of rotation,
keeps track of the number of Hall sensor transition and updates a 32-bit up/down counter.
The number of counts per revolution is computed as follows:
Counts per Revolution = Number of Poles * 6
With SPI or Sin/Cos sensors, the controller accumulates the angle data to recreate an
accurate and high resolution 32-bit counter. For these sensors, the number of counts per
revolution is:
Counts per Revolution = Number of Poles * 512
The counter information can then be read via the Serial/USB port, CAN bus, or can be
used from a MicroBasic script. The counter can also be used to operate the brushless motor in a Closed Loop Position mode, within some limits.

Field Oriented Control (FOC)
In sinusoidal modes, using the rotor angle to determine the voltage to apply to each of
the 3 motor phase works well at low frequencies, and therefore at low rotation speed. At
higher speed, the effect of the winding inductance, back EMF and other effect from the
motor rotation, create a shifting current. The resulting magnetic field is then no longer optimally perpendicular to the rotor’s permanent magnets.

Id
I = Iq

I
Iq

Figure 8-10. Perpendicular and non-perpendicular fields

108

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Field Oriented Control (FOC)

As can be seen in figure 8-10, when the magnetic field is at an angle other than exactly
perpendicular to the rotor’s magnets, the rotor is pulled by a force that can be decomposed in two forces:
Lateral force causing torque, and therefore rotation. This force results from the from the
Quadrature current Iq, which is also called Torque current
Parallel force that pulls the rotor outwards, creating no motion. This force results from the
Direct Current Id, which is also called Flux current
Field Oriented Control is a technique that measures the useful Torque current and wasted
Flux current component of the motor current. It then automatically adjust the power and
phase applied to each motor wire in order to eliminate the wasted Flux current

iq

Desired Torque
Current
Desired Flux
Current

id

Id
PI Regulator
Iq
PI Regulator

-

vα

vq
Inverse
Park

SVPWM

vβ

vd

iq

iα
Park

id

θ

MOSFET
Bridges

iβ

Angle
Capture

ia
Clarke

Sensor

ib

Motor

Figure 8-11. FOC operation
Field Oriented Control is available on selected models of Roboteq motor controllers. It is
uses a classical implementation as described in the figure 8-11. The current in the motor
phase is captured, along with the rotor’s angle. From this are computed the useful Iq and
wasteful Iq. Two Proportional-Integral (PI) regulators then work to control the power output
so that the desired Torque (Iq) and Flux (Id) currents are met. The desired Flux current is
typically set to 0, and so the regulator will work to totally eliminate the Flux current.
Both PI regulator have user-settable gains. While the factory default gains are suitable for
most motors and applications, they can be modified with the FOC Parameters in the PC
utility. They can also be changed with the console command:

Advanced Digital Motor Controller User Manual

109

Brushless Motor Connections and Operation

For single Channel Controllers:
^KPF 1 nn = Proportional Gain for Channel 1 Flux
^KPF 2 nn = Proportional Gain for Channel 1 Torque
^KIF 1 nn = Integral Gain for Channel 1 Flux
^KIF 2 nn = Integral Gain for Channel 1 Torque
For dual Channel Controllers:
^KPF 1 nn
^KPF 2 nn
^KPF 3 nn
^KPF 4 nn
^KIF 1 nn
^KIF 2 nn
^KIF 3 nn
^KIF 4 nn

= Proportional Gain for Channel 1 Flux
= Proportional Gain for Channel 2 Flux
= Proportional Gain for Channel 1 Torque
= Proportional Gain for Channel 2 Torque
= Integral Gain for Channel 1 Flux
= Integral Gain for Channel 2 Flux
= Integral Gain for Channel 1 Torque
= Integral Gain for Channel 2 Torque

FOC Testing and Troubleshooting
In order to make sure that FOC is operating correctly, monitor values with the PC Utility:
•
•
•
•

Motor Amps
FOC Flux Amps
FOC Torque Amps
FOC Angle Correction

The indication of good performance are the following:
•
•
•

FOC Quadrature Amps are close to 0.
Motor Amps and FOC Torque Amps values are close.
FOC Angle Correction is stable for stable motor Power.

Check also when changing motor power how fast FOC Flux Amps is corrected to zero.
Tune FOC PI as necessary.

Field Weakening
Field weakening is a technique that is used to achieve faster motor rotation speed. This
is done by having some Flux (Id) current, even though this also introduces some waste.
Field Weakening is therefore possible on Roboteq controller by loading a non-zero setpoint
for the Flux current. This can be done from the console, the serial port, or from a MicroBasic script with the command:
^TID ch Amps*10

110

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

FOC Testing and Troubleshooting

The amount of Flux current should be different at low and high speed, typically starting
with zero, and increasing after a given RPM threshold is reached. Below is an example of
a MicroBasic script that changes the Flux setpoint according to such a rule
top:
Speed = abs(getvalue(_S, 1)) ‘ Read motor speed from Encoders
if (Speed > 5000) ‘ check if above 5000 RPM
FluxSetpoint = (Speed – 5000) / 100 ‘ 1A per 100 RPM above 5000
else
FluxSetpoint = 0 ‘ No Flux current below 5000 RPM
end if
if (FluxSetpoint > 100) then FluxSetpoint = 100 ‘ Cap to 10.0 Amps
setconfig(_TID, 1, FluxSetpoint) ‘ Apply Flux setpoint
wait(10)
goto top ‘ repeat every 10ms

Advanced Digital Motor Controller User Manual

111

Brushless Motor Connections and Operation

112

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Introduction to AC Induction Motors

SECTION 9

AC Induction
MotorOperation

This section discusses the controller’s operating features and options when using three
phase AC Induction motors.

Introduction to AC Induction Motors
Three phase induction motors are the most common types of electrical motors. They have
a very simple construction composed of a stator covered with electromagnets, and a rotor
composed of conductors shorted at each end, arranged as a “squirrel cage”. They work on
the principle of induction where a rotating electro-magnetic field it created by applying a
three-phase current at the stators electromagnets. This in turn induces a current inside the
rotor’s conductors, which in turns produces rotor’s magnetic field that tries to follow stator’s magnetic field, pulling the rotor into rotation.

Stator

Rotor

Benefits of AC Induction Motors are:
•• Induction motors are simple and rugged in construction. They are more robust and can

operate in any environmental condition.
•• Induction motors are cheaper in cost due to simple rotor construction, absence of brush-

es, commutators, and slip rings

Advanced Digital Motor Controller User Manual

113

AC-induction-Motor-Operation

•• They are maintenance free motors unlike dc motors due to the absence of brushes,

commutators and slip rings.
•• Induction motors can be operated in polluted and explosive environments as they do not

have brushes which can cause sparks

Asynchronous Rotation and Slip
AC Induction motors are Asynchronous Machines meaning that the rotor does not turn at
the exact same speed as the stator’s rotating magnetic field. Some difference in the rotor
and stator speed is necessary in order to create the induction into the rotor. The difference
between the two is called the slip.
Slip is measured in Hertz. It is the difference of the frequency generated by the controller,
and the rotor’s frequency, as determined by the formula
f = ((RPM / 60) * NumberOfPoles)
Optimal slip varies from motor to motor and is in the range of typically 2 to 10Hz.
As seen from the figure below, when the slip is 0, i.e. the rotor turns at exactly the same
speed as the stator field, torque totally disappears. Within the stable operating region,
the Torque is proportional to the Slip. The torque and motor efficiency then quickly drops
when the slip grows past its optimal value.
Torque
(Produced on Motor Shaft)

Stable
Region

Motoring

0

Slip (Hz)
Rotor Speed
(RPM)

0 RPM
Synchronous Speed
Slip = 0
Torque = 0

Generating

Stable
Region

Torque
(Applied to Generator Rotor)

The main task of the motor controller is to generate a rotating magnetic field whose
frequency and strength is such that the rotor will operate within the motor’s optimal slip
range. Three techniques are supported by Roboteq for a achieving this:
Scalar, Volts per Hertz (VPH)
Constant Slip
Field Oriented Control
Each of these techniques, benefits and limitations are described in following sections

114

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Selecting and Connecting the Encoder

Connecting the Motor
An AC Induction motors has just 3 power wires which must be connected to the controller’s U V and W terminals. The connection order is not important. However, swapping any
two motor connections will make the motor turn in the opposite direction.

Selecting and Connecting the Encoder
A speed sensor must be used to measure and control the motor’s slip when running in
Constant Slip mode and Torque/Speed FOC mode. This is done using an incremental encoder. Most AC induction motors come with a built-in quadrature encoder. These encoders
typically have a relatively low number of counts. 32 or 64 Pulses Per Revolution (PPR) rotation are typical values. A low count encoder results in low frequency pulses.
When using encoders up to 128 Pulses Per Revolution, the controller evaluates the rotation speed by measuring the time between encoder pulses. This results in a measurement
with a resolution of 0.1Hz even at full speed.
When using encoders with higher PPR, speed is measured by counting the number of
encoder signal transitions over a 10ms period. Prefer therefore a high-count encoder of
around 1000 PPR for better speed measurement resolution.
Unless otherwise noted in the product’s datasheet, all Roboteq’s AC Induction Motor
Controllers have pull up resistors that can connect to open collector encoder outputs.
Controllers also have capacitors to help filter out any electrical noises that contribute to
fake encoder readings.

Controller I/O Connector
5VOut
Encoder

4.7K
A
B
10nF
GND

Testing the Encoder
To test the encoder, use the PC utility to enable the encoder and set its number of Pulses
Per Revolution (PPR). Go to the Utility’s Run tab, enable the Encoder Count in the chart.
Make a full turn of the motor shaft by hand. Verify that the counter has changed by the
number of PPR * 4.
Prior to enabling Constant Slip or FOC Modes, operate the motor in open loop Volts per
Hertz mode with slip control disabled. To disable slip control, set the encoder as No Action
in the configuration menu.

Advanced Digital Motor Controller User Manual

115

AC-induction-Motor-Operation

Apply a positive motor command. Verify that the motor shaft is moving in the desired direction. If the motor moves in the opposite direction, swap any two of the three motor cables.
If the motor moved in the desired direction, then verify that the encoder counter increments
when a positive motor command is applied. If the counter decrements, then either swap the
A and B encoder wires, or enter a negative number of PPRs in the encoder configuration.

Open Loop Variable Frequency Drive Operation
In its simplest operating mode, the controller will output to the motor a three-phase sinusoid
whose voltage and frequency change together at a fixed ratio. This mode is called Scalar because of the fixed ratio between the Voltage and Frequency that is applied to the motor.
The ratio is set by the VPH - Volts Per Hertz configuration parameter.

Stator Frequency
(Hz)

1000

48V Battery
VpH = 0.05 V/Hz

800
600

48V Battery
VpH = 0.1V/Hz

400

- Battery
Volts
-1000

24V Battery
VpH = 0.1V/Hz

200

0

1000
-200

Motor Command

+ Battery
Volts

-400
-600
-800
-1000

The figure above shows example of the resulting stator frequency for a given motor command. In open loop mode, Motor commands range from -1000 to +1000 and result in the
output voltage to range between -VBat to +VBat respectively
As long as the motor is not overloaded, the rotor RPM will be
((Stator Frequency - Slip) / Number of Pole Pairs) * 60

Figuring the Motor’s Volts per Hertz
Each motor has a value for the optimal Volts per Hertz ratio. It can be determined by
the operating frequency and rated voltage written of the motor’s label. The figure below
shows values from a real motor.

116

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Closed Loop Speed Mode with Constant Slip Control

Watt
V
Amps
RPM
Nm

3500
48Bat
100
1450
23

50Hz V fase 3 x 27
Encoder 64 Pulses

For this motor, the VPH can be determined by dividing the 27 Volts per phase by the 50Hz
frequency. In this case 0.54 Volts per Hertz.
Note that this value is for the optimal torque as rated on the label. If the load is a lot lighter, the VpH will be too high and result in excessive current consumption. If the load is a
lot heavier, the VpH will be too low and the motor will not be able to drive it. The VpH will
therefore need to be different than this computed based on actual load conditions. Always
first monitor the motor consumption at no load. Adjust the VpH to a lower value if the no
load current appears too high.

Maintaining Slip within Safe Range
Open Loop, or Scalar, mode does not require encoders for its operation. If the load is
known to always be within the motor’s max torque, the motor can be trusted to always
be able to drive it. In this case, an encoder does not need to be connected. If an encoder
is connected - to measure and report speed, for example - then it must be configured as
“No Action” in the PC Utility.
For added safety, however, an encoder can be installed and enabled to measure the rotor’s speed, and therefore the slip, in real-time. When the encoder is enabled and configured as “Feedback”, the controller will lower the voltage and frequency if the slip exceeds
twice the value stored in the Optimal Slip configuration.
Prior to enabling the encoder as Feedback, verify that the encoder count direction has the
same polarity as the motor command.

Closed Loop Speed Mode with Constant Slip Control
In this mode, the controller will automatically adjust the voltage and frequency in order to
reach and maintain a desired speed, even as the load is changing, while operating within
the optimal slip range.
To configure this mode, first set the controller in open loop mode as described in the previous section. Verify that the encoder is working and is counting with the correct polarity.
Once the encoder is verified to work and the motor spins in open loop, follow these
steps. Using the Roborun PC utility:
•• Select Close Loop Constant Slip Mode

Advanced Digital Motor Controller User Manual

117

AC-induction-Motor-Operation

•• Set the PID gains found in the Motor Output, Closed Loop Speed Parameters menus

(do not use the FOC PID gains). Try first with gains of P=4, I=0.5, D=0. These values
will produce adequate results in most cases. Additional turning may be needed.
•• Set the Max RPM configuration to the speed that must be reached at full throttle (ie

when command = 1000). Make sure to enter a value that is within the physical reach of
the motor under the expected maximum load condition.
•• Enter the lowest acceleration rate that is acceptable for the application. Rapid chang-

es will create current surges and should therefore not be allowed to be higher than
necessary.
•• Save the settings to the controller.

The motor speed can now be set to be any value between 0 and plus/minus the maximum RPM configured above when sending a command ranging from -1000 to +1000
using the serial, analog or pulse inputs.
The motor speed can also be set to an absolute RPM value by sending the S (Speed)
command via serial, USB, CAN or Scripting.
When exercising the motor with the PC utility, monitor the Slip, the Rotor RPM, Stator
RPM and the Motor Amps. The Rotor RPM can be viewed in the Encoder RPM chart. The
Stator RPM can be viewed in the Hall RPM chart.
The slip will stabilize at of the Optimal Slip setting.

Field Oriented Control (FOC) mode Operation
Field Oriented Control (or Vector Drive) is a technique by which the magnetic field generated in the stator is adjusted in relation to the field induced in the rotor in a manner to
generate optimal torque at all times and all load conditions.

Id

S

S
N

I
Iq

N

Rotor
Stator

Optimal rotation occurs when the magnetic field induced in the rotor is perpendicular
with this of stator. Practically the fields the two fields are never exactly perpendicular. As
shown on the diagram above, the angled field I is made of an outward pulling flux field (Id)
and perpendicular pulling torque field. The torque field is the one that causes the rotation
and that the controller will maximize. Flux field is not causing any rotation and therefore
must be minimized. Some flux is necessary at all times, however, in order to create the
induction in the rotor.
The challenge in induction motors is that the rotor flux’s absolute position cannot be measured physically. It is determined mathematically using known speed, voltage and current,
and a model representation of the motor’s main parameters shown in the figure below.

118

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Field Oriented Control (FOC) mode Operation

Rs

Stator
Resistance

Lls

Stator
Leakage
Inductance

Rr

Rotor
Resistance

Llr

Rotor
Leakage
Inductance

Lm

Mutual
Inductance

These parameters include per phase rotor resistance ‘Rr’, rotor leakage inductance ‘Llr’,
mutual inductance ‘Lm’ and rotor leakage inductance ‘Llr’. Usually motor manufacturer will
provide you an equivalent circuit of the induction motor that contains Rr, Rs, Lm, Llr, Lls
In FOC, therefore, rotor flux and motor torque can be individually controlled regardless
of load and speed. FOC offers better dynamic performance, accurate current control and
ensures maximum efficiency, unlike traditional scalar control methods such as Open Loop
VpH and Constant Slip Control.
Under FOC operation, AC induction motors can be run in either FOC torque mode or FOC
speed mode. FOC torque mode allows users to command a torque to motor in terms of
Amps. While FOC speed will regulate the speed at the command/desired value.

Configuring FOC Torque Mode
To configure FOC mode, first set the controller in Open Loop (Volts per Hertz) mode as
described in one of the previous sections. Verify that the motor is spinning in the desired
direction and that encoder is working and is counting with the correct polarity. See Testing
the Encoder section above.
Once the encoder is verified to work and the motor spins in open loop, follow these
steps. Using the Roborun PC utility:
•• Enter the motor parameters under the section “Motor Parameters” in RoboRun

configuration. Usually motor manufacturer will provide you an equivalent circuit of the
induction motor that contains Rr, Rs, Lm, Llr, Lls.
•• Set the Flux Amps. In order to find the optimal flux amps, run the motor in Volts per

Hertz (VpH) mode with small/no load using the motor’s rated VpH ratio. Then watch the
flux amps in the PC utility. Enter this value in the configuration. This flux amps can be
increased for low speed/high torque requirement and can be decreased (Field Weakening) for high speed/ low torque requirement.
•• Set the operating mode to FOC torque. Set Amps limit according to the application’s

need but do not exceed the motor specifications.
•• Save the settings to the controller.
•• Next step is to tune FOC (Flux and Torque) PID. Start with low proportional gain e.g.

0.1, and then set some Integral gain. Integral gain is more important in this case.
•• Monitor and Record the Flux Amps and Torque Amps for the desired motor channel

when tuning the FOC PID.

Advanced Digital Motor Controller User Manual

119

AC-induction-Motor-Operation

•• Put some high load on the rotor and command a step Torque Amps from the slider bar

(say 10A). Record the “FOC Torque Amps” reading on the chart. If the step response
reaches the desired (10A) steady state fast enough then the PID is can be considered
tuned. If it is slow then increase integral gain. If the Torque and Flux Amps show noise
at high speed or motor produces noisy sound, then lower your proportional gain Kp.
•• Once FOC/current PID is tuned, FOC torque mode is ready to operate and FOC speed

mode can then be tuned. Note: It is important to know the value of Flux Amps the motor is designed to operate under. Flux Amps stay the same during entire FOC operation
unless field weakening is used.
Now motor Torque can be set to any desired value from 0 to plus or minus the value stored
in the Amps Limit configuration parameter, by sending a command of -1000 to +1000 using
the slider, analog input, pulse input, scripting, CAN or any other command mode.
Note that in Torque Mode, the Max Speed RPM configuration parameter is used to limit
the motor speed if the motor is not loaded and the desired torque is below the torque
that can actually be reached by the motor under the current load conditions. For example,
a torque command of 50A on an unloaded motor (that will never draw 50A) will cause the
voltage to increase to maximum value, and therefore the motor to maximum speed, unless the speed is limited by the Max RPM parameter.

Configuring FOC Speed Mode
To configure FOC Speed mode, configure first the FOC Torque mode as described in the
section above.
•• Set the controller to FOC Speed Mode
•• Tune speed loop PID in a similar manner as was done for FOC PID. Use the PID gains

found in the Motor Output, Closed Loop Speed Parameters menus (do not use the
FOC PID gains). It can be started with Kp term and introduce small Kd term. Once
transient response on the graph seems reasonable then Ki can be used to get rid of
steady state error.
Now motor Speed can be set to any desired value from 0 to plus or minus the value stored
in the Max RPM configuration parameter, by sending a command of -1000 to +1000 using
the slider, analog input, pulse input, scripting, CAN or any other command mode.
E.g. use the Roborun slider, or the console command
!G 1 800
to set motor RPM to 800 on channel 1 when MaxSpeed is set to 1000 RPM. Corresponding if MaxSpeed is set to 2000 RPM, any value on the slider will give 2 times RPM.
Speed can be also set as an absolute RPM value using the S command from Serial, USB,
CAN or Microbasic

120

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Modes Description

Closed Loop Speed and
Speed-Position Modes

SECTION 10

This section discusses the controller’s Closed Loop Speed modes.

Modes Description
Close loop speed modes ensure that the motor(s) will run at a precise desired speed. If
the speed changes because of changes in load, the controller automatically compensates
the power output so that the motor maintains a constant speed. Two closed loop speed
modes are available:

Closed Loop Speed Mode
This mode is the traditional closed loop technique where speed is measured with a speed
sensor. The speed is compared to the desired speed and a PID control loop adjusts the
power output up or down in order to reach and maintain that speed.

Speed Command

-

PWM
PID

Speed Feedback

Motor

Speed Sensor

Closed Loop Speed Position Control
In this mode, the controller computes the position at which the motor must be at every
1ms. Then a PID compares that expected position with the current position and applies
the necessary power level in order for the motor to reach that position. This mode is especially effective for accurate control at very slow speeds.

Advanced Digital Motor Controller User Manual

121

Closed Loop Speed Mode

Speed
Command

Trajectory

Expected
Position

-

PWM
PID

Motor

Position Feedback

Position Counter

The controller incorporates a full-featured Proportional, Integral, Differential (PID) control
algorithm for quick and stable speed control.
The closed loop speed mode and all its tuning parameters may be selected individually for
each motor channel.

Motor Sensors
The controller can use a variety of sensors for measuring speed. For brushed DC, Digital
Optical Encoders and Analog Tachometerss may be used. For Brushless motors, the Hall
sensors and all other types of rotor sensors can be use in addition to Encoders and Tachometers. Digital Optical Encoders may be used to capture accurate motor speed.
Analog tachometers are another technique for sensing speed. See “Connecting Tachometer to Analog Inputs” on page 50

Tachometer or Encoder Mounting
Proper mounting of the speed sensor is critical for an effective and accurate speed mode operation. Figure 10-1 shows a typical motor and tachometer or encoder assembly. It is always preferable to have the encoder connected to the motor shaft rather than at the output of a gearbox.
If the encoder must be mounted after a gear box consider the effect of the gear backlash. A
higher count encoder will typically be required to compensate for the lower rotation speed.
Analog Tachometer
or Optical Encoder

Speed feedback

FIGURE 10-1. Motor and speed sensor assembly needed for Close Loop Speed mode

Tachometer wiring
Position

122

Position Feedback

The tachometer must be wired so that it creates a voltage at the controller’s analog input
Sensor
that is proportional to rotation speed: 0V at full reverse, +5V at full forward, and 0 when
stopped.

Advanced Digital Motor Controller User Manual

Gear box

V1.8, August 28 2017

Brushless Hall Sensors as Speed Sensors

Connecting the tachometer to the controller is as simple as shown in the diagram below.

5V Out
1kOhm

Zero Adjust
100 Ohm pot

Internal Resistors
and Converter

Max Speed Adjust
10kOhm pot

Tach

Ana In

A/D
20kOhm
33kOhm

1kOhm
Ground
FIGURE 10-2. Tachometer wiring diagram

Brushless Hall Sensors as Speed Sensors
On brushless motor controllers, the Hall Sensors and most other type of rotor position
sensors that are used to switch power around the motor windings, can also used to measure speed and distance traveled.
Speed is evaluated by measuring the time between transition of the Hall Sensors. A 32 bit
up/down counter is also updated at each Hall Sensor transition.
Speed information picked up from the Hall Sensors can be used for closed loop speed operation without any additional hardware. Likewise, the position counter that is updated at
every Hall transition can also be used to operate the motor in Speed Position mode.

Speed Sensor and Motor Polarity
The tachometer, encoder or brushless sensor (Hall, Sin/Cos, SPI) polarity (i.e. which rotation direction produces a positive or negative speed information) is related to the motor’s
rotation speed and the direction the motor turns when power is applied to it.
In the Closed Loop Speed mode, the controller compares the actual speed, as measured
by the sensor, to the desired speed. If the motor is not at the desired speed and direction,
the controller will apply power to the motor so that it turns faster or slower, until reached.

Important Warning
The speed sensor polarity must be such that a positive voltage is generated to the
controller’s input when the motor is rotating in the forward direction. If the polarity
is inverted, this will cause the motor to run away to the maximum speed as soon
as the controller is powered and eventually trigger the closed loop error and stop.
If this protection is disabled, there will be no way of stopping it other than pressing
the emergency stop button or disconnecting the power.

Advanced Digital Motor Controller User Manual

123

Closed Loop Speed Mode

Determining the right polarity is best done experimentally using the Roborun utility (see
“Using the Roborun Configuration Utility” on page 349) and following these steps:
1.

Configure the controller in Open Loop Mode using the PC utility. This will cause the
motor to run in Open Loop for now.

2.

Configure the sensor you plan to use as speed feedback. If an analog tachometer
is used, map the analog channel on which it is connected as “Feedback” for the selected motor channel. If an encoder is used, configure the encoder channel with the
encoder’s Pulses Per Revolution value. On brushless motor, if the rotor sensor (Hall,
Sin/Cos, ..) sensors are used, configure the correct number of motor pole pairs.

3.

Click on the Run tab of the PC utility. Configure the Chart recorder to display the
speed information if an encoder is used. Display Feedback if an analog sensor is
used.

4.

Verify that the motor sliders are in the “0” (Stop) position.

5.

If a tachometer is used, verify that the reported feedback value read is 0 when the
motors are stopped. If not, adjust the Analog Center parameter.

6.

Move the cursor of the desired motor to the right so that the motor starts rotating,
and verify that a positive speed is reported. Move the cursor to the left and verify that
a negative speed is reported.

7.

If the reported speed polarity is the same as the applied command, the wiring is correct.

8.

If the tachometer polarity is opposite of the command. If an encoder is used, swap
its ChA and ChB outputs. Alternatively, swap the motor leads if using a brushed DC
motor only. The speed polarity can also be inverted by entering a negative number
of encoder PPR. On brushless motors, entering a negative number of poles will also
invert the speed measured by the Hall, SinCos, or SPI sensor.

9.

Set the controller operating mode to Closed Loop Speed mode using the Roborun
utility.

10. Move the cursor and verify that speed stabilizes at the desired value. If speed is unstable, tune the PID values.

Important Warning
It is critically important that the tachometer or encoder wiring be extremely robust.
If the speed sensor reports an erroneous speed or no speed at all, the controller will
consider that the motor has not reached the desired speed value and will gradually
increase the applied power to the motor until the closed loop error is triggered and
the motor is then stopped.

Controlling Speed in Closed Loop
When using encoder feedback or Hall Sensor (brushless motor) feedback, the controller
will measure and report speed as the motor’s actual RPM value.
When using analog or pulse as input command, the command value will range from 0 to
+1000 and 0 to -1000. In order for the max command to cause the motor to reach the de-

124

Advanced Digital Motor Controller User Manual

V1.8, August 28 2017

PID Description

sired actual max RPM, an additional parameter must be entered in the encoder or brushless configuration. The Max RPM parameter is the speed that will be reported as 1000
when reading the speed in relative mode. Max RPM is also the speed the controller will
attempt to reach when a max command of 1000 is applied.
When sending a speed command via serial, CANbus, scripting or USB, the command may
be sent as a relative speed (0 to +/-1000) or actual RPM value.

PID Description
The controller performs both Closed Loop Speed modes using a full featured Proportional,
Integral and Differential (PID) algorithm. This technique has a long history of usage in control systems and works on performing adjustments to the Power Output based on the difference measured between the desired speed or position (set by the user) and the actual
speed or position (captured by the sensor on the motor).
Figure 9-3 shows a representation of the PID algorithm. Every 1 millisecond, the controller
measures the actual motor speed or position and subtracts it from the desired speed or
position to compute the error.
The resulting error value is then multiplied by a user selectable Proportional Gain. The
resulting value becomes one of the components used to command the motor. The effect
of this part of the algorithm is to apply power to the motor that is proportional with the difference between the current and desired speed or position: when far apart, high power is
applied, with the power being gradually reduced as the motor moves to the desired speed
or destination.
A higher Proportional Gain will cause the algorithm to apply a higher level of power for a
given measured error thus making the motor react more quickly to changes in commands
and/or motor load.
The Differential component of the algorithm computes the changes to the error from one
1 ms time period to the next. This change will be a relatively large number every time
an abrupt change occurs on the desired speed value or the measured speed value. The
value of that change is then multiplied by a user selectable Differential Gain and added to
the output. The effect of this part of the algorithm is to give a boost of extra power when
starting the motor due to changes to the desired speed or position value. The differential
component will also help dampen any overshoot and oscillation.
The Integral component of the algorithm performs a sum of the error over time. In Speed
mode, this component helps the controller reach and maintain the exact desired speed
when the error is reaching zero (i.e. measured speed is near to, or at the desired value). In
Speed Position mode, the Integral parameter can help maintain a slightly tighter difference
between the desired and actual position, but makes no significant difference and can be
omitted altogether.

Advanced Digital Motor Controller User Manual

125

Closed Loop Speed Mode

Propor tional
Gain

x
Desired Speed
or Position

Sensor

Integrator
Limit

-

E= Error

Measured Speed or Position

dE
dt

Σ

x

Output

Integral
Gain
dE
dt

x

Differential
Gain

FIGURE 10-3. PID algorithm used in speed modes

PID tuning in Closed Loop Speed Mode
As discussed above, three parameters - Proportional Gain, Integral Gain, and Differential
Gain - can be adjusted to tune the Closed Loop Speed control algorithm. The ultimate goal
in a well tuned PID is a motor that reaches the desired speed quickly without overshoot or
oscillation.
Because many mechanical parameters such as motor power, gear ratio, load and inertia
are difficult to model, tuning the PID is essentially a manual process that takes experimentation.
The Roborun PC utility makes this experimentation easy by providing one screen for
changing the Proportional, Integral and Differential gains and another screen for running
and monitoring the motor. First, run the motor with the preset values. Then experiment
with different values until a satisfactory behavior is found.
In Speed Mode, the Integral component of the PID is the most important and must be set
first. The Proportional and Differential components will help improve the response time
and loop stability.
Try initially to only use a small value of I and no P or D:
P=0
I=1
D=0
These values practically always work, but they may cause the motor to be slow reaching
the desired speed. Increase the I gain to improve responsiveness but keeping it below
the level at which the motor begins to oscillate. Experiment then with adding P gain, and
different values of I.

126

Advanced Digital Motor Controller User Manual

V1.8, August 28 2017

PID Tuning in Speed Position Mode

In the case where the load moved by the motor is not fixed, tune the PID with the minimum expected load and tune it again with the maximum expected load. Then try to find
values that will work in both conditions. If the disparity between minimal and maximal
possible loads is large, it may not be possible to find satisfactory tuning values. In this
case, consider changing the PID gains on the fly during motor operation with serial/CAN
commands of with a MicroBasic script
In slow systems, use the integrator limit parameter to prevent the integrator to reach saturation prematurely and create overshoots. Beware to set speeds that can physically be
reached by the motor under load. If the motor is not physically able, there will be a loop
error, which if it becomes too large, will cause a fault to be detected and the motor to be
stopped.

PID Tuning in Speed Position Mode
As discussed, in Closed Loop Speed Position mode, every millisecond, the controller
computes successive desired position. The PID then works to make the motor follow the
computed trajectory. This mode works much better than the regular Closed Loop Speed
mode when the motor must operate at very low speed. When the motor is stopped, it
will maintain its position even if pulled, as for example on a robot stopped downhill.
The PID therefore must be tuned for position mode. In position mode, most of the work
is done by the proportional gain. It acts essentially as an imaginary rubber belt between
the controller’s internal destination counter and the motor: the higher the difference, the
more the belt is stretched, and the stronger the motor will turn. Once the imaginary belt
has stiffened the motor will run at the desired speed.
Try initially with only a small amount of P gain
P=2
I=0
D=0
With the controller configured in Speed Position mode and the motor stopped, do a first
check of the PID’s stiffness by attempting to rotate the motor by hand. It should feel
increasingly hard to rotate away from the rest position. With a higher P gain, it will become harder to move than lower gains. As a rule of thumb, on a mobile robot, use a gain
that makes it very hard to move the wheel more than a quarter turn away from the rest
position. Test then by applying a speed command and verifying the motor runs smoothly
under all load conditions.
The I and D gain can generally be omitted in Speed Position mode.
Beware to set speeds that can physically be reached by the motor under load. The Closed
Loop Speed Position mode relies on the fact that the motor will actually be able to follow
the computed trajectory. If the motor is not able, the controller will pause updating the
destination counter until the motor caught up. This will result in inaccurate speed and can
be a problem in mobile robot applications depending on precise control of their left and
right side motor.

Advanced Digital Motor Controller User Manual

127

Closed Loop Speed Mode

Error Detection and Protection
The controller will detect large tracking errors due to mechanical or sensor failures, and
shut down the motor in case of problem in closed loop speed or position system. The
detection mechanism looks for the size of the tracking error (desired position vs. actual
position) and the duration the error is present. Three levels of sensitivity are provided in
the controller configuration:
1: 250ms and Error > 100
2: 500ms and Error > 250
3: 1000ms and Error > 500
When an error is triggered, the motor channel is stopped until the error has disappeared
or when the motor channel is reset to open loop mode. The error is cleared when a stop
command is issued.
Clearing the loop error make the motor available for moving again. However this does not
mean that the loop error will not happen again. Configuration tuning is necessary in order
to prevent from having Loop Error again. The loop error value can be monitored in real
time using the Roborun PC utility.

128

Advanced Digital Motor Controller User Manual

V1.8, August 28 2017

Modes Description

SECTION 11

Closed Loop
Relative and
Tracking Position
Modes

This section describes the controller’s Position Relative and Position Tracking modes, how
to wire the motor and position sensor assembly and how to tune and operate the controller in these modes.

Modes Description
In these two position modes, the axle of a geared-down motor is coupled to a position
sensor that is used to compare the angular position of the axle versus a desired position.
The controller will move the motor so that it reaches this position.
This feature makes it possible to build ultra-high torque “jumbo servos” that can be used
to drive steering columns, robotic arms, life-size models and other heavy loads.
The two position modes are similar and differ as follows:

Position Relative Mode
The controller accepts a command ranging from -1000 to +1000, from serial/USB, analog
joystick, or pulse. The controller reads a position feedback sensor and converts the signal
into a -1000 to +1000 feedback value at the sensor’s min and max range respectively. The
controller then moves the motor so that the feedback matches the command, using a controlled acceleration, set velocity and controlled deceleration. This mode requires several
settings to be configured properly but results in very smoothly controlled motion.

Position Tracking Mode
This mode is identical to the Position Relative mode in the way that commands and feedback are evaluated. However, the controller will move the motor simply using a PID comparing the command and feedback, without controlled acceleration and as fast as possible.

Advanced Digital Motor Controller User Manual

129

Closed Loop Relative and Tracking Position Modes

This mode requires fewer settings but often results in a motion that is not as smooth and
harder to control overshoots.

Selecting the Position Modes
The two position modes are selected by changing the Motor Control parameter to Closed
Loop Position. This can be done using the corresponding menu in the Power Output tree
in the Roborun utility. It can also be done using the associated serial (RS232/USB) command. See “MMOD” on page 329. The position mode can be set independently for each
channel.

Position Feedback Sensor Selection
The controller may be used with the following kinds of sensors:
• Potentiometers
• Hall effect angular sensors
• Optical Encoders
• Hall sensor in brushless motor
The first two are used to generate an analog voltage ranging from 0V to 5V depending on
their position. They will report an absolute position information at all times.
Modern position Hall sensors output a digital pulse of variable duty cycle. These sensors
provide an absolute position value with a high precision (up to 12-bit) and excellent noise
immunity. PWM output sensors are directly readable by the controller and therefore are a
recommended choice.
Optical encoders report incremental changes from a reference which is their initial position when the controller is powered up or reset. Before they can be used for reporting position, the motors must be moved in open loop mode until a home switch is detected and
resets the counter. Encoders offer the greatest positional accuracy possible.

Sensor Mounting
Proper mounting of the sensor is critical for an effective and accurate position mode operation. Figure 11-1 shows a typical motor, gear box, and sensor assembly.
Position Feedback
Position Sensor

Gear box

FIGURE 11-1. Typical motor/Potentiometer/assembly in Position Mode

130

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

Feedback Sensor Range Setting

The sensor is composed of two parts:
•
•

a body which must be physically attached to a non-moving part of the motor assembly or the robot chassis, and
an axle which must be physically connected to the rotating part of the motor you
wish to position.

A gear box is necessary to greatly increase the torque of the assembly. It is also necessary to slow down the motion so that the controller has the time to perform the position
control algorithm. If the gearing ratio is too high, however, the positioning mode will be
very sluggish.
A good ratio should be such that the output shaft rotates at 1 to 10 rotations per second
(60 to 600 RPM) when the motor is at full speed.
The mechanical coupling between the motor and the sensor must be as tight as possible.
If the gear box is loose, the positioning will not be accurate and will be unstable, potentially causing the motor to oscillate.
Some sensors, such as potentiometers, have a limited rotation range of typically 270
degrees (3/4 of a turn), which will in turn limit the mechanical motion of the motor/potentiometer assembly. Consider using a multi-turn potentiometer as long as it is mounted
in a manner that will allow it to turn throughout much of its range, when the mechanical
assembly travels from the minimum to maximum position. When using encoders, best
results are achieved when the encoder is mounted directly on the motor shaft.

Feedback Sensor Range Setting
Regardless the type of sensor used, feedback sensor range is scaled to a -1000 to +1000
value so that it can be compared with the -1000 to +1000 command range.
On analog and pulse sensors, the scaling is done using the min/max/center configuration
parameters.
When encoders are used for feedback, the encoder count is also converted into a -1000 to
+1000 range. In the encoder case, the scaling uses the Encoder Low Limit and Encoder
High Limit parameters. See “Serial (RS232/USB) Operation” on page 141 for details on
these configuration parameters. Beware that encoder counters produce incremental values. The encoder counters must be reset using the homing procedure before they can be
used as position feedback sensors.

Important Notice
Potentiometers are mechanical devices subject to wear. Use better quality potentiometers and make sure that they are protected from the elements. Consider using
a solid state hall position sensor in the most critical applications. Optical encoders
may also be used, but require a homing procedure to be used in order to determine
the zero position.

Advanced Digital Motor Controller User Manual

131

Closed Loop Relative and Tracking Position Modes

Important Warning
If there is a polarity mismatch, the motor will turn in the wrong direction and the
position will never be reached. The motor will turn until the Closed Loop Error detection is triggered. The motor will then stop until the error disappears, the controller is set to Open Loop, or the controller is reset.
Determining the right polarity is best done experimentally using the Roborun utility (see
“Using the Roborun Configuration Utility” on page 225) and following these steps:
1. Configure the controller in Open Loop Speed mode.
2. Configure the position sensor input channel as position feedback for the desired motor
channel.
3. Click on the Run tab.
4. Enable the Feedback channel in the chart recorder.
5. Move the slider slowly in the positive direction and verify that the Feedback in the chart
increases in value. If the Feedback value decreases, then the sensor is backwards
and you should either invert using configuration commands, invert the sensor physically, it or swap the motor wires so that the motor turns in the opposite direction.
6. Move the sensor off the center position and observe the motor’s direction of rotation.
7. Go to the max position and verify that the feedback value reaches 1000 a little before
the end of the physical travel. Modify the min and max limits for the sensor input if
needed.
8. Repeat the steps in the opposite direction and verify that the -1000 is reached a little
before the end of the physical travel limit.

Important Safety Warning
Never apply a command that is lower than the sensor’s minimum output value or
higher than the sensor’s maximum output value as the motor would turn forever
trying to reach a position it cannot. Configure the Min/Max parameter for the sensor input so that a value of -1000 to +1000 is produced at both ends of the sensor
travel.

Adding Safety Limit Switches
The Position mode depends on the position sensor providing accurate position information. If the sensor is damaged or one of its wires is cut, the motor may spin continuously
in an attempt to reach a fictitious position. In many applications, this may lead to serious
mechanical damage.
To limit the risk of such breakage, it is recommended to add limit switches that will
cause the motor to stop if unsafe positions have been reached independent of the sensor reading. Any of the controller’s digital inputs can be used as a limit switch for any
motor channel.
An alternate method is shown in Figure 11-2. This circuit uses Normally Closed limit
switches in series on each of the motor terminals. As the motor reaches one of the
switches, the lever is pressed, cutting the power to the motor. The diode in parallel with
the switch allows the current to flow in the reverse position so that the motor may be restarted and moved away from that limit.

132

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

Using Current Trigger as Protection

The diode polarity depends on the particular wiring and motor orientation used in the application. If the diode is mounted backwards, the motor will not stop once the limit switch
lever is pressed. If this is the case, reverse the diode polarity.
The diodes may be eliminated, but then it will not be possible for the controller to move
the motor once either of the limit switches has been triggered.
The main benefit of this technique is its total independence on the controller’s electronics
and its ability to work in practically all circumstances. Its main limitation is that the switch
and diode must be capable of handling the current that flows through the motor. Note
that the current will flow though the diode only for the short time needed for the motor to
move away from the limit switches.
SW1

SW2
Motor

Controller

FIGURE 11-2. Safety limit switches interrupting power to motor

Important Warning
Limit switches must be used when operating the controller in Position Mode. This
will significantly reduce the risk of mechanical damage and/or injury in case of damage to the position sensor or sensor wiring.

Using Current Trigger as Protection
The controller can be configured to trigger an action when current reaches a user configurable threshold for more than a set amount of time. This feature can be used to detect
that a motor has reached a mechanical stop and is no longer turning. The triggered action
can be an emergency stop or a simulated limit switch.

Operating in Closed Loop Relative Position Mode
This position algorithm allows you to move the motor from an initial position to a desired
position. The motor starts with a controlled acceleration, reaches a desired velocity, and
decelerates at a controlled rate to stop precisely at the end position. The graph below
shows the speed and position vs. time during a position move.

Advanced Digital Motor Controller User Manual

133

Closed Loop Relative and Tracking Position Modes

Position
End
Position

Start
Position
Time

Speed

Position
Mode
Velocity

Acceleration

Deceleration

Time

FIGURE 11-3.
When turning the controller on, the default acceleration, deceleration and velocity are parameters retrieved from the configuration EEPROM. In most applications, these parameters can be left unchanged and only change in commands used to control the change from
one position to the other. In more sophisticated systems, the acceleration, deceleration
and velocity can be changed on the fly using Serial/USB commands or from within a MicroBasic script.
When using Encoders as feedback sensors, the controller can accurately measure the
speed and the number of motor turns that have been performed at any point in time. The
complete positioning algorithm can be performed with the parameters described above.
When using analog or pulse sensors as feedback, the system does not have a direct way
to measure speed or number of turns. It is therefore necessary to configure an additional
parameter in the controller which determines the number of motor turns between the
point the feedback sensor gives the minimum feedback value (-1000) to the maximum
feedback value (+1000).
In the Closed Loop Relative Position mode, the controller will compute the position at
which the motor is expected to be at every millisecond in order to follow the desired acceleration and velocity profile. This computed position becomes the setpoint that is compared with the feedback sensor and a correction is applied at every millisecond.

134

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

Operating in Closed Loop Tracking Mode

For troubleshooting, the computed position can be monitored in real time by enabling the
Tracking channel in the PC utility’s chart recorder.
Beware not to use accelerations and max velocity that are beyond the motor’s physical
reach at full load. This would result in a loop error which will stop the system if growing
too large.

Operating in Closed Loop Tracking Mode
In this mode the controller makes no effort to compute a smooth, millisecond by millisecond position trajectory. Instead the current feedback position is periodically compared with
the requested destination and power is applied to the motor using these two values in a
PID control loop.
This mode will work best if changes in the commands are smooth and not much faster
than what the motor can physically follow.

Position Mode Relative Control Loop Description
The controller performs the Relative Position mode using a full featured Proportional, Integral and Differential (PID) algorithm. This technique has a long history of usage in control
systems and works on performing adjustments to the Power Output based on the difference measured between the desired position (set by the user) and the actual position
(captured by the position sensor).
Figure 10-4 shows a representation of the PID algorithm. Every 1 millisecond, the controller measures the actual motor position and subtracts it from the desired position to compute the position error.
The resulting error value is then multiplied by a user selectable Proportional Gain. The resulting value becomes one of the components used to command the motor. The effect of this
part of the algorithm is to apply power to the motor that is proportional with the distance
between the current and desired positions: when far apart, high power is applied, with the
power being gradually reduced and stopped as the motor moves to the final position. The
Proportional feedback is the most important component of the PID in Position mode.
A higher Proportional Gain will cause the algorithm to apply a higher level of power for a
given measured error, thus making the motor move quicker. Because of inertia, however,
a faster moving motor will have more difficulty stopping when it reaches its desired position. It will therefore overshoot and possibly oscillate around that end position.

Advanced Digital Motor Controller User Manual

135

Closed Loop Relative and Tracking Position Modes

Propor tional
Gain

x
Integrator
Limit
Desired Position

Sensor

Measured Position

E= Error

dE
dt

Σ

x

Output

Integral
Gain
dE
dt

x

Differential
Gain

FIGURE 11-4. PID algorithm used in Position Mode
The Differential component of the algorithm computes the changes to the error from one
ms time period to the next. This change will be a relatively large number every time an
abrupt change occurs on the desired position value or the measured position value. The
value of that change is then multiplied by a user-selectable Differential Gain and added to
the output. The effect of this part of the algorithm is to give a boost of extra power when
starting the motor due to changes to the desired position value. The differential component will also help dampen any overshoot and oscillation.
The Integral component of the algorithm performs a sum of the error over time. In the
position mode, this component helps the controller reach and maintain the exact desired
position when the error would otherwise be too small to energize the motor using the
Proportional component alone. Only a very small amount of Integral Gain is typically required in this mode.
In systems where the motor may take a long time to physically move to the desired
position, the integrator value may increase significantly causing then difficulties to stop
without overshoot. The Integrator Limit parameter will prevent that value from becoming
unnecessarily large.

PID tuning in Position Mode
As discussed above, three parameters - Proportional Gain, Integral Gain and Differential
Gain - can be adjusted to tune the position control algorithm. The ultimate goal in a well
tuned PID is a motor that reaches the desired position quickly without overshoot or oscillation.
Because many mechanical parameters such as motor power, gear ratio, load and inertia are difficult to model, tuning the PID is essentially a manual process that takes
experimentation.

136

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

PID Tuning Differences between Position Relative and Position Tracking

The Roborun PC utility makes this experimentation easy by providing one screen for
changing the Proportional, Integral and Differential gains and another screen for running
and monitoring the motor.
When tuning the motor, first start with the Integral and Differential Gains at zero, increasing the Proportional Gain until the motor overshoots and oscillates. Then add Differential
gain until there is no more overshoot. If the overshoot persists, reduce the Proportional
Gain. Add a minimal amount of Integral Gain. Further fine tune the PID by varying the
gains from these positions.
To set the Proportional Gain, which is the most important parameter, use the Roborun utility to observe the three following values:
•
•
•

Command Value
Actual Position
Applied Power

With the Integral Gain set to 0, the Applied Power should be:
Applied Power = (Command Value - Actual Position) * Proportional Gain
Experiment first with the motor electrically or mechanically disconnected and verify that
the controller is measuring the correct position and is applying the expected amount of
power to the motor depending on the command given.
Verify that when the Command Value equals the Actual Position, the Applied Power equals
to zero. Note that the Applied Power value is shown without the sign in the PC utility.
In the case where the load moved by the motor is not fixed, the PID must be tuned with
the minimum expected load and tuned again with the maximum expected load. Then try
to find values that will work in both conditions. If the disparity between minimal and maximal possible loads is large, it may not be possible to find satisfactory tuning values.
Note that the controller uses one set of Proportional, Integral and Differential Gains for
both motors, and therefore assumes that similar motor, mechanical assemblies and loads
are present at each channel.

PID Tuning Differences between Position Relative and
Position Tracking
The PID works the same way in both modes in that the desired position is compared to
the actually measured position.
In the Closed Loop Relative mode, the desired position is updated every ms and so the
PID deal with small differences between the two values.
In the Closed Loop Tracking mode, the desired position is changed whenever the command is changed by the user.
Tuning for both modes requires the same steps. However, the P, I and D values can be expected to be different in one mode or the other.

Advanced Digital Motor Controller User Manual

137

Closed Loop Relative and Tracking Position Modes

Loop Error Detection and Protection
The controller will detect large tracking errors due to mechanical or sensor failures, and
shut down the motor in case of problem in closed loop speed or position system. The
detection mechanism looks for the size of the tracking error (desired position vs. actual
position) and the duration the error is present. Three levels of sensitivity are provided in
the controller configuration:
1: 250ms and Error > 100
2: 500ms and Error > 250
3: 1000ms and Error > 500
When an error is triggered, the motor channel is stopped until the error has disappeared,
the motor channel is reset to open loop mode.
The loop error can be monitored in real time using the Roborun PC utility.

138

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

Mode description

Closed Loop
Count Position
Mode

SECTION 12

In the Closed Loop Position mode, the controller can move a motor a precise number of
encoder counts, using a predefined acceleration, constant velocity, and deceleration. This
mode requires that an encoder be mounted on the motor.

Mode description
The desired position is given in number of counts. Using acceleration, deceleration and
top velocity, the controller computes the position at which the motor is expected to be
at every one millisecond interval. A PID then computes the power to give to the motor in
order to maintain that position. A comparator looks at the desired position and the computed current position and issues a Destination Reached flag. The figure below shows a
representation of this mode.

=

Destination
Reached

Desired End Position

Desired Velocity

Trajectory
Computation

Desired Position
at Instant

-

Desired Acceleration

PID

Measured Position

Sensor

Motor

Figure 12-1 Closed Loop Position mode

Advanced Digital Motor Controller User Manual

139

Closed Loop Count Position Mode

Sensor Types and Mounting
In position mode, best results are achieved with encoders directly mounted on the motor
shaft. Encoders can be:
• Quadrature encoders
• Hall Sensors built-in brushless motors
• Other rotor sensors built-in brushless motors
It is not advised to mount encoders at the output of a geared motor as the gear box often
introduces backlash. If the encoder must be mounted at the output, then it must typically
have a higher count to compensate the lower speed rotation at that location.
Quadrature encoders typically provide the highest resolution since they can be ordered
with line resolution of several hundreds or thousands of counts per revolution. Hall encoders built in brushless motors give a relatively low, but often adequate count of 6* NumberOfPoles per mechanical resolution. Other brushless rotor sensors, such as SPI/SSI digital
sensor, or sin/cos sensors will give up to 512 counts per pole and can therefore be used
instead of encoders.

Encoder Home reference
Beware that encoders do not give an absolute position information. It is therefore necessary to perform a search of the zero reference position at least once after every power up.
This is typically achieved by moving the motor up to a limit switch and loading the counter
with a fixed value at that location. A home search sequence can easily be implemented
using a MicroBasic script. The search and counter loading must be done while the motor
is operated in open loop.

Important Warning
Changing the counter with a value while the motor is operated in closed loop can
cause violent and dangerous jumps. Always revert to open loop to change the
counter value.

Preparing and Switching to Closed Loop
To enter this mode you will first need to configure the encoder so that it is used as feedback for motor1, and feedback for motor2 on the other encoder in a dual motor system.
On brushless motors, the rotor sensor (Hall, SPI, sin/cos) can be used as a position counter. Selecting “Other” will use the encoder if present and properly configured. Selecting
“Hall” will enable the rotor sensor.
Use the PC Utility to set the default acceleration, deceleration and position mode velocity
in the motor menu. These values can then be changed on the fly if needed.
While in Open Loop, enable the Speed channel in the Roborun Chart recorder. Move the
slider in the positive direction and verify that the measured speed polarity is also positive.
If a negative speed is reported, swap the two encoder wires to change the measured polarity, or swap the motor leads to make the motor spin in the opposite direction.

140

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

Count Position Commands

Then use the PC Utility to select the Closed Loop Position Mode. After saving to the controller, the motor will operate in Closed Loop and will attempt to go to the 0 counter position. Beware therefore that the motor has not already turned before switching to Closed
Loop. Reset the counter if needed prior to closing the loop.

Count Position Commands
Moving the motor is done using a set of simple commands.
To go to an absolute encoder position value, use the !P command
To go to a relative encoder position count that is relative to the current position, use the
!PR command.
The Acceleration, Deceleration and Velocity are fixed parameters that can be changes using the ^MAC, ^MDEC and ^MVEL configuration settings. These can also be changed on
the fly, any time using the !AC and !DC commands.
The velocity can also be changed at any time using the !S command:
New position destination command can be issued at any time. If the previous destination
is not reached while the new is sent, the motor will move to the new destination. If this
causes a change of direction, the motor will do the change using the current acceleration
and deceleration settings. See the Commands Reference section for details on all these
commands

Position Command Chaining
It is possible to chain position commands in order to create seamless motion to a new
position after an initial position is reached. To do this, the controller can store the next goto
position with, optionally, a new set of acceleration, deceleration and velocity values.
The commands that set the “next” move are identical to these discussed in the previous
section, with the addition of an “X” at the end. The full command list is:
!PX nn mm

Next position absolute

!PRX nn mm

Next position relative

!ACX nn mm

Next acceleration

!DCX nn mm

Next deceleration

!SX

Next velocity

Example:

!PX 1 -50000 will cause the motor to move to that new destination once
the previous destination is reached. !PRX -10000 will cause the motor
to move 10000 count back from the previous end destination. If the
next acceleration, next deceleration or next velocity are not entered, the
value(s) used for the previous motion will be used.

Advanced Digital Motor Controller User Manual

141

Closed Loop Count Position Mode

Beware that the next commands must be entered while the motor is moving, since the
next commands will only be taken into account at the end of the current motion.
To chain more than two commands, use a MicroBasic script or an external program to
load new “next” command when the previous “next” commands become active. The
?DR query can be used to detect that this transition has occurred and that a new next
command can be sent to the controller.
The chart below shows a typical chaining flow.
!P nn mm

Enter First Destination

!PX nn mm

Enter 2nd Destination

?DR Destination Reached

!PX nn mm

Enter 3rd Destination

?DR Destination Reached

!PX nn mm

Enter Last Destination

Figure 12-2 Command Chaining flow

Position Accuracy Considerations
In the position mode, the controller computes a trajectory that the motor then attempts to
follow using a PID. For this technique to work well, the motor must first be physically able
to run as fast as dictated by the trajectory calculation. If not, a loop error (ie desired position - actual position) will accumulate and eventually grow to trigger an error that will stop
the motor. Make sure that the velocity setting is always under the max speed that can be
reached by the motor while running at full load, in open loop.
Some difference between the desired and actual position, i.e. a loop error, is always to
be expected when using a PID. The PID gains must be tuned to minimize the loop error
while keeping smooth motion. The expected position and loop error can be monitored in
real time using the PC utility’s Tracking and Loop Error channels, respectively, in the chart
recorder.
Beware that the Destination Reached flag will become true when the result of the trajectory computation equals the desired destination. In most practical situations, the motor
will still be on its way to actually reach that destination. This can be an important consideration when chaining commands, as the new command will become active before the
motor has actually reached the previous destination

142

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

PID Tunings

PID Tunings
As long as the motor assembly can physically reach the acceleration and velocity, smooth
motion will result with relatively little need for tuning. As for any position control loop, the
dominant PID parameter is the Proportional gain with only little Integral gain and smaller or
no Derivative gain. See “PID tuning in Position Mode”on page 128.

Loop Error Detection and Protection
The controller will detect large tracking errors due to mechanical or sensor failures, and
shut down the motor in case of problem in closed loop speed or position system. The
detection mechanism looks for the size of the tracking error (desired position vs. actual position) and the duration the error is present. Three levels of sensitivity are provided in the
controller configuration:
1: 250ms and Error > 100
2: 500ms and Error > 250
3: 1000ms and Error > 500
When an error is triggered, the motor channel is stopped until the error has disappeared,
the motor channel is reset to open loop mode. The error will also be cleared when sending
a new Position Destination using the !P command
The loop error can be monitored in real time using the Roborun PC utility.

Advanced Digital Motor Controller User Manual

143

Closed Loop Count Position Mode

144

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

Torque Mode Description

SECTION 13

Closed Loop
Torque Mode

This section describes the controller’s operation in Torque Mode.

Torque Mode Description
The torque mode is a special case of closed loop operation where the motor command
controls the current that flows though the motor regardless of the motor’s actual speed.
In an electric motor, the torque is directly related to the current. Therefore, controlling the
current controls the torque.

Command
PID

Output
Driver

Motor

Motor Amps
FIGURE 13-1. Torque mode

Torque mode is mostly used in electric vehicles since applying a higher command gives
more “push”, similarly to how a gas engine would respond to stepping on a pedal. Likewise, releasing the throttle will cause the controller to adjust the power output so that the
zero amps flow through the motor. In this case, the motor will coast and it will take a negative command (i.e. negative amps) to brake the motor to a full stop.

Advanced Digital Motor Controller User Manual

145

Closed Loop Torque Mode

Torque Mode Selection, Configuration and Operation
Use the PC utility and the menu “Operating Mode” to select Torque Mode. The controller will
now use user commands from RS232, USB, Analog or Pulse to command the motor current.
Commands are ranging from -1000 to +1000. The command is then scaled using the
amps limit configuration value.
For example, if the amps limit is set to 100A, a user command of 500 will cause the controller to energize the motor until 50A are measured. If the motor is little loaded and the
desired current cannot be reached, the motor will run at full speed.

Torque Mode Tuning
In Torque Mode, the measured Motor Amps become the feedback in the closed loop system. The PID then operates the same way as in the other Closed Loop modes described
in this manual (See “PID tuning in Position Mode” on page 128).
In most applications requiring torque mode, the loop response does not need to be very
quick and good results can be achieved with a wide range of PID gains. The P and I gains
are the primary component of the loop in this mode. Perform a first test using P=0, I=1
and D=0, and then adjust the I and P gain as needed until satisfactory results are reached.
In brushless controllers operating in sinusoidal mode, torque mode uses the PID that is
regulating the Field Oriented Control. The gains must be therefore set in the FOC menus.
See also the KIF and KPF configuration commands in the Commands Reference section.

Configuring the Loop Error Detection
In Torque Mode, it is very likely that the controller will encounter situation where the motor is not sufficiently loaded in order to reach the desired amps. In this case, controller
output will quickly rise to 100% while a significant Loop Error (i.e. desired amps - measured amps) is present. In the default configuration, the controller will shut down the
power if a large loop error is present for more than a preset amount of time. This safety
feature should be disabled in most systems using Torque Mode.

Torque Mode Limitations
The torque mode uses the Motor Amps and not the Battery Amps. See “Battery Current
vs. Motor Current”on page 30. In most Roboteq controllers, Battery Amps is measured
and Motor Amps is estimated. The estimation is fairly accurate at power level of 20% and
higher. Its accuracy drops below 20% of PWM output and no motor current is measured
at all when the power output level is 0%, even though current may be flowing in the
motor, as it would be the case if the motor is pushed. The torque mode will therefore not
operate with good precision at low power output levels.
Furthermore the resolution of the amps capture is limited to around 0.5% of the full range.
On high current controller models, for example, amps are measured with 500mA increments. If the amps limit is set to 100A, this means the torque will be adjustable with a 0.5%
resolution. If on the same large controller the amps limit is changed to 10A, the torque will
be adjustable with the same 500mA granularity which will result in 5% resolution. For best

146

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

Torque Mode Using an External Amps Sensor

results use an amps limit that is at least 50% than the controller’s max rating. On newer
Brushless motor controllers, amps sensors are placed at the motor output and motor amps
are measured directly. Torque mode will work effectively on these models.

Torque Mode Using an External Amps Sensor
The limitations described above can be circumvented using an external amps sensor device such as the Allegro Microsystems ACS756 family of hall sensors. These inexpensive
devices can be inserted in series with one of the motor leads while connected to one of
the controller’s analog inputs. Since it is directly measuring the real motor amps, this sensor will provide accurate current information in all load and regeneration conditions. This
technique only works for DC brushed motors. On brushless motors, the current in the motor wires is AC and therefore an external sensor cannot be used.

Controller

Motor

Allegro ACS756
Current Sensor
+5V
GND
Ana
FIGURE 13-2. Torque external sensor
To operate in torque mode, simply configure the selected analog input range to this of the
sensor’s output at the min and max current that will correspond to the -1000 to +1000
command range. Configure the analog input as feedback for the selected motor channel.
Then operate the controller in Position Tracking Mode (See “Position Tracking Mode” on
page 121). While the controller will not actually be tracking position, it will adjust the output based on the command and sensor feedback exactly in the same fashion.

Advanced Digital Motor Controller User Manual

147

Closed Loop Torque Mode

148

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

Use and benefits of Serial Communication

Serial (RS232/
USB) Operation

SECTION 14

This section describes the communication settings of the controller operating in the
RS232 or USB mode. This information is useful if you plan to write your own controlling
software on a PC or microcomputer.
The full set of commands accepted by the controller is provided in “Commands Reference” on page 209.
If you wish to use your PC simply to set configuration parameters and/or to exercise the
controller, you should use the RoborunPlus PC utility.

Use and benefits of Serial Communication
The serial communication allows the controller to be connected to PCs, PLC, microcomputers or wireless modems. This connection can be used to both send commands and
read various status information in real-time from the controller. The serial mode enables
the design of complex motion control system, autonomous robots or more sophisticated
remote controlled robots than is possible using the RC mode. RS232 commands are very
precise and securely acknowledged by the controller. They are also the method by which
the controller’s features can be accessed and operated to their fullest extent.
When operating in RC or analog input, serial communication can still be used for monitoring or telemetry.
When connecting the controller to a PC, the serial mode makes it easy to perform simple
diagnostics and tests, including:
•
•
•
•
•
•

Sending precise commands to the motor
Reading the current consumption values and other parameters
Obtaining the controller’s software revision and date
Reading inputs and activating outputs
Setting the programmable parameters with a user-friendly graphical interface
Updating the controller’s software

Advanced Digital Motor Controller User Manual

149

Serial (RS232/USB) Operation

Serial Port Configuration
The controller’s default serial communication port is set as follows:
• 115200 bits/s
• 8-bit data
14
• 1 Start bit
• 1 Stop bit
• No Parity

25

Communication is done without flow control, meaning that the controller is always ready
to receive data and can send data at any time.

1

13

Connector RS232 Pin Assignment

14

25

1

8

1

15

13

9

FIGURE 14-1. DB25 and DB15 connectors pin code locations
When used
8 in the RS232 mode,
1 the pins on the controller’s DB15 or DB25 connector (depending on the controller model) are mapped as described in the table below
TABLE 14-1. RS232 Signals on DB15 and DB25 connectors §
Pin
Number

Input or
Output

2

Output

Data Out

RS232 Data from Controller to PC

3

Input

Data In

RS232 Data In from PC

5

-

Ground

Controller ground

15

Signal

9

Description

Setting Different Bit Rates
It is possible to set RS232 bit rate to lower values. This operation can only be done while
the controller is connected via USB and only using manual commands from the console.
Beware that once the bit rate is different than the default 115200, it will no longer be able
to communicate with the PC utility if serial connection is used. From the Console, send
the following commands:
^RSBR nn
where nn =
0: 115200
1: 57600
2: 38400
3: 19200
4: 9600

150

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

Setting Different Bit Rates

Make sure that the controller respond to this command with a +. Check that the value has
been accepted by sending ~RSBR.
Send %EESAV from the console to store the new configuration to flash.

Cable configuration
The RS232 connection requires the special cabling as described in Figure 14-2. The 9-pin
female connector plugs into the PC (or other microcontroller). The 15-pin or 25-pin male
connector plugs into the controller.
It is critical that you do not confuse the connector’s pin numbering. The pin numbers
on the drawing are based on viewing the connectors from the front. Most connectors
brands have pin numbers molded on the plastic.
DB9 Female
To PC

DB15 Male
To Controller
1

1

RX Data
TX Data

6

9

7

10

8

11

9

12

2

2

3

3

5

5
13

DB25 Male
To Controller

1

Data Out RX Data
Data In

TX Data

4

4

GND

DB9 Female
To PC

1
6

14

7

15

8

16

9

17

2
3

GND

Data Out

3

Data In

4

4

GND

2

5

18

6
19

14
7

20

15
8

21

5

GND

6
7
8
9

22
10
23
11
24
12
25

13

FIGURE 14-2. PC to controller RS 232 cable/connector wiring diagram
The 9 pin to 15 pin cable is provided by Roboteq for controllers with 15 pin connectors.
Controllers with 25 pins connectors are fitted with a USB port that can be used with any
USB cables with a type B connector.

Extending the RS232 Cable
RS232 extension cables are available at most computer stores. However, you can easily
build one using a 9-pin DB9 male connector, a 9-pin DB9 female connector and any 3-conductor cable. DO NOT USE COMMERCIAL 9-PIN TO 25-PIN CONVERTERS as these do
not match the 25-pin pinout of the controller. These components are available at any electronics distributor. A CAT5 network cable is recommended, and cable length may be up to
100’ (30m). Figure 14-3 shows the wiring diagram of the extension cable.

Advanced Digital Motor Controller User Manual

151

Serial (RS232/USB) Operation

DB9 Female

DB9 Male
1

1

RX Data
TX Data

6

6

7

7

2
3
8

8

9

9

Data Out

3

Data In

4

4

GND

2

5

5

GND

FIGURE 14-3. RS232 extension cable/connector wiring diagram

Connecting to Arduino and other TTL Serial Microcomputers
Aduino and similar microcomputers have a TTL serial port while Roboteq controllers have
a full RS232 serial interface. RS232 has the following differences from TTL serial:
RS232

TTL Serial

Voltage Levels

+10V/-10V

0-3V

Logic level

Inverted

Non-Inverted

A TTL to RS232 adapter must be therefore be used to convert to the Arduino serial interface. Newer Roboteq controller allow the RS232 signal to be non-inverted. Interfacing to
Arduino or other TTL Serial interface can therefore be done with just a resistors, and 2
optional diodes as shown in the diagram below:
TxD RxD

GND
8

1
9

15
5VOut

4.7K
2 x optional shottky diodes
min 100mA, 20V
Use 1N5819 or similar

RxD TxD

GND

Arduino or MCU with TTL Serial

FIGURE 14-4. Simplified TTL to RS232 connection
The data sent from the TTL serial port are 0-3V and can be directly connected to the controller’s RS232 input where it will be captured as valid 0-1 levels.

152

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

USB Configuration

The data at the output of the controller is +/-10V. At the other end of the resistor, the
voltage is clamped to around 0-3.3V by the protection diodes that are included in the Arduino MCU. However, to avoid any stress it is highly recommended to insert the 2 diodes
shown on the diagram.
To operate, the RS232 output must be set to inverted. This must be done from the Console of the Roborun Utility while connected via USB. This will only work on newer controller models fitted with firmware version 1.6a or more recent.
From the Console, send the following commands:
^RSBR nn
where nn =
5: 115200 + Inverted RS232
6: 57600 + Inverted RS232
7: 38400 + Inverted RS232
8: 19200 + Inverted RS232
9: 9600 + Inverted RS232
Make sure that the controller respond to this command with a +. Check that the value has
been accepted by sending ~RSBR. If a - is replied or if the value is different than the one
entered, then the hardware and/or firmware does not support serial inverted and cannot
be used with this circuit.
Send %EESAV from the console to store the new configuration to flash.

USB Configuration
USB is available on all Roboteq controller models and provides a fast and reliable communication method between the controller and the PC. After plugging the USB cable to the
controller and the PC, the PC will detect the new hardware, and install the driver. Upon
successful installation, the controller will be ready to use.
The controller will appear like another Serial device to the PC. This method was selected
because of its simplicity, particularly when writing custom software: opening a COM port
and exchanging serial data is a well documented technique in any programming language.
Note that Windows will assign a COM port number that is more or less random. The Roborun PC utility automatically scans all open COM ports and will detect the controller on its
own. When writing your own software, you will need to account for this uncertainty in the
COM port assignment.

Important Warning
Beware that because of its sophistication, the USB protocol is less likely to recover
than RS232 should an electrical disturbance occur. We recommend using USB for
configuration and monitoring, and use RS232 for field deployment. Deploy USB
based system only after performing extensive testing and verifying that it operates
reliably in your particular environment.

Advanced Digital Motor Controller User Manual

153

Serial (RS232/USB) Operation

Command Priorities
The controller will respond to commands from one of three or four possible sources:
• Serial (RS232 or USB)
• Pulse
• Analog
• Spektrum Radio (when available)
One, two, three or all four command modes can be enabled at the same time. When
multiple modes are enabled, the controller will select which mode to use based on a user
selectable priority scheme. The priority mechanism is described in details in “Input Command Modes and Priorities” on page 73.

USB vs. Serial Communication Arbitration
Commands may arrive through the RS232 or the USB port at the same time. They are
executed as they arrive in a first come first served manner. Commands that are arriving
via USB are replied on USB. Commands arriving via the UART are replied on the UART.
Redirection symbol for redirecting outputs to the other port exists (e.g. a command can
be made respond on USB even though it arrived on RS232).

CAN Commands
Command arriving via CAN share the same priority as serial commands and may conflict
with command arriving via serial or USB. CAN queries will not interfere with serial/USB
operation.

Script-generated Commands
Commands that are issued from a user script are handled by the controller exactly as serial commands received via USB or RS232. Care must be taken that conflicting commands
are not sent via the USB/serial at the same time that a different command is issued by the
script.
Script commands are also subject to the serial Watchdog timer. Motors will be stopped
and command input will switch according to the Priority table if the Watchdog timer is allowed to timeout.

Communication Protocol Description
The controller uses a simple communication protocol based on ASCII characters. Commands are not case sensitive. ?a is the same as ?A. Commands are terminated by carriage return (Hex 0x0d, ‘\r’).
The underscore ‘_’ character is interpreted by the controller as a carriage return. This alternate character is provided so that multiple commands can be easily concatenated inside a
single string.
All other characters lower than 0x20 (space) have no effect.

154

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

Communication Protocol Description

Character Echo
The controller will echo back to the PC or Microcontroller every valid character it has received. If no echo is received, one of the following is occurring:
• echo has been disabled
• the controller is Off
• the controller may be defective

Command Acknowledgment
The controller will acknowledge commands in one of the two ways:
For commands that cause a reply, such as a configuration read or a speed or amps queries, the reply to the query must be considered as the command acknowledgment.
For commands where no reply is expected, such as speed setting, the controller will
issue a “plus” character (+) followed by a Carriage Return after every command as an acknowledgment.

Command Error
If a command or query has been received, but is not recognized or accepted for any reason, the controller will issue a “minus” character (-) to indicate the error.
If the controller issues the “-” character, it should be assumed that the command was
not recognized or lost and that it should be repeated.

Watchdog time-out
For applications demanding the highest operating safety, the controller should be configured to automatically switch to another command mode or to stop the motor (but otherwise remain fully active) if it fails to receive a valid command on its RS232 or USB ports,
or from a MicroBasic Script for more than a predefined period.
By default, the watchdog is enabled with a timeout period of 1 second. Timeout period
can be changed or the watchdog can be disabled by the user. When the watchdog is enabled and timeout expires, the controller will accept commands from the next source in
the priority list. See Command Prioritieson page 154.

Controller Present Check
The controller will reply with an ASCII ACK character (0x06) anytime it receives a QRY
character (0x05). This feature can be used to quickly scan a serial port and detect the
presence, absence or disappearance of the controller. The QRY character can be sent at
any time (even in the middle of a command) and has no effect at all on the controller’s
normal operation.

Advanced Digital Motor Controller User Manual

155

Serial (RS232/USB) Operation

156

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

CAN Networking on Roboteq Controllers

SECTION 15

CAN Networking
on Roboteq
Controllers

Some controller models are equipped with a standard CAN interface allowing up to 127
controllers to work together on a single twisted pair network at speeds up to 1Mbit/s.

Supported CAN Modes
Four CAN operating modes are available on Roboteq controllers:
1 - RawCAN
2 - MiniCAN
3 - CANopen
4 - RoboCAN
RawCAN is a low-level operating mode giving total read and write access to CAN frames.
It is recommended for use in low data rate systems that do not obey to any specific standard. CAN frames are typically built and decoded using the MicroBasic scripting language.
MiniCAN is greatly simplified subset of CANopen, allowing, within limits, the integration
of the controller into an existing CANopen network. This mode requires MicroBasic scripting to prepare and use the CAN data.
CANopen is the full Standard from CAN in Automation (CIA), based on the DS302 specification. It is the mode to use if full compliance with the CANopen standard is a primary requisite.
RoboCAN is a Roboteq proprietary meshed networking scheme allowing multiple Roboteq devices to operate together as a single system. This protocol is extremely simple and
lean, yet practically limitless in its abilities. It is the preferred protocol to use by users who
just wish to make multiple controllers work together with the minimal effort.
This section describes the RawCAN and MiniCAN modes.
Detailed descriptions of CANopen and RoboCAN can be found in specific sections of
this manual.

Advanced Digital Motor Controller User Manual

157

CAN Networking on Roboteq Controllers

Connecting to CAN bus
A CAN bus network is made of a stretch of two wires. A device can be put on a CANbus
network by simply connecting it’s CAN-High and CAN-Low lines to these of other devices
on the network.

Microcomputer

Motor Controllers
PLC
CANH
CANL

120Ω

120Ω

Magnetic Guide Sensor
CAN
Adapter

Joysticks, Batteries
HMI’s and other CAN Accessories

Figure 15-1: CAN Network topology

Resistors should be 120 ohm and located at each end of the cable. However, on a short
network communication will take place with a single resistor of 100 to 200 ohm located
anywhere on the network. Communication will not work if no resistor is present, or if its
value is too high.
No ground connection is necessary in between nodes. However, the ground potential of
each node must be within a few volts of each other. If all devices on the network are powered from the same power source, this can be expected to be the case.
CANbus will be operational upon enabling the desired CAN protocol and speed using the
PC utility.

Important Warning
A ground difference up to around 10V is acceptable. A difference of 30V or higher
can cause damage to one or more nodes. CANbus isolators must be used if a similar
ground level cannot be guaranteed between nodes.

158

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

CAN Networking on Roboteq Controllers

Introduction to CAN Hardware signaling
CANbus uses differential signals, which is where CAN derives its robust noise immunity
and fault tolerance. The two signal lines of the bus, CANH and CANL, are biased to around
2.5 V. A logical “1” (also known as the dominant state) on the bus takes CANH around 1
V higher to around 3.5 V, and takes CANL around 1 V lower to 1.5 V, creating a typical 2V
differential signal as shown in Figure 15-2.
0 0 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1 1 0 1 0 0 0 1 0 0
3.5V
2.5V
1.5V
0V

Figure 15-2: CANbus signaling

Differential signaling reduces noise coupling and allows for high signaling rates over twisted-pair cable. The High-Speed
(ISO 11898 Standard) are given for
14 CANbus specifications
25
a maximum signaling rate of 1 Mbps with a bus length of 40 m with a maximum of 30
nodes. It also recommends a maximum unterminated stub length of 0.3 m.

1

CAN Bus Pinout

13

Depending on the controller model, the CAN signals are located on the 9-pin, 15-pin or
25-pin DSub connector. Refer to datasheet for details.

9

5

6

1

FIGURE 15-3. DB9.Connector pin locations
The pins on the DB9 connector are mapped as described in the table below.
TABLE 15-1. CAN Signals on DB9 connector
Pin Number
2

Signal
CAN_L

Description
CAN bus low

7

CAN_H

CAN bus high

Advanced Digital Motor Controller User Manual

159

CAN Networking on Roboteq Controllers

9

15

1

8

FIGURE 15-4. DB15 Connector pin locations
The pins on the DB15 connector are mapped as described in the table below.
TABLE 15-2. CAN Signals on DB15 connector
Pin Number
6

Signal
CAN_L

Description
CAN bus low

7

CAN_H

CAN bus high
14

25

1

13

FIGURE 15-5. DB25 pin locations
The pins on the DB25 connector are mapped as described in the table below.
9
6
TABLE 15-3. CAN Signals od DB25 connector
Pin Number
8

Signal
CAN_L

20

CAN_H

5

Description
CAN 1bus low
CAN bus high

CAN and USB Limitations
On some controller models CAN and USB cannot operate at the same time. On controllers equipped with a USB connector, if simultaneous connection is not allowed, the controller will enable CAN if USB is not connected.
The controller will automatically enable USB and disable CAN as soon as the USB is connected to the PC. The CAN connection will then remain disabled until the controller is
restarted with the USB unplugged.
See the controller model datasheet to verify whether simultaneous CAN and USB is supported.

Basic Setup and Troubleshooting
CANbus is very easy to setup: Simply connect the CANH and CANL to a pair of wires with
at least one resistor somewhere along the cable. Enable the desired CAN protocol and
speed using the PC utility.

160

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

CAN Networking on Roboteq Controllers

If communication cannot be established, it can be difficult to determine the source of the
problem. Here are a few ways to diagnose:

Cable polarity, integrity and termination resistor
Verify that the controller’s CANH and CANL are connected to the CANH and CANL wire.
Check cable continuity to every node. Verify the presence of a least one resistor and that
its value is 120ohm (a value of 60 to 200 ohm would be acceptable)

Check CANbus activity using a voltmeter
The presence of CAN data traffic can be checked using a simple voltmeter and measuring
the voltage between GND and CANH, and between GND and CANL. When CAN is disabled, both lines should have approximately the same voltage around 2.5V. When CAN is
enabled with RoboCAN or MiniCAN protocol selected, the controller will send a continuous stream of data frames. This will cause the CANH voltage to rise above, and the CANL
voltage to drop below, the 2.5V midpoint. If the idle and active voltages do not match the
above, try again on the controller alone disconnected from the network but with a 100 to
200 ohm resistor across its CANH and CANL pins.
The CANOpen and RawCAN protocol should not be used for this test as these do not generate data traffic on their own and will not cause measurable voltage changes.

Check CANbus activity using a CAN sniffer
When working on a CAN system, it is highly recommended to make the acquisition of a
USB to CAN adapter such as the PCAN-USB from Peak Systems. Connect the adapter to
the CANH and CANL and run the sniffer software with the correct bit rate selected. The
figure below shows the expected received data when a Roboteq device is on the network
with MiniCAN protocol enabled.

Figure 15-6 : USB to CAN adapter and MiniCAN frame capture

Mode Selection and Configuration
Mode selection is done using the CAN menu in the RoborunPlus PC utility.

Advanced Digital Motor Controller User Manual

161

CAN Networking on Roboteq Controllers

Common Configurations
CAN Mode:

Used to select one of the 4 operating modes. Off disables all CAN receive
and transmit capabilities.

Node ID:

CAN Node ID used for transmission from the controller. Value may be between 1 and 126 included.

Bit Rate:

Selectable bit rate. Available speeds are 1000, 800, 500, 250, and 125 kbit/s.
Default is 125kbit and is the recommended speed for RawCAN and MiniCAN modes.

Heartbeat:

Period at which a Heartbeat frame is sent by the controller. The frame is
CANopen compatible 0x700 + NodeID, with one data byte of value 0x05
(Status: Operational). The Heartbeat is sent in any of the selected modes. It
can be disabled by entering a value of 0.

MiniCAN Configurations
ListenNodeID:

Filters to accept only packets sent by a specific node.

SendRate:

Period at which data frames are sent by the controller. Frames are structured as standard CANopen Transmit Process Data Objects (TPDOs). Transmission can be disabled by entering a value of 0.

RawCAN Configurations
In the RawCAN mode, incoming frames may be filtered or not by changing the ListenNodeID parameter that is shared with the MiniCAN mode. A value of 0 will capture all
incoming frames and it will be up to the user to use the ones wanted. Any other value will
cause the controller to capture only frames from that sender.

Using RawCAN Mode
In the RawCAN Mode, received unprocessed data packets can be read by the user. Likewise, the user can build a packet with any content and send it on the CAN network. A
FIFO buffer will capture up to 16 frames.
CAN packets are essentially composed by a header and a data payload. The header is an
11 bit number that identifies the sender’s address (bits 0 to 6) and a packet type (bits 7 to
10). Data payload can be 0 to 8 bytes long.

Checking Received Frames
Received frames are first loaded in the 16-frame FIFO buffer. Before a frame can be read,
it is necessary to check if any frames are present in the buffer using the ?CF query. The
query can be sent from the serial/USB port, or from a MicroBasic script using the getvalue(_CF) function. The query will return the number of frames that are currently pending,
and copy the oldest frame into the read buffer, from which it can then be accessed. Sending ?CF again, copies the next frame into the read buffer.
The query usage is as follows:

162

Syntax:

?CF

Reply:

CF=number of frames pending

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

CAN Networking on Roboteq Controllers

Reading Raw Received Frames
After a frame has been moved to the read buffer, the header, bytecount and data can be
read with the ?CAN query. The query can be sent from the serial/USB port, or from a MicroBasic script using the getvalue(_CAN, n) function. The query usage is as follows:
When the query is sent from serial or USB, without arguments, the controller replies by
outputting all elements of the frame separated by colons.
Syntax:

?CAN [ee]

Reply:

CAN=header:bytecount:data0:data1: .... :data7

Where:

ee = frame element
1 = header
2 = bytecount
3 to 10 = data0 to data7

Examples:

Q: ?CAN
R: CAN=5:4:11:12:13:14:0:0:0:0
Q: ?CAN 3
R: CAN=11

Notes:

Read the header to detect that a new frame has arrived. If header is different than 0, then a new frame has arrived and you may read the data.
After reading the header, its value will be 0 if read again, unless a new
frame has arrived.
New CAN frames will not be received by the controller until a ?CAN
query is sent to read the header or any other element.
Once the header is read, proceed to read the other elements of the
received frame without delay to avoid data to be overwritten by a new
arriving frame.

Transmitting Raw Frames
RawCAN Frames can easily be assembled and transmitted using the CAN Send Command !CS. This command can be used to enter the header, bytecount, and data, one
element at a time. The frame is sent immediately after the bytecount is entered, and so it
should be entered last.
Syntax:

!CS ee nn

Where:

ee = frame element
1 = header
2 = bytecount
3 to 10 = data0 to data7
nn = value

Examples:

!CS 1 5		
!CS 3 2		
!CS 4 3		
!CS 2 2		

Enter 5 in header
Enter 2 in Data 0
Enter 3 in Data 1
Enter 2 in bytecount. Send CAN data frame

Advanced Digital Motor Controller User Manual

163

CAN Networking on Roboteq Controllers

Using MiniCAN Mode
MiniCAN is greatly simplified subset of CANopen. It only supports Heartbeat, and fixed
map Received Process Data Objects (RPDOs) and Transmit Process Data Objects (TPDOs). It does not support Service Data Objects (SDOs), Network Management (NMT),
SYNC or other objects.

Transmitting Data
In MiniCAN mode, data to be transmitted is placed in one of the controller’s available Integer or Boolean User Variables. Variables can be written by the user from the serial/USB
using !VAR for Integer Variables, or !B for Boolean Variables. They can also be written from
MicroBasic scripts using the setcommand(_VAR, n) and setcommand(_B, n) functions.
The value of these variables is then sent at a periodic rate inside four standard CANopen
TPDO frames (TPDO1 to TPDO4). Each of the four TPDOs is sent in turn at the time period defined in the SendRate configuration parameter.
Header:
TPDO1: 0x180 + NodeID
TPDO2: 0x280 + NodeID
TPDO3: 0x380 + NodeID
TPDO4: 0x480 + NodeID
Data:
Byte1

Byte2

Byte3

Byte4

Byte5

Byte6

Byte7

TPDO1

VAR1

VAR2

TPDO2

VAR3

VAR4

TPDO3
TPDO4

VAR5
BVar
1-8

BVar
9-16

VAR6
BVar
17-24

VAR7

Byte8

VAR8

BVar
25-32

Byte and Bit Ordering:
Integer Variables are loaded into a frame with the Least Significant Byte first. Example
0x12345678 will appear in a frame as 0x78 0x56 0x34 0x12.
Boolean Variables are loaded in a frame as shown in the table above, with the lowest
Boolean Variable occupying the least significant bit of each byte. Example Boolean Var 1
will appear in byte as 0x01.

Receiving Data
In MiniCAN mode, incoming frames headers are compared to the Listen Node ID number.
If matched, and if the other 4 bits of the header identify the frame as a CANopen standard
RPDO1 to RPDO4, then the data is parsed and stored in Integer or Boolean Variables according to the map below. The received data can then be read from the serial/USB using
the ?VAR or ?B queries, or they can be read from a MicroBasic script using the getvalue(_VAR, n) or getvalue(_B, n) functions.

164

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

CAN Networking on Roboteq Controllers

Header:
RPDO1: 0x200 + NodeID
RPDO2: 0x300 + NodeID
RPDO3: 0x400 + NodeID
RPDO4: 0x500 + NodeID
Data:
Byte1

Byte2

RPDO1

RPDO4

Byte4

Byte5

Byte6

VAR9

RPDO2
RPDO3

Byte3

BVar
33-40

BVar
41-48

Byte8

VAR10

VAR11
VAR13

Byte7

VAR12
VAR14

BVar
49-56

VAR15

VAR16

BVar
57-64

Byte and Bit Ordering:
Integer Variables are loaded from frame with the Least Significant Byte first. Example, a
frame with data as 0x78 0x56 0x34 0x12 will load in an Integer Variable as 0x12345678.
Boolean Variables are loaded from a frame as shown in the table above, with the lowest
Boolean Variable occupying the least significant bit of each byte. Example a received byte
of 0x01 will set Boolean Var 33 and clear Vars 34 to 40.

MiniCAN Usage Example
MiniCAN can only be used with the addition of MicroBasic scripts that will give a meaning to the general variables in which the CAN data are stored. The following simple script
uses VAR1 that is transported in RPDO1 as the incoming motor command and puts the
Motor Amp VAR9 so that it is sent in TPDO1.
top:
speed = getvalue(_VAR, 9)
setcommand(_G, 1, speed)
motor_amp = getvalue(_A, 1)
setcommand(_VAR, 1, motor_amp)
wait(10)
goto top:
Note: This script does not check for loss of communication on the CAN bus. It is provided
for information only.

Advanced Digital Motor Controller User Manual

165

CAN Networking on Roboteq Controllers

166

Advanced Digital Motor Controller User Manual

V1.8 August 28, 2017

RoboCAN Networking

SECTION 16

RoboCAN Networking

RoboCAN is a Roboteq proprietary meshed networking scheme allowing multiple Roboteq
products to operate together as a single system. This protocol is extremely simple and
lean, yet practically limitless in its abilities. It is the preferred protocol to use by user who
just wish to make multiple controllers work together with the minimal effort.
In RoboCAN, every controller can send commands to, and can read operational data from,
any other node on the network. One or more controller can act as a USB to CAN or Serial
to CAN gateway, allowing several controllers to be thus managed from a single PC or microcomputer.
Using a small set of dedicated Microbasic function, scripts can be written to exchange
data between controllers in order to create automation systems without the need for a
PLC or external computer.
In addition, RoboCAN includes support for processing raw can data as defined in the
RawCAN specification (See page 154), in order to incorporate simple CAN compatible 3rd
party devices in the network.

Microcomputer
USB or
RS232
CAN

Magnetic Guide Sensor
CAN
Adapter
3rd Party CAN Accessory

Advanced Digital Motor Controller User Manual

167

RoboCAN Networking

Network Operation
RoboCAN requires only that a controller has a unique node number (other than 0)
assigned and that the RoboCAN mode is selected and enabled. All nodes must be
configured to operate at the same bit rate. Each enabled node will emit a special
heartbeat at a set and unchangeable rate of 128ms so that each node can create and
maintain a map of all nodes alive in the network.

RoboCAN via Serial & USB
Important notice: On many controller models, CAN and USB cannot be operated at the
same time. Please see product datasheet to verify if this is the case on the model used.
In case USB is not available, this section only applies to RS232 connections.
RoboCAN commands and queries can be sent from a USB or serial port using a modified syntax of the normal serial protocol: By simply adding the @ character followed by
the node as a 2 digit hex address, a command or query is sent to the desired node. This
scheme works with every Command (! Character), Query (?), Configuration setting (^),
Configuration read (~), and most Maintenance commands (%)

Runtime Commands
Below is an Command example:
!G 1 500
This is the normal command for giving a 50% power level command to motor 1 of the
controller that is attached to the computer.
@04!G 1 500
This will send the same 50% command to motor 1 of the controller at node address 4.
The reply to a local command is normally a + or - sign when a command is acknowledged
or rejected in normal serial mode.
When a command is sent to a remote node, the reply is also a + or – sign. However, in
addition, the reply can be a * sign to indicate that the destination node does not exist or is
not alive. Note that the + sign only indicates that the command syntax is valid and that the
destination node is alive.

Broadcast Command
Node address 00 is used to broadcast a command simultaneously to all the nodes in the
network. For example
@00!G 1 500
Will apply 50% power to all motor 1 at all nodes, including the local node

168

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

RoboCAN Networking

Realtime Queries
Queries are handled the same way but the reply to a query includes the responding
node’s address. Below is a Query example:
?V 2
This is the normal query for reading the battery voltage of the local controller. The controller will reply V=123
@04?V 2
This will send the same query to node address 4
The reply of the remote node is @04 V=123
Replies to remote nodes queries are identical to these to a local controller with the exception of an added latency. Since the reply must be retrieved from the remote node depending on the selected bit rate, the reply may come up to 10ms after the query was sent.

Remote Queries restrictions
Remote queries can only return a single value whereas local queries can be used to read
an array of values. For example
?AI
Is a local query that will return the values of all analog capture channels in a single string
as
AI=123:234:345:567
@04?AI
Is a remote query and it will return only the first analog capture channel as
@04 AI=123
Remote queries are not being added in the Query history.
Broadcast remote queries are not supported. For example @00?V 1 will not be executed.
Queries that return strings, such as ?FID or ?TRN are not supported. They will return the
value 0
See the Command Reference section in the manual for the complete list and description
of available queries

Advanced Digital Motor Controller User Manual

169

RoboCAN Networking

Configurations Read/Writes
Configuration settings, like Amp Limit or Operating Modes can be read and changed on a
remote node via the CAN bus. For example
@04^ALIM 1 250 will set the current limit of channel 1 of node 4 at 25.0A
@04~OVL will read the Overvoltage limit of node 4.
Note that changing a configuration via CAN only makes that change temporary until the
remote controller is powered down. The %EESAV maintenance command must be send
to the remote node to make the configuration change permanent.
A configuration write can be broadcast to all nodes simultaneously by using the node Id
00. For example
@00^OVL 250
Will set the overvoltage limit of all nodes at 25.0 Volts
Configuration reads cannot be broadcast.
See the Commands Reference section for the complete list and description of available
configurations

Remote Configurations Read restrictions
Remote Configuration Reads can only return a single value whereas local Configuration
Reads can be used to read an array of parameters. For example
~AMOD
Will return the operating mode of all analog capture channels in a single string as
AI=01:01:00:01:02
@04~AMOD
Will return only the mode first analog capture channel as
@04 AI=01
Configuration reads cannot be broadcast.

Remote Maintenance Commands
Maintenance Commands are not supported in RoboCAN.

170

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

RoboCAN Networking

Self Addressed Commands and Queries
For sake of consistency commands sent to the local node number are executed the same
way as they would be on a remote node. However the no CAN frame is sent to the network. For example if node 04 receive the command
@04!G 1 500
No data will be sent on the network and it will be interpreted and executed the same way as
!G 1 500

RoboCAN via MicroBasic Scripting
A set of functions have been added to the MicroBasic language in order to easily send
commands to, and read data from any other node on the network. Functions are also
available to read and write configurations at a remote node. Maintenance commands are
not supported.

Sending Commands and Configuration
Sending commands or configuration values is done using the functions
SetCANCommand(id, cc, ch, vv)
SetCANConfig(id, cc, ch, vv).
Where:
id is the remote Node Id in decimal
cc is the Command code, eg _G
ch is the channel number. Put 1 for commands that do not normally require a channel
number
vv is the value
Example:
SetCANCommand(04, _G, 1, 500)
Will apply 50% power to motor 1 of node 4
SetCANConfig(0, _OVL, 1, 250)

Advanced Digital Motor Controller User Manual

171

RoboCAN Networking

Will set the overvoltage limit of all nodes to 25.0V. Note that even though the Overvoltage
is set for the controller and does not normally require that a Channel, the value 1 must be
put in order for the instruction to compile.
Script execution is not paused when one of these function is used. The frame is sent on
the CAN network within one millisecond of the function call.

Reading Operating values Configurations
When reading an operating value such as Current Counter or Amps, or a configurations
such as Overvoltage Limit from another node, since the data must be fetched from the
network, and in order to avoid forcing a pausing of the script execution, data is accessed
in the following manner:
1.
2.
3.

Send a request to fetch the node data
Wait for data to be received
Read the data

The wait step can be done using one of the 3 following ways
1.
2.
3.

Pause script execution for a few milliseconds using a wait() instruction in line.
Perform other functions and read the results a number of loop cycles later
Monitor a data ready flag

The following functions are available in microbasic for requesting operating values and
configurations from a remote node.
FetchCANValue(id, cc, ch)
FetchCANConfig(id, cc, ch)
Where:
id is the remote Node Id in decimal
cc is the Command code, eg _G
cc is the channel number. Put 1 for commands that do not normally require a channel number
The following functions can be used to wait for the data to be ready for reading:
IsCANValueReady()
IsCANConfigReady()
These functions return a Boolean true/false value. They take no argument and apply to the
last issued FetchCANValue or FetchCANConfig function
The retrieved value can then be read using the following functions:
ReadCANValue()
ReadCANConfig()
These functions return an integer value. They take no argument and apply to the last issued FetchCANValue or FetchCANConfig function

172

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

RoboCAN Networking

Below is a sample script that continuously reads and print the counter value of node 4
top:
FetchCANValue(4, _C, 1) ‘ request data from remote node
while(IsCANValueReady = false) ‘ wait until data is received
end while
Counter = ReadCANValue() ‘ read value
print (Counter, “\r”) ‘ print value followed by new line
goto top ‘ repeat forever

Continuous Scan
In many applications, it is necessary to monitor the value of an operating parameter on a
remote node. A typical example would be reading continuously the value of a counter. In
order to improve efficiency and reduce overhead, a technique is implemented to automatically scan a desired parameter from a given node, and make the value available for reading without the need to send a Fetch command.
A function is provided to initiate the automatic sending of a value from the remote node,
at a specific periodic rate, and to be stored to user selected location in a receive buffer.
The remote node will then send the data continuously without further commands.
A function is then provided to detect the arrival of a new value in that buffer location, and
another to read the value from that location.
Since the scan rate is known, the execution of the script can be timed so that it is not
necessary to check the arrival of a new value.
Remote node

Request value to be issued at
every t ms, to buffer location n
Local Scan Buffer

[Check if new value arrived]
Read from Scan buffer

A scan is initiated with the function:
ScanCANValue(id, cc, ch, tt, bb)
Where:
id is the remote Node Id in decimal

Advanced Digital Motor Controller User Manual

173

RoboCAN Networking

cc is the Query code, eg _V
ch is the channel number. Put 1 for queries that do not normally require a channel number
tt is the scan rate in ms
bb is the buffer location
The scan rate can be up to 255ms. Setting a scan rate of 0 stops the automatic sending
from this node.
Unless otherwise specified, the buffer can store up to 32 values.
The arrival of a new value is checked with the function
IsScannedCANReady(aa)
Where
aa is the location in the scan buffer.
The function returns a Boolean true/false value
The new value is then read with the function
ReadScannedCANValue(aa)
Where
aa is the location in the scan buffer.
The function returns an integer value. If no new value was received since the previous
read, the old value will be read.
The following example shows the use of the Scan functions
‘ Initiate scan
buffer location
ScanCANValue(4,
‘ initiate scan
buffer location
ScanCANValue(5,

of counter every 10ms from node 4 and store to
0
_C, 1, 10, 0)
of voltage every 100ms from node 4 and store to
1
_V, 1, 100, 1)

top:
wait(10) ‘ Executer loop every 10 ms
‘ check if scanned volts arrived
if(IsScannedCANReady(1))
‘ read and print volts
Volts = ReadScannedCANValue(1)
print (Volts,”\r”)
end if
‘ No need to check if counter is ready since scan rate = loop cycle
Counter = ReadScannedCANValue(0)
print (Counter,”\r”)
goto top ‘ Loop continuously

174

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

RoboCAN Networking

Checking the presence of a Node
No error is reported in MicroBasic if an exchange is initiated with a node that does not exist. A command or configuration sent to a non-existent node will simply not be executed.
A query sent to a non existing or dead node will return the value 0. A function is therefore
provided for verifying the presence of a live node. A live node is one that sends the distinct RoboCAN heartbeat frame every 128ms. The function syntax is:
IsCANNodeAlive(id)
Where:
id is the remote Node Id in decimal
The function returns a Boolean true/false value.

Self Addressed Commands and Queries
Functions addressed to the local node have no effect. The following function will not
work if executed on node 4
SetCANCommand(04, _G, 1, 500)
The regular function must be used instead
SetCommand(_G, 1, 500)

Broadcast Command
Node address 00 is used to broadcast a command, or a configuration write simultaneously to all the nodes in the network.
The local node, however, will not be reached by the broadcast command.

Remote MicroBasic Script Download
RoboCAN includes a mechanism for loading MicroBasic scripts into any node in the network. Use the “To Remote” button in the Scripting Tab of the Roborun PC utility. A window will pop-up asking for the destination node Id. Details of the command used to enter
the download mode and transferring scripts is outside the scope of this manual.

Advanced Digital Motor Controller User Manual

175

RoboCAN Networking

176

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Use and benefits of CANopen

CANopen
Interface

SECTION 17

This section describes the configuration of the CANopen communication protocol and the
commands accepted by the controller using the CANopen protocol. It will help you to enable CANopen on your Roboteq controller, configure CAN communication parameters, and
ensure efficient operation in CANopen mode.
The section contains CANopen information specific to Roboteq controllers. Detailed information
on the physical CAN layer and CANopen protocol can be found in the DS301 documentation.

Use and benefits of CANopen
CANopen protocol allows multiple controllers to be connected into an extensible unified
network. Its flexible configuration capabilities offer easy access to exposed device parameters and real-time automatic (cyclic or event-driven) data transfer.
The benefits of CANopen include:
•
•
•
•
•
•

Standardized in EN50325-4
Widely supported and vendor independent
Highly extensible
Offers flexible structure (can be used in a wide variety of application areas)
Suitable for decentralized architectures
Wide support of CANopen monitoring tools and solutions

CAN Connection
Controller

Controller

Other
CAN Device

CANH
120 Ohm
Termination
Resistor

120 Ohm
CANL

FIGURE 17-1. CAN connection

Advanced Digital Motor Controller User Manual

177

CANopen Interface

Connection to a CAN bus is as simple as shown on the diagram above. 120 Ohm Termination Resistors must be inserted at both ends of the bus cable. CAN network can be up to
1000m long. See CAN specifications for maximum length at the various bit rates.

CAN Bus Configuration
To configure communication parameters via the RoborunPlus PC utility, your controller
must be connected to a PC via an RS232/USB port
Use the CAN menu in the Configuration tab in order to enable the CANopen mode. Additionally, the utility can be used to configure the following parameters:
•
•
•
•
•

Node ID
Bit rate
Heartbeat (ms)
Autostart
TPDO Enable and Send rate

Node ID
Every CANopen network device must have a unique Node ID, between 1 and 127. The value of 0 is used for broadcast messaging and cannot be assigned to a network node.

Bit Rate
The CAN bus supports bit rates ranging from 10Kbps to 1Mbps. The default rate used in
the current CANopen implementation is set to 125kbps. Valid bit bates supported by the
controller are:
• 1000K
• 800K
• 500K
• 250K
• 125K

Heartbeat
A heartbeat message is sent to the bus in millisecond intervals. Heartbeats are useful for detecting the presence or absence of a node on the network. The default value is set to 1000ms.

Autostart
When autostart is enabled, the controller automatically enters the Operational Mode of
CANopen. The controller autostart is enabled by default. Disabling the parameter will prevent the controller from starting automatically after the reset occurs. When disabled, the
controller can only be enabled when receiving a CANopen management command.

178

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Commands Accessible via CANopen

Commands Accessible via CANopen
Practically all of the controller’s real-time queries and real-time commands that can be accessed via Serial/USB communication can also be accessed via CANopen. The meaning,
effect, range, and use of these commands is explained in detail in Commands Reference
section of the manual.
All supported commands are mapped in a table, or Object Dictionary that is compliant
with the CANopen specification. See “Object Dictionary” on page 181 for a complete
set of commands.

CANopen Message Types
The controller operating in the CANopen mode can accept the following types of messages:
• Service Data Objects, or SDO messages to read/write parameter values
• Process Data Objects, or PDO mapped messages to automatically transmit parameters and/or accept commands at runtime
• Network Management, or NMT as defined in the CANopen specification

Service Data Object (SDO) Read/Write Messages
Runtime queries and runtime commands can be sent to the controller in real-time using
the expedited SDO messages.
SDO messages provide generic access to Object Dictionary and can be used for obtaining
parameter values on an irregular basis due to the excessive network traffic that is generated with each SDO request and response message.
The list of commands accessible with SDO messages can be found in the “Object Dictionary” on page 181.

Transmit Process Data Object (TPDO) Messages
Transmit PDO (TPDO) messages are one of the two types of PDO messages that are
used during operation.
TPDOs are runtime operating parameters that are sent automatically on a periodic basis
from the controller to one or multiple nodes. TPDOs do not alter object data; they only
read internal controller values and transmit them to the CAN bus.
TPDOs are identified on a CANopen network by the bit pattern in the 11-bit header of the
CAN frame.

Object Type

}

7 bits

}

4 bits

NodeID

TPDO1: 0x180 + Node ID
TPDO2: 0x280 + Node ID
TPDO3: 0x380 + Node ID
TPDO4: 0x480 + Node ID
CANopen allows up to four TPDOs for any node ID. Unless otherwise specified in the
product datasheet, TPDO1 to TPDO4 are used to transmit up to 8 user variables which
may be loaded with any operating parameters using MicroBasic scripting.

Advanced Digital Motor Controller User Manual

179

CANopen Interface

Each of the 4 TPDOs can be configured to be sent at user-defined periodic intervals. This is
done using the CTPS parameter (See “CTPS - CANOpen TPDO Send Rate” on page 363).
TABLE 17-1. Commands mapped on TPDOs
TPDO

Object Index-Sub

Size

Object Mapped

TPDO1

0x2106-1

S32

User VAR 1

0x2106-2
TPDO2

User VAR 2

0x2106-3

S32

0x2106-4
TPDO3

User VAR 4

0x2106-5

S32

0x2106-6
TPDO4

User VAR 3
User VAR 5
User VAR 6

0x2106-7

S32

0x2106-8

User VAR 7
User VAR 8

S32: signed 32-bit word

Receive Process Data Object (RPDO) Messages
RPDOs are configured to capture runtime data destined to the controller.
RPDOs are CAN frames identified by their 11-bit header.

Object Type

7 bits

}

}

4 bits

NodeID

RPDO1: 0x200 + Node ID
RPDO2: 0x300 + Node ID
RPDO3: 0x400 + Node ID
RPDO4: 0x500 + Node ID
Roboteq CANopen implementation supports RPDOs. Unless otherwise specified in the
product’s datasheet, data received using RPDOs are stored in 8 user variables from where
they can be processed using MicroBasic scripting.
TABLE 17-2. Commands mapped on RPDOs
RPDO

Object Index-Sub

Size

Object Mapped

RPDO1

0x2005-9

S32

User VAR 9

0x2005-10
RPDO2

0x2005-11

User VAR 10
S32

0x2005-12
RPDO3

0x2005-13

User VAR 12
S32

0x2005-14
RPDO4

0x2005-15

User VAR 11
User VAR 13
User VAR 14

S32

0x2005-16

User VAR 15
User VAR 16

S32: signed 32-bit word

180

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

CANopen Message Types

Object Dictionary
The CANopen dictionary shown in this section is subject to change. The CANopen EDS
file can be downloaded from the roboteq web site.
The Object Dictionary given in the table below contains the runtime queries and runtime
commands that can be accessed with SDO/PDO messages during controller operation.
TABLE 17-3. Motor Controllers Object Dictionary

Entry Name

Data Type
& Access

Command Name

01

Set Motor Command, ch1

CG

CANGO

02

Set Motor Command, ch2

0x2001

01 to mm (1)

Set Position, ch.1

S32 WO

P

0x2002

01 to mm (1)

Set Velocity

S16 WO

S

0x2003

01 to ee (2)

Set Encoder Counter

S32 WO

C

0x2004

01 to mm (1)

Set Brushless Counter

S32 WO

CB

0x2005

01 -vv (3)

Set User Integer Variable

S32 WO

VAR

0x2006

01 to mm (1)

Set Acceleration

S32 WO

AC

0x2007

01 to mm (1)

Set Deceleration

S32 WO

DC

0x2008

00

Set All Digital Out bits

U8 WO

DS

0x2009

00

Set Individual Digital Out bits

U8 WO

D1

0x200A

00

Reset Individual Digital Out bits

U8 WO

D0

0x200B

01 to ee (2)

Load Home Counter

U8 WO

H

0x200C

00

Emergency Shutdown

U8 WO

EX

0x200D

00

Release Shutdown

U8 WO

MG

0x200E

00

Stop in all modes

U8 WO

MS

0x200F

01 to mm (1)

Set Pos Relative

S32 WO

PR

0x2010

01 to mm (1)

Set Next Pos Absolute

S32 WO

PX

0x2011

01 to mm (1)

Set Next Pos Relative

S32 WO

PRX

0x2012
0x2013

01 to mm (1)
01 to mm (1)

Set Next Acceleration
Set Next Deceleration

S32 WO
S32 WO

AX
DX

0x2014

01 to mm (1)

Set Next Velocity

S32 WO

SX

0x2015

01 to bb (4)

Set User Bool Variable

S32 WO

B

0x2017

00

Save Config to Flash

U8 WO

EES

Index

Sub (Hex)

Runtime Commands
0x2000

Runtime Queries
0x2100

01

Read Motor Amps

S16 RO

A

0x2101

01 to mm (1)

Read Actual Motor Command

S16 RO

M

0x2102

01 to mm (1)

Read Applied Power Level

S16 RO

P

0x2103

01 to ee (2)

Read Encoder Motor Speed, ch.1

S16 RO

S

Advanced Digital Motor Controller User Manual

181

CANopen Interface

TABLE 17-3. Motor Controllers Object Dictionary

Index

182

Sub

Entry Name

Data Type
& Access

Command Name

0x2104

01 to ee (2)

Read Absolute Encoder Count

S32 RO

C

0x2105

01 to mm (1)

Read Absolute Brushless
Counter

S32 RO

CB

0x2106

01 to vv (3)

Read User Integer Variable 1

S32 RO

VAR

0x2107

01 to ee (2)

Read Encoder Motor Speed as
1/1000 of Max

S16 RO

SR

0x2108

01 to ee (2)

Read Encoder Count Relative

S32 RO

CR

0x2109

01 to mm (1)

Read Brushless Count Relative

S32 RO

CBR

0x210A

01 to mm (1)

Read BL Motor Speed in RPM

S16 RO

BS

0x210B

01 to mm (1)

Read BL Motor Speed as 1/1000 of
Max

S16 RO

BSR

0x210C

01 to mm (1)

Read Battery Amps

S16 RO

BA

0x210D

01 to 03

Read VInt, VBat, 5VOut

U16 RO

V

0x210E

00

Read All Digital Inputs

U32 RO

D

0x210F

01 to tt+1 (5)

Read MCU and Transistor
temperature

S8 RO

T

0x2110

01 to mm (1)

Read Feedback

S16 RO

F

0x2111
0x2112
0x2113
0x2114
0x2115
0x2116
0x2117
0x2118
0x2119
0x211A
0x211B
0x211D
0x211E
0x211F
0x2120
0x2121
0x2122
0x2123
0x6400
0x2121
0x2122
0x2123
0x2125

00
00
00
01 to mm (1)
01 to bb (4)
01 to mm (1)
01 to mm (1)
01 to mm (1)
00
01 to 06
01 to 06
01 to ss (9)
01 to ss*3 (9)
01 to ss*3 (9)
01 to ss (9)
01 to ss (9)
01 to mm (1)
01 to mm (1)
01 to dd (6)
01 to 03
01 to mm (1)
01 to mm (1)
01 to mm (1)

Read Status Flags
Read Fault Flags
Read Current Digital Outputs
Read Closed Loop Error
Read User Bool Variable
Read Internal Serial Command
Read Internal Analog Command
Read Internal Pulse Command
Read Time
Read Spektrum Radio Capture
Destination Pos Reached flag
Read Magsensor Track Detect
Read Magsensor Track Position,
Read Magsensor Markers
Read Magsensor Status
Read Magsensor Gyroscope
Read Motor Status Flags
Read Hall Sensor States
Read Individual Digital Input
Read Magsensor Gyroscope
Read Motor Status Flags
Read Hall Sensor States
Read Destination Tracking

U8 RO
U8 RO
U8 RO
S32 RO
S32 RO
S32 RO
S32 RO
S32 RO
U32 RO
U16 RO
U8 RO
U8 RO
U8 RO
U8 RO
U16 RO
S16 RO
U16 RO
U8 RO
S32 RO
S16 RO
U16 RO
U8 RO
S32 RO

FS
FF
DO
E
B
CIS
CIA
CIP
TM
K
DR
MGD
MGT
MGM
MGS
MGY
FM
HS
DI
MGY
FM
HS
TR

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

SDO Construction Details

TABLE 17-3. Motor Controllers Object Dictionary

Index
0x2132
0x2135
0x2136
0x6401
0x6402
0x6403
0x6404

Sub
01 to mm (1)
01 to mm (1)
01 to mm(1)
01 to aa (7)
01 to aa (7)
01 to pp (8)
01 to pp (8)

Entry Name

Data Type
& Access

Command Name

Read Rotor Angle
Read FOC Angle Correction
Read Slip
Read Analog Input
Read Analog Input Converted
Read Pulse Input
Read Pulse Input Converted

S16 RO
S16 RO
S16 RO
S16 RO
S16 RO
S16 RO
S16 RO

ANG
FC
SL
AI
AIC
PI
PIC

Notes: Product-specific parameters. See datasheet
(1) mm: Max number of motors
(2) ee: Max number of encoders
(3) vv: Max number of user integer variables
(4) bb: Max number of user boolean variables
(5) tt: Number of internal temperature sensors
(6) dd: Number of digital inputs
(7) aa: Number of analog inputs
(8) pp: Number of pulse inputs
(9) ss: Max number of Magsensors supported

SDO Construction Details
CANOpen SDO frames can easily be created manually and used to send commands
and queries to a Roboteq device. The directives below are a simplified description of the
CANOpen SDO mechanism. For more details please advise the CANOpen standard.
A CANOpen command/query towards a Roboteq device can be analyzed as shown below:
Payload
Byte0
Header

DLC

bits 4-7

bits2-3

bits0-1

Byte1-2

Byte 3

Bytes4-7

0x600+nd

8

css

n

xx

index

subindex

data

•
•
•
•
•
•
•

nd is the destination node id.
ccs is the Client Command Specifier, if 2 it is command if 4 it is query.
n is the Number of bytes in the data part, which do not contain data
xx not necessary for basic operation. For more details advise CANOpen standard.
index is the object dictionary index of the data to be accessed
subindex is the subindex of the object dictionary variable
data contains the data to be uploaded.

Advanced Digital Motor Controller User Manual

183

CANopen Interface

The Response from the roboteq device is as shown below:
Payload
Byte0
Header

DLC

bits 4-7

bits2-3

bits0-1

Byte1-2

Byte 3

Bytes4-7

0x580+nd

8

css

n

xx

index

subindex

Data

•
•
•
•
•
•
•

nd is the source node id.
ccs is the Client Command Specifier, if 4 it is query response, 6 it is a successful
response to command, 8 is an error in message received.
n is the Number of bytes in the data part, which do not contain data
xx not necessary for the simplistic way. For more details advise CANOpen standard.
index is the object dictionary index of the data to be accessed.
subindex is the subindex of the object dictionary variable
data contains the data to be uploaded. Applicable only if css=4.

SDO Example 1: Set Encoder Counter 2 (C) of node 1 value 10
•
•
•
•

nd = 1, since the destination’s node id is 1.
ccs = 2, since it is a command.
n = 0 since all 4 bytes of the data are used (signed32).
index = 0x2003 and subindex = 0x02 according to object dictionary.
Payload
Byte0

Header

DLC

bits 4-7

0x600+1

8

601h

8

2

bits2-3

bits0-1

0

0

20

Byte1-2

Byte 3

Bytes4-7

0x2003

0x02

0x0A

03 20

02

0A 00 00 00

The respective response will be:
Payload
Byte0
Header

DLC

bits 4-7

0x580+1

8

581h

8

6

bits2-3

bits0-1

0
60

0

Byte1-2

Byte 3

Bytes4-7

0x2003

0x02

0x00

03 20

02

00 00 00 00

SDO Example 2: Activate emergency shutdown (EX) for node 12
•
•
•
•

184

nd = 12, since the destination’s node id is 12.
ccs = 2, since it is a command.
n = 3 since only one byte of the data is used (unsigned8).
index = 0x200C and subindex = 0x00 according to object dictionary.

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

SDO Construction Details

TABLE 17-4. Magnetic Guide Sensor Object Dictionary
Payload
Byte0
Header

DLC

bits 4-7

0x600+12

8

601Ch

8

2

bits2-3
3

bits0-1
0

2C

Byte1-2

Byte 3

Bytes4-7

0x200C

0x00

0x01

0C 20

00

01 00 00 00

The respective response will be:
Payload
Byte0
Header

DLC

bits 4-7

0x580+1

8

58Ch

8

6

bits2-3
0

bits0-1
0

60

Byte1-2

Byte 3

Bytes4-7

0x200C

0x00

0x00

0C 20

00

00 00 00 00

SDO Example 3: Read Battery Volts (V) of node 1.
•
•
•
•

nd = 1, since the destination’s node id is 1.
ccs = 4, since it is a query.
n = 2 since 2 bytes of the data are used (unsigned16).
index = 0x210D and subindex = 0x02 according to object dictionary.
Payload
Byte0

Header

DLC

bits 4-7

0x600+1

8

601h

8

4

bits2-3
2

bits0-1
0

48

Byte1-2

Byte 3

Bytes4-7

0x210D

0x02

0x00

0D 21

02

0A 00 00 00

The respective response will be:
• nd = 1, since the source node id is 1.
• ccs = 4, since it is a query response.
• n = 2 since 2 bytes of the data are used (unsigned16).
• index = 0x210D and subindex = 0x02 according to object dictionary.
• data = 0x190 = 400 = 40 Volts.
Payload
Byte0
Header

DLC

0x580+1

8

581h

8

bits 4-7
4

bits2-3
2
48

bits0-1
xx

Byte1-2

Byte 3

Bytes4-7

0x210D

0x02

0x190

0D 21

02

90 01 00 00

Advanced Digital Motor Controller User Manual

185

CANopen Interface

186

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Script Structure and Possibilities

SECTION 18

MicroBasic
Scripting

One of the Roboteq products’ most powerful and innovative features is their ability for the
user to write programs that are permanently saved into, and run from the device’s Flash
Memory. This capability is the equivalent, for example, of combining the motor controller
functionality and this of a PLC or Single Board Computer directly into the controller. Script
can be simple or elaborate, and can be used for various purposes:
• Complex sequences:
MicroBasic Scripts can be written to chain motion sequences based on the status
of analog/digital inputs, motor position, or other measured parameters. For example, motors can be made to move to different count values based on the status of
pushbuttons and the reaching of switches on the path.
• Adapt parameters at runtime
MicroBasic Scripts can read and write most of the controller’s configuration settings at runtime. For example, the Amps limit can be made to change during operation based on the measured heatsink temperature.
• Create new functions
Scripting can be used for adding functions or operating modes that may be needed
for a given application. For example, a script can compute the motor power by multiplying the measured Amps by the measured battery Voltage, and regularly send
the result via the serial port for Telemetry purposes.
• Autonomous operation
MicroBasic Scripts can be written to perform fully autonomous operations. For example the complete functionality of a line following robot can easily be written and
fitted into the controller.

Script Structure and Possibilities
Scripts are written in a Basic-Like computer language. Because of its literal syntax that is
very close to the every-day written English, this language is very easy to learn and simple
scripts can be written in minutes. The MicroBasic scripting language also includes support
for structured programming, allowing fairly sophisticated programs to be written. Several
shortcuts borrowed from the C-language (++, +=, …) are also included in the scripting language and may be optionally used to write shorter programs.

Advanced Digital Motor Controller User Manual

187

MicroBasic Scripting

The complete details on the language can be found in the MicroBasic Language
Reference on page 195.

Source Program and Bytecodes
Programs written in this Basic-like language are interpreted into an intermediate string of
Bytecode instructions that are then downloaded and executed in the controller. This twostep structure ensures that only useful information is stored in the controller and results in
significantly higher performance execution over systems that interpret Basic code directly.
This structure is for the most part entirely invisible to the programmer as the source editing is the only thing that is visible on the PC, and the translation and done in the background just prior to downloading to the controller.
Depending on the product, programs can be from 8192 to 32768 Bytecodes long. This
translates to approximately 1500 to 6000 lines of MicroBasic source.

Variables Types and Storage
Scripts can store signed 32-bit integer variables and Boolean variable. Integer variables can
handle values up to +/– 2,147,483,647. Boolean variables only contain a True or False state.
The language also supports single dimensional arrays of integers and Boolean variables.
In total, up to 1024 or 4096 (depending on the product) Integer variables and up to 1024
Boolean variables can be stored in the controller. An array of n variables will take the storage space of n variables.
The language only works with Integer or Boolean values. It is not possible to store or
manipulate decimal values. This constraint results in more efficient memory usage and
faster script execution. This constraint is usually not a limitation as it is generally sufficient
to work with smaller units (e.g. millivolts instead of Volts, or milliamps instead of Amps) to
achieve the same precision as when working with decimals.
The language does not support String variables and does not have string manipulation
functions. Basic string support is provided for the Print command.

Variable content after Reset
All integer variables are reset to 0 and all Boolean variables are reset to False after the
controller is powered up or reset. When using a variable for the first time in a script, its
value can be considered as 0 without the need to initialize it. Integer and Boolean variables are also reset whenever a new script is loaded.
When pausing and resuming a script, all variables keep the values they had at the time the
script was paused.

Controller Hardware Read and Write Functions
The MicroBasic scripting language includes special functions for reading and writing
configuration parameters. Most configuration parameters that can be read and changed
using the Configuration Tab in the Roborun PC utility or using the Configuration serial
commands, can be read and changed from within a script. The GetConfig and SetConfig
functions are used for this purpose.
The GetValue function is available for reading real-time operating parameters such as Analog/Digital input status, Amps, Speed or Temperature.

188

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Script Structure and Possibilities

The SetCommand function is used to send motor commands or to activate the Digital
Outputs. Practically all controller parameters can be access using these 4 commands,
typically by adding the command name as defined in the Serial (RS232/USB) Operation on
page 141 preceded with the “_” character. For example, reading the Amps limit configuration for channel 1 is done using getvalue(_ALIM, 1).
See the MicroBasic Language Reference on page 143 for details on these functions and
how to use them.

Timers and Wait
The language supports four 32-bit Timer registers. Timers are counters that can be loaded
with a value using a script command. The timers are then counting down every millisecond independently of the script execution status. Functions are included in the language
to load a timer, read its current count value, pause/resume count, and check if it has
reached 0. Timers are very useful for implementing time-based motion sequences.
A wait function is implemented for suspending script execution for a set amount of time.
When such an instruction is encountered, script execution immediately stops and no
more time is allocated to script execution until the specified amounts of milliseconds have
elapsed. Script execution resumes at the instruction that follows the wait.

Execution Time Slot and Execution Speed
MicroBasic scripts are executed in the free time that is available every 1ms, after the controller has completed all its motion control processing. The available time can therefore
vary depending on the functions that are enabled or disabled in the controller configuration. For example more time is available for scripting if the controller is handling a single
motor in open loop than if two motors are operated in closed loop with encoders. At the
end of the allocated time, the script execution is suspended, motor control functions are
performed, and scripts resumed. An execution speed averaging 50,000 lines of MicroBasic code, or higher, per second can be expected in most cases.

Protections
No protection against user error is performed at execution time. For example, writing or
reading in an array variable with an index value that is beyond the 1024 or 4096 variables
available in the controller may cause malfunction or system crash. Nesting more than 64
levels of subroutines (i.e. subroutines called from subroutines, …) will also cause potential
problems. It is up to the programmer to carefully check the script’s behavior in all conditions.

Print Command Restrictions
A print function is available in the language for outputting script results onto the serial or
USB port. Since script execution is very fast, it is easy to send more data to the serial
or USB port than can actually be output physically by these ports. The print command is
therefore limited to 32 characters per 1ms time slot. Printing longer strings will force a
1ms pause to be inserted in the program execution every 32 characters and/or loss of
characters.

Advanced Digital Motor Controller User Manual

189

MicroBasic Scripting

Editing, Building, Simulating and Executing Scripts
Editing Scripts
An editor is available for scripting in the RoborunPlus PC utility. See Scripting Tab on page
368 (Roborun scripting) for details on how to launch and operate the editor.
The edit window resembles this of a typical IDE editor with, most noticeably, changes in
the fonts and colors depending on the type of entry that is recognized as it is entered. This
capability makes code easier to read and provides a first level of error checking.
Code is entered as free-form text with no restriction in term of length, indents use, or
other.

Building Scripts
Building is the process of converting the Basic source code in the intermediate Bytecode
language that is understood by the controller. This step is nearly instantaneous and normally transparent to the user, unless errors are detected in the program.
Build is called automatically when clicking on the “Download to Device” or “Simulate”
buttons.
Building can be called independently by clicking on the “Build” button. This step is normally not necessary but it can be useful in order to compare the memory usage efficiency of
one script compared to another.

Simulating Scripts
Scripts can be ran directly on the PC in simulation mode. Clicking on the Simulate button
will cause the script to be built and launch a simulator in which the code is executed. This
feature is useful for writing, testing and debugging scripts. The simulator works exactly
the same way as the controller with the following exceptions.
• Execution speed is different.
• Controller configurations and operating parameters are not accessible from the
simulator
• Controller commands cannot be sent from the simulator
• The four Timers operate differently in the simulator
• RoboCAN commands and queries have no effect
In the simulator, any attempt to read a Controller configuration (example Amps limit) or a
Controller Runtime parameter (e.g. Volts, Temperature) will cause a prompt to be displayed
for the user to enter a value. Entering no value and hitting Enter, will cause the same value
that was entered last for the same parameter to be used. If this is the first time the user
is prompted for a given parameter, 0 will be entered if hitting Enter with no data.
When a function in the simulator attempts to write a configuration or a command, then
the console displays the parameter name and parameter value in the console.
Script execution in the simulator starts immediately after clicking on the Simulate button
and the console window opens.
Simulated scripts are stopped when closing the simulator console.

190

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

Editing, Building, Simulating and Executing Scripts

Downloading MicroBasic Scripts to the controller
The Download to Device button will cause the MicroBasic script to be built and then transferred into the controller’s flash memory where it will remain permanently unless overwritten by a new script.
The download process requires no other particular attention. There is no warning that a
script may already be present in Flash. A progress bar will appear for the duration of the
transfer which can be from a fraction of a second to a few seconds. When the download
is completed successfully, no message is displayed, and control is returned to the editor A
downloaded script cannot be read out..
An error message will appear only if the controller is not ready to receive or if an error occurred during the download phase.
Downloading a new script while a script is already running will cause the running script to
stop execution. All variables will also be cleared when a new script is downloaded. When
using multiple controllers over a CAN network with the RoboCAN protocol, it is possible
to download the script into any node. Use the Download to Device button from the
Scripting tab of the PC Utility.
In networked systems using the RoboCAN protocol, scripts can be loaded in any active
node by using the Download to Remote button in the PC utility.

Saving and Loading Scripts in Hex Format
Compiled scripts can be saved as a .hex format file from the PC Utility. The bytecodes can
then be loaded into the controller using the “Update Script” button on the Console tab.
Using this technique is a good way of keeping the source code secret and/or safe while
allowing field updates.
The bytecodes in the .hex file can also be loaded in the controller by any microcomputer
using the following sequence:
Send the string:
%sld 321654987
the controller will reply with
HLD
to indicate it is waiting for data
then send the hex file, one line at a time. At the end of each line received, the controller
will send a +
Beware that if no data is received for more than 1s, the controller will exit the HLD mode.

Executing MicroBasic Scripts
Once stored in the Controller’s Flash memory, scripts can be executed either “Manually”
or automatically every time the controller is started.

Advanced Digital Motor Controller User Manual

191

MicroBasic Scripting

Manual launch is done by sending commands via the Serial or USB port. When connected
to the PC running the PC utility, the launch command can be entered from the Console
tab. The commands for running as stopping scripts are:
•
•
•
•

!r :
Start or Resume Script
!r 0: Pause Script execution
!r 1: Resume Script from pause point. All integer and Boolean variables have values they had at the time the script was paused.
!r 2: Restarts Script from start. Set all integer variables to 0, sets all Boolean variables to False. Clears and stops the 4 timers.

On CAN networks running the RoboCAN protocol, a script on a remote node can be
launched or stopped by using the above commands with the RoboCAN prefix. For example
•

@06!r : Start or Resume Script on device at RoboCAN node 6

If the controller is connected to a microcomputer, it is best to have the microcomputer
start script execution by sending the !r command via the serial port or USB.
Scripts can be launched automatically after controller power up or after reset by setting
the Auto Script configuration to Enable in the controller configuration memory. When enabled, if a script is detected in Flash memory after reset, script execution will be enabled
and the script will run as when the !r command is manually entered. Once running, scripts
can be paused and resumed using the commands above.

Important Warning
Prior to set a script to run automatically at start-up, make sure that your script will
not include errors that can make the controller processor crash. Once set to automatically start, a script will always start running shortly after power up. If a script
contains code that causes system crash, the controller will never reach a state
where it will be possible to communicate with it to stop the script and/or load a
new one. If this ever happens, the only possible recovery is to connect the controller
to a PC via the serial port and run a terminal emulation software. Immediately after
receiving the Firmware ID, type and send !r 0 to stop the script before it is actually
launched. Alternatively, you may reload the controller’s firmware.

Debugging Microbasic Scripts
While running a script with the source code visible in the Scripting tab, it is possible to
view the state of all variable in real time. Click on the “Inspect Variable” buttons and over
the variable in the source code. The variable value will appear near the mouse. To see
changes to the variable, move the mouse away and then back on the variable.
Using print statements in questionable parts of the code is also a very effective debug
tool. Run script from the console in order to be able to view the script output.

Script Command Priorities
When sending a Motor or Digital Output command from the script, it will be interpreted
by the controller the same way as a serial command (RS232 or USB). This means that the
RS232 watchdog timer will trigger in if no commands are sent from the script within the

192

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

MicroBasic Scripting Techniques

watchdog timeout. If a serial command is received from the serial/USB port at the same
time a command is sent from the script, both will be accepted and this can cause conflicts if they are both relating to the same channel. Care must be taken to keep to avoid,
for example, cases where the script commands one motor to go to a set level while a serial command is received to set the motor to a different level. To avoid this problem when
using the Roborun PC utility, click on the mute button to stop commands sending from
the PC.
Script commands also share the same priority level as Serial commands. Use the Command Priority Setting (See “Command Priorities” on page 146) to set the priority of commands issued from the script vs. commands received from the Pulse Inputs or Analog
Inputs.

MicroBasic Scripting Techniques
Writing scripts for the Roboteq controllers is similar to writing programs for any other
computer. Scripts can be called to run once and terminate when done. Alternatively,
scripts can be written so that they run continuously.

Single Execution Scripts
These scripts are programs that perform a number of functions and eventually terminate.
These kind of scripts can be summarized in the flow chart below. The amount of processing can be simple or very complex but the script has a clear begin and end.

Start

Processing

End

FIGURE 18-1. Single execution scripts

Continuous Scripts
More often, scripts will be active permanently, reacting differently based on the status of
analog/ digital inputs, or operating parameters (Amps, Volts, Temperature, Speed, Count,
…), and continuously updating the motor power and/or digital outputs. These scripts have
a beginning but no end as they continuously loop back to the top. A typical loop construction is shown in the flow chart below.

Advanced Digital Motor Controller User Manual

193

MicroBasic Scripting

Start

Initialization Steps
top

Time, Input or
Controller events

Y

Process Events

N

Wait

FIGURE 18-2. Continuous execution scripts
Often, some actions must be done only once when script starts running. This could be
setting the controller in an initial configuration or computing constants that will then be
used in the script’s main execution loop.
The main element of a continuous script is the scanning of the input ports, timers, or
controller operating parameters. If specific events are detected, then the script jumps to
steps related to these events. Otherwise, no action is taken.
Prior to looping back to the top of the loop, it is highly recommended to insert a wait time.
The wait period should be only as short as it needs to be in order to avoid using processing resources unnecessarily. For example, a script that monitors the battery and triggers
an output when the battery is low does not need to run every millisecond. A wait time of
100ms would be adequate and keep the controller from allocating unnecessary time to
script execution.

Optimizing Scripts for Integer Math
Scripts only use integer values as variables and for all internal calculation. This leads to
very fast execution and lower computing resource usage. However, it does also cause limitation. These can easily be overcome with the following techniques.
First, if precision is needed, work with smaller units. In this simple Ohm-law example,
whereas 10V divided by 3A results in 3 Ohm, the same calculation using different units
will give a higher precision result: 10000mV divided by 3A results in 3333 mOhm
Second, the order in which terms are evaluated in an expression can make a very big
difference. For example (10 / 20) * 1000 will produce a result of 0 while (10 * 1000)/20 produces 5000. The two expressions are mathematically equivalent but not if numbers can
only be integers.

194

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

MicroBasic Language Reference

Script Examples
Several sample scripts are available from the download page on Roboteq’s web site.
Below is an example of a script that continuously checks the heat sink temperature at
both sides of the controller enclosure and lowers the amps limit to 50A when the average
temperature exceeds 50oC. Amps limit is set at 100A when temperature is below 50o.
Notice that as temperature is changing slowly, the loop update rate has been set at a relatively slow 100ms rate.
‘ This script regularity reads the current temperature at both sides
‘ of the heat sink and changes the Amps limit for both motors to 50A
‘ when the average temperature is above 50oC. Amps limit is set to
‘ 100A when temperature is below or equal to 50oC.
‘ Since temperature changes slowly, the script is repeated every 100ms
‘ This script is distributed “AS IS”; there is no maintenance
‘ and no warranty is made pertaining to its performance or applicability
top: ‘ Label marking the beginning of the script.
‘ Read the actual command value
Temperature1 = getvalue(_TEMP,1)
Temperature2 = getvalue(_TEMP,2)
TempAvg = (Temperature1 + Temperature2) / 2
‘ If command value is higher than 500 then configure
‘ acceleration and deceleration values for channel 1 to 200
if TempAvg > 50 then
setconfig(_ALIM, 1, 500)
setconfig(_ALIM, 2, 500)
else
‘ If command value is lower than or equal to 500 then configure
‘ acceleration and deceleration values for channel 1 to 5000
setconfig(_ALIM, 1, 1000)
setconfig(_ALIM, 2, 1000)
end if
‘ Pause the script for 100ms
wait(100)
‘ Repeat the script from the start
goto top

MicroBasic Language Reference
Introduction
The Roboteq Micro Basic is high level language that is used to generate programs that
runs on Roboteq motor controllers. It uses syntax nearly like Basic syntax with some adjustments to speed program execution in the controller and make it easier to use.

Advanced Digital Motor Controller User Manual

195

MicroBasic Scripting

Comments
A comment is a piece of code that is excluded from the compilation process. A comment
begins with a single-quote character. Comments can begin anywhere on a source line,
and the end of the physical line ends the comment. The compiler ignores the characters
between the beginning of the comment and the line terminator. Consequently, comments
cannot extend across multiple lines.
‘Comment goes here till the end of the line.

Boolean
True and False are literals of the Boolean type that map to the true and false state, respectively.

Numbers
Micro Basic supports only integer values ranged from -2,147,483,648 (0x80000000) to
2,147,483,647 (0x7FFFFFFF).
Numbers can be preceded with a sign (+ or -), and can be written in one of the following
formats:
•

Decimal Representation
Number is represented in a set of decimal digits (0-9).
120

5622

504635

Are all valid decimal numbers.
•

Hexadecimal Representation
Number is represented in a set of hexadecimal digits (0-9, A-F) preceded by 0x.
0xA1

0x4C2

0xFFFF

Are all valid hexadecimal numbers representing decimal values 161, 1218 and
65535 respectively.
•

Binary Representation
Number is represented in a set of binary digits (0-1) preceded by 0b.
0b101

0b1110011

0b111001010

Are all valid binary numbers representing decimal values 5, 115 and 458 respectively.

Strings
Strings are any string of printable characters enclosed in a pair of quotation marks. Non
printing characters may be represented by simple or hexadecimal escape sequence. Micro
Basic only handles strings using the Print command. Strings cannot be stored in variable
and no string handling instructions exist.
• Simple Escape Sequence
The following escape sequences can be used to print non-visible or characters:

196

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

MicroBasic Language Reference

•

Sequence
\’

Description
Single quote

\”

Double quote

\\

Backslash

\0

Null

\a

Alert

\b

Backspace

\f

Form feed

\n

New line

\r

Carriage return

\t

Horizontal tab

\v

Vertical tab

Hexadecimal Escape Sequence
Hexadecimal escape sequence is represented in a set of hexadecimal digits (0-9,
A-F) preceded by \x in the string (such as \x10 for character with ASCII 16).
Since a hexadecimal escape sequence can have a variable number of hex digits,
the string literal “\x123” contains a single character with hex value 123. To create
a string containing the character with hex value 12 followed by the character 3, one
could write “\x00123”.

So, to represent a string with the statement “Hello World!” followed by a new line, you
may use the following syntax:
“Hello World!\n”

Blocks and Labels
A group of executable statements is called a statement block. Execution of a statement
block begins with the first statement in the block. Once a statement has been executed,
the next statement in lexical order is executed, unless a statement transfers execution
elsewhere.
A label is an identifier that identifies a particular position within the statement block that
can be used as the target of a branch statement such as GoTo, GoSub or Return.
Label declaration statements must appear at the beginning of a line. Label declaration
statements must always be followed by a colon (:) as the following:
Print_Label:
Print(“Hello World!”)
Label name should start with alphabetical character and followed by zero or more alphanumeric characters or underscore. Label names cannot start with underscore. Labels names
cannot match any of Micro Basic reserved words.

Advanced Digital Motor Controller User Manual

197

MicroBasic Scripting

Label names are case insensitive that is PrintLabel is identical to printLabel.
The scope of a label extends whole the program. Labels cannot be declared more than
once in the program.

Variables
Micro Basic contains only two types of variable (Integer and Boolean) in addition to
arrays of these types. Boolean and arrays must be declared before use, but Integer variables may not be declared unless you use the Option Explicit compiler directive.
Option Explicit
Variables can be declared using DIM keyword (see Dim (Variable Declaration) on
page 200).
Variable name should start with alphabetical character and followed by zero or more alphanumeric characters or underscore. Variable names cannot start with underscore. Variable
names cannot match any of Micro Basic reserved words.
Variable names are case insensitive, that is VAR is identical to var.
The scope of a variable extends whole the program. Variables cannot be declared more
than once in the program.

Arrays
Arrays is special variables that holds a set of values of the variable type. Arrays are declared using DIM command (see Dim (Variable Declaration) on page 200).
To access specific element in the array you can use the indexer [] (square brackets). Arrays
indices are zero based, so index of 5 refer to the 6th element of the array.
arr[0] = 10 ‘Set the value of the first element in the array to 10.
a = arr[5]

‘Store the 6th element of the array into variable a.

Terminology
In the following sections we will introduce Micro Basic commands and how it is used, and
here is the list of terminology used in the following sections:
• Micro Basic commands and functions will be marked in blue and cyan respectively.
• Anything enclosed in < > is mandatory and must be supplied.
• Anything enclosed in [ ] is optional, except for arrays where the square brackets is
used as indexers.
• Anything enclosed in { } and separated by | characters are multi choice options.
• Any items followed by an ellipsis, ... , may be repeated any number of times.
•

198

Any punctuation and symbols, except those above, are part of the structure and
must be included.
var

is any valid variable name including arrays.

arr

is any valid array name.

expression

is any expression returning a result.

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

MicroBasic Language Reference

condition

is any expression returning a boolean result.

stmt

is single Micro Basic statement.

block

is zero or more Micro Basic statements.

label

is any valid label name.

n

is a positive integer value.

str

is a valid string literal.

Keywords
A keyword is a word that has special meaning in a language construct. All keywords are
reserved by the language and may not be used as variables or label names. Below is a list
of all Micro Basic keywords:
#define

And

AndWhile

As

Boolean

Continue

Dim

Do

Else

ElseIf

End

Evaluate

Exit

Explicit

False

For

GoSub

GoTo

If

Integer

Loop

Mod

Next

Not

Option

Or

Print

Return

Step

Terminate

Then

To

ToBool

True

Until

While

XOr

Operators
Micro Basic provides a large set of operators, which are symbols or keywords that specify
which operations to perform in an expression. Micro Basic predefines the usual arithmetic
and logical operators, as well as a variety of others as shown in the following table.
Category

Operators
+

-

*

/

Mod

Logical (boolean and bitwise)

And

Or

XOr

Not

True

False

Increment, decrement

++

--

Shift

<<

>>

Relational

=

<>

<

>

<=

>=

Assignment

=

+=

-=

*=

/=

<<=

Indexing

[]

Arithmetic

>>=

Micro Basic Functions
The following is a set of Micro Basic functions
Abs

Returns the absolute value of a given number.

Atan

Returns the angle whose arc tangent is the specified number.

Cos

Returns the cosine of the specified angle.

Sin

Returns the sine of the specified angle.

Sqrt

Returns the square root of a specified number.

Advanced Digital Motor Controller User Manual

199

MicroBasic Scripting

Controller Configuration and Commands
The following is a set of device functions for interacting with the Controller:
SetConfig

Set a configuration parameter

SetCommand

Send a Real Time command

GetConfig

Read a configuration parameter

GetValue

Read an operating value

A set of similar commands are available for accessing/changing configurations, sending
commands and reading operating values of remote nodes on CAN networks using the
RoboCAN protocol.

Timers Commands
The following is a set of functions for interacting with the timers:
SetTimerCount

Set number of milliseconds for timer to count.

SetTimerState

Set state of a specific timer.

GetTimerCount

Read timer count.

GetTimerState

Read state of a specific timer.

Pre-Processor Directives (#define)
The #define creates a macro, which is the association of an identifier with a token expression. After the macro is defined, the compiler can substitute the token expression for each
occurrence of the identifier in the source file.
#define  
The following example illustrates how use pre-processor directive:
#define CommandID _GO + 5
Print(CommandID)

Option (Compilation Options)
Micro Basic by default treats undeclared identifiers as integer variables. If you want the
compilers checks that every variable used in the program is declared and generate compilation error if a variable is not previously declared, you may use Option explicit compiler
option by pacing the following at the beginning of the program:
Option Explicit

Dim (Variable Declaration)
Micro Basic contains only two types of variable (Integer and Boolean) in addition to arrays
of these types. Boolean and arrays must be declared before use, but Integer variables
may not be declared unless you use the Option Explicit compiler directive.
Dim var As { Integer | Boolean }

200

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

MicroBasic Language Reference

The following example illustrates how to declare Integer variable:
Dim intVar As Integer
Arrays declaration uses a different syntax, where you should specify the array length between square brackets []. Array length should be integer value greater than 1.
Dim arr[n] As { Integer | Boolean }
The following example illustrates how to declare array of 10 integers:
Dim arr[10] As Integer
To access array elements (get/set), you may need to take a look to Arrays section (see Arrays on page 198).
Variable and arrays names should follow specification stated in the Variables section (see
Variables on page 198).

If...Then Statement
•

Line If
If  Then  [Else ]

•

Block If
If  [Then]

[ElseIf  [Then]
]
[ElseIf  [Then]
]
...
[Else
]
End If

An If...Then statement is the basic conditional statement. If the expression in the If
statement is true, the statements enclosed by the If block are executed. If the expression is false, each of the ElseIf expressions is evaluated. If one of the ElseIf expressions evaluates to true, the corresponding block is executed. If no expression evaluates to
true and there is an Else block, the Else block is executed. Once a block finishes executing, execution passes to the end of the If...Then statement.
The line version of the If statement has a single statement to be executed if the If expression is true and an optional statement to be executed if the expression is false. For
example:
Dim a As Integer
Dim b As Integer
a = 10
b = 20
‘ Block If statement.
If a < b Then
a = b

Advanced Digital Motor Controller User Manual

201

MicroBasic Scripting

Else

b = a
End If
‘ Line If statement
If a < b Then a = b Else b = a
Below is an example where ElseIf takes place:
If score >= 90 Then
grade = 1
ElseIf score >= 80 Then
grade = 2
ElseIf score >= 70 Then
grade = 3
Else
grade = 4
End If

For...Next Statement
Micro Basic contains two types of For...Next loops:
• Traditional For...Next:
Traditional For...Next exists for backward compatibility with Basic, but it is not recommended due to its inefficient execution.
Traditional For...Next is the same syntax as Basic For...Next statement.
•

C-Style For...Next:
This is a new style of For...Next statement optimized to work with Roboteq controllers and it is recommended to be used. It is the same semantics as C++ for loop,
but with a different syntax.
For  =  AndWhile  [Evaluate
]

Next
The c-style for loop is executed by initialize the loop variable, then the loop continues while the condition is true and after execution of single loop the evaluate statement is executed then continues to next loop.
Dim arr[10] As Integer
For i = 0 AndWhile i < 10
arr[i] = -1
Next
The previous example illustrates how to initialize array elements to -1.
The following example illustrates how to use Evaluate to print even values from
0-10 inclusive:
For i = 0 AndWhile i <= 10 Evaluate i += 2
Print(i, “\n”)
Next

202

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

MicroBasic Language Reference

While/Do Statements
•

While...End While Statement
While 

End While
Example:
a = 10
While a > 0
Print(“a = “, a, “\n”)
a-End While
Print(“Loop ended with a = “, a, “\n”)

•

Do While...Loop Statement
Do While 

Loop
The Do While...Loop statement is the same as functionality of the While...
End While statement but uses a different syntax.
a = 10
Do While a > 0
Print(“a = “, a, “\n”)
a-Loop
Print(“Loop ended with a = “, a, “\n”)

•

Do Until...Loop Statement
Do Until 

Loop
Unlike Do While...Loop statement, Do Until...Loop statement exist the
loop when the expression evaluates to true.
a = 10
Do Until a = 0
Print(“a = “, a, “\n”)
a-Loop
Print(“Loop ended with a = “, a, “\n”)

•

Do...Loop While Statement
Do


Loop While 
Do...Loop While statement grantees that the loop block will be executed at 		
least once as the condition is evaluated and checked after executing the block.

Advanced Digital Motor Controller User Manual

203

MicroBasic Scripting

a = 10
Do
Print(“a = “, a, “\n”)
a-Loop While a > 0
Print(“Loop ended with a = “, a, “\n”)
•

Do...Loop Until Statement
Do
		

Loop Until 
Unlike Do...Loop While statement, Do...Loop Until statement exist the loop when
the expression evaluates to true.

a = 10
Do

Print(“a = “, a, “\n”)
a-Loop Until a = 0
Print(“Loop ended with a = “, a, “\n”)

Terminate Statement
The Terminate statement ends the execution of the program.
Terminate

Exit Statement
The following is the syntax of Exit statement:
Exit { For | While | Do }
An Exit statement transfers execution to the next statement to immediately containing
block statement of the specified kind. If the Exit statement is not contained within the
kind of block specified in the statement, a compile-time error occurs.
The following is an example of how to use Exit statement in While loop:
While a > 0
If b = 0 Then Exit While
End While

Continue Statement
The following is the syntax of Continue statement:
Continue { For | While | Do }
A Continue statement transfers execution to the beginning of immediately containing
block statement of the specified kind. If the Continue statement is not contained within
the kind of block specified in the statement, a compile-time error occurs.

204

Advanced Digital Motor Controller User Manual

V1.8, August 28, 2017

MicroBasic Language Reference

The following is an example of how to use Continue statement in While loop:
While a > 0
If b = 0 Then Continue While
End While

GoTo Statement
A GoTo statement causes execution to transfer to the specified label. GoTo keyword
should be followed by the label name.
GoTo 

Source Exif Data:
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.4
Linearized                      : No
Has XFA                         : No
Language                        : en-US
Tagged PDF                      : Yes
XMP Toolkit                     : Adobe XMP Core 5.4-c005 78.147326, 2012/08/23-13:03:03
Create Date                     : 2017:08:30 21:10:05+05:30
Metadata Date                   : 2017:08:31 00:38:37+05:30
Modify Date                     : 2017:08:31 00:38:37+05:30
Creator Tool                    : Adobe InDesign CC 2017 (Windows)
Instance ID                     : uuid:0a37afab-4640-4660-aadc-d51dc2c1ad39
Original Document ID            : xmp.did:a02ded8c-c5c9-6f48-b7ae-af02f687b090
Document ID                     : xmp.id:86deb572-b6b0-8a46-9773-b7f05f8475a6
Rendition Class                 : proof:pdf
History Action                  : converted
History Parameters              : from application/x-indesign to application/pdf
History Software Agent          : Adobe InDesign CC 2017 (Windows)
History Changed                 : /
History When                    : 2017:08:30 21:10:05+05:30
Derived From Instance ID        : xmp.iid:784e77d3-64e5-2f49-b6ac-c44e582d9171
Derived From Document ID        : xmp.did:a02ded8c-c5c9-6f48-b7ae-af02f687b090
Derived From Original Document ID: xmp.did:a02ded8c-c5c9-6f48-b7ae-af02f687b090
Derived From Rendition Class    : default
Format                          : application/pdf
Producer                        : Adobe PDF Library 15.0
Trapped                         : False
Page Count                      : 384
Creator                         : Adobe InDesign CC 2017 (Windows)
EXIF Metadata provided by EXIF.tools

Navigation menu