Tic Stepper Motor Controller library for Arduino
Tic.h
Go to the documentation of this file.
1 // Copyright (C) Pololu Corporation. See LICENSE.txt for details.
2 
10 
11 #pragma once
12 
13 #include <Arduino.h>
14 #include <Stream.h>
15 #include <Wire.h>
16 
17 enum class TicProduct
18 {
19  Unknown = 0,
20  T825 = 1,
21  T834 = 2,
22  T500 = 3,
23  T249 = 4,
24  Tic36v4 = 5,
25 };
26 
30 const uint8_t TicCurrentUnits = 32;
31 
34 const uint8_t TicT249CurrentUnits = 40;
35 
38 const uint16_t TicInputNull = 0xFFFF;
39 
44 enum class TicError
45 {
46  IntentionallyDeenergized = 0,
47  MotorDriverError = 1,
48  LowVin = 2,
49  KillSwitch = 3,
50  RequiredInputInvalid = 4,
51  SerialError = 5,
52  CommandTimeout = 6,
53  SafeStartViolation = 7,
54  ErrLineHigh = 8,
55  SerialFraming = 16,
56  RxOverrun = 17,
57  Format = 18,
58  Crc = 19,
59  EncoderSkip = 20,
60 };
61 
65 enum class TicCommand
66 {
67  SetTargetPosition = 0xE0,
68  SetTargetVelocity = 0xE3,
69  HaltAndSetPosition = 0xEC,
70  HaltAndHold = 0x89,
71  GoHome = 0x97,
72  ResetCommandTimeout = 0x8C,
73  Deenergize = 0x86,
74  Energize = 0x85,
75  ExitSafeStart = 0x83,
76  EnterSafeStart = 0x8F,
77  Reset = 0xB0,
78  ClearDriverError = 0x8A,
79  SetSpeedMax = 0xE6,
80  SetStartingSpeed = 0xE5,
81  SetAccelMax = 0xEA,
82  SetDecelMax = 0xE9,
83  SetStepMode = 0x94,
84  SetCurrentLimit = 0x91,
85  SetDecayMode = 0x92,
86  SetAgcOption = 0x98,
87  GetVariable = 0xA1,
88  GetVariableAndClearErrorsOccurred = 0xA2,
89  GetSetting = 0xA8,
90 };
91 
96 {
97  Reset = 0,
98  Deenergized = 2,
99  SoftError = 4,
100  WaitingForErrLine = 6,
101  StartingUp = 8,
102  Normal = 10,
103 };
104 
109 enum class TicPlanningMode
110 {
111  Off = 0,
112  TargetPosition = 1,
113  TargetVelocity = 2,
114 };
115 
120 enum class TicReset
121 {
122  PowerUp = 0,
123  Brownout = 1,
124  ResetLine = 2,
125  Watchdog = 4,
126  Software = 8,
127  StackOverflow = 16,
128  StackUnderflow = 32,
129 };
130 
134 enum class TicDecayMode
135 {
138  Mixed = 0,
139 
141  Slow = 1,
142 
144  Fast = 2,
145 
148  Mixed50 = 0,
149 
152  Mixed25 = 3,
153 
156  Mixed75 = 4,
157 };
158 
162 enum class TicStepMode
163 {
164  Full = 0,
165  Half = 1,
166 
167  Microstep1 = 0,
168  Microstep2 = 1,
169  Microstep4 = 2,
170  Microstep8 = 3,
171  Microstep16 = 4,
172  Microstep32 = 5,
173  Microstep2_100p = 6,
174  Microstep64 = 7,
175  Microstep128 = 8,
176  Microstep256 = 9,
177 };
178 
182 enum class TicAgcMode
183 {
184  Off = 0,
185  On = 1,
186  ActiveOff = 2,
187 };
188 
194 {
195  P45 = 0,
196  P50 = 1,
197  P55 = 2,
198  P60 = 3,
199  P65 = 4,
200  P70 = 5,
201  P75 = 6,
202  P80 = 7,
203 };
204 
210 {
211  S5 = 0,
212  S7 = 1,
213  S9 = 2,
214  S11 = 3,
215 };
216 
221 {
222  Off = 0,
223  F225Hz = 1,
224  F450Hz = 2,
225  F675Hz = 3,
226 };
227 
229 enum class TicPin
230 {
231  SCL = 0,
232  SDA = 1,
233  TX = 2,
234  RX = 3,
235  RC = 4,
236 };
237 
241 enum class TicPinState
242 {
243  HighImpedance = 0,
244  InputPullUp = 1,
245  OutputLow = 2,
246  OutputHigh = 3,
247 };
248 
250 enum class TicInputState
251 {
254  NotReady = 0,
255 
257  Invalid = 1,
258 
260  Halt = 2,
261 
264  Position = 3,
265 
268  Velocity = 4,
269 };
270 
274 enum class TicMiscFlags1
275 {
276  Energized = 0,
277  PositionUncertain = 1,
278  ForwardLimitActive = 2,
279  ReverseLimitActive = 3,
280  HomingActive = 4,
281 };
282 
287 {
288  None = 0,
289  OverCurrent = 1,
290  OverTemperature = 2,
291 };
292 
297 {
298  OverTemperature = 0,
299  OverCurrentA = 1,
300  OverCurrentB = 2,
301  PreDriverFaultA = 3,
302  PreDriverFaultB = 4,
303  UnderVoltage = 5,
304  Verify = 7,
305 };
306 
312 class TicBase
313 {
314 public:
327  void setProduct(TicProduct product)
328  {
329  this->product = product;
330  }
331 
345  void setTargetPosition(int32_t position)
346  {
347  commandW32(TicCommand::SetTargetPosition, position);
348  }
349 
365  void setTargetVelocity(int32_t velocity)
366  {
367  commandW32(TicCommand::SetTargetVelocity, velocity);
368  }
369 
386  void haltAndSetPosition(int32_t position)
387  {
388  commandW32(TicCommand::HaltAndSetPosition, position);
389  }
390 
407  void haltAndHold()
408  {
409  commandQuick(TicCommand::HaltAndHold);
410  }
411 
418  {
419  commandW7(TicCommand::GoHome, 0);
420  }
421 
428  {
429  commandW7(TicCommand::GoHome, 1);
430  }
431 
441  {
442  commandQuick(TicCommand::ResetCommandTimeout);
443  }
444 
464  void deenergize()
465  {
466  commandQuick(TicCommand::Deenergize);
467  }
468 
479  void energize()
480  {
481  commandQuick(TicCommand::Energize);
482  }
483 
495  {
496  commandQuick(TicCommand::ExitSafeStart);
497  }
498 
515  {
516  commandQuick(TicCommand::EnterSafeStart);
517  }
518 
528  void reset()
529  {
530  commandQuick(TicCommand::Reset);
531 
532  // The Tic's serial and I2C interfaces will be unreliable for a brief period
533  // after the Tic receives the Reset command, so we delay 10 ms here.
534  delay(10);
535  }
536 
547  {
548  commandQuick(TicCommand::ClearDriverError);
549  }
550 
562  void setMaxSpeed(uint32_t speed)
563  {
564  commandW32(TicCommand::SetSpeedMax, speed);
565  }
566 
578  void setStartingSpeed(uint32_t speed)
579  {
580  commandW32(TicCommand::SetStartingSpeed, speed);
581  }
582 
595  void setMaxAccel(uint32_t accel)
596  {
597  commandW32(TicCommand::SetAccelMax, accel);
598  }
599 
612  void setMaxDecel(uint32_t decel)
613  {
614  commandW32(TicCommand::SetDecelMax, decel);
615  }
616 
630  {
631  commandW7(TicCommand::SetStepMode, (uint8_t)mode);
632  }
633 
654  void setCurrentLimit(uint16_t limit);
655 
667  {
668  commandW7(TicCommand::SetDecayMode, (uint8_t)mode);
669  }
670 
677  {
678  commandW7(TicCommand::SetAgcOption, (uint8_t)mode & 0xF);
679  }
680 
687  {
688  commandW7(TicCommand::SetAgcOption, 0x10 | (uint8_t)limit & 0xF);
689  }
690 
697  {
698  commandW7(TicCommand::SetAgcOption, 0x20 | (uint8_t)steps & 0xF);
699  }
700 
707  {
708  commandW7(TicCommand::SetAgcOption, 0x30 | (uint8_t)limit & 0xF);
709  }
710 
725  {
726  return (TicOperationState)getVar8(VarOffset::OperationState);
727  }
728 
732  {
733  return getVar8(VarOffset::MiscFlags1) >>
734  (uint8_t)TicMiscFlags1::Energized & 1;
735  }
736 
743  {
744  return getVar8(VarOffset::MiscFlags1) >>
745  (uint8_t)TicMiscFlags1::PositionUncertain & 1;
746  }
747 
750  {
751  return getVar8(VarOffset::MiscFlags1) >>
752  (uint8_t)TicMiscFlags1::ForwardLimitActive & 1;
753  }
754 
757  {
758  return getVar8(VarOffset::MiscFlags1) >>
759  (uint8_t)TicMiscFlags1::ReverseLimitActive & 1;
760  }
761 
764  {
765  return getVar8(VarOffset::MiscFlags1) >>
766  (uint8_t)TicMiscFlags1::HomingActive & 1;
767  }
768 
782  uint16_t getErrorStatus()
783  {
784  return getVar16(VarOffset::ErrorStatus);
785  }
786 
804  uint32_t getErrorsOccurred()
805  {
806  uint32_t result;
807  getSegment(TicCommand::GetVariableAndClearErrorsOccurred,
808  VarOffset::ErrorsOccurred, 4, &result);
809  return result;
810  }
811 
826  {
827  return (TicPlanningMode)getVar8(VarOffset::PlanningMode);
828  }
829 
837  {
838  return getVar32(VarOffset::TargetPosition);
839  }
840 
848  {
849  return getVar32(VarOffset::TargetVelocity);
850  }
851 
858  uint32_t getMaxSpeed()
859  {
860  return getVar32(VarOffset::SpeedMax);
861  }
862 
874  uint32_t getStartingSpeed()
875  {
876  return getVar32(VarOffset::StartingSpeed);
877  }
878 
890  uint32_t getMaxAccel()
891  {
892  return getVar32(VarOffset::AccelMax);
893  }
894 
906  uint32_t getMaxDecel()
907  {
908  return getVar32(VarOffset::DecelMax);
909  }
910 
922  {
923  return getVar32(VarOffset::CurrentPosition);
924  }
925 
938  {
939  return getVar32(VarOffset::CurrentVelocity);
940  }
941 
950  {
951  return getVar32(VarOffset::ActingTargetPosition);
952  }
953 
963  {
964  return getVar32(VarOffset::TimeSinceLastStep);
965  }
966 
979  {
980  return (TicReset)getVar8(VarOffset::DeviceReset);
981  }
982 
989  uint16_t getVinVoltage()
990  {
991  return getVar16(VarOffset::VinVoltage);
992  }
993 
1003  uint32_t getUpTime()
1004  {
1005  return getVar32(VarOffset::UpTime);
1006  }
1007 
1015  {
1016  return getVar32(VarOffset::EncoderPosition);
1017  }
1018 
1032  uint16_t getRCPulseWidth()
1033  {
1034  return getVar16(VarOffset::RCPulseWidth);
1035  }
1036 
1052  uint16_t getAnalogReading(TicPin pin)
1053  {
1054  uint8_t offset = VarOffset::AnalogReadingSCL + 2 * (uint8_t)pin;
1055  return getVar16(offset);
1056  }
1057 
1070  {
1071  uint8_t readings = getVar8(VarOffset::DigitalReadings);
1072  return (readings >> (uint8_t)pin) & 1;
1073  }
1074 
1089  {
1090  uint8_t states = getVar8(VarOffset::PinStates);
1091  return (TicPinState)(states >> (2 * (uint8_t)pin) & 0b11);
1092  }
1093 
1104  {
1105  return (TicStepMode)getVar8(VarOffset::StepMode);
1106  }
1107 
1123  uint16_t getCurrentLimit();
1124 
1137  {
1138  return (TicDecayMode)getVar8(VarOffset::DecayMode);
1139  }
1140 
1153  {
1154  return (TicInputState)getVar8(VarOffset::InputState);
1155  }
1156 
1163  {
1164  return getVar16(VarOffset::InputAfterAveraging);
1165  }
1166 
1173  {
1174  return getVar16(VarOffset::InputAfterHysteresis);
1175  }
1176 
1189  {
1190  return getVar32(VarOffset::InputAfterScaling);
1191  }
1192 
1197  {
1198  return (TicMotorDriverError)getVar8(VarOffset::LastMotorDriverError);
1199  }
1200 
1207  {
1208  return (TicAgcMode)getVar8(VarOffset::AgcMode);
1209  }
1210 
1217  {
1218  return (TicAgcBottomCurrentLimit)getVar8(VarOffset::AgcBottomCurrentLimit);
1219  }
1220 
1227  {
1228  return (TicAgcCurrentBoostSteps)getVar8(VarOffset::AgcCurrentBoostSteps);
1229  }
1230 
1237  {
1238  return (TicAgcFrequencyLimit)getVar8(VarOffset::AgcFrequencyLimit);
1239  }
1240 
1248  {
1249  return getVar8(VarOffset::LastHpDriverErrors);
1250  }
1251 
1266  void getSetting(uint8_t offset, uint8_t length, uint8_t * buffer)
1267  {
1268  getSegment(TicCommand::GetSetting, offset, length, buffer);
1269  }
1270 
1273  uint8_t getLastError()
1274  {
1275  return _lastError;
1276  }
1277 
1278 protected:
1281  uint8_t _lastError = 0;
1282 
1283 private:
1284  enum VarOffset
1285  {
1286  OperationState = 0x00, // uint8_t
1287  MiscFlags1 = 0x01, // uint8_t
1288  ErrorStatus = 0x02, // uint16_t
1289  ErrorsOccurred = 0x04, // uint32_t
1290  PlanningMode = 0x09, // uint8_t
1291  TargetPosition = 0x0A, // int32_t
1292  TargetVelocity = 0x0E, // int32_t
1293  StartingSpeed = 0x12, // uint32_t
1294  SpeedMax = 0x16, // uint32_t
1295  DecelMax = 0x1A, // uint32_t
1296  AccelMax = 0x1E, // uint32_t
1297  CurrentPosition = 0x22, // int32_t
1298  CurrentVelocity = 0x26, // int32_t
1299  ActingTargetPosition = 0x2A, // int32_t
1300  TimeSinceLastStep = 0x2E, // uint32_t
1301  DeviceReset = 0x32, // uint8_t
1302  VinVoltage = 0x33, // uint16_t
1303  UpTime = 0x35, // uint32_t
1304  EncoderPosition = 0x39, // int32_t
1305  RCPulseWidth = 0x3D, // uint16_t
1306  AnalogReadingSCL = 0x3F, // uint16_t
1307  AnalogReadingSDA = 0x41, // uint16_t
1308  AnalogReadingTX = 0x43, // uint16_t
1309  AnalogReadingRX = 0x45, // uint16_t
1310  DigitalReadings = 0x47, // uint8_t
1311  PinStates = 0x48, // uint8_t
1312  StepMode = 0x49, // uint8_t
1313  CurrentLimit = 0x4A, // uint8_t
1314  DecayMode = 0x4B, // uint8_t
1315  InputState = 0x4C, // uint8_t
1316  InputAfterAveraging = 0x4D, // uint16_t
1317  InputAfterHysteresis = 0x4F, // uint16_t
1318  InputAfterScaling = 0x51, // uint16_t
1319  LastMotorDriverError = 0x55, // uint8_t
1320  AgcMode = 0x56, // uint8_t
1321  AgcBottomCurrentLimit = 0x57, // uint8_t
1322  AgcCurrentBoostSteps = 0x58, // uint8_t
1323  AgcFrequencyLimit = 0x59, // uint8_t
1324  LastHpDriverErrors = 0xFF, // uint8_t
1325  };
1326 
1327  uint8_t getVar8(uint8_t offset)
1328  {
1329  uint8_t result;
1330  getSegment(TicCommand::GetVariable, offset, 1, &result);
1331  return result;
1332  }
1333 
1334  uint16_t getVar16(uint8_t offset)
1335  {
1336  uint8_t buffer[2];
1337  getSegment(TicCommand::GetVariable, offset, 2, &buffer);
1338  return ((uint16_t)buffer[0] << 0) | ((uint16_t)buffer[1] << 8);
1339  }
1340 
1341  uint32_t getVar32(uint8_t offset)
1342  {
1343  uint8_t buffer[4];
1344  getSegment(TicCommand::GetVariable, offset, 4, buffer);
1345  return ((uint32_t)buffer[0] << 0) |
1346  ((uint32_t)buffer[1] << 8) |
1347  ((uint32_t)buffer[2] << 16) |
1348  ((uint32_t)buffer[3] << 24);
1349  }
1350 
1351  virtual void commandQuick(TicCommand cmd) = 0;
1352  virtual void commandW32(TicCommand cmd, uint32_t val) = 0;
1353  virtual void commandW7(TicCommand cmd, uint8_t val) = 0;
1354  virtual void getSegment(TicCommand cmd, uint8_t offset,
1355  uint8_t length, void * buffer);
1356 
1357  TicProduct product = TicProduct::Unknown;
1358 };
1359 
1363 class TicSerial : public TicBase
1364 {
1365 public:
1393  TicSerial(Stream & stream, uint8_t deviceNumber = 255) :
1394  _stream(&stream),
1395  _deviceNumber(deviceNumber)
1396  {
1397  }
1398 
1400  uint8_t getDeviceNumber() { return _deviceNumber; }
1401 
1402 private:
1403  Stream * const _stream;
1404  const uint8_t _deviceNumber;
1405 
1406  void commandQuick(TicCommand cmd) { sendCommandHeader(cmd); }
1407  void commandW32(TicCommand cmd, uint32_t val);
1408  void commandW7(TicCommand cmd, uint8_t val);
1409  uint8_t commandR8(TicCommand cmd);
1410  void getSegment(TicCommand cmd, uint8_t offset,
1411  uint8_t length, void * buffer);
1412 
1413  void sendCommandHeader(TicCommand cmd);
1414  void serialW7(uint8_t val) { _stream->write(val & 0x7F); }
1415 };
1416 
1420 class TicI2C : public TicBase
1421 {
1422 public:
1428  TicI2C(uint8_t address = 14) : _address(address)
1429  {
1430  }
1431 
1432  // TODO: support Wire1 on Arduino Due, and bit-banging I2C on any board?
1433 
1435  uint8_t getAddress() { return _address; }
1436 
1437 private:
1438  const uint8_t _address;
1439 
1440  void commandQuick(TicCommand cmd);
1441  void commandW32(TicCommand cmd, uint32_t val);
1442  void commandW7(TicCommand cmd, uint8_t val);
1443  void getSegment(TicCommand cmd, uint8_t offset,
1444  uint8_t length, void * buffer);
1445  void delayAfterRead();
1446 };
TicInputState
This enum defines the possible states of the Tic&#39;s main input.
Definition: Tic.h:250
uint16_t getAnalogReading(TicPin pin)
Definition: Tic.h:1052
uint32_t getErrorsOccurred()
Definition: Tic.h:804
void setDecayMode(TicDecayMode mode)
Definition: Tic.h:666
TicDecayMode
Definition: Tic.h:134
TicError
Definition: Tic.h:44
void setProduct(TicProduct product)
Definition: Tic.h:327
void setAgcFrequencyLimit(TicAgcFrequencyLimit limit)
Definition: Tic.h:706
The input is invalid.
void clearDriverError()
Definition: Tic.h:546
The input is valid and is telling the Tic to halt the motor.
TicPin
This enum defines the Tic&#39;s control pins.
Definition: Tic.h:229
uint32_t getMaxAccel()
Definition: Tic.h:890
TicMotorDriverError getLastMotorDriverError()
Definition: Tic.h:1196
uint8_t getLastHpDriverErrors()
Definition: Tic.h:1247
TicAgcCurrentBoostSteps getAgcCurrentBoostSteps()
Definition: Tic.h:1226
bool getDigitalReading(TicPin pin)
Definition: Tic.h:1069
TicPinState
Definition: Tic.h:241
const uint8_t TicT249CurrentUnits
Definition: Tic.h:34
void setStartingSpeed(uint32_t speed)
Definition: Tic.h:578
uint32_t getUpTime()
Definition: Tic.h:1003
const uint8_t TicCurrentUnits
Definition: Tic.h:30
TicHpDriverError
Definition: Tic.h:296
uint8_t getDeviceNumber()
Gets the serial device number specified in the constructor.
Definition: Tic.h:1400
TicStepMode getStepMode()
Definition: Tic.h:1103
TicAgcMode
Definition: Tic.h:182
void setTargetVelocity(int32_t velocity)
Definition: Tic.h:365
void enterSafeStart()
Definition: Tic.h:514
TicAgcBottomCurrentLimit
Definition: Tic.h:193
TicDecayMode getDecayMode()
Definition: Tic.h:1136
void exitSafeStart()
Definition: Tic.h:494
TicReset getDeviceReset()
Definition: Tic.h:978
void setStepMode(TicStepMode mode)
Definition: Tic.h:629
void getSetting(uint8_t offset, uint8_t length, uint8_t *buffer)
Definition: Tic.h:1266
void setMaxDecel(uint32_t decel)
Definition: Tic.h:612
uint32_t getMaxSpeed()
Definition: Tic.h:858
bool getPositionUncertain()
Definition: Tic.h:742
TicAgcCurrentBoostSteps
Definition: Tic.h:209
Definition: Tic.h:312
TicI2C(uint8_t address=14)
Definition: Tic.h:1428
uint32_t getStartingSpeed()
Definition: Tic.h:874
void setAgcMode(TicAgcMode mode)
Definition: Tic.h:676
int32_t getEncoderPosition()
Definition: Tic.h:1014
TicAgcMode getAgcMode()
Definition: Tic.h:1206
uint32_t getActingTargetPosition()
Definition: Tic.h:949
uint16_t getVinVoltage()
Definition: Tic.h:989
uint8_t getLastError()
Definition: Tic.h:1273
TicInputState getInputState()
Definition: Tic.h:1152
int32_t getTargetPosition()
Definition: Tic.h:836
uint16_t getInputAfterHysteresis()
Definition: Tic.h:1172
TicOperationState
Definition: Tic.h:95
bool getForwardLimitActive()
Returns true if one of the forward limit switches is active.
Definition: Tic.h:749
bool getReverseLimitActive()
Returns true if one of the reverse limit switches is active.
Definition: Tic.h:756
uint32_t getTimeSinceLastStep()
Definition: Tic.h:962
TicPlanningMode getPlanningMode()
Definition: Tic.h:825
uint16_t getErrorStatus()
Definition: Tic.h:782
uint32_t getMaxDecel()
Definition: Tic.h:906
void reset()
Definition: Tic.h:528
void energize()
Definition: Tic.h:479
void deenergize()
Definition: Tic.h:464
int32_t getCurrentVelocity()
Definition: Tic.h:937
void setMaxAccel(uint32_t accel)
Definition: Tic.h:595
TicCommand
Definition: Tic.h:65
bool getHomingActive()
Returns true if the Tic&#39;s homing procedure is running.
Definition: Tic.h:763
TicPlanningMode
Definition: Tic.h:109
TicStepMode
Definition: Tic.h:162
Definition: Tic.h:1420
TicAgcBottomCurrentLimit getAgcBottomCurrentLimit()
Definition: Tic.h:1216
TicMiscFlags1
Definition: Tic.h:274
void setAgcBottomCurrentLimit(TicAgcBottomCurrentLimit limit)
Definition: Tic.h:686
uint16_t getRCPulseWidth()
Definition: Tic.h:1032
uint8_t getAddress()
Gets the I2C address specified in the constructor.
Definition: Tic.h:1435
void haltAndSetPosition(int32_t position)
Definition: Tic.h:386
TicAgcFrequencyLimit getAgcFrequencyLimit()
Definition: Tic.h:1236
TicReset
Definition: Tic.h:120
int32_t getInputAfterScaling()
Definition: Tic.h:1188
void goHomeReverse()
Definition: Tic.h:417
uint16_t getInputAfterAveraging()
Definition: Tic.h:1162
This specifies "Fast" decay mode.
TicPinState getPinState(TicPin pin)
Definition: Tic.h:1088
int32_t getCurrentPosition()
Definition: Tic.h:921
void goHomeForward()
Definition: Tic.h:427
int32_t getTargetVelocity()
Definition: Tic.h:847
This specifies "Slow" decay mode.
bool getEnergized()
Definition: Tic.h:731
TicSerial(Stream &stream, uint8_t deviceNumber=255)
Definition: Tic.h:1393
const uint16_t TicInputNull
Definition: Tic.h:38
void setAgcCurrentBoostSteps(TicAgcCurrentBoostSteps steps)
Definition: Tic.h:696
void resetCommandTimeout()
Definition: Tic.h:440
void setMaxSpeed(uint32_t speed)
Definition: Tic.h:562
TicMotorDriverError
Definition: Tic.h:286
TicOperationState getOperationState()
Definition: Tic.h:724
void haltAndHold()
Definition: Tic.h:407
void setTargetPosition(int32_t position)
Definition: Tic.h:345
TicAgcFrequencyLimit
Definition: Tic.h:220